@yongdall/theme 0.6.1 → 0.6.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/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{Application as e,ErrorAlerter as t,Ident as n,Menu as r,Page as i,PageIdent as a,PageSider as o,Pattern as s,User as c,createComputed as l,createFrame as u,createIcon as d,createNeverAbortedSignal as f,createShowField as p,createState as m,createTick as h,effect as g,flatPermission as _,isMac as v,root as y,toFileLink as b,toPermissionFilter as x,waitAbortSignal as ee,watch as S}from"@yongdall/web";import"@neeloong/components";const C=`YongDallTheme`,w=`${C}-activity`,T=document.createElement(`div`);T.classList.add(w);const te=new Map;let E,ne=!1;function re(e){ne=e}var ie=e=>{let t=document.createElement(`div`);t.classList.add(`${w}-page`);let n=t.appendChild(document.createElement(`a`));n.classList.add(`${w}-title`),n.href=e.href,n.innerText=e.title;let r=t.appendChild(document.createElement(`button`));r.type=`button`,r.classList.add(`${w}-close`),r.addEventListener(`click`,()=>{e.destroy()});let i={button:t,link:n,next:E};E&&(E.last=i),E=i,te.set(e,i),T.insertBefore(t,ne?null:T.firstChild),g(()=>{n.innerText=e.title},e.signal),g(()=>{n.href=e.href},e.signal),g(()=>{e.current?t.classList.add(`${w}-current`):t.classList.remove(`${w}-current`)},e.signal),g(()=>{e.loading?t.classList.add(`${w}-loading`):t.classList.remove(`${w}-loading`)},e.signal),g(()=>{e.unsaved?t.classList.add(`${w}-unsaved`):t.classList.remove(`${w}-unsaved`)},e.signal),ee(e.signal).then(()=>{let{last:e,next:n}=i;e&&(e.next=n),n&&(n.last=e),E===i&&(E=n),t.remove()})},ae=class{#e;#t;#n;#r;#i=[];#a=document.createElement(`table`);#o=this.#a.appendChild(document.createElement(`thead`));#s=this.#o.appendChild(document.createElement(`tr`));#c=this.#a.appendChild(document.createElement(`tbody`));get root(){return this.#a}get createUrl(){return this.#e}set createUrl(e){let t=typeof e==`function`?e:null;this.#e!==t&&(this.#e=t,this.#l())}constructor(e,t){let n=Object.entries(t.fields).filter(([,{type:e}])=>e&&typeof e!=`object`),r=Object.entries(t.fields).filter(([,e])=>e.primary).map(([e])=>e);this.#n=t.labelPattern||``,this.#e=typeof e==`function`?e:null,this.#t=n,this.#r=r;let i=this.#s;i.innerHTML=``,i.appendChild(document.createElement(`th`)).appendChild(document.createTextNode(`#`));for(let[e,t]of n)i.appendChild(document.createElement(`th`)).appendChild(document.createTextNode(t.label||e))}#l(){let e=this.#c;e.innerHTML=``;let t=this.#r,n=this.#n,r=this.#t,i=this.#e;for(let a of this.#i){let o=e.appendChild(document.createElement(`tr`)),c=o.appendChild(document.createElement(`td`)),l=s.generate(n,a)||t.map(e=>a[e]).join(`$`);if(i){let e=c.appendChild(document.createElement(`a`));e.href=i(t.map(e=>a[e]).join(`$`)),e.appendChild(document.createTextNode(l))}else c.appendChild(document.createTextNode(l));for(let[e,t]of r){let n=o.appendChild(document.createElement(`td`)),r=p(e,t,{inline:!0},a);n.appendChild(r.root)}}}setData(e){this.#i=e,this.#l()}destroy(){}},oe=class{#e;#t;constructor(){let e=document.createElement(`nl-pagination`);e.size=20,e.appendChild(document.createElement(`nl-pagination-value`)).name=`start`,e.appendChild(document.createTextNode(`-`)),e.appendChild(document.createElement(`nl-pagination-value`)).name=`end`,e.appendChild(document.createTextNode(`/`)),e.appendChild(document.createElement(`nl-pagination-value`)).name=`total`,e.appendChild(document.createElement(`nl-pagination-prev`)).innerText=`上一页`,e.appendChild(document.createElement(`nl-pagination-pager`)),e.appendChild(document.createElement(`nl-pagination-next`)).innerText=`下一页`,e.appendChild(document.createElement(`nl-pagination-sizer`));let t=new Set;e.addEventListener(`change`,()=>{for(let e of t)e()}),this.#e=t,this.#t=e}get root(){return this.#t}get size(){return this.#t.size}set size(e){this.#t.size=e}get page(){return this.#t.page}set page(e){this.#t.page=e}get total(){return this.#t.total}set total(e){this.#t.total=e}listen(e){let t=this.#e,n=()=>e(this);return t.add(n),()=>{t.delete(n)}}destroy(){}};function se(e){e.listen(`update`,()=>{let{container:t}=e;t.innerHTML=``})}function*ce(e,t,n){if(!e)return;let r=e.indexOf(`?`),i=r<0?e:e.slice(0,r);if(r>=0&&r+1<e.length)for(let n=e.slice(r).split(`&`);n.length;n.pop()){let e=t.get(`${i}${n.join(`&`)}`);e?.length&&(yield e)}let a=t.get(i);a?.length&&(yield a);let o=n.get(i);o?.length&&(yield o.map(e=>e[0]))}function*le(e,t,r,i,a){if(yield*ce(e,t,r),i)for(let e of[...n.stringifyPaths(i)].reverse()){let t=a.get(e);t?.length&&(yield t)}}function*ue(e){let t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(let e;e=t.nextNode();)yield e}function de(e,t){let n=[],r=[...ue(t)].filter(e=>e.nodeValue?.length),i=r.reduce((e,t)=>{let n=e[e.length-1]?.[1]||0;return[...e,[n,n+(t.nodeValue?.length||0),t]]},[]),a=r.map(e=>e.nodeValue).join(``),o=0;for(let t of e){let e=a.indexOf(t,o);if(e===-1)return[];let r=e+t.length,s=i.findLast(([t])=>t<=e);if(!s)return[];let c=i.findLast(([,e])=>e>=r);if(!c)return[];o=e+t.length;let l=new Range;l.setStart(s[2],e-s[0]),l.setEnd(c[2],r-s[0]),n.push(l)}return n}function fe(t,r,i={}){let o=new Map,s=new Map,c=new Map,l=null,u=[],d=[];function p(e){let t=document.createElement(`a`);return t.href=e.path||`#`,t.appendChild(document.createTextNode(e.label||e.title||``)),t.title=e.title||e.label||``,t}let m=null;function h(t,r){let{children:i}=t;if(!i.length){let r=document.createElement(`div`),i=r.appendChild(document.createElement(`a`));i.appendChild(document.createTextNode(t.label||t.title||``));let{page:l,path:u,uri:d,target:f}=t,h=null,g=l&&n.parse(l);if(g)h=new URL(a.stringify(g,u),e.root),i.href=h.href,f&&typeof f==`string`&&(i.target=f);else if(d){i.href=d;try{h=new URL(d),h.origin!==location.origin&&(h=null)}catch{}f!==``&&(i.target=f??`_blank`)}if(h&&(i.target||`_self`)===`_self`){i.addEventListener(`click`,()=>{m=r,requestIdleCallback(()=>{m===r&&(m=null)})});let{pathname:e,search:t}=h,a=(t||`?`)===`?`?e:`${e}${t}`,l=s.get(a);l?l.push(r):s.set(e,[r]);let d=o.get(a);if(d?d.push([r,t.length]):o.set(e,[[r,t.length]]),g&&(!u||u[0]===`?`||u[0]===`#`)){let e=n.stringify(g),t=c.get(e);t?t.push(r):c.set(e,[r])}}for(let e of t.buttons||[])r.appendChild(p(e));return r.className=`NavMenu-item`,{el:r,filter(e,t){let n=t?de(t,i):[];return r.hidden=!!(!e&&t&&!n.length),n}}}let l=document.createElement(`nl-collapse`);l.setAttribute(`animation`,``),l.setAttribute(`menu`,``);let u=l.appendChild(document.createElement(`div`));u.appendChild(document.createTextNode(t.label||t.title||``)),u.className=`NavMenu-label`,u.slot=`label`,u.style.flex=`1`;for(let e of t.buttons||[])l.appendChild(p(e)).slot=`label`;let d=g(l,i,r+1);return d.length?{el:l,filter(e,t){if(!t){for(let t of d)t.filter(e);return l.hidden=!1,l.open=!1,[]}let n=de(t,u),r=!!(e||n.length),i=d.flatMap(e=>e.filter(r,t));l.open=!!i.length;let a=[...n,...i];return l.hidden=!e&&!a.length,a}}:null}function g(e,t,n){let r=!1,i=!1,a=[];for(let o of t){if(!o){if(!r)continue;i=!0;continue}i&&(i=!1,e.appendChild(document.createElement(`hr`)));let t=h(o,n);t&&(a.push(t),r=!0,e.appendChild(t.el),u.push(t.el),t.el.style.setProperty(`--NavMenu-level`,String(n)))}return a}let _=g(t,r,0),v=!1;function y(){if(!v){v=!0;for(let e of u)e.remove();for(let e of d)e()}}let b=i.signal||f();b.aborted?y():b.addEventListener(`abort`,y,{once:!0});let x=[];return S(()=>{let e=i.active;return e?typeof e==`string`?e.replace(/#.*/,``)||``:Array.isArray(e)?e[1]?[e[0]?.replace(/#.*/,``)||``,e[1]||null]:e[0]?.replace(/#.*/,``)||null:null:null},e=>{if(!e)return;let n=Array.isArray(e)?e[0]:``,r=Array.isArray(e)?e[1]:null;for(let e of le(n,s,o,r,c)){let n=m&&e.includes(m)?m:null;if(n&&(m=null),!n&&l&&e.includes(l))return;let r=n||e[0],i=[],a=r.parentElement;for(;a&&a!==t;a=a.parentElement)i.push(a);if(a!==t)return;x=i,l?.classList.remove(`NavMenu-current`);for(let e of x)e.setAttribute(`open`,``);l=r,l?.classList.add(`NavMenu-current`);return}},{signal:b,immediate:!0}),e=>{let t=e.toLowerCase().split(/[\s\n]+/).filter(Boolean);if(t.length)return _.flatMap(e=>e.filter(!1,t));_.flatMap(e=>e.filter(!1));for(let e of x)e.setAttribute(`open`,``);return[]}}const D=document.createElement(`div`);D.style.display=`flex`,D.style.flexDirection=`column`;const O=D.appendChild(document.createElement(`header`));O.classList.add(`NavMenu-header`);const k=O.appendChild(document.createElement(`input`));k.placeholder=`过滤菜单...`,k.type=`search`;const A=O.appendChild(document.createElement(`button`));A.appendChild(d(`refresh`,!0)),A.classList.add(`icon`),A.title=`刷新`;const j=D.appendChild(document.createElement(`main`));j.style.flex=`1`,j.style.overflow=`auto`,j.classList.add(`NavMenu`);let pe=null;function me(){let e=pe?.(k.value)||[],t=new Highlight(...e);CSS.highlights.set(`NavMenu-filter-highlight`,t)}k.addEventListener(`input`,me);const he=l(()=>r.fromDefine(e.menus,[])),ge=l(()=>{let e=c.permissions,t=he.get();if(e.size<0)return t;let n=x({permissions:e,organizationPermissions:c.organizationPermissions,allOrganizationPermissions:c.allOrganizationPermissions});return r.filter(t,e=>{let t=_(e.permission);return t.length?!!t.find(n):!0})}),_e=m(``);let ve=null;g(()=>{ve?.abort(),j.innerHTML=``,ve=new AbortController,pe=fe(j,ge.get(),{signal:ve.signal,get active(){return _e.get()}}),me()});function M(e,t,n,r){if(!r){_e.set(`${e}${t}`);return}_e.set([`${e}${t}`,r])}A.addEventListener(`click`,()=>e.loadMenus(!0));function N(e,t,n){if(!e){let e=d(`user`,t);return n||e.setAttribute(`fill-opacity`,`0.5`),e}let r=document.createElement(`img`);return r.src=e,r}function ye(e,t,n=f()){e.classList.add(`${C}-user-avatar`);let r=l(()=>c.single?null:c.session?.avatar||``).get(),i=new AbortController,a=AbortSignal.any([i.signal,n]),o=r===null?d(`singleUser`,a):N(r,a,t);e.appendChild(o),g(()=>{let a=c.single?null:c.session?.avatar||``;if(a===r)return;r=a,i?.abort(),i=new AbortController;let s=AbortSignal.any([i.signal,n]),l=r===null?d(`singleUser`,s):N(r,s,t);!t&&r===null&&l.setAttribute(`fill-opacity`,`0.5`),e.replaceChild(l,o),o.remove(),o=l},n);let s=l(()=>{let e=c.target,t=c.session;return!e||e.id===(t?.id||``)?null:e.avatar||``}),u=null,p=null,m=null;g(()=>{let r=s.get();r!==u&&(u=r,p?.remove(),p=null,m?.abort(),r!==null&&(m=new AbortController,p=N(r,AbortSignal.any([m.signal,n]),t),e.insertBefore(p,o)))},n)}const P=document.createElement(`div`);P.classList.add(`${C}-user`);const F=document.createElement(`div`);F.classList.add(`${C}-user-button`),ye(F,!0);const I=P.appendChild(document.createElement(`span`));I.classList.add(`${C}-user-info`);const be=I.appendChild(document.createElement(`span`));ye(be),be.classList.add(`avatar`);const xe=I.appendChild(document.createElement(`span`));xe.classList.add(`username`),xe.innerText=`用户名`;const Se=I.appendChild(document.createElement(`span`));Se.classList.add(`btns`);let L=Se.appendChild(document.createComment(``));S(()=>e.help,(e,t,n)=>{if(!e){let e=document.createComment(``);L.replaceWith(e),L=e;return}let r=document.createElement(`a`);r.href=e,r.target=`_blank`,r.appendChild(d(`help`,n())),r.title=`帮助`,L.replaceWith(r),L=r},{immediate:!0});const R=Se.appendChild(document.createElement(`div`));R.appendChild(d(`logout`,!0)),R.title=`退出登录`,g(()=>{R.hidden=!c.operator}),R.addEventListener(`click`,()=>c.exit()),g(()=>{xe.innerText=c.operator?.name||``});const Ce=l(()=>r.fromDefine(e.userMenus,[])),we=l(()=>{let e=Ce.get();return c.operator?e:r.filter(e,e=>!e.logged)}),z=P.appendChild(document.createElement(`main`));z.style.flex=`1`,z.style.overflow=`auto`,z.classList.add(`NavMenu`);let Te=null;g(()=>{Te?.abort(),z.innerHTML=``,Te=new AbortController,fe(z,we.get(),{signal:Te.signal})});const B=document.createElement(`a`);B.classList.add(`${C}-logo`),S(()=>e.root,e=>{B.href=e},{immediate:!0}),S(()=>b(e.logo),(e,t,n)=>{let r=n(),i;e?(i=document.createElement(`img`),i.src=e.href):i=d(`logo`,r),B.appendChild(i),i.classList.add(`logo`),n(()=>{i.remove()})},{immediate:!0});const Ee={404:{title:`您所请求的页面无法找到`,description:`服务器无法正常提供信息。
2
- 目标页面可能已经被更改、删除或移到其他位置,或您所输入页面地址错误。`}};function De(e,t){if((t??``)==``){e.container.appendChild(document.createTextNode(`空页面`));return}let n=(typeof t==`number`||typeof t==`string`)&&Object.hasOwn(Ee,t)&&Ee[t]||Ee[404],r=n?.title||`Error`,i=n?.description,a=document.createElement(`div`),o=a.appendChild(document.createElement(`div`)),s=o.appendChild(document.createElement(`div`)),c=o.appendChild(document.createElement(`div`));if(a.style.marginBlock=`8%`,a.style.marginInline=`auto`,a.style.inlineSize=`600px`,a.style.maxInlineSize=`100%`,a.style.padding=`20px`,s.style.paddingBlock=`20px`,s.style.fontSize=`20px`,s.style.color=`#8e8e8e`,s.style.textAlign=`center`,c.style.fontSize=`13px`,c.style.lineHeight=`1.3em`,c.style.color=`#b5b5b5`,s.appendChild(document.createTextNode(r)),e.title=r||`Error`,i&&typeof i==`string`)for(let e of i.split(`
3
- `))c.appendChild(document.createTextNode(e)),c.appendChild(document.createElement(`br`));e.container.appendChild(a),e.loading=!1}const V=`${C}-allSider-nav`,H=document.createElement(`header`);H.className=`${V}-header`;const U=H.appendChild(document.createElement(`div`));U.classList.add(`${V}-actions`);const Oe=H.appendChild(document.createElement(`div`));Oe.classList.add(`${V}-sidebar`);const ke=`${V}-open`;let W=null;function Ae(){window.innerWidth>800||W?.()}var je=class{button;sider;#e;#t=!1;get disabled(){return this.#t}set disabled(e){e?this.disable():this.enable()}disable(){if(this.#t)return;this.#t=!0;let e=this.#e;W===e&&e(),this.button.hidden=!0,this.sider.hidden=!0}enable(){this.#t&&(this.#t=!1,this.button.hidden=!1)}#n=()=>this.toggle();constructor(e,t){let n=t instanceof HTMLElement?t:document.createElement(`div`),r=e instanceof HTMLElement?e:document.createElement(`div`);n.tabIndex=0,n.classList.add(`${V}-button`),r.hidden=!0,Oe.appendChild(r),n.classList.add(`${V}-selectable`),n.addEventListener(`click`,this.#n),this.#e=()=>{W=null,document.body.classList.remove(ke),n.classList.remove(`${V}-selected`),r.hidden=!0},this.button=n,this.sider=r}get open(){return W===this.#e}set open(e){e?this.show():this.hide()}show(){if(this.#t)return;let e=this.#e;W!==e&&(W?.(),W=e,document.body.classList.add(ke),this.button.classList.add(`${V}-selected`),this.sider.hidden=!1)}toggle(){if(this.#t)return;let e=this.#e;if(W===e){e();return}this.show()}hide(){if(this.#t)return;let e=this.#e;W===e&&e()}remove(){let e=this.#e;W===e&&e();let{button:t,sider:n}=this;t.remove(),n.remove(),t.classList.remove(`${V}-button`),t.classList.remove(`${V}-selectable`),t.removeEventListener(`click`,this.#n),n.hidden=!1}};Oe.addEventListener(`click`,e=>{e.target===e.currentTarget&&W?.()});var G=class e{root=document.createElement(`div`);#e=new Set;constructor(e){let t=this.root;e.appendChild(t),t.className=`${V}-group`}remove(){this.root.remove();for(let e of[...this.#e])e()}createGroup(){let t=new e(this.root),n=this.#e,r=()=>{n.delete(r),t.remove()};return n.add(r),t}createAction(e){let t=document.createElement(e?`a`:`div`);t.tabIndex=0,t.classList.add(`${V}-button`),t.addEventListener(`click`,()=>{Ae()}),this.root.appendChild(t);let n=this.#e,r=()=>{n.delete(r),t.remove()};return n.add(r),t}createSider(e,t){let n=new je(e,t);this.root.appendChild(n.button);let r=this.#e,i=()=>{r.delete(i),n.remove()};return r.add(i),n}};const Me=document.createElement(`div`),Ne=new G(U),Pe=new G(U);new G(U),U.appendChild(document.createElement(`span`));const Fe=new G(U),K=Pe.createSider(Me);K.button.innerText=`页面`,K.disabled=!0;var Ie=class extends o{#e;#t;constructor(e,t,n,r,i){super(t,n,r,i),this.#e=e,this.#t=t,i.addEventListener(`abort`,()=>{this.#n()})}insert(){super.insert(),this.#e.show&&(K.disabled=!1)}#n(){this.#e.show&&!this.#t.children.length&&(K.disabled=!0)}remove(){super.remove(),this.#n()}},Le=class extends i{#e=(()=>{let e=document.createElement(`div`);return e.classList.add(`Page-sides`),Me.appendChild(e),e})();destroy(){return super.destroy()?(this.#e.remove(),!0):!1}toggle(e){super.toggle(e),K.disabled=!(e&&this.#e.children.length)}get siderOpen(){return K.open}set siderOpen(e){e?K.show():K.hide()}createSider(e,t){if(this.destroyed)throw Error(`页面组件已被销毁`);t?.throwIfAborted();let n=this.#e;return new Ie(this,n,null,e!==!1,t instanceof AbortSignal?AbortSignal.any([t,this.signal]):this.signal)}constructor(e){super(e),e&&(K.disabled=!this.#e.children.length)}};function Re(e,t){let{create:n}=t,r=document.createElement(`nl-menu`),i=!1,a=!1,o=()=>{i=!0,a&&(a=!1,r.appendChild(document.createElement(`hr`)))};for(let s of e){if(!s){if(!i)continue;a=!0;continue}let{children:e}=s;if(!e?.length){let e=n(s);if(!e)continue;o(),r.appendChild(e);continue}let c=Re(e,t);if(!c)continue;o();let l=r.appendChild(c),u=l.insertBefore(document.createElement(`div`),l.firstChild);u.appendChild(document.createTextNode(s.label||s.title||``)),u.slot=`label`}return i?r:null}function ze(e,t){if(t.signal.aborted)return null;let{create:n}=t,r=document.createElement(`div`),i=!1,a=!1,o=()=>{i=!0,a&&(a=!1,r.appendChild(document.createElement(`hr`)))};for(let s of e){if(!s){if(!i)continue;a=!0;continue}let{children:e}=s;if(!e?.length){let e=n(s,{button:!0});if(!e)continue;o(),r.appendChild(e);continue}let c=Re(e,t);if(!c)continue;o();let l=r.appendChild(document.createElement(`button`));l.appendChild(document.createTextNode(s.label||s.title||``)),c.targetElement=l,l.addEventListener(`click`,()=>c.show?.()),r.appendChild(c)}return r.childNodes.length?(r.classList.add(`MenuButtons`),r):null}function Be(t){let{page:n}=t;if(n){let{path:r}=t;return new URL(r?.[0]===`/`?`${n}${r}`:`${n}/${r||``}`,e.root).href}let{uri:r}=t;return r||null}function Ve(e,t){let{signal:n,button:r}=t,i=document.createElement(`a`),a=r?document.createElement(`button`):null;i.appendChild(document.createTextNode(e.label||e.title||``));let{commands:o}=t,s=l(()=>{if(e.disabled)return!0;let{command:n}=e,r=n&&Object.hasOwn(o,n)&&o[n];return!!(r?r.disabled:t.disabled(e))}),c=l(()=>{let n=Be(e);if(n)return n;let{command:r}=e,i=r&&Object.hasOwn(o,r)&&o[r];return i?Be(i)||null:t.uri(e)||null});function u(){let{click:n}=e;if(typeof n==`function`)return n();let{script:r}=e;if(r)return;let{command:i}=e,a=i&&Object.hasOwn(o,i)&&o[i];return a?a.click?.():t.click(e)}return g(()=>{let t=s.get();if(i.disabled=t,i.ariaDisabled=t?`true`:`false`,t)i.removeAttribute(`tabindex`),i.removeAttribute(`href`),i.removeAttribute(`target`);else{i.tabIndex=0;let t=``,n=c.get();n&&(i.href=n,t=e.target||(e.page?`_self`:``)),t?i.target=t:i.removeAttribute(`target`)}a&&(a.disabled=t)},n),i.addEventListener(`click`,e=>{s.get()&&(e.preventDefault(),e.stopPropagation())},{capture:!0}),i.addEventListener(`click`,e=>{s.get()||e.defaultPrevented||c.get()&&(e.shiftKey||(v?e.metaKey:e.ctrlKey)||e.altKey)||u()===!1&&e.preventDefault()}),a?(a.appendChild(i),a):i}function He(e,t,n){let r=document.createElement(`div`),i=Re(e,n);if(!i)return null;let a=r.appendChild(document.createElement(`button`)),o=t?.label||t?.title||``;return o?a.appendChild(document.createTextNode(o)):a.appendChild(d(t?.icon||`more`,n.signal)),i.targetElement=a,a.addEventListener(`click`,()=>i.show()),r.appendChild(i),r}var Ue={title(t){return[t.title,e.title||`拥道YongDall`].filter(Boolean).join(` | `)},icon(e){return e.icon},components:{List:ae,Pagination:oe,createMenuButtons:ze,createMenuItem:Ve,createMenuButton:He},updatePath:M,pageManager:ie,elements:[y,H],classNames:[C,`${C}-allSider`],styleFiles:[`theme-allSider.css`],home:se,alertError:t,rootClassName:`${C}-root`,createFrame:u,createPage(e){return new Le(e)},renderError(e,t){De(e,t)},setup(e){re(!1),B.addEventListener(`click`,()=>{Ae()},{signal:e}),U.insertBefore(B,U.firstElementChild);let t=Ne.createSider(D);t.button.appendChild(d(`menu`,e)),t.button.title=`菜单`;let n=Ne.createSider(T);n.button.appendChild(d(`activity`,e)),n.button.title=`活动`,window.innerWidth>800&&t.show();let r=Fe.createSider(P,F);e.addEventListener(`abort`,()=>{B.remove(),t.remove(),n.remove(),r.remove()},{once:!0})}};const q=`${C}-base`,We=[`theme-base.css`],Ge=document.createElement(`header`),J=Ge.appendChild(document.createElement(`div`));J.classList.add(`${q}-header`);const Ke=Ge.appendChild(document.createElement(`div`));Ke.classList.add(`${q}-sidebar`);const qe=J.appendChild(d(`menu`,!0));qe.classList.add(`${q}-menu-button`);const Je=J.appendChild(document.createElement(`span`)),Y=`${q}-menu-open`;qe.addEventListener(`click`,()=>{document.body.classList.toggle(Y)}),Ke.addEventListener(`click`,e=>{e.target===e.currentTarget&&document.body.classList.remove(Y)});let Ye=null;var Xe={title(t){return[[Ye&&t.loading?`⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏`[Ye.get()%10]:``,t.unsaved?`🔴`:``,t.title].join(``),e.title||`拥道YongDall`].filter(Boolean).join(` | `)},icon(e){return e.icon},components:{List:ae,Pagination:oe,createMenuButtons:ze,createMenuItem:Ve,createMenuButton:He},updatePath:M,pageManager(e){let t=!1;g(()=>{if(!e.current){t&&e.destroy();return}t=!0},e.signal)},elements:[Ge,y],classNames:[C,q],styleFiles:We,home:se,alertError:t,rootClassName:`${C}-root`,createFrame:u,createPage(e){return new i(e)},renderError(e,t){De(e,t)},setup(t){Ye=h(80,t),B.addEventListener(`click`,()=>{window.innerWidth>800||document.body.classList.remove(Y)},{signal:t});let n=document.createElement(`div`);n.classList.add(`${q}-header-title`),g(()=>{n.innerText=e.title||e.company||``},t),J.insertBefore(B,Je),J.insertBefore(n,Je),window.innerWidth>800&&document.body.classList.add(Y),Ke.appendChild(D),document.body.appendChild(P),P.setAttribute(`popover`,`auto`),F.addEventListener(`click`,()=>{P.showPopover()},{signal:t}),J.appendChild(F),t.addEventListener(`abort`,()=>{B.remove(),n.remove(),D.remove(),P.removeAttribute(`popover`),P.remove(),F.remove()},{once:!0})}};const X=`${C}-tabs`,Z=document.createElement(`header`),Q=Z.appendChild(document.createElement(`div`));Q.classList.add(`${X}-header`);const Ze=Z.appendChild(document.createElement(`div`));Ze.classList.add(`${X}-sidebar`);const Qe=Q.appendChild(d(`menu`,!0));Qe.classList.add(`${X}-menu-button`);const $e=Q.appendChild(document.createElement(`span`)),$=`${X}-menu-open`;Qe.addEventListener(`click`,()=>{document.body.classList.toggle($)});function et(){window.innerWidth>800||document.body.classList.remove($)}Ze.addEventListener(`click`,e=>{e.target===e.currentTarget&&document.body.classList.remove($)});var tt={title(t){return[t.title,e.title||`拥道YongDall`].filter(Boolean).join(` | `)},icon(e){return e.icon},components:{List:ae,Pagination:oe,createMenuButtons:ze,createMenuItem:Ve,createMenuButton:He},updatePath:M,pageManager:ie,elements:[Z,y],classNames:[C,`${C}-tabs`],styleFiles:[`theme-tabs.css`],home:se,alertError:t,rootClassName:`${C}-root`,createFrame:u,createPage(e){return new i(e)},renderError(e,t){De(e,t)},setup(t){re(!0),B.addEventListener(`click`,()=>{et()},{signal:t});let n=document.createElement(`div`);n.classList.add(`${X}-header-title`),g(()=>{n.innerText=e.title||e.company||``},t),Q.insertBefore(B,$e),Q.insertBefore(n,$e),Z.appendChild(T),window.innerWidth>800&&document.body.classList.add($),Ze.appendChild(D),document.body.appendChild(P),P.setAttribute(`popover`,`auto`),F.addEventListener(`click`,()=>{P.showPopover()},{signal:t}),Q.appendChild(F),t.addEventListener(`abort`,()=>{B.remove(),n.remove(),T.remove(),D.remove(),P.removeAttribute(`popover`),P.remove(),F.remove()},{once:!0})}};export{Ue as allSider,Ue as theme,Xe as base,Xe as tradition,tt as tabs};
1
+ import{Application as e,ErrorAlerter as t,Ident as n,Menu as r,Page as i,PageIdent as a,PageSider as o,Pattern as s,User as c,createComputed as l,createFrame as u,createIcon as d,createNeverAbortedSignal as f,createShowField as p,createState as m,createTick as h,effect as g,flatPermission as _,isMac as ee,loadNavButtons as v,root as y,toFileLink as b,toPermissionFilter as x,waitAbortSignal as te,watch as S}from"@yongdall/web";import"@neeloong/components";const C=`YongDallTheme`,w=`${C}-activity`,T=document.createElement(`div`);T.classList.add(w);const ne=new Map;let E,re=!1;function ie(e){re=e}var ae=e=>{let t=document.createElement(`div`);t.classList.add(`${w}-page`);let n=t.appendChild(document.createElement(`a`));n.classList.add(`${w}-title`),n.href=e.href,n.innerText=e.title;let r=t.appendChild(document.createElement(`button`));r.type=`button`,r.classList.add(`${w}-close`),r.addEventListener(`click`,()=>{e.destroy()});let i={button:t,link:n,next:E};E&&(E.last=i),E=i,ne.set(e,i),T.insertBefore(t,re?null:T.firstChild),g(()=>{n.innerText=e.title},e.signal),g(()=>{n.href=e.href},e.signal),g(()=>{e.current?t.classList.add(`${w}-current`):t.classList.remove(`${w}-current`)},e.signal),g(()=>{e.loading?t.classList.add(`${w}-loading`):t.classList.remove(`${w}-loading`)},e.signal),g(()=>{e.unsaved?t.classList.add(`${w}-unsaved`):t.classList.remove(`${w}-unsaved`)},e.signal),te(e.signal).then(()=>{let{last:e,next:n}=i;e&&(e.next=n),n&&(n.last=e),E===i&&(E=n),t.remove()})},oe=class{#e;#t;#n;#r;#i=[];#a=document.createElement(`table`);#o=this.#a.appendChild(document.createElement(`thead`));#s=this.#o.appendChild(document.createElement(`tr`));#c=this.#a.appendChild(document.createElement(`tbody`));get root(){return this.#a}get createUrl(){return this.#e}set createUrl(e){let t=typeof e==`function`?e:null;this.#e!==t&&(this.#e=t,this.#l())}constructor(e,t){let n=Object.entries(t.fields).filter(([,{type:e}])=>e&&typeof e!=`object`),r=Object.entries(t.fields).filter(([,e])=>e.primary).map(([e])=>e);this.#n=t.labelPattern||``,this.#e=typeof e==`function`?e:null,this.#t=n,this.#r=r;let i=this.#s;i.innerHTML=``,i.appendChild(document.createElement(`th`)).appendChild(document.createTextNode(`#`));for(let[e,t]of n)i.appendChild(document.createElement(`th`)).appendChild(document.createTextNode(t.label||e))}#l(){let e=this.#c;e.innerHTML=``;let t=this.#r,n=this.#n,r=this.#t,i=this.#e;for(let a of this.#i){let o=e.appendChild(document.createElement(`tr`)),c=o.appendChild(document.createElement(`td`)),l=s.generate(n,a)||t.map(e=>a[e]).join(`$`);if(i){let e=c.appendChild(document.createElement(`a`));e.href=i(t.map(e=>a[e]).join(`$`)),e.appendChild(document.createTextNode(l))}else c.appendChild(document.createTextNode(l));for(let[e,t]of r){let n=o.appendChild(document.createElement(`td`)),r=p(e,t,{inline:!0},a);n.appendChild(r.root)}}}setData(e){this.#i=e,this.#l()}destroy(){}},se=class{#e;#t;constructor(){let e=document.createElement(`nl-pagination`);e.size=20,e.appendChild(document.createElement(`nl-pagination-value`)).name=`start`,e.appendChild(document.createTextNode(`-`)),e.appendChild(document.createElement(`nl-pagination-value`)).name=`end`,e.appendChild(document.createTextNode(`/`)),e.appendChild(document.createElement(`nl-pagination-value`)).name=`total`,e.appendChild(document.createElement(`nl-pagination-prev`)).innerText=`上一页`,e.appendChild(document.createElement(`nl-pagination-pager`)),e.appendChild(document.createElement(`nl-pagination-next`)).innerText=`下一页`,e.appendChild(document.createElement(`nl-pagination-sizer`));let t=new Set;e.addEventListener(`change`,()=>{for(let e of t)e()}),this.#e=t,this.#t=e}get root(){return this.#t}get size(){return this.#t.size}set size(e){this.#t.size=e}get page(){return this.#t.page}set page(e){this.#t.page=e}get total(){return this.#t.total}set total(e){this.#t.total=e}listen(e){let t=this.#e,n=()=>e(this);return t.add(n),()=>{t.delete(n)}}destroy(){}};function ce(e){e.listen(`update`,()=>{let{container:t}=e;t.innerHTML=``})}function*le(e,t,n){if(!e)return;let r=e.indexOf(`?`),i=r<0?e:e.slice(0,r);if(r>=0&&r+1<e.length)for(let n=e.slice(r).split(`&`);n.length;n.pop()){let e=t.get(`${i}${n.join(`&`)}`);e?.length&&(yield e)}let a=t.get(i);a?.length&&(yield a);let o=n.get(i);o?.length&&(yield o.map(e=>e[0]))}function*ue(e,t,r,i,a){if(yield*le(e,t,r),i)for(let e of[...n.stringifyPaths(i)].reverse()){let t=a.get(e);t?.length&&(yield t)}}function*de(e){let t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(let e;e=t.nextNode();)yield e}function fe(e,t){let n=[],r=[...de(t)].filter(e=>e.nodeValue?.length),i=r.reduce((e,t)=>{let n=e[e.length-1]?.[1]||0;return[...e,[n,n+(t.nodeValue?.length||0),t]]},[]),a=r.map(e=>e.nodeValue).join(``),o=0;for(let t of e){let e=a.indexOf(t,o);if(e===-1)return[];let r=e+t.length,s=i.findLast(([t])=>t<=e);if(!s)return[];let c=i.findLast(([,e])=>e>=r);if(!c)return[];o=e+t.length;let l=new Range;l.setStart(s[2],e-s[0]),l.setEnd(c[2],r-s[0]),n.push(l)}return n}function pe(t,r,i={}){let o=new Map,s=new Map,c=new Map,l=null,u=[],d=[];function p(t,r){let i=document.createElement(`a`),l=i;i.appendChild(document.createTextNode(t.label||t.title||``)),i.title=t.title||``;let{page:u,path:d,uri:f,target:p}=t,m=null,g=u&&n.parse(u);if(g)m=new URL(a.stringify(g,d),e.root),i.href=m.href,p&&typeof p==`string`&&(i.target=p);else if(f){i.href=f;try{m=new URL(f),m.origin!==location.origin&&(m=null)}catch{}p!==``&&(i.target=p??`_blank`)}if(m&&(i.target||`_self`)===`_self`){i.addEventListener(`click`,()=>{h=l,requestIdleCallback(()=>{h===l&&(h=null)})});let{pathname:e,search:t}=m,r=`${e}${t}`,a=s.get(r);a?a.push(l):s.set(e,[l]);let u=o.get(r);if(u?u.push([l,t.length]):o.set(e,[[l,t.length]]),g&&(!d||d[0]===`?`||d[0]===`#`)){let e=n.stringify(g),t=c.get(e);t?t.push(l):c.set(e,[l])}}return i}function m(e){let t=p(e);return t.classList.add(`NavMenu-button`),t}let h=null;function g(e,t){let{children:n}=e;if(!n.length){let t=document.createElement(`div`),n=t.appendChild(p(e,t));for(let n of e.buttons||[])t.appendChild(m(n));return t.classList.add(`NavMenu-item`),n.classList.add(`NavMenu-item-link`),{el:t,filter(e,r){let i=r?fe(r,n):[];return t.hidden=!!(!e&&r&&!i.length),i}}}let r=document.createElement(`nl-collapse`);r.setAttribute(`animation`,``),r.setAttribute(`menu`,``);let i=r.appendChild(document.createElement(`div`));i.appendChild(document.createTextNode(e.label||e.title||``)),i.className=`NavMenu-label`,i.slot=`label`,i.style.flex=`1`;for(let t of e.buttons||[])r.appendChild(m(t)).slot=`label`;let a=_(r,n,t+1);return a.length?{el:r,filter(e,t){if(!t){for(let t of a)t.filter(e);return r.hidden=!1,r.open=!1,[]}let n=fe(t,i),o=!!(e||n.length),s=a.flatMap(e=>e.filter(o,t));r.open=!!s.length;let c=[...n,...s];return r.hidden=!e&&!c.length,c}}:null}function _(e,t,n){let r=!1,i=!1,a=[];for(let o of t){if(!o){if(!r)continue;i=!0;continue}i&&(i=!1,e.appendChild(document.createElement(`hr`)));let t=g(o,n);t&&(a.push(t),r=!0,e.appendChild(t.el),u.push(t.el),t.el.style.setProperty(`--NavMenu-level`,String(n)))}return a}let ee=_(t,r,0),v=!1;function y(){if(!v){v=!0;for(let e of u)e.remove();for(let e of d)e()}}let b=i.signal||f();b.aborted?y():b.addEventListener(`abort`,y,{once:!0});let x=[];return S(()=>{let e=i.active;return e?typeof e==`string`?e.replace(/#.*/,``)||``:Array.isArray(e)?e[1]?[e[0]?.replace(/#.*/,``)||``,e[1]||null]:e[0]?.replace(/#.*/,``)||null:null:null},e=>{if(!e)return;let n=Array.isArray(e)?e[0]:``,r=Array.isArray(e)?e[1]:null;for(let e of ue(n,s,o,r,c)){let n=h&&e.includes(h)?h:null;if(n&&(h=null),!n&&l&&e.includes(l))return;let r=n||e[0],i=[],a=r.parentElement;for(;a&&a!==t;a=a.parentElement)i.push(a);if(a!==t)return;x=i,l?.classList.remove(`NavMenu-current`);for(let e of x)e.setAttribute(`open`,``);l=r,l?.classList.add(`NavMenu-current`);return}},{signal:b,immediate:!0}),e=>{let t=e.toLowerCase().split(/[\s\n]+/).filter(Boolean);if(t.length)return ee.flatMap(e=>e.filter(!1,t));ee.flatMap(e=>e.filter(!1));for(let e of x)e.setAttribute(`open`,``);return[]}}const D=document.createElement(`div`);D.style.display=`flex`,D.style.flexDirection=`column`;const me=D.appendChild(document.createElement(`header`));me.classList.add(`NavMenu-header`);const O=me.appendChild(document.createElement(`input`));O.placeholder=`过滤菜单...`,O.type=`search`;const k=me.appendChild(document.createElement(`button`));k.appendChild(d(`refresh`,!0)),k.classList.add(`icon`),k.title=`刷新`;const A=D.appendChild(document.createElement(`main`));A.style.flex=`1`,A.style.overflow=`auto`,A.classList.add(`NavMenu`);let he=null;function ge(){let e=he?.(O.value)||[],t=new Highlight(...e);CSS.highlights.set(`NavMenu-filter-highlight`,t)}O.addEventListener(`input`,ge);const _e=l(()=>r.fromDefine(e.menus,[])),ve=l(()=>{let e=c.permissions,t=_e.get();if(e.size<0)return t;let n=x({permissions:e,organizationPermissions:c.organizationPermissions,allOrganizationPermissions:c.allOrganizationPermissions});return r.filter(t,e=>{let t=_(e.permission);return t.length?!!t.find(n):!0})}),ye=m(``);let be=null;g(()=>{be?.abort(),A.innerHTML=``,be=new AbortController,he=pe(A,ve.get(),{signal:be.signal,get active(){return ye.get()}}),ge()});function j(e,t,n,r){if(!r){ye.set(`${e}${t}`);return}ye.set([`${e}${t}`,r])}k.addEventListener(`click`,()=>e.loadMenus(!0));function xe(e,t,n){if(!e){let e=d(`user`,t);return n||e.setAttribute(`fill-opacity`,`0.5`),e}let r=document.createElement(`img`);return r.src=e,r}function Se(e,t,n=f()){e.classList.add(`${C}-user-avatar`);let r=l(()=>c.single?null:c.session?.avatar||``).get(),i=new AbortController,a=AbortSignal.any([i.signal,n]),o=r===null?d(`singleUser`,a):xe(r,a,t);e.appendChild(o),g(()=>{let a=c.single?null:c.session?.avatar||``;if(a===r)return;r=a,i?.abort(),i=new AbortController;let s=AbortSignal.any([i.signal,n]),l=r===null?d(`singleUser`,s):xe(r,s,t);!t&&r===null&&l.setAttribute(`fill-opacity`,`0.5`),e.replaceChild(l,o),o.remove(),o=l},n);let s=l(()=>{let e=c.target,t=c.session;return!e||e.id===(t?.id||``)?null:e.avatar||``}),u=null,p=null,m=null;g(()=>{let r=s.get();r!==u&&(u=r,p?.remove(),p=null,m?.abort(),r!==null&&(m=new AbortController,p=xe(r,AbortSignal.any([m.signal,n]),t),e.insertBefore(p,o)))},n)}const M=document.createElement(`div`);M.classList.add(`${C}-user`);const N=document.createElement(`div`);N.classList.add(`${C}-user-button`),Se(N,!0);const P=M.appendChild(document.createElement(`span`));P.classList.add(`${C}-user-info`);const Ce=P.appendChild(document.createElement(`span`));Se(Ce),Ce.classList.add(`avatar`);const we=P.appendChild(document.createElement(`span`));we.classList.add(`username`),we.innerText=`用户名`;const Te=P.appendChild(document.createElement(`span`));Te.classList.add(`btns`);let F=Te.appendChild(document.createComment(``));S(()=>e.help,(e,t,n)=>{if(!e){let e=document.createComment(``);F.replaceWith(e),F=e;return}let r=document.createElement(`a`);r.href=e,r.target=`_blank`,r.appendChild(d(`help`,n())),r.title=`帮助`,F.replaceWith(r),F=r},{immediate:!0});const I=Te.appendChild(document.createElement(`div`));I.appendChild(d(`logout`,!0)),I.title=`退出登录`,g(()=>{I.hidden=!c.operator}),I.addEventListener(`click`,()=>c.exit()),g(()=>{we.innerText=c.operator?.name||``});const Ee=l(()=>r.fromDefine(e.userMenus,[])),De=l(()=>{let e=Ee.get();return c.operator?e:r.filter(e,e=>!e.logged)}),L=M.appendChild(document.createElement(`main`));L.style.flex=`1`,L.style.overflow=`auto`,L.classList.add(`NavMenu`);let Oe=null;g(()=>{Oe?.abort(),L.innerHTML=``,Oe=new AbortController,pe(L,De.get(),{signal:Oe.signal})});const R=document.createElement(`a`);R.classList.add(`${C}-logo`),S(()=>e.root,e=>{R.href=e},{immediate:!0}),S(()=>b(e.logo),(e,t,n)=>{let r=n(),i;e?(i=document.createElement(`img`),i.src=e.href):i=d(`logo`,r),R.appendChild(i),i.classList.add(`logo`),n(()=>{i.remove()})},{immediate:!0});const ke={404:{title:`您所请求的页面无法找到`,description:`服务器无法正常提供信息。
2
+ 目标页面可能已经被更改、删除或移到其他位置,或您所输入页面地址错误。`}};function Ae(e,t){if((t??``)==``){e.container.appendChild(document.createTextNode(`空页面`));return}let n=(typeof t==`number`||typeof t==`string`)&&Object.hasOwn(ke,t)&&ke[t]||ke[404],r=n?.title||`Error`,i=n?.description,a=document.createElement(`div`),o=a.appendChild(document.createElement(`div`)),s=o.appendChild(document.createElement(`div`)),c=o.appendChild(document.createElement(`div`));if(a.style.marginBlock=`8%`,a.style.marginInline=`auto`,a.style.inlineSize=`600px`,a.style.maxInlineSize=`100%`,a.style.padding=`20px`,s.style.paddingBlock=`20px`,s.style.fontSize=`20px`,s.style.color=`#8e8e8e`,s.style.textAlign=`center`,c.style.fontSize=`13px`,c.style.lineHeight=`1.3em`,c.style.color=`#b5b5b5`,s.appendChild(document.createTextNode(r)),e.title=r||`Error`,i&&typeof i==`string`)for(let e of i.split(`
3
+ `))c.appendChild(document.createTextNode(e)),c.appendChild(document.createElement(`br`));e.container.appendChild(a),e.loading=!1}const z=`${C}-allSider-nav`,B=document.createElement(`header`);B.className=`${z}-header`;const V=B.appendChild(document.createElement(`div`));V.classList.add(`${z}-actions`);const je=B.appendChild(document.createElement(`div`));je.classList.add(`${z}-sidebar`);const Me=`${z}-open`;let H=null;function Ne(){window.innerWidth>800||H?.()}var Pe=class{button;sider;#e;#t=!1;get disabled(){return this.#t}set disabled(e){e?this.disable():this.enable()}disable(){if(this.#t)return;this.#t=!0;let e=this.#e;H===e&&e(),this.button.hidden=!0,this.sider.hidden=!0}enable(){this.#t&&(this.#t=!1,this.button.hidden=!1)}#n=()=>this.toggle();constructor(e,t){let n=t instanceof HTMLElement?t:document.createElement(`div`),r=e instanceof HTMLElement?e:document.createElement(`div`);n.tabIndex=0,n.classList.add(`${z}-button`),r.hidden=!0,je.appendChild(r),n.classList.add(`${z}-selectable`),n.addEventListener(`click`,this.#n),this.#e=()=>{H=null,document.body.classList.remove(Me),n.classList.remove(`${z}-selected`),r.hidden=!0,this.#r.set(!1)},this.button=n,this.sider=r}#r=m(!1);get shown(){return this.#r.get()}set shown(e){e?this.show():this.hide()}get hidden(){return this.button.hidden}set hidden(e){this.button.hidden=!!e,e&&this.hide()}get open(){return H===this.#e}set open(e){e?this.show():this.hide()}show(){if(this.hidden||this.#t)return;let e=this.#e;H!==e&&(H?.(),H=e,document.body.classList.add(Me),this.button.classList.add(`${z}-selected`),this.sider.hidden=!1,this.#r.set(!0))}toggle(){if(this.hidden||this.#t)return;let e=this.#e;if(H===e){e();return}this.show()}hide(){if(this.hidden||this.#t)return;let e=this.#e;H===e&&e()}remove(){let e=this.#e;H===e&&e();let{button:t,sider:n}=this;t.remove(),n.remove(),t.classList.remove(`${z}-button`),t.classList.remove(`${z}-selectable`),t.removeEventListener(`click`,this.#n),n.hidden=!1}};je.addEventListener(`click`,e=>{e.target===e.currentTarget&&H?.()});var U=class e{root=document.createElement(`div`);#e=new Set;constructor(e){let t=this.root;e.appendChild(t),t.className=`${z}-group`}remove(){this.root.remove();for(let e of[...this.#e])e()}createGroup(){let t=new e(this.root),n=this.#e,r=()=>{n.delete(r),t.remove()};return n.add(r),t}createAction(e){let t=document.createElement(e?`a`:`div`);t.tabIndex=0,t.classList.add(`${z}-button`),t.addEventListener(`click`,()=>{Ne()}),this.root.appendChild(t);let n=this.#e,r=()=>{n.delete(r),t.remove()};return n.add(r),t}createSider(e,t){let n=new Pe(e,t);this.root.appendChild(n.button);let r=this.#e,i=()=>{r.delete(i),n.remove()};return r.add(i),n}};const Fe=document.createElement(`div`),W=new U(V),Ie=new U(V);new U(V),V.appendChild(document.createElement(`span`));const Le=new U(V),G=Ie.createSider(Fe);G.button.innerText=`页面`,G.disabled=!0;var Re=class extends o{#e;#t;constructor(e,t,n,r,i){super(t,n,r,i),this.#e=e,this.#t=t,i.addEventListener(`abort`,()=>{this.#n()})}insert(){super.insert(),this.#e.show&&(G.disabled=!1)}#n(){this.#e.show&&!this.#t.children.length&&(G.disabled=!0)}remove(){super.remove(),this.#n()}},ze=class extends i{#e=(()=>{let e=document.createElement(`div`);return e.classList.add(`Page-sides`),Fe.appendChild(e),e})();destroy(){return super.destroy()?(this.#e.remove(),!0):!1}toggle(e){super.toggle(e),G.disabled=!(e&&this.#e.children.length)}get siderOpen(){return G.open}set siderOpen(e){e?G.show():G.hide()}createSider(e,t){if(this.destroyed)throw Error(`页面组件已被销毁`);t?.throwIfAborted();let n=this.#e;return new Re(this,n,null,e!==!1,t instanceof AbortSignal?AbortSignal.any([t,this.signal]):this.signal)}constructor(e){super(e),e&&(G.disabled=!this.#e.children.length)}};function Be(e,t){let{create:n}=t,r=document.createElement(`nl-menu`),i=!1,a=!1,o=()=>{i=!0,a&&(a=!1,r.appendChild(document.createElement(`hr`)))};for(let s of e){if(!s){if(!i)continue;a=!0;continue}let{children:e}=s;if(!e?.length){let e=n(s);if(!e)continue;o(),r.appendChild(e);continue}let c=Be(e,t);if(!c)continue;o();let l=r.appendChild(c),u=l.insertBefore(document.createElement(`div`),l.firstChild);u.appendChild(document.createTextNode(s.label||s.title||``)),u.slot=`label`}return i?r:null}function Ve(e,t){if(t.signal.aborted)return null;let{create:n}=t,r=document.createElement(`div`),i=!1,a=!1,o=()=>{i=!0,a&&(a=!1,r.appendChild(document.createElement(`hr`)))};for(let s of e){if(!s){if(!i)continue;a=!0;continue}let{children:e}=s;if(!e?.length){let e=n(s,{button:!0});if(!e)continue;o(),r.appendChild(e);continue}let c=Be(e,t);if(!c)continue;o();let l=r.appendChild(document.createElement(`button`));l.appendChild(document.createTextNode(s.label||s.title||``)),c.targetElement=l,l.addEventListener(`click`,()=>c.show?.()),r.appendChild(c)}return r.childNodes.length?(r.classList.add(`MenuButtons`),r):null}function He(t){let{page:n}=t;if(n){let{path:r}=t;return new URL(r?.[0]===`/`?`${n}${r}`:`${n}/${r||``}`,e.root).href}let{uri:r}=t;return r||null}function Ue(e,t){let{signal:n,button:r}=t,i=document.createElement(`a`),a=r?document.createElement(`button`):null;i.appendChild(document.createTextNode(e.label||e.title||``));let{commands:o}=t,s=l(()=>{if(e.disabled)return!0;let{command:n}=e,r=n&&Object.hasOwn(o,n)&&o[n];return!!(r?r.disabled:t.disabled(e))}),c=l(()=>{let n=He(e);if(n)return n;let{command:r}=e,i=r&&Object.hasOwn(o,r)&&o[r];return i?He(i)||null:t.uri(e)||null});function u(){let{click:n}=e;if(typeof n==`function`)return n();let{script:r}=e;if(r)return;let{command:i}=e,a=i&&Object.hasOwn(o,i)&&o[i];return a?a.click?.():t.click(e)}return g(()=>{let t=s.get();if(i.disabled=t,i.ariaDisabled=t?`true`:`false`,t)i.removeAttribute(`tabindex`),i.removeAttribute(`href`),i.removeAttribute(`target`);else{i.tabIndex=0;let t=``,n=c.get();n&&(i.href=n,t=e.target||(e.page?`_self`:``)),t?i.target=t:i.removeAttribute(`target`)}a&&(a.disabled=t)},n),i.addEventListener(`click`,e=>{s.get()&&(e.preventDefault(),e.stopPropagation())},{capture:!0}),i.addEventListener(`click`,e=>{s.get()||e.defaultPrevented||c.get()&&(e.shiftKey||(ee?e.metaKey:e.ctrlKey)||e.altKey)||u()===!1&&e.preventDefault()}),a?(a.appendChild(i),a):i}function We(e,t,n){let r=document.createElement(`div`),i=Be(e,n);if(!i)return null;let a=r.appendChild(document.createElement(`button`)),o=t?.label||t?.title||``;return o?a.appendChild(document.createTextNode(o)):a.appendChild(d(t?.icon||`more`,n.signal)),i.targetElement=a,a.addEventListener(`click`,()=>i.show()),r.appendChild(i),r}function Ge({hidden:e,title:t,disabled:n,createIcon:r,createPanel:i,href:a,click:o},s){if(s.aborted)return;let c=m(m(!1)),u={get shown(){return c.get().get()},get signal(){return s}},f;if(i){let e=W.createSider(i(u));f=e.button,c.set(l(()=>e.shown)),s.addEventListener(`abort`,()=>{e.remove()},{once:!0})}else if(a){let e=W.createAction(!0);g(()=>{let t=!n?.(u)&&a(u);t?e.href=t:e.removeAttribute(`href`)},s),o&&e.addEventListener(`click`,e=>{o(u)===!1&&e.preventDefault()},{signal:s}),f=e,s.addEventListener(`abort`,()=>{e.remove()},{once:!0})}else{let e=W.createAction();n&&g(()=>{n(u)?e.removeAttribute(`tabIndex`):e.tabIndex=0},s),o&&e.addEventListener(`click`,()=>{o(u)},{signal:s}),f=e,s.addEventListener(`abort`,()=>{e.remove()},{once:!0})}e&&g(()=>{f.hidden=e(u)},s),t&&g(()=>{f.title=t(u)},s),r?f.appendChild(r(u)):f.appendChild(d([`icon`,`logo`],s))}var Ke={title(t){return[t.title,e.title||`拥道YongDall`].filter(Boolean).join(` | `)},icon(e){return e.icon},components:{List:oe,Pagination:se,createMenuButtons:Ve,createMenuItem:Ue,createMenuButton:We},updatePath:j,pageManager:ae,elements:[y,B],classNames:[C,`${C}-allSider`],styleFiles:[`theme-allSider.css`],home:ce,alertError:t,rootClassName:`${C}-root`,createFrame:u,createPage(e){return new ze(e)},renderError(e,t){Ae(e,t)},async setup(e){ie(!1),R.addEventListener(`click`,()=>{Ne()},{signal:e}),V.insertBefore(R,V.firstElementChild);let t=W.createSider(D);t.button.appendChild(d(`menu`,e)),t.button.title=`菜单`;let n=W.createSider(T);n.button.appendChild(d(`activity`,e)),n.button.title=`活动`,window.innerWidth>800&&t.show();let r=Le.createSider(M,N);e.addEventListener(`abort`,()=>{R.remove(),t.remove(),n.remove(),r.remove()},{once:!0});for await(let t of v()){if(e.aborted)return;Ge(t,e)}}};function qe(e,t,{hidden:n,title:r,disabled:i,createIcon:a,createPanel:o,href:s,click:c},u){if(u.aborted)return;let f=e.parentNode;if(!f)return;let p=m(m(!1)),h={get shown(){return p.get().get()},get signal(){return u}},_;if(o){let e=document.createElement(`div`),n=o(h);_=e;let r=m(!0);p.set(l(()=>!p.get())),t.appendChild(n),e.addEventListener(`click`,()=>{n.showPopover()},{signal:u}),n.setAttribute(`popover`,`auto`),n.addEventListener(`toggle`,e=>{r.set(e.newState===`closed`)},{signal:u}),u.addEventListener(`abort`,()=>{n.removeAttribute(`popover`),n.remove()},{once:!0})}else if(s){let e=document.createElement(`a`);c&&e.addEventListener(`click`,e=>{c(h)===!1&&e.preventDefault()},{signal:u}),g(()=>{let t=!i?.(h)&&s(h);t?e.href=t:e.removeAttribute(`href`)},u),_=e}else{let e=document.createElement(`div`);c&&e.addEventListener(`click`,()=>{c(h)},{signal:u}),i&&g(()=>{i(h)?e.removeAttribute(`tabIndex`):e.tabIndex=0},u),_=e}n&&g(()=>{_.hidden=n(h)},u),r&&g(()=>{_.title=r(h)},u),f.insertBefore(_,e),a?_.appendChild(a(h)):_.appendChild(d([`icon`,`logo`],u)),u.addEventListener(`abort`,()=>{_.remove()},{once:!0})}const K=`${C}-base`,Je=[`theme-base.css`],Ye=document.createElement(`header`),q=Ye.appendChild(document.createElement(`div`));q.classList.add(`${K}-header`);const Xe=Ye.appendChild(document.createElement(`div`));Xe.classList.add(`${K}-sidebar`);const Ze=q.appendChild(d(`menu`,!0));Ze.classList.add(`${K}-menu-button`);const Qe=q.appendChild(document.createElement(`span`)),J=`${K}-menu-open`;Ze.addEventListener(`click`,()=>{document.body.classList.toggle(J)}),Xe.addEventListener(`click`,e=>{e.target===e.currentTarget&&document.body.classList.remove(J)});let Y=null;var $e={title(t){return[[Y&&t.loading?`⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏`[Y.get()%10]:``,t.unsaved?`🔴`:``,t.title].join(``),e.title||`拥道YongDall`].filter(Boolean).join(` | `)},icon(e){return e.icon},components:{List:oe,Pagination:se,createMenuButtons:Ve,createMenuItem:Ue,createMenuButton:We},updatePath:j,pageManager(e){let t=!1;g(()=>{if(!e.current){t&&e.destroy();return}t=!0},e.signal)},elements:[Ye,y],classNames:[C,K],styleFiles:Je,home:ce,alertError:t,rootClassName:`${C}-root`,createFrame:u,createPage(e){return new i(e)},renderError(e,t){Ae(e,t)},async setup(t){Y=h(80,t),R.addEventListener(`click`,()=>{window.innerWidth>800||document.body.classList.remove(J)},{signal:t});let n=document.createElement(`div`);n.classList.add(`${K}-header-title`),g(()=>{n.innerText=e.title||e.company||``},t),q.insertBefore(R,Qe),q.insertBefore(n,Qe),window.innerWidth>800&&document.body.classList.add(J),Xe.appendChild(D);let r=document.createElement(`div`);r.classList.add(`${K}-panels`),document.body.appendChild(r),r.appendChild(M),M.setAttribute(`popover`,`auto`),N.addEventListener(`click`,()=>{M.showPopover()},{signal:t});let i=q.appendChild(document.createElement(`div`));i.classList.add(`${K}-actions`);let a=i.appendChild(document.createElement(`span`));i.appendChild(N),t.addEventListener(`abort`,()=>{R.remove(),n.remove(),D.remove(),r.remove(),M.removeAttribute(`popover`),M.remove(),N.remove(),a.remove(),i.remove()},{once:!0});for await(let e of v()){if(t.aborted)return;qe(a,r,e,t)}}};const X=`${C}-tabs`,Z=document.createElement(`header`),Q=Z.appendChild(document.createElement(`div`));Q.classList.add(`${X}-header`);const et=Z.appendChild(document.createElement(`div`));et.classList.add(`${X}-sidebar`);const tt=Q.appendChild(d(`menu`,!0));tt.classList.add(`${X}-menu-button`);const nt=Q.appendChild(document.createElement(`span`)),$=`${X}-menu-open`;tt.addEventListener(`click`,()=>{document.body.classList.toggle($)});function rt(){window.innerWidth>800||document.body.classList.remove($)}et.addEventListener(`click`,e=>{e.target===e.currentTarget&&document.body.classList.remove($)});var it={title(t){return[t.title,e.title||`拥道YongDall`].filter(Boolean).join(` | `)},icon(e){return e.icon},components:{List:oe,Pagination:se,createMenuButtons:Ve,createMenuItem:Ue,createMenuButton:We},updatePath:j,pageManager:ae,elements:[Z,y],classNames:[C,`${C}-tabs`],styleFiles:[`theme-tabs.css`],home:ce,alertError:t,rootClassName:`${C}-root`,createFrame:u,createPage(e){return new i(e)},renderError(e,t){Ae(e,t)},async setup(t){ie(!0),R.addEventListener(`click`,()=>{rt()},{signal:t});let n=document.createElement(`div`);n.classList.add(`${X}-header-title`),g(()=>{n.innerText=e.title||e.company||``},t),Q.insertBefore(R,nt),Q.insertBefore(n,nt),Z.appendChild(T),window.innerWidth>800&&document.body.classList.add($),et.appendChild(D);let r=document.createElement(`div`);r.classList.add(`${X}-panels`),document.body.appendChild(r),r.appendChild(M),M.setAttribute(`popover`,`auto`),N.addEventListener(`click`,()=>{M.showPopover()},{signal:t});let i=Q.appendChild(document.createElement(`div`));i.classList.add(`${X}-actions`);let a=i.appendChild(document.createElement(`span`));i.appendChild(N),t.addEventListener(`abort`,()=>{R.remove(),n.remove(),T.remove(),D.remove(),M.removeAttribute(`popover`),M.remove(),N.remove()},{once:!0});for await(let e of v()){if(t.aborted)return;qe(a,r,e,t)}}};export{Ke as allSider,Ke as theme,$e as base,$e as tradition,it as tabs};
4
4
  //# sourceMappingURL=index.mjs.map
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["prefix","#table","#thead","#createUrl","#renderList","#labelPattern","#fieldsShow","#idFields","#tr","#tbody","#documents","Pagination","#fns","#pagination","filter","header","main","allMenus","currentMenus","ac","prefix","header","actions","sidebar","openedClassName","prefix","closeSidebarWhenMobile","Sider","#disabled","#hide","#click","sidebar","prefix","#children","Sider","actions","span","#page","#parent","#hidden","#sides","rootContainer","header","actions","prefix","header","actions","sidebar","menuButton","span","openedClassName","rootContainer","rootContainer"],"sources":["../../packages/theme/styles/variables.mjs","../../packages/theme/pageManager/index.mjs","../../packages/theme/components/List.mjs","../../packages/theme/components/Pagination.mjs","../../packages/theme/home/index.mjs","../../packages/theme/menu/createNavMenu.mjs","../../packages/theme/workspace/index.mjs","../../packages/theme/user/userAvatar.mjs","../../packages/theme/user/index.mjs","../../packages/theme/logo.mjs","../../packages/theme/error/index.mjs","../../packages/theme/theme-allSider/dom.mjs","../../packages/theme/theme-allSider/Sider.mjs","../../packages/theme/theme-allSider/Group.mjs","../../packages/theme/theme-allSider/sides.mjs","../../packages/theme/theme-allSider/AllSiderPage.mjs","../../packages/theme/menu/createMenu.mjs","../../packages/theme/menu/createMenuButtons.mjs","../../packages/theme/menu/createMenuItem.mjs","../../packages/theme/menu/createMenuButton.mjs","../../packages/theme/theme-allSider/index.mjs","../../packages/theme/theme-base/index.mjs","../../packages/theme/theme-tabs/dom.mjs","../../packages/theme/theme-tabs/index.mjs"],"sourcesContent":["export const cssPrefix = `YongDallTheme`;\n","import { effect, waitAbortSignal } from '@yongdall/web';\n/** @import { PageHandle, PageManager } from '@yongdall/web' */\nimport { cssPrefix } from '../styles/variables.mjs';\nconst prefix = `${cssPrefix}-activity`;\n\nexport const activityContainer = document.createElement('div');\nactivityContainer.classList.add(prefix);\n\n\n\n/**\n * @typedef {object} ButtonProxy\n * @property {HTMLElement} button\n * @property {HTMLAnchorElement} link\n * @property {ButtonProxy} [last]\n * @property {ButtonProxy} [next]\n */\n\n/** @type {Map<PageHandle, ButtonProxy>} */\nconst buttons = new Map();\n/** @type {ButtonProxy | undefined} */\nlet first;\nlet append = false;\n/**\n * \n * @param {boolean} a \n */\nexport function setMode(a){\n\tappend = a;\n}\n/** @type {PageManager} */\nconst pageManager = (page) => {\n\tconst button = document.createElement('div');\n\tbutton.classList.add(`${prefix}-page`);\n\tconst link = button.appendChild(document.createElement('a'));\n\tlink.classList.add(`${prefix}-title`);\n\tlink.href = page.href;\n\tlink.innerText = page.title;\n\tconst close = button.appendChild(document.createElement('button'));\n\tclose.type = 'button';\n\tclose.classList.add(`${prefix}-close`);\n\tclose.addEventListener('click', () => {\n\t\tpage.destroy();\n\t});\n\t/** @type {ButtonProxy} */\n\tconst btn = {\n\t\tbutton, link,\n\t\tnext: first,\n\t};\n\tif (first) { first.last = btn; }\n\tfirst = btn;\n\tbuttons.set(page, btn);\n\tactivityContainer.insertBefore(button, append ? null : activityContainer.firstChild);\n\n\teffect(() => { link.innerText = page.title; }, page.signal);\n\teffect(() => { link.href = page.href; }, page.signal);\n\n\teffect(() => {\n\t\tif (page.current) {\n\t\t\tbutton.classList.add(`${prefix}-current`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-current`);\n\t\t}\n\t}, page.signal);\n\teffect(() => {\n\t\tif (page.loading) {\n\t\t\tbutton.classList.add(`${prefix}-loading`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-loading`);\n\t\t}\n\t}, page.signal);\n\teffect(() => {\n\t\tif (page.unsaved) {\n\t\t\tbutton.classList.add(`${prefix}-unsaved`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-unsaved`);\n\t\t}\n\t}, page.signal);\n\twaitAbortSignal(page.signal).then(() => {\n\t\tconst { last, next } = btn;\n\t\tif (last) { last.next = next; }\n\t\tif (next) { next.last = last; }\n\t\tif (first === btn) { first = next; }\n\t\tbutton.remove();\n\t});\n};\nexport default pageManager;\n","/** @import { FieldScriptConfiguration, ModelScriptConfiguration } from '@yongdall/web' */\nimport { createShowField, Pattern } from '@yongdall/web';\n\n\nexport default class List {\n\t/** @type {((id: string) => string)?} */\n\t#createUrl;\n\t/** @type {readonly [string, FieldScriptConfiguration][]} */\n\t#fieldsShow;\n\t/** @type {string} */\n\t#labelPattern;\n\t/** @type {string[]} */\n\t#idFields;\n\t/** @type {readonly any[]} */\n\t#documents = [];\n\t#table = document.createElement('table');\n\t#thead = this.#table.appendChild(document.createElement('thead'));\n\t#tr = this.#thead.appendChild(document.createElement('tr'));\n\t#tbody = this.#table.appendChild(document.createElement('tbody'));\n\tget root() { return this.#table }\n\tget createUrl() {\n\t\treturn this.#createUrl;\n\t}\n\tset createUrl(fn) {\n\t\tconst createUrl = typeof fn === 'function' ? fn : null;\n\t\tif (this.#createUrl === createUrl) { return }\n\t\tthis.#createUrl = createUrl;\n\t\tthis.#renderList();\n\t}\n\t/**\n\t * \n\t * @param {(id: string) => string} createUrl \n\t * @param {ModelScriptConfiguration} model \n\t */\n\tconstructor(createUrl, model) {\n\t\tconst fieldsShow = Object.entries(model.fields).filter(([,{type}]) => type && typeof type !== 'object');\n\t\tconst idFields = Object.entries(model.fields).filter(([,v]) => v.primary).map(([v]) => v);\n\t\tconst labelPattern = model.labelPattern || '';\n\t\tthis.#labelPattern = labelPattern;\n\t\tthis.#createUrl = typeof createUrl === 'function' ? createUrl : null;\n\t\tthis.#fieldsShow = fieldsShow;\n\t\tthis.#idFields = idFields;\n\t\tconst tr = this.#tr;\n\t\ttr.innerHTML = '';\n\t\tconst th = tr.appendChild(document.createElement('th'));\n\t\tth.appendChild(document.createTextNode('#'));\n\t\tfor (const [name,field] of fieldsShow) {\n\t\t\tconst th = tr.appendChild(document.createElement('th'));\n\t\t\tth.appendChild(document.createTextNode(field.label || name));\n\t\t}\n\t}\n\t#renderList() {\n\t\tconst tbody = this.#tbody;\n\t\ttbody.innerHTML = '';\n\t\tconst idFields = this.#idFields;\n\t\tconst labelPattern = this.#labelPattern;\n\t\tconst fieldsShow = this.#fieldsShow;\n\t\tconst createUrl = this.#createUrl;\n\t\tfor (const r of this.#documents) {\n\t\t\tconst tr = tbody.appendChild(document.createElement('tr'));\n\t\t\tconst td = tr.appendChild(document.createElement('td'));\n\t\t\tconst label = Pattern.generate(labelPattern, r) || idFields.map(v => r[v]).join('$')\n\t\t\tif (createUrl) {\n\t\t\t\tconst a = td.appendChild(document.createElement('a'));\n\t\t\t\ta.href = createUrl(idFields.map(v => r[v]).join('$'));\n\t\t\t\ta.appendChild(document.createTextNode(label));\n\t\t\t} else {\n\t\t\t\ttd.appendChild(document.createTextNode(label));\n\t\t\t}\n\t\t\tfor (const [name,field] of fieldsShow) {\n\t\t\t\tconst td = tr.appendChild(document.createElement('td'));\n\t\t\t\tconst f = createShowField(name, field, {inline: true}, r);\n\t\t\t\ttd.appendChild(f.root);\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {readonly any[]} list \n\t */\n\tsetData(list) {\n\t\tthis.#documents = list;\n\t\tthis.#renderList();\n\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n","import { Pagination as NlPagination } from '@neeloong/components'\n\nexport default class Pagination {\n\t#fns;\n\t#pagination;\n\tconstructor() {\n\t\tconst pagination = /** @type {NlPagination} */(document.createElement('nl-pagination'));\n\t\tpagination.size = 20;\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"start\";\n\t\tpagination.appendChild(document.createTextNode('-'));\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"end\";\n\t\tpagination.appendChild(document.createTextNode('/'));\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"total\";\n\t\tpagination.appendChild(document.createElement('nl-pagination-prev')).innerText = '上一页';\n\t\tpagination.appendChild(document.createElement('nl-pagination-pager'));\n\t\tpagination.appendChild(document.createElement('nl-pagination-next')).innerText = '下一页';\n\t\tpagination.appendChild(document.createElement('nl-pagination-sizer'));\n\t\tconst fns = new Set();\n\t\t\n\t\tpagination.addEventListener('change', () => {\n\t\t\tfor (const fn of fns) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t})\n\t\tthis.#fns = fns;\n\t\tthis.#pagination = pagination;\n\n\t}\n\tget root() {return this.#pagination; }\n\tget size() { return this.#pagination.size}\n\tset size(v) { this.#pagination.size = v}\n\tget page() { return this.#pagination.page}\n\tset page(v) { this.#pagination.page = v}\n\tget total() { return this.#pagination.total}\n\tset total(v) { this.#pagination.total = v}\n\t/**\n\t * \n\t * @param {(p: Pagination) => void} listen \n\t * @returns {() => void}\n\t */\n\tlisten(listen) {\n\t\tconst fns = this.#fns;\n\t\tconst f = () => listen(this);\n\t\tfns.add(f);\n\t\treturn () => {fns.delete(f)}\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n","/** @import { HomeContext } from '@yongdall/web' */\n/**\n *\n * @param {string} href\n * @param {string} title\n */\nfunction createLink(href, title) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.title = title;\n\ta.style.display = 'block';\n\ta.appendChild(document.createTextNode(title));\n\treturn a;\n}\n\n\n/**\n * @param {HTMLElement} container\n */\nfunction renderHome(container) {\n}\n\n\n/**\n * \n * @param {HomeContext} homeContext \n */\nexport default function home(homeContext) {\n\thomeContext.listen('update', () => {\n\t\tconst { container } = homeContext;\n\t\tcontainer.innerHTML = '';\n\t\treturn renderHome(container);\n\t});\n}\n","import '@neeloong/components';\n/** @import { Menu } from '@yongdall/web' */\n/** @import {Collapse} from '@neeloong/components' */\nimport { Application, createNeverAbortedSignal, Ident, PageIdent, watch } from '@yongdall/web';\n\n\n\n/**\n * \n * @param {string} active \n * @param {Map<string, HTMLElement[]>} menuMap \n * @param {Map<string, [HTMLElement, number: number][]>} pathMenuMap \n * @returns {IterableIterator<HTMLElement[]>}\n */\nfunction* toFindPath(active, menuMap, pathMenuMap) {\n\tif (!active) { return; }\n\tconst index = active.indexOf('?');\n\tconst path = index < 0 ? active : active.slice(0, index);\n\tif (index >= 0 && index + 1 < active.length) {\n\t\tfor (const list = active.slice(index).split('&'); list.length; list.pop()) {\n\n\t\t\tconst menus = menuMap.get(`${path}${list.join('&')}`);\n\t\t\tif (!menus?.length) { continue; }\n\t\t\tyield menus;\n\t\t}\n\n\t}\n\n\tconst menus = menuMap.get(path);\n\tif (menus?.length) { yield menus; }\n\tconst pathMenus = pathMenuMap.get(path);\n\tif (pathMenus?.length) { yield pathMenus.map(v => v[0]); }\n}\n\n\n\n/**\n * \n * @param {string} active \n * @param {Map<string, HTMLElement[]>} menuMap \n * @param {Map<string, [HTMLElement, number: number][]>} pathMenuMap \n * @param {PageIdent?} ident \n * @param {Map<string, HTMLElement[]>} identMap \n * @returns {IterableIterator<HTMLElement[]>}\n */\nfunction* findMenu(active, menuMap, pathMenuMap, ident, identMap) {\n\tyield* toFindPath(active, menuMap, pathMenuMap);\n\tif (!ident) { return; }\n\tfor (const p of [...Ident.stringifyPaths(ident)].reverse()) {\n\t\tconst menus = identMap.get(p);\n\t\tif (!menus?.length) { continue; }\n\t\tyield menus;\n\t}\n}\n\n/**\n * \n * @param {HTMLElement} element \n * @returns {Iterable<Text>}\n */\nfunction* findTextNode(element) {\n\tconst walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);\n\tfor (let node; node = walker.nextNode();) {\n\t\t// @ts-ignore\n\t\tyield node;\n\t}\n}\n/**\n * \n * @param {string[]} texts \n * @param {HTMLElement} element \n * @returns {Range[]}\n */\nfunction filter(texts, element) {\n\tconst ranges = [];\n\n\tconst textNodes = [...findTextNode(element)].filter(n => n.nodeValue?.length);\n\tconst indexes = textNodes.reduce((list, currentValue) => {\n\t\tconst index = list[list.length - 1]?.[1] || 0;\n\t\treturn /** @type {[number, number, Text][]} */([...list, [\n\t\t\tindex,\n\t\t\tindex + (currentValue.nodeValue?.length || 0),\n\t\t\tcurrentValue,\n\t\t]]);\n\t}, /** @type {[number, number, Text][]} */([]));\n\tconst fullText = textNodes.map(n => n.nodeValue).join('');\n\n\tlet startIndex = 0;\n\tfor (const searchText of texts) {\n\t\tconst index = fullText.indexOf(searchText, startIndex);\n\t\tif (index === -1) { return []; }\n\t\tconst endIndex = index + searchText.length;\n\n\t\tconst start = indexes.findLast(([start]) => start <= index);\n\t\tif (!start) { return []; }\n\t\tconst end = indexes.findLast(([, end]) => end >= endIndex);\n\t\tif (!end) { return []; }\n\t\tstartIndex = index + searchText.length;\n\n\n\t\tconst range = new Range();\n\t\trange.setStart(start[2], index - start[0]);\n\t\trange.setEnd(end[2], endIndex - start[0]);\n\t\tranges.push(range);\n\t}\n\treturn ranges;\n}\n/**\n * \n * @param {Element} root \n * @param {(Menu | null)[]} menus \n * @param {object} [options] \n * @param {string | [string | null | undefined, PageIdent | null | undefined]} [options.active] \n * @param {AbortSignal} [options.signal] \n * @param {string} [options.filter] \n */\nexport default function createNavMenu(root, menus, options = {}) {\n\t/** @type {Map<string, [HTMLElement, number: number][]>} */\n\tconst pathMenuMap = new Map();\n\t/** @type {Map<string, HTMLElement[]>} */\n\tconst menuMap = new Map();\n\t/** @type {Map<string, HTMLElement[]>} */\n\tconst identMap = new Map();\n\t/** @type {HTMLElement?} */\n\tlet current = null;\n\t/** @type {HTMLElement[]} */\n\tconst allMenus = [];\n\t/** @type {(() => void)[]} */\n\tconst destroyList = [];\n\n\t/**\n\t * \n\t * @param {Menu.Button} button \n\t */\n\tfunction createButtons(button) {\n\t\tconst link = document.createElement('a');\n\t\tlink.href = button.path || '#';\n\t\tlink.appendChild(document.createTextNode(button.label || button.title || ''));\n\t\tlink.title = button.title || button.label || '';\n\t\treturn link;\n\t}\n\t/** @type {HTMLElement?} */\n\tlet clickedItem = null;\n\n\t/**\n\t * \n\t * @param {Menu} menu \n\t * @param {number} level \n\t * @returns {{el: HTMLElement; filter(show: boolean, t?: string[]?): Range[]} | null}\n\t */\n\tfunction renderMenu(menu, level) {\n\t\tconst { children } = menu;\n\t\tif (!children.length) {\n\t\t\tconst item = document.createElement('div');\n\t\t\tconst link = item.appendChild(document.createElement('a'));\n\t\t\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\t\tconst { page, path, uri, target } = menu;\n\t\t\t/** @type {URL?} */\n\t\t\tlet url = null;\n\t\t\tconst ident = page && Ident.parse(page);\n\t\t\tif (ident) {\n\t\t\t\turl = new URL(PageIdent.stringify(ident, path), Application.root);\n\t\t\t\tlink.href = url.href;\n\t\t\t\tif (target && typeof target === 'string') { link.target = target; }\n\n\t\t\t} else if (uri) {\n\t\t\t\tlink.href = uri;\n\t\t\t\ttry {\n\t\t\t\t\turl = new URL(uri);\n\t\t\t\t\tif (url.origin !== location.origin) {\n\t\t\t\t\t\turl = null;\n\t\t\t\t\t}\n\t\t\t\t} catch { }\n\t\t\t\tif (target !== '') { link.target = target ?? '_blank'; }\n\t\t\t}\n\t\t\tif (url && (link.target || '_self') === '_self') {\n\t\t\t\tlink.addEventListener('click', () => {\n\t\t\t\t\tclickedItem = item;\n\t\t\t\t\trequestIdleCallback(() => {\n\t\t\t\t\t\tif (clickedItem !== item) { return; }\n\t\t\t\t\t\tclickedItem = null;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tconst { pathname: pathname, search } = url;\n\t\t\t\tconst fullPath = (search || '?') === '?' ? pathname : `${pathname}${search}`;\n\t\t\t\tconst list = menuMap.get(fullPath);\n\t\t\t\tif (list) {\n\t\t\t\t\tlist.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tmenuMap.set(pathname, [item]);\n\t\t\t\t}\n\t\t\t\tconst list2 = pathMenuMap.get(fullPath);\n\t\t\t\tif (list2) {\n\t\t\t\t\tlist2.push([item, search.length]);\n\t\t\t\t} else {\n\t\t\t\t\tpathMenuMap.set(pathname, [[item, search.length]]);\n\t\t\t\t}\n\t\t\t\tif (ident && (!path || path[0] === '?' || path[0] === '#')) {\n\t\t\t\t\tconst key = Ident.stringify(ident);\n\t\t\t\t\tconst list = identMap.get(key);\n\t\t\t\t\tif (list) {\n\t\t\t\t\t\tlist.push(item);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tidentMap.set(key, [item]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor (const button of menu.buttons || []) {\n\t\t\t\titem.appendChild(createButtons(button));\n\t\t\t}\n\t\t\titem.className = 'NavMenu-item';\n\t\t\treturn {\n\t\t\t\tel: item, filter(show, text) {\n\t\t\t\t\tconst list = text ? filter(text, link) : [];\n\t\t\t\t\titem.hidden = Boolean(!show && text && !list.length);\n\t\t\t\t\treturn list;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tconst item = /** @type {Collapse} */(document.createElement('nl-collapse'));\n\t\titem.setAttribute('animation', '');\n\t\titem.setAttribute('menu', '');\n\t\tconst header = item.appendChild(document.createElement('div'));\n\t\theader.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\theader.className = 'NavMenu-label';\n\t\theader.slot = 'label';\n\t\theader.style.flex = '1';\n\t\tfor (const button of menu.buttons || []) {\n\t\t\titem.appendChild(createButtons(button)).slot = 'label';\n\t\t}\n\t\tconst childrenMenu = renderChildren(item, children, level + 1);\n\t\tif (!childrenMenu.length) { return null; }\n\t\treturn {\n\t\t\tel: item, filter(show, text) {\n\t\t\t\tif (!text) {\n\t\t\t\t\tfor (const menu of childrenMenu) { menu.filter(show); }\n\t\t\t\t\titem.hidden = false;\n\t\t\t\t\titem.open = false;\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tconst self = filter(text, header);\n\t\t\t\tconst hasSelf = Boolean(show || self.length);\n\n\t\t\t\tconst ranges = childrenMenu.flatMap(v => v.filter(hasSelf, text));\n\t\t\t\titem.open = Boolean(ranges.length);\n\t\t\t\tconst list = [...self, ...ranges];\n\t\t\t\titem.hidden = !show && !list.length;\n\t\t\t\treturn list;\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t * \n\t * @param {Element} parent \n\t * @param {(Menu | null)[]} menus \n\t * @param {number} level \n\t * @returns \n\t */\n\tfunction renderChildren(parent, menus, level) {\n\t\tlet has = false;\n\t\tlet divider = false;\n\t\tlet children = [];\n\t\tfor (const menu of menus) {\n\t\t\tif (!menu) {\n\t\t\t\tif (!has) { continue; }\n\t\t\t\tdivider = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (divider) {\n\t\t\t\tdivider = false;\n\t\t\t\tparent.appendChild(document.createElement('hr'));\n\t\t\t}\n\t\t\tconst item = renderMenu(menu, level);\n\t\t\tif (!item) { continue; }\n\t\t\tchildren.push(item);\n\t\t\thas = true;\n\t\t\tparent.appendChild(item.el);\n\t\t\tallMenus.push(item.el);\n\t\t\titem.el.style.setProperty('--NavMenu-level', String(level));\n\t\t}\n\t\treturn children;\n\t}\n\tconst menuList = renderChildren(root, menus, 0);\n\tlet destroyed = false;\n\tfunction destroy() {\n\t\tif (destroyed) { return; }\n\t\tdestroyed = true;\n\t\tfor (const m of allMenus) {\n\t\t\tm.remove();\n\t\t}\n\t\tfor (const destroy of destroyList) {\n\t\t\tdestroy();\n\t\t}\n\t}\n\tconst signal = options.signal || createNeverAbortedSignal();\n\tif (signal.aborted) {\n\t\tdestroy();\n\t} else {\n\t\tsignal.addEventListener('abort', destroy, { once: true });\n\t}\n\t/** @type {HTMLElement[]} */\n\tlet parents = [];\n\twatch(() => {\n\t\tconst active = options.active;\n\t\tif (!active) { return null; }\n\t\tif (typeof active === 'string') {\n\t\t\treturn active.replace(/#.*/, '') || '';\n\t\t}\n\t\tif (!Array.isArray(active)) { return null; }\n\t\tconst page = active[1] || null;\n\t\tif (!page) {\n\t\t\treturn active[0]?.replace(/#.*/, '') || null;\n\n\t\t}\n\t\t/** @type {[string, PageIdent | null]} */\n\t\tconst result = [active[0]?.replace(/#.*/, '') || '', active[1] || null];\n\t\treturn result;\n\t}, active => {\n\t\tif (!active) { return; }\n\t\tconst path = Array.isArray(active) ? active[0] : '';\n\t\tconst page = Array.isArray(active) ? active[1] : null;\n\t\tfor (const menus of findMenu(path, menuMap, pathMenuMap, page, identMap)) {\n\t\t\tconst clicked = clickedItem && menus.includes(clickedItem) ? clickedItem : null;\n\t\t\tif (clicked) { clickedItem = null; }\n\t\t\tif (!clicked && current && menus.includes(current)) { return; }\n\t\t\tconst menu = clicked || menus[0];\n\t\t\tconst list = [];\n\t\t\tlet parent = menu.parentElement;\n\t\t\tfor (; parent && parent !== root; parent = parent.parentElement) {\n\t\t\t\tlist.push(parent);\n\t\t\t}\n\t\t\tif (parent !== root) { return; }\n\t\t\tparents = list;\n\t\t\tcurrent?.classList.remove('NavMenu-current');\n\t\t\tfor (const item of parents) {\n\t\t\t\titem.setAttribute('open', '');\n\t\t\t}\n\t\t\tcurrent = menu;\n\t\t\tcurrent?.classList.add('NavMenu-current');\n\t\t\treturn;\n\t\t}\n\n\n\t}, { signal, immediate: true });\n\t/**\n\t * \n\t * @param {string} text \n\t * @returns \n\t */\n\treturn text => {\n\t\t/** @type {string[]?} */\n\t\tconst texts = text.toLowerCase().split(/[\\s\\n]+/).filter(Boolean);\n\t\tif (texts.length) {\n\t\t\treturn menuList.flatMap(v => v.filter(false, texts));\n\t\t}\n\t\tmenuList.flatMap(v => v.filter(false));\n\t\tfor (const item of parents) {\n\t\t\titem.setAttribute('open', '');\n\t\t}\n\t\treturn [];\n\t};\n}\n","import { Application, createComputed, createIcon, createState, effect, flatPermission, Menu, PageIdent, toPermissionFilter, User } from '@yongdall/web';\nimport createNavMenu from '../menu/createNavMenu.mjs';\n\n\n\n\nexport const menuContainer = document.createElement('div');\n\n\nmenuContainer.style.display = 'flex';\nmenuContainer.style.flexDirection = 'column';\nconst header = menuContainer.appendChild(document.createElement('header'));\nheader.classList.add('NavMenu-header');\nconst filter = header.appendChild(document.createElement('input'));\nfilter.placeholder = '过滤菜单...';\nfilter.type = 'search';\nconst refreshButton = header.appendChild(document.createElement('button'));\nrefreshButton.appendChild(createIcon('refresh', true));\nrefreshButton.classList.add('icon');\nrefreshButton.title = '刷新';\n\n\nconst main = menuContainer.appendChild(document.createElement('main'));\nmain.style.flex = '1';\nmain.style.overflow = 'auto';\nmain.classList.add('NavMenu');\nlet k = 0;\nlet loaded = false;\n/** @type {ReturnType<typeof createNavMenu>?} */\nlet navMenu = null;\nfunction filterMenu() {\n\tconst list = navMenu?.(filter.value) || [];\n\tconst highlight = new Highlight(...list);\n\tCSS.highlights.set(\"NavMenu-filter-highlight\", highlight);\n}\nfilter.addEventListener('input', filterMenu);\n\nconst allMenus = createComputed(\n\t() => Menu.fromDefine(Application.menus, [])\n);\nconst currentMenus = createComputed(() => {\n\tconst permissions = User.permissions;\n\tconst menus = allMenus.get();\n\tif (permissions.size < 0) { return menus; }\n\n\tconst filter = toPermissionFilter({\n\t\tpermissions,\n\t\torganizationPermissions: User.organizationPermissions,\n\t\tallOrganizationPermissions: User.allOrganizationPermissions,\n\t});\n\treturn Menu.filter(menus, m => {\n\t\tconst permissions = flatPermission(m.permission);\n\t\tif (!permissions.length) { return true; }\n\t\treturn Boolean(permissions.find(filter));\n\t});\n});\nconst currentPath = createState(/** @type {string | [string, PageIdent]} */(''));\n/** @type {AbortController?} */\nlet ac = null;\neffect(() => {\n\tac?.abort();\n\tmain.innerHTML = '';\n\tac = new AbortController();\n\tnavMenu = createNavMenu(main, currentMenus.get(), {\n\t\tsignal: ac.signal,\n\t\tget active() { return currentPath.get(); },\n\t});\n\tfilterMenu();\n});\n/**\n * \n * @param {string} path \n * @param {string} search \n * @param {string} hash \n * @param {(PageIdent & {path: string})?} page \n */\nexport function updatePath(path, search, hash, page) {\n\tif (!page) {\n\t\tcurrentPath.set(`${path}${search}`);\n\t\treturn;\n\t}\n\tcurrentPath.set([`${path}${search}`, page]);\n}\n\nrefreshButton.addEventListener('click', () => Application.loadMenus(true));\n","import { createComputed, createIcon, createNeverAbortedSignal, effect, User } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\n\n\n/**\n * \n * @param {string} avatar \n * @param {AbortSignal} signal\n * @param {boolean} [button] \n */\nfunction createAvatar(avatar, signal, button) {\n\tif (!avatar) {\n\t\tconst svg = createIcon('user', signal);\n\t\tif (!button) { svg.setAttribute('fill-opacity', '0.5'); }\n\t\treturn svg;\n\t}\n\tconst img = document.createElement('img');\n\timg.src = avatar;\n\treturn img;\n\n}\n/**\n * \n * @param {HTMLElement} root \n * @param {boolean} [button] \n * @param {AbortSignal} [signal] \n * @returns \n */\nexport function createUserAvatar(root, button, signal = createNeverAbortedSignal()) {\n\troot.classList.add(`${cssPrefix}-user-avatar`);\n\n\tconst sessionAvatarComputed = createComputed(() => User.single ? null : User.session?.avatar || '');\n\t/** @type {string?} */\n\tlet sessionAvatar = sessionAvatarComputed.get();\n\t/** @type {AbortController?} */\n\tlet sessionAbortController = new AbortController();\n\tconst sessionSignal = AbortSignal.any([sessionAbortController.signal, signal]);\n\tlet sessionAvatarElement = sessionAvatar === null\n\t\t? createIcon('singleUser', sessionSignal)\n\t\t: createAvatar(sessionAvatar, sessionSignal, button);\n\troot.appendChild(sessionAvatarElement);\n\teffect(() => {\n\t\tconst newAvatar = User.single ? null : User.session?.avatar || '';\n\t\tif (newAvatar === sessionAvatar) { return; }\n\t\tsessionAvatar = newAvatar;\n\t\tsessionAbortController?.abort();\n\t\tsessionAbortController = new AbortController();\n\n\t\tconst sessionSignal = AbortSignal.any([sessionAbortController.signal, signal]);\n\t\tconst newAvatarElement = sessionAvatar === null\n\t\t\t? createIcon('singleUser', sessionSignal)\n\t\t\t: createAvatar(sessionAvatar, sessionSignal, button);\n\t\tif (!button && sessionAvatar === null) {\n\t\t\tnewAvatarElement.setAttribute('fill-opacity', '0.5');\n\t\t}\n\t\troot.replaceChild(newAvatarElement, sessionAvatarElement);\n\t\tsessionAvatarElement.remove();\n\t\tsessionAvatarElement = newAvatarElement;\n\t}, signal);\n\n\tconst targetAvatarComputed = createComputed(() => {\n\t\tconst target = User.target;\n\t\tconst session = User.session;\n\t\tif (!target) { return null; }\n\t\tif (target.id === (session?.id || '')) { return null; }\n\t\treturn target.avatar || '';\n\t});\n\t/** @type {string?} */\n\tlet targetAvatar = null;\n\t/** @type {Element?} */\n\tlet targetAvatarElement = null;\n\t/** @type {AbortController?} */\n\tlet targetAbortController = null;\n\teffect(() => {\n\t\tconst newAvatar = targetAvatarComputed.get();\n\t\tif (newAvatar === targetAvatar) { return; }\n\t\ttargetAvatar = newAvatar;\n\t\ttargetAvatarElement?.remove();\n\t\ttargetAvatarElement = null;\n\t\ttargetAbortController?.abort();\n\t\tif (newAvatar === null) { return; }\n\t\ttargetAbortController = new AbortController();\n\t\tconst targetSignal = AbortSignal.any([targetAbortController.signal, signal]);\n\t\ttargetAvatarElement = createAvatar(newAvatar, targetSignal, button);\n\t\troot.insertBefore(targetAvatarElement, sessionAvatarElement);\n\t}, signal);\n\n}\n","import { Application, createComputed, createIcon, effect, Menu, User, watch } from '@yongdall/web';\nimport { createUserAvatar } from './userAvatar.mjs';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport createNavMenu from '../menu/createNavMenu.mjs';\n\nexport const userContainer = document.createElement('div');\nuserContainer.classList.add(`${cssPrefix}-user`);\nexport const userButton = document.createElement('div');\nuserButton.classList.add(`${cssPrefix}-user-button`);\ncreateUserAvatar(userButton, true);\nconst userInfo = userContainer.appendChild(document.createElement('span'));\nuserInfo.classList.add(`${cssPrefix}-user-info`);\nconst avatar = userInfo.appendChild(document.createElement('span'));\ncreateUserAvatar(avatar);\navatar.classList.add('avatar');\nconst username = userInfo.appendChild(document.createElement('span'));\nusername.classList.add('username');\nusername.innerText = '用户名';\nconst btns = userInfo.appendChild(document.createElement('span'));\nbtns.classList.add('btns');\n\n/** @type {ChildNode} */\nlet helpEl = btns.appendChild(document.createComment(''));\nwatch(() => Application.help, (help, _help, onCleanup) => {\n\tif (!help) {\n\t\tconst el = document.createComment('');\n\t\thelpEl.replaceWith(el);\n\t\thelpEl = el;\n\t\treturn;\n\t}\n\tconst el = document.createElement('a');\n\tel.href = help;\n\tel.target = '_blank';\n\tel.appendChild(createIcon('help', onCleanup()));\n\tel.title = '帮助';\n\thelpEl.replaceWith(el);\n\thelpEl = el;\n}, { immediate: true });\n\nconst exitButton = btns.appendChild(document.createElement('div'));\nexitButton.appendChild(createIcon('logout', true));\nexitButton.title = '退出登录';\neffect(() => {\n\texitButton.hidden = !User.operator;\n});\nexitButton.addEventListener('click', () => User.exit());\n\neffect(() => {\n\tusername.innerText = User.operator?.name || '';\n});\n\n\nconst allMenus = createComputed(\n\t() => Menu.fromDefine(Application.userMenus, [])\n);\n\n\nconst currentMenus = createComputed(() => {\n\tconst menus = allMenus.get();\n\tif (User.operator) { return menus; }\n\treturn Menu.filter(menus, v => !v.logged);\n});\n\nconst main = userContainer.appendChild(document.createElement('main'));\nmain.style.flex = '1';\nmain.style.overflow = 'auto';\nmain.classList.add('NavMenu');\n\n/** @type {AbortController?} */\nlet ac = null;\neffect(() => {\n\tac?.abort();\n\tmain.innerHTML = '';\n\tac = new AbortController();\n\tcreateNavMenu(main, currentMenus.get(), {\n\t\tsignal: ac.signal,\n\t});\n});\n","\nimport { Application, createIcon, toFileLink, watch } from '@yongdall/web';\nimport { cssPrefix } from './styles/variables.mjs';\n\nconst logoLink = document.createElement('a');\nlogoLink.classList.add(`${cssPrefix}-logo`);\nwatch(() => Application.root, root => {\n\tlogoLink.href = root;\n}, { immediate: true });\nwatch(() => toFileLink(Application.logo), (logo, _logo, onCleanup) => {\n\tconst signal = onCleanup();\n\tlet logoEl;\n\tif (logo) {\n\t\tlogoEl = document.createElement('img');\n\t\tlogoEl.src = logo.href;\n\t} else {\n\t\tlogoEl = createIcon('logo', signal);\n\t}\n\tlogoLink.appendChild(logoEl);\n\tlogoEl.classList.add('logo');\n\tonCleanup(() => { logoEl.remove(); });\n}, { immediate: true });\nexport { logoLink };\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * @typedef {object} PageError\n * @property {string} title\n * @property {string} [description]\n */\n\n/** @type {Record<string, PageError>} */\nexport const errors = {\n\t404: {\n\t\ttitle: '您所请求的页面无法找到',\n\t\tdescription: '服务器无法正常提供信息。\\n目标页面可能已经被更改、删除或移到其他位置,或您所输入页面地址错误。',\n\t}\n};\n\n/**\n * @param {PageContext} ctx\n * @param {unknown} error\n */\nexport default function renderError(ctx, error) {\n\tif ((error ?? '') == '') {\n\t\tctx.container.appendChild(document.createTextNode('空页面'));\n\t\treturn;\n\t}\n\tconst e = (typeof error === 'number' || typeof error === 'string')\n\t\t&& Object.hasOwn(errors, error) && errors[error]\n\t\t|| errors['404'];\n\tconst title = e?.title || 'Error';\n\tconst info = e?.description;\n\tconst errorContainer = document.createElement('div');\n\tconst main = errorContainer.appendChild(document.createElement('div'));\n\tconst titleDiv = main.appendChild(document.createElement('div'));\n\tconst infoDiv = main.appendChild(document.createElement('div'));\n\terrorContainer.style.marginBlock = '8%';\n\terrorContainer.style.marginInline = 'auto';\n\terrorContainer.style.inlineSize = '600px';\n\terrorContainer.style.maxInlineSize = '100%';\n\terrorContainer.style.padding = '20px';\n\ttitleDiv.style.paddingBlock = '20px';\n\ttitleDiv.style.fontSize = '20px';\n\ttitleDiv.style.color = '#8e8e8e';\n\ttitleDiv.style.textAlign = 'center';\n\tinfoDiv.style.fontSize = '13px';\n\tinfoDiv.style.lineHeight = '1.3em';\n\tinfoDiv.style.color = '#b5b5b5';\n\ttitleDiv.appendChild(document.createTextNode(title));\n\tctx.title = title || 'Error';\n\tif (info && typeof info === 'string') {\n\t\tfor (const p of info.split('\\n')) {\n\t\t\tinfoDiv.appendChild(document.createTextNode(p));\n\t\t\tinfoDiv.appendChild(document.createElement('br'));\n\t\t}\n\t}\n\tctx.container.appendChild(errorContainer);\n\tctx.loading = false;\n}\n","import { cssPrefix } from '../styles/variables.mjs';\n\nexport const prefix = `${cssPrefix}-allSider-nav`\n\nexport const header = document.createElement('header');\nheader.className = `${prefix}-header`;\nexport const actions = header.appendChild(document.createElement('div'));\nactions.classList.add(`${prefix}-actions`)\nexport const sidebar = header.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n","import { prefix, sidebar } from './dom.mjs';\nconst openedClassName = `${prefix}-open`\n/** @type {(() => void)?} */\nlet current = null;\n\nexport function closeSidebarWhenMobile() {\n\tif (window.innerWidth > 800) { return; }\n\tcurrent?.();\n}\n\nexport default class Sider {\n\t/** @readonly @type {HTMLElement} */\n\tbutton;\n\t/** @readonly @type {HTMLElement} */\n\tsider;\n\t/** @type {() => void} */\n\t#hide;\n\n\t#disabled = false;\n\tget disabled() { return this.#disabled; }\n\tset disabled(v) {\n\t\tif (v) {\n\t\t\tthis.disable();\n\t\t} else {\n\t\t\tthis.enable();\n\t\t}\n\t}\n\tdisable() {\n\t\tif (this.#disabled) { return; }\n\t\tthis.#disabled = true;\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t}\n\t\tthis.button.hidden = true;\n\t\tthis.sider.hidden = true;\n\t\t// TODO: 隐藏分组\n\t}\n\tenable() {\n\t\tif (!this.#disabled) { return; }\n\t\tthis.#disabled = false;\n\t\tthis.button.hidden = false;\n\t\t// TODO: 显示分组\n\t}\n\t#click = () => this.toggle()\n\t/**\n\t * \n\t * @param {HTMLElement} [siderContainer] \n\t * @param {HTMLElement} [buttonContainer] \n\t */\n\tconstructor(siderContainer, buttonContainer) {\n\t\tconst button = buttonContainer instanceof HTMLElement\n\t\t\t? buttonContainer\n\t\t\t: document.createElement('div');\n\t\tconst sider = siderContainer instanceof HTMLElement\n\t\t\t? siderContainer\n\t\t\t: document.createElement('div');\n\t\tbutton.tabIndex = 0\n\t\tbutton.classList.add(`${prefix}-button`)\n\t\tsider.hidden = true;\n\t\tsidebar.appendChild(sider);\n\t\tbutton.classList.add(`${prefix}-selectable`)\n\t\tconst hide = () => {\n\t\t\tcurrent = null;\n\t\t\tdocument.body.classList.remove(openedClassName);\n\t\t\tbutton.classList.remove(`${prefix}-selected`);\n\t\t\tsider.hidden = true;\n\t\t}\n\t\tbutton.addEventListener('click', this.#click);\n\t\tthis.#hide = hide;\n\t\tthis.button = button;\n\t\tthis.sider = sider;\n\t}\n\tget open() { return current === this.#hide; }\n\tset open(p) {\n\t\tif (p) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\tshow() {\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) { return }\n\t\tcurrent?.();\n\t\tcurrent = hide;\n\t\tdocument.body.classList.add(openedClassName);\n\t\tthis.button.classList.add(`${prefix}-selected`);\n\t\tthis.sider.hidden = false;\n\t}\n\ttoggle() {\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t\treturn\n\t\t}\n\t\tthis.show();\n\t}\n\thide() {\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current !== hide) { return }\n\t\thide();\n\t}\n\tremove() {\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t}\n\t\tconst {button, sider} = this;\n\t\tbutton.remove();\n\t\tsider.remove();\n\t\tbutton.classList.remove(`${prefix}-button`)\n\t\tbutton.classList.remove(`${prefix}-selectable`)\n\t\tbutton.removeEventListener('click', this.#click);\n\t\tsider.hidden = false;\n\t\t// TODO: ...\n\t\t// TODO: 隐藏分组\n\t}\n}\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return }\n\tcurrent?.();\n})\n","import Sider, { closeSidebarWhenMobile } from './Sider.mjs';\nimport { prefix } from './dom.mjs';\n\n\n\nexport default class Group {\n\t/** @readonly */\n\troot = document.createElement('div');\n\t/** @type {Set<() => void>} */\n\t#children = new Set()\n\t/**\n\t * \n\t * @param {HTMLElement} parent \n\t */\n\tconstructor(parent) {\n\t\tconst root = this.root;\n\t\tparent.appendChild(root);\n\t\troot.className = `${prefix}-group`;\n\t}\n\tremove() {\n\t\tthis.root.remove();\n\t\tfor (const r of [...this.#children]) {\n\t\t\tr();\n\t\t}\n\t}\n\tcreateGroup() {\n\t\tconst group = new Group(this.root);\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); group. remove(); }\n\t\tchildren.add(remove);\n\t\treturn group;\n\t}\n\t/**\n\t * \n\t * @overload\n\t * @param {true} isLink \n\t * @returns {HTMLAnchorElement}\n\t */\n\t/**\n\t * \n\t * @overload\n\t * @param {boolean} [isLink] \n\t * @returns {HTMLElement}\n\t */\n\t/**\n\t * \n\t * @param {boolean} [isLink] \n\t * @returns {HTMLElement}\n\t */\n\tcreateAction(isLink) {\n\t\tconst btn = document.createElement(isLink ? 'a' : 'div');\n\t\tbtn.tabIndex = 0;\n\t\tbtn.classList.add(`${prefix}-button`);\n\t\tbtn.addEventListener('click', () => { closeSidebarWhenMobile(); });\n\t\tthis.root.appendChild(btn);\n\n\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); btn.remove(); }\n\t\tchildren.add(remove);\n\t\treturn btn;\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} [siderContainer] \n\t * @param {HTMLElement} [buttonContainer] \n\t */\n\tcreateSider(siderContainer, buttonContainer) {\n\t\tconst sider = new Sider(siderContainer, buttonContainer);\n\t\tthis.root.appendChild(sider.button);\n\n\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); sider.remove(); }\n\t\tchildren.add(remove);\n\t\treturn sider;\n\t}\n}\n","import Group from './Group.mjs';\nimport { actions } from './dom.mjs';\nexport const pageSiderContainer = document.createElement('div');\nexport const startGroup = new Group(actions);\nexport const pageGroup = new Group(actions);\nexport const mainGroup = new Group(actions);\nexport const span = actions.appendChild(document.createElement('span'));\nexport const endGroup = new Group(actions);\n\nexport const pageSider = pageGroup.createSider(pageSiderContainer);\npageSider.button.innerText = '页面';\npageSider.disabled = true;\n","import { pageSider, pageSiderContainer } from './sides.mjs';\n\nimport { PageSider, Page } from '@yongdall/web';\n\n\nclass Sider extends PageSider {\n\t#page;\n\t#parent;\n\t/**\n\t * @param {AllSiderPage} page \n\t * @param {ParentNode} parent \n\t * @param {Node?} next \n\t * @param {boolean} inserted \n\t * @param {AbortSignal} signal \n\t * @param {ParentNode} parent \n\t * @returns \n\t */\n\tconstructor(page, parent, next, inserted, signal) {\n\t\tsuper(parent, next, inserted, signal);\n\t\tthis.#page = page;\n\t\tthis.#parent = parent;\n\t\tsignal.addEventListener('abort', () => {\n\t\tthis.#hidden();\n\t\t})\n\t}\n\tinsert() {\n\t\tsuper.insert();\n\n\t\tif (this.#page.show) { pageSider.disabled = false; }\n\t}\n\t#hidden() {\n\t\tif (this.#page.show && !this.#parent.children.length) {\n\t\t\tpageSider.disabled = true;\n\t\t}\n\t}\n\tremove() {\n\t\tsuper.remove();\n\t\tthis.#hidden();\n\t}\n\n}\n\nexport default class AllSiderPage extends Page {\n\t#sides = (() => {\n\t\tconst sides = document.createElement('div');\n\t\tsides.classList.add('Page-sides');\n\t\tpageSiderContainer.appendChild(sides);\n\t\treturn sides;\n\t})();\n\tdestroy() {\n\t\tif (!super.destroy()) { return false; }\n\t\tthis.#sides.remove();\n\t\treturn true;\n\t}\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\ttoggle(show) {\n\t\tsuper.toggle(show);\n\t\t// TODO: 区别区域\n\t\tpageSider.disabled = !(show && this.#sides.children.length);\n\t}\n\tget siderOpen() { return pageSider.open; }\n\tset siderOpen(open) {\n\t\t// TODO: 判断是不是当前的\n\t\tif (open) {\n\t\t\tpageSider.show();\n\t\t} else {\n\t\t\tpageSider.hide();\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageSider}\n\t */\n\tcreateSider(inserted, signal) {\n\t\tif (this.destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tsignal?.throwIfAborted();\n\t\tconst parent = this.#sides;\n\t\treturn new Sider(\n\t\t\tthis,\n\t\t\tparent,\n\t\t\tnull,\n\t\t\tinserted !== false,\n\t\t\tsignal instanceof AbortSignal\n\t\t\t\t? AbortSignal.any([signal, this.signal])\n\t\t\t\t: this.signal\n\t\t);\n\t}\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\tconstructor(show) {\n\t\tsuper(show);\n\t\tif (show) {\n\t\t\tpageSider.disabled = !this.#sides.children.length;\n\t\t}\n\t}\n}\n","import '@neeloong/components';\n/** @import { Menu } from '@yongdall/web' */\n/** @import { Menu as NeeloongMenu } from '@neeloong/components'*/\n\n\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu.RendererOptions} options \n */\nexport default function createMenu(menus, options) {\n\tconst {create} = options;\n\t/** @type {NeeloongMenu} */\n\t// @ts-ignore\n\tconst parent = document.createElement('nl-menu');\n\tlet has = false;\n\tlet divider = false;\n\tconst createDivider = () => {\n\t\thas = true;\n\t\tif (!divider) { return; }\n\t\tdivider = false;\n\t\tparent.appendChild(document.createElement('hr'));\n\t};\n\tfor (const menu of menus) {\n\t\tif (!menu) {\n\t\t\tif (!has) { continue; }\n\t\t\tdivider = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst { children } = menu;\n\t\tif (!children?.length) {\n\t\t\tconst result = create(menu);\n\t\t\tif (!result) { continue; }\n\t\t\tcreateDivider();\n\t\t\tparent.appendChild(result);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = createMenu(children, options);\n\t\tif (!child) { continue; }\n\t\tcreateDivider();\n\n\t\tconst item = parent.appendChild(child);\n\t\tconst header = item.insertBefore(document.createElement('div'), item.firstChild);\n\t\theader.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\theader.slot = 'label';\n\t}\n\tif (!has) { return null; }\n\treturn parent;\n}\n","import '@neeloong/components';\nimport createMenu from './createMenu.mjs';\n/** @import { Menu } from '@yongdall/web' */\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu.RendererOptions} options \n */\nexport default function createMenuButtons(menus, options) {\n\tif (options.signal.aborted) { return null; }\n\tconst {create} = options;\n\tconst root = document.createElement('div');\n\tlet has = false;\n\tlet divider = false;\n\tconst createDivider = () => {\n\t\thas = true;\n\t\tif (!divider) { return; }\n\t\tdivider = false;\n\t\troot.appendChild(document.createElement('hr'));\n\t};\n\tfor (const menu of menus) {\n\t\tif (!menu) {\n\t\t\tif (!has) { continue; }\n\t\t\tdivider = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst { children } = menu;\n\t\tif (!children?.length) {\n\t\t\tconst button = create(menu, { button: true });\n\t\t\tif (!button) { continue; }\n\t\t\tcreateDivider();\n\t\t\troot.appendChild(button);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = createMenu(children, options);\n\t\tif (!child) { continue; }\n\t\tcreateDivider();\n\t\tconst button = root.appendChild(document.createElement('button'));\n\t\tbutton.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\tchild.targetElement = button;\n\t\tbutton.addEventListener('click', () => child.show?.());\n\t\troot.appendChild(child);\n\t}\n\tif (!root.childNodes.length) { return null; }\n\troot.classList.add('MenuButtons');\n\treturn root;\n}\n","import { Application, createComputed, effect, isMac } from '@yongdall/web';\n/** @import { Menu } from '@yongdall/web' */\n\n\n/**\n * \n * @param {Menu.Renderer.Command} item \n */\nfunction getUri(item) {\n\tconst { page } = item;\n\tif (page) {\n\t\tconst { path } = item;\n\t\treturn new URL(path?.[0] === '/' ? `${page}${path}` : `${page}/${path || ''}`, Application.root).href;\n\t}\n\tconst { uri } = item;\n\tif (uri) { return uri; }\n\treturn null;\n}\n/**\n * \n * @param {Menu} menu \n * @param {Menu.Renderer.Options} options \n * @returns {HTMLElement}\n */\nexport default function createMenuItem(menu, options) {\n\tconst { signal, button: isButton } = options;\n\tconst link = document.createElement('a');\n\tconst button = isButton ? document.createElement('button') : null;\n\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\n\tconst { commands } = options;\n\n\tconst disabled = createComputed(() => {\n\t\tif (menu.disabled) { return true; }\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn Boolean(cmd ? cmd.disabled : options.disabled(menu));\n\t});\n\n\tconst href = createComputed(() => {\n\t\tconst href = getUri(menu);\n\t\tif (href) { return href; }\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn cmd ? getUri(cmd) || null : options.uri(menu) || null;\n\t});\n\tfunction click() {\n\t\tconst { click } = menu;\n\t\tif (typeof click === 'function') { return click(); }\n\t\tconst { script } = menu;\n\t\tif (script) {\n\t\t\t// TODO:\n\t\t\treturn;\n\t\t}\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn cmd ? cmd.click?.() : options.click(menu);\n\t}\n\teffect(() => {\n\t\tconst isDisabled = disabled.get();\n\t\t// @ts-ignore\n\t\tlink.disabled = isDisabled;\n\t\tlink.ariaDisabled = isDisabled ? 'true' : 'false';\n\t\tif (isDisabled) {\n\t\t\tlink.removeAttribute('tabindex');\n\t\t\tlink.removeAttribute('href');\n\t\t\tlink.removeAttribute('target');\n\t\t} else {\n\t\t\tlink.tabIndex = 0;\n\t\t\tlet target = '';\n\t\t\tconst hrefValue = href.get();\n\t\t\tif (hrefValue) {\n\t\t\t\tlink.href = hrefValue;\n\t\t\t\ttarget = menu.target || (menu.page ? '_self' : '');\n\t\t\t}\n\t\t\tif (target) {\n\t\t\t\tlink.target = target;\n\t\t\t} else {\n\t\t\t\tlink.removeAttribute('target');\n\t\t\t}\n\t\t}\n\t\tif (button) {\n\t\t\tbutton.disabled = isDisabled;\n\t\t}\n\t}, signal);\n\tlink.addEventListener('click', (e) => {\n\t\tif (!disabled.get()) { return; }\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}, { capture: true });\n\tlink.addEventListener('click', (e) => {\n\t\tif (disabled.get()) { return; }\n\t\tif (e.defaultPrevented) { return; }\n\t\tif (href.get()) {\n\t\t\tif (e.shiftKey) { return; }\n\t\t\tif (isMac ? e.metaKey : e.ctrlKey) { return; }\n\t\t\tif (e.altKey) { return; }\n\t\t}\n\t\tif (click() === false) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\tif (button) {\n\t\tbutton.appendChild(link);\n\t\treturn button;\n\t}\n\treturn link;\n\n}\n","import '@neeloong/components';\nimport createMenu from './createMenu.mjs';\nimport { createIcon } from '@yongdall/web';\n/** @import { Menu } from '@yongdall/web' */\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu?} menu\n * @param {Menu.RendererOptions} options \n */\nexport default function createMenuButton(menus, menu, options) {\n\tconst root = document.createElement('div');\n\tconst child = createMenu(menus, options);\n\tif (!child) { return null; }\n\tconst button = root.appendChild(document.createElement('button'));\n\tconst label = menu?.label || menu?.title || '';\n\tif (label) {\n\t\tbutton.appendChild(document.createTextNode(label));\n\t} else {\n\t\tbutton.appendChild(createIcon(menu?.icon || 'more', options.signal));\n\t}\n\tchild.targetElement = button;\n\tbutton.addEventListener('click', () => child.show());\n\troot.appendChild(child);\n\treturn root;\n}\n","/** @import { Theme } from '@yongdall/web' */\nimport { Application, createFrame, createIcon, ErrorAlerter, root as rootContainer } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport pageManager, { activityContainer, setMode } from '../pageManager/index.mjs';\n\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport { actions, header } from './dom.mjs';\nimport { closeSidebarWhenMobile } from './Sider.mjs';\nimport { endGroup, startGroup } from './sides.mjs';\nimport AllSiderPage from './AllSiderPage.mjs';\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\n\n\n\n/**\n * \n * @type {Theme}\n */\nexport default {\n\ttitle(p) { return [p.title, Application.title || '拥道YongDall'].filter(Boolean).join(' | ') },\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager,\n\telements: [rootContainer, header],\n\tclassNames: [cssPrefix, `${cssPrefix}-allSider`],\n\tstyleFiles: ['theme-allSider.css'],\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new AllSiderPage(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tsetup(signal) {\n\t\tsetMode(false);\n\t\tlogoLink.addEventListener('click', () => { closeSidebarWhenMobile(); }, {signal});\n\t\tactions.insertBefore(logoLink, actions.firstElementChild);\n\n\t\tconst workspaceSider = startGroup.createSider(menuContainer);\n\t\tworkspaceSider.button.appendChild(createIcon('menu', signal));\n\t\tworkspaceSider.button.title = '菜单';\n\t\tconst activitySider = startGroup.createSider(activityContainer);\n\t\tactivitySider.button.appendChild(createIcon('activity', signal));\n\t\tactivitySider.button.title = '活动';\n\t\tif (window.innerWidth > 800) {\n\t\t\tworkspaceSider.show();\n\t\t}\n\n\t\tconst userSider = endGroup.createSider(userContainer, userButton);\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\tworkspaceSider.remove();\n\t\t\tactivitySider.remove();\n\t\t\tuserSider.remove();\n\t\t}, {once: true});\n\t},\n\n};\n","/** @import { State, Theme } from '@yongdall/web' */\nimport { createFrame, createTick, ErrorAlerter, Page, root as rootContainer } from '@yongdall/web';\nimport { Application, createIcon, effect } from '@yongdall/web';\n\nimport { cssPrefix } from '../styles/variables.mjs';\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\n\n\n\nconst prefix = `${cssPrefix}-base`;\nconst styleFiles = ['theme-base.css'];\n\nconst header = document.createElement('header');\nconst actions = header.appendChild(document.createElement('div'));\nactions.classList.add(`${prefix}-header`);\nconst sidebar = header.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n\nconst menuButton = actions.appendChild(createIcon('menu', true));\nmenuButton.classList.add(`${prefix}-menu-button`);\n\nconst span = actions.appendChild(document.createElement('span'));\n\nconst openedClassName = `${prefix}-menu-open`;\n\nmenuButton.addEventListener('click', () => {\n\tdocument.body.classList.toggle(openedClassName);\n});\n\n\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tdocument.body.classList.remove(openedClassName);\n});\n\n\n/** @type {State<number>?} */\nlet tick = null;\nconst spinner = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\n/**\n * \n * @type {Theme}\n */\nexport default {\n\ttitle(p) {\n\t\treturn [[\n\t\ttick && p.loading ? spinner[tick.get() % spinner.length] : '',\n\t\tp.unsaved ? '🔴' : '',\n\t\tp.title,\n\t].join(''), Application.title || '拥道YongDall'].filter(Boolean).join(' | ') },\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager(page) {\n\t\tlet shown = false;\n\t\teffect(() => {\n\t\t\tif (!page.current) {\n\t\t\t\tif (shown) { page.destroy(); }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tshown = true;\n\t\t}, page.signal);\n\t},\n\telements: [header, rootContainer],\n\tclassNames: [cssPrefix, prefix],\n\tstyleFiles,\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tsetup(signal) {\n\t\ttick = createTick(80, signal);\n\t\tlogoLink.addEventListener('click', () => {\n\t\t\tif (window.innerWidth > 800) { return; }\n\t\t\tdocument.body.classList.remove(openedClassName);\n\t\t}, { signal });\n\n\t\tconst titleSpan = document.createElement('div');\n\t\ttitleSpan.classList.add(`${prefix}-header-title`);\n\t\teffect(() => {\n\t\t\ttitleSpan.innerText = Application.title || Application.company || '';\n\t\t}, signal);\n\t\tactions.insertBefore(logoLink, span);\n\t\tactions.insertBefore(titleSpan, span);\n\n\t\tif (window.innerWidth > 800) {\n\t\t\tdocument.body.classList.add(openedClassName);\n\t\t}\n\n\t\tsidebar.appendChild(menuContainer);\n\n\n\t\tdocument.body.appendChild(userContainer);\n\t\tuserContainer.setAttribute('popover', 'auto');\n\t\tuserButton.addEventListener('click', () => { userContainer.showPopover(); }, { signal });\n\n\t\tactions.appendChild(userButton);\n\n\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\ttitleSpan.remove();\n\t\t\tmenuContainer.remove();\n\t\t\tuserContainer.removeAttribute('popover');\n\t\t\tuserContainer.remove();\n\t\t\tuserButton.remove();\n\t\t}, { once: true });\n\t},\n\n};\n","import { createIcon } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\n\nexport const prefix = `${cssPrefix}-tabs`;\n\nexport const header = document.createElement('header');\nexport const actions = header.appendChild(document.createElement('div'));\nactions.classList.add(`${prefix}-header`);\nexport const sidebar = header.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n\nconst menuButton = actions.appendChild(createIcon('menu', true));\nmenuButton.classList.add(`${prefix}-menu-button`);\n\nexport const span = actions.appendChild(document.createElement('span'));\n\n\nexport const openedClassName = `${prefix}-menu-open`;\n\nmenuButton.addEventListener('click', () => {\n\tdocument.body.classList.toggle(openedClassName);\n});\n\n\nexport function closeSidebarWhenMobile() {\n\tif (window.innerWidth > 800) { return; }\n\tdocument.body.classList.remove(openedClassName);\n}\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tdocument.body.classList.remove(openedClassName);\n});\n","/** @import { Theme } from '@yongdall/web' */\nimport { Application, createFrame, effect, ErrorAlerter, Page, root as rootContainer } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport pageManager, { activityContainer, setMode } from '../pageManager/index.mjs';\n\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport { actions, closeSidebarWhenMobile, openedClassName, prefix, span } from './dom.mjs';\nimport { header, sidebar } from './dom.mjs';\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\n\n\n\n/**\n * \n * @type {Theme}\n */\nexport default {\n\ttitle(p) { return [p.title, Application.title || '拥道YongDall'].filter(Boolean).join(' | ') },\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager,\n\telements: [header, rootContainer],\n\tclassNames: [cssPrefix, `${cssPrefix}-tabs`],\n\tstyleFiles: ['theme-tabs.css'],\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error);},\n\tsetup(signal) {\n\t\tsetMode(true);\n\t\tlogoLink.addEventListener('click', () => { closeSidebarWhenMobile(); }, {signal});\n\n\t\tconst titleSpan = document.createElement('div');\n\t\ttitleSpan.classList.add(`${prefix}-header-title`);\n\t\teffect(() => {\n\t\t\ttitleSpan.innerText = Application.title || Application.company || '';\n\t\t}, signal);\n\t\t\n\t\tactions.insertBefore(logoLink, span);\n\t\tactions.insertBefore(titleSpan, span);\n\t\theader.appendChild(activityContainer);\n\n\t\tif (window.innerWidth > 800) {\n\t\t\tdocument.body.classList.add(openedClassName);\n\t\t}\n\n\t\tsidebar.appendChild(menuContainer);\n\n\n\t\tdocument.body.appendChild(userContainer);\n\t\tuserContainer.setAttribute('popover', 'auto')\n\t\tuserButton.addEventListener('click', () => { userContainer.showPopover(); }, {signal});\n\n\t\tactions.appendChild(userButton);\n\n\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\ttitleSpan.remove();\n\t\t\tactivityContainer.remove();\n\t\t\tmenuContainer.remove();\n\t\t\tuserContainer.removeAttribute('popover')\n\t\t\tuserContainer.remove();\n\t\t\tuserButton.remove();\n\t\t}, {once: true});\n\t},\n\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["prefix","#table","#thead","#createUrl","#renderList","#labelPattern","#fieldsShow","#idFields","#tr","#tbody","#documents","Pagination","#fns","#pagination","filter","header","main","allMenus","currentMenus","ac","prefix","header","sidebar","openedClassName","prefix","closeSidebarWhenMobile","Sider","#disabled","#hide","#shown","#click","sidebar","prefix","#children","Sider","span","#page","#parent","#hidden","#sides","addButton","theme","rootContainer","header","prefix","headerEl","header","sidebar","menuButton","span","openedClassName","theme","rootContainer","rootContainer"],"sources":["../../packages/theme/styles/variables.mjs","../../packages/theme/pageManager/index.mjs","../../packages/theme/components/List.mjs","../../packages/theme/components/Pagination.mjs","../../packages/theme/home/index.mjs","../../packages/theme/menu/createNavMenu.mjs","../../packages/theme/workspace/index.mjs","../../packages/theme/user/userAvatar.mjs","../../packages/theme/user/index.mjs","../../packages/theme/logo.mjs","../../packages/theme/error/index.mjs","../../packages/theme/theme-allSider/dom.mjs","../../packages/theme/theme-allSider/Sider.mjs","../../packages/theme/theme-allSider/Group.mjs","../../packages/theme/theme-allSider/sides.mjs","../../packages/theme/theme-allSider/AllSiderPage.mjs","../../packages/theme/menu/createMenu.mjs","../../packages/theme/menu/createMenuButtons.mjs","../../packages/theme/menu/createMenuItem.mjs","../../packages/theme/menu/createMenuButton.mjs","../../packages/theme/theme-allSider/index.mts","../../packages/theme/utils/addButton.mts","../../packages/theme/theme-base/index.mts","../../packages/theme/theme-tabs/dom.mjs","../../packages/theme/theme-tabs/index.mts"],"sourcesContent":["export const cssPrefix = `YongDallTheme`;\n","import { effect, waitAbortSignal } from '@yongdall/web';\n/** @import { PageHandle, PageManager } from '@yongdall/web' */\nimport { cssPrefix } from '../styles/variables.mjs';\nconst prefix = `${cssPrefix}-activity`;\n\nexport const activityContainer = document.createElement('div');\nactivityContainer.classList.add(prefix);\n\n\n\n/**\n * @typedef {object} ButtonProxy\n * @property {HTMLElement} button\n * @property {HTMLAnchorElement} link\n * @property {ButtonProxy} [last]\n * @property {ButtonProxy} [next]\n */\n\n/** @type {Map<PageHandle, ButtonProxy>} */\nconst buttons = new Map();\n/** @type {ButtonProxy | undefined} */\nlet first;\nlet append = false;\n/**\n * \n * @param {boolean} a \n */\nexport function setMode(a){\n\tappend = a;\n}\n/** @type {PageManager} */\nconst pageManager = (page) => {\n\tconst button = document.createElement('div');\n\tbutton.classList.add(`${prefix}-page`);\n\tconst link = button.appendChild(document.createElement('a'));\n\tlink.classList.add(`${prefix}-title`);\n\tlink.href = page.href;\n\tlink.innerText = page.title;\n\tconst close = button.appendChild(document.createElement('button'));\n\tclose.type = 'button';\n\tclose.classList.add(`${prefix}-close`);\n\tclose.addEventListener('click', () => {\n\t\tpage.destroy();\n\t});\n\t/** @type {ButtonProxy} */\n\tconst btn = {\n\t\tbutton, link,\n\t\tnext: first,\n\t};\n\tif (first) { first.last = btn; }\n\tfirst = btn;\n\tbuttons.set(page, btn);\n\tactivityContainer.insertBefore(button, append ? null : activityContainer.firstChild);\n\n\teffect(() => { link.innerText = page.title; }, page.signal);\n\teffect(() => { link.href = page.href; }, page.signal);\n\n\teffect(() => {\n\t\tif (page.current) {\n\t\t\tbutton.classList.add(`${prefix}-current`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-current`);\n\t\t}\n\t}, page.signal);\n\teffect(() => {\n\t\tif (page.loading) {\n\t\t\tbutton.classList.add(`${prefix}-loading`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-loading`);\n\t\t}\n\t}, page.signal);\n\teffect(() => {\n\t\tif (page.unsaved) {\n\t\t\tbutton.classList.add(`${prefix}-unsaved`);\n\t\t} else {\n\t\t\tbutton.classList.remove(`${prefix}-unsaved`);\n\t\t}\n\t}, page.signal);\n\twaitAbortSignal(page.signal).then(() => {\n\t\tconst { last, next } = btn;\n\t\tif (last) { last.next = next; }\n\t\tif (next) { next.last = last; }\n\t\tif (first === btn) { first = next; }\n\t\tbutton.remove();\n\t});\n};\nexport default pageManager;\n","/** @import { FieldScriptConfiguration, ModelScriptConfiguration } from '@yongdall/web' */\nimport { createShowField, Pattern } from '@yongdall/web';\n\n\nexport default class List {\n\t/** @type {((id: string) => string)?} */\n\t#createUrl;\n\t/** @type {readonly [string, FieldScriptConfiguration][]} */\n\t#fieldsShow;\n\t/** @type {string} */\n\t#labelPattern;\n\t/** @type {string[]} */\n\t#idFields;\n\t/** @type {readonly any[]} */\n\t#documents = [];\n\t#table = document.createElement('table');\n\t#thead = this.#table.appendChild(document.createElement('thead'));\n\t#tr = this.#thead.appendChild(document.createElement('tr'));\n\t#tbody = this.#table.appendChild(document.createElement('tbody'));\n\tget root() { return this.#table }\n\tget createUrl() {\n\t\treturn this.#createUrl;\n\t}\n\tset createUrl(fn) {\n\t\tconst createUrl = typeof fn === 'function' ? fn : null;\n\t\tif (this.#createUrl === createUrl) { return }\n\t\tthis.#createUrl = createUrl;\n\t\tthis.#renderList();\n\t}\n\t/**\n\t * \n\t * @param {(id: string) => string} createUrl \n\t * @param {ModelScriptConfiguration} model \n\t */\n\tconstructor(createUrl, model) {\n\t\tconst fieldsShow = Object.entries(model.fields).filter(([,{type}]) => type && typeof type !== 'object');\n\t\tconst idFields = Object.entries(model.fields).filter(([,v]) => v.primary).map(([v]) => v);\n\t\tconst labelPattern = model.labelPattern || '';\n\t\tthis.#labelPattern = labelPattern;\n\t\tthis.#createUrl = typeof createUrl === 'function' ? createUrl : null;\n\t\tthis.#fieldsShow = fieldsShow;\n\t\tthis.#idFields = idFields;\n\t\tconst tr = this.#tr;\n\t\ttr.innerHTML = '';\n\t\tconst th = tr.appendChild(document.createElement('th'));\n\t\tth.appendChild(document.createTextNode('#'));\n\t\tfor (const [name,field] of fieldsShow) {\n\t\t\tconst th = tr.appendChild(document.createElement('th'));\n\t\t\tth.appendChild(document.createTextNode(field.label || name));\n\t\t}\n\t}\n\t#renderList() {\n\t\tconst tbody = this.#tbody;\n\t\ttbody.innerHTML = '';\n\t\tconst idFields = this.#idFields;\n\t\tconst labelPattern = this.#labelPattern;\n\t\tconst fieldsShow = this.#fieldsShow;\n\t\tconst createUrl = this.#createUrl;\n\t\tfor (const r of this.#documents) {\n\t\t\tconst tr = tbody.appendChild(document.createElement('tr'));\n\t\t\tconst td = tr.appendChild(document.createElement('td'));\n\t\t\tconst label = Pattern.generate(labelPattern, r) || idFields.map(v => r[v]).join('$')\n\t\t\tif (createUrl) {\n\t\t\t\tconst a = td.appendChild(document.createElement('a'));\n\t\t\t\ta.href = createUrl(idFields.map(v => r[v]).join('$'));\n\t\t\t\ta.appendChild(document.createTextNode(label));\n\t\t\t} else {\n\t\t\t\ttd.appendChild(document.createTextNode(label));\n\t\t\t}\n\t\t\tfor (const [name,field] of fieldsShow) {\n\t\t\t\tconst td = tr.appendChild(document.createElement('td'));\n\t\t\t\tconst f = createShowField(name, field, {inline: true}, r);\n\t\t\t\ttd.appendChild(f.root);\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {readonly any[]} list \n\t */\n\tsetData(list) {\n\t\tthis.#documents = list;\n\t\tthis.#renderList();\n\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n","import { Pagination as NlPagination } from '@neeloong/components'\n\nexport default class Pagination {\n\t#fns;\n\t#pagination;\n\tconstructor() {\n\t\tconst pagination = /** @type {NlPagination} */(document.createElement('nl-pagination'));\n\t\tpagination.size = 20;\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"start\";\n\t\tpagination.appendChild(document.createTextNode('-'));\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"end\";\n\t\tpagination.appendChild(document.createTextNode('/'));\n\t\tpagination.appendChild(/** @type {NlPagination.Value} */(document.createElement('nl-pagination-value'))).name=\"total\";\n\t\tpagination.appendChild(document.createElement('nl-pagination-prev')).innerText = '上一页';\n\t\tpagination.appendChild(document.createElement('nl-pagination-pager'));\n\t\tpagination.appendChild(document.createElement('nl-pagination-next')).innerText = '下一页';\n\t\tpagination.appendChild(document.createElement('nl-pagination-sizer'));\n\t\tconst fns = new Set();\n\t\t\n\t\tpagination.addEventListener('change', () => {\n\t\t\tfor (const fn of fns) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t})\n\t\tthis.#fns = fns;\n\t\tthis.#pagination = pagination;\n\n\t}\n\tget root() {return this.#pagination; }\n\tget size() { return this.#pagination.size}\n\tset size(v) { this.#pagination.size = v}\n\tget page() { return this.#pagination.page}\n\tset page(v) { this.#pagination.page = v}\n\tget total() { return this.#pagination.total}\n\tset total(v) { this.#pagination.total = v}\n\t/**\n\t * \n\t * @param {(p: Pagination) => void} listen \n\t * @returns {() => void}\n\t */\n\tlisten(listen) {\n\t\tconst fns = this.#fns;\n\t\tconst f = () => listen(this);\n\t\tfns.add(f);\n\t\treturn () => {fns.delete(f)}\n\t}\n\tdestroy() {\n\t\t\n\t}\n}\n","/** @import { HomeContext } from '@yongdall/web' */\n/**\n *\n * @param {string} href\n * @param {string} title\n */\nfunction createLink(href, title) {\n\tconst a = document.createElement('a');\n\ta.href = href;\n\ta.title = title;\n\ta.style.display = 'block';\n\ta.appendChild(document.createTextNode(title));\n\treturn a;\n}\n\n\n/**\n * @param {HTMLElement} container\n */\nfunction renderHome(container) {\n}\n\n\n/**\n * \n * @param {HomeContext} homeContext \n */\nexport default function home(homeContext) {\n\thomeContext.listen('update', () => {\n\t\tconst { container } = homeContext;\n\t\tcontainer.innerHTML = '';\n\t\treturn renderHome(container);\n\t});\n}\n","import '@neeloong/components';\n/** @import { Menu } from '@yongdall/web' */\n/** @import {Collapse} from '@neeloong/components' */\nimport { Application, createNeverAbortedSignal, Ident, PageIdent, watch } from '@yongdall/web';\n\n\n\n/**\n * \n * @param {string} active \n * @param {Map<string, HTMLElement[]>} menuMap \n * @param {Map<string, [HTMLElement, number: number][]>} pathMenuMap \n * @returns {IterableIterator<HTMLElement[]>}\n */\nfunction* toFindPath(active, menuMap, pathMenuMap) {\n\tif (!active) { return; }\n\tconst index = active.indexOf('?');\n\tconst path = index < 0 ? active : active.slice(0, index);\n\tif (index >= 0 && index + 1 < active.length) {\n\t\tfor (const list = active.slice(index).split('&'); list.length; list.pop()) {\n\n\t\t\tconst menus = menuMap.get(`${path}${list.join('&')}`);\n\t\t\tif (!menus?.length) { continue; }\n\t\t\tyield menus;\n\t\t}\n\n\t}\n\n\tconst menus = menuMap.get(path);\n\tif (menus?.length) { yield menus; }\n\tconst pathMenus = pathMenuMap.get(path);\n\tif (pathMenus?.length) { yield pathMenus.map(v => v[0]); }\n}\n\n\n\n/**\n * \n * @param {string} active \n * @param {Map<string, HTMLElement[]>} menuMap \n * @param {Map<string, [HTMLElement, number: number][]>} pathMenuMap \n * @param {PageIdent?} ident \n * @param {Map<string, HTMLElement[]>} identMap \n * @returns {IterableIterator<HTMLElement[]>}\n */\nfunction* findMenu(active, menuMap, pathMenuMap, ident, identMap) {\n\tyield* toFindPath(active, menuMap, pathMenuMap);\n\tif (!ident) { return; }\n\tfor (const p of [...Ident.stringifyPaths(ident)].reverse()) {\n\t\tconst menus = identMap.get(p);\n\t\tif (!menus?.length) { continue; }\n\t\tyield menus;\n\t}\n}\n\n/**\n * \n * @param {HTMLElement} element \n * @returns {Iterable<Text>}\n */\nfunction* findTextNode(element) {\n\tconst walker = document.createTreeWalker(element, NodeFilter.SHOW_TEXT);\n\tfor (let node; node = walker.nextNode();) {\n\t\t// @ts-ignore\n\t\tyield node;\n\t}\n}\n/**\n * \n * @param {string[]} texts \n * @param {HTMLElement} element \n * @returns {Range[]}\n */\nfunction filter(texts, element) {\n\tconst ranges = [];\n\n\tconst textNodes = [...findTextNode(element)].filter(n => n.nodeValue?.length);\n\tconst indexes = textNodes.reduce((list, currentValue) => {\n\t\tconst index = list[list.length - 1]?.[1] || 0;\n\t\treturn /** @type {[number, number, Text][]} */([...list, [\n\t\t\tindex,\n\t\t\tindex + (currentValue.nodeValue?.length || 0),\n\t\t\tcurrentValue,\n\t\t]]);\n\t}, /** @type {[number, number, Text][]} */([]));\n\tconst fullText = textNodes.map(n => n.nodeValue).join('');\n\n\tlet startIndex = 0;\n\tfor (const searchText of texts) {\n\t\tconst index = fullText.indexOf(searchText, startIndex);\n\t\tif (index === -1) { return []; }\n\t\tconst endIndex = index + searchText.length;\n\n\t\tconst start = indexes.findLast(([start]) => start <= index);\n\t\tif (!start) { return []; }\n\t\tconst end = indexes.findLast(([, end]) => end >= endIndex);\n\t\tif (!end) { return []; }\n\t\tstartIndex = index + searchText.length;\n\n\n\t\tconst range = new Range();\n\t\trange.setStart(start[2], index - start[0]);\n\t\trange.setEnd(end[2], endIndex - start[0]);\n\t\tranges.push(range);\n\t}\n\treturn ranges;\n}\n/**\n * \n * @param {Element} root \n * @param {(Menu | null)[]} menus \n * @param {object} [options] \n * @param {string | [string | null | undefined, PageIdent | null | undefined]} [options.active] \n * @param {AbortSignal} [options.signal] \n * @param {string} [options.filter] \n */\nexport default function createNavMenu(root, menus, options = {}) {\n\t/** @type {Map<string, [HTMLElement, number: number][]>} */\n\tconst pathMenuMap = new Map();\n\t/** @type {Map<string, HTMLElement[]>} */\n\tconst menuMap = new Map();\n\t/** @type {Map<string, HTMLElement[]>} */\n\tconst identMap = new Map();\n\t/** @type {HTMLElement?} */\n\tlet current = null;\n\t/** @type {HTMLElement[]} */\n\tconst allMenus = [];\n\t/** @type {(() => void)[]} */\n\tconst destroyList = [];\n\n\t/**\n\t * \n\t * @param {Menu | Menu.Button} menu \n\t * @param {HTMLElement} [el] \n\t */\n\tfunction createLink(menu, el) {\n\t\tconst link = document.createElement('a');\n\t\tconst item = link;\n\t\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\tlink.title = menu.title || '';\n\t\tconst { page, path, uri, target } = menu;\n\t\t/** @type {URL?} */\n\t\tlet url = null;\n\t\tconst ident = page && Ident.parse(page);\n\t\tif (ident) {\n\t\t\turl = new URL(PageIdent.stringify(ident, path), Application.root);\n\t\t\tlink.href = url.href;\n\t\t\tif (target && typeof target === 'string') { link.target = target; }\n\n\t\t} else if (uri) {\n\t\t\tlink.href = uri;\n\t\t\ttry {\n\t\t\t\turl = new URL(uri);\n\t\t\t\tif (url.origin !== location.origin) {\n\t\t\t\t\turl = null;\n\t\t\t\t}\n\t\t\t} catch { }\n\t\t\tif (target !== '') { link.target = target ?? '_blank'; }\n\t\t}\n\t\tif (url && (link.target || '_self') === '_self') {\n\t\t\tlink.addEventListener('click', () => {\n\t\t\t\tclickedItem = item;\n\t\t\t\trequestIdleCallback(() => {\n\t\t\t\t\tif (clickedItem !== item) { return; }\n\t\t\t\t\tclickedItem = null;\n\t\t\t\t});\n\t\t\t});\n\t\t\tconst { pathname: pathname, search } = url;\n\t\t\tconst fullPath = `${pathname}${search}`;\n\t\t\tconst list = menuMap.get(fullPath);\n\t\t\tif (list) {\n\t\t\t\tlist.push(item);\n\t\t\t} else {\n\t\t\t\tmenuMap.set(pathname, [item]);\n\t\t\t}\n\t\t\tconst list2 = pathMenuMap.get(fullPath);\n\t\t\tif (list2) {\n\t\t\t\tlist2.push([item, search.length]);\n\t\t\t} else {\n\t\t\t\tpathMenuMap.set(pathname, [[item, search.length]]);\n\t\t\t}\n\t\t\tif (ident && (!path || path[0] === '?' || path[0] === '#')) {\n\t\t\t\tconst key = Ident.stringify(ident);\n\t\t\t\tconst list = identMap.get(key);\n\t\t\t\tif (list) {\n\t\t\t\t\tlist.push(item);\n\t\t\t\t} else {\n\t\t\t\t\tidentMap.set(key, [item]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn link;\n\t}\n\n\t/**\n\t * \n\t * @param {Menu.Button} button \n\t */\n\tfunction createButton(button) {\n\t\tconst link = createLink(button);\n\t\tlink.classList.add('NavMenu-button');\n\t\treturn link;\n\t}\n\t/** @type {HTMLElement?} */\n\tlet clickedItem = null;\n\n\t/**\n\t * \n\t * @param {Menu} menu \n\t * @param {number} level \n\t * @returns {{el: HTMLElement; filter(show: boolean, t?: string[]?): Range[]} | null}\n\t */\n\tfunction renderMenu(menu, level) {\n\t\tconst { children } = menu;\n\t\tif (!children.length) {\n\t\t\tconst item = document.createElement('div');\n\t\t\tconst link = item.appendChild(createLink(menu, item));\n\n\t\t\tfor (const button of menu.buttons || []) {\n\t\t\t\titem.appendChild(createButton(button));\n\t\t\t}\n\t\t\titem.classList.add('NavMenu-item');\n\t\t\tlink.classList.add('NavMenu-item-link');\n\t\t\treturn {\n\t\t\t\tel: item, filter(show, text) {\n\t\t\t\t\tconst list = text ? filter(text, link) : [];\n\t\t\t\t\titem.hidden = Boolean(!show && text && !list.length);\n\t\t\t\t\treturn list;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tconst item = /** @type {Collapse} */(document.createElement('nl-collapse'));\n\t\titem.setAttribute('animation', '');\n\t\titem.setAttribute('menu', '');\n\t\tconst header = item.appendChild(document.createElement('div'));\n\t\theader.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\theader.className = 'NavMenu-label';\n\t\theader.slot = 'label';\n\t\theader.style.flex = '1';\n\t\tfor (const button of menu.buttons || []) {\n\t\t\titem.appendChild(createButton(button)).slot = 'label';\n\t\t}\n\t\tconst childrenMenu = renderChildren(item, children, level + 1);\n\t\tif (!childrenMenu.length) { return null; }\n\t\treturn {\n\t\t\tel: item, filter(show, text) {\n\t\t\t\tif (!text) {\n\t\t\t\t\tfor (const menu of childrenMenu) { menu.filter(show); }\n\t\t\t\t\titem.hidden = false;\n\t\t\t\t\titem.open = false;\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tconst self = filter(text, header);\n\t\t\t\tconst hasSelf = Boolean(show || self.length);\n\n\t\t\t\tconst ranges = childrenMenu.flatMap(v => v.filter(hasSelf, text));\n\t\t\t\titem.open = Boolean(ranges.length);\n\t\t\t\tconst list = [...self, ...ranges];\n\t\t\t\titem.hidden = !show && !list.length;\n\t\t\t\treturn list;\n\t\t\t}\n\t\t};\n\t}\n\t/**\n\t * \n\t * @param {Element} parent \n\t * @param {(Menu | null)[]} menus \n\t * @param {number} level \n\t * @returns \n\t */\n\tfunction renderChildren(parent, menus, level) {\n\t\tlet has = false;\n\t\tlet divider = false;\n\t\tlet children = [];\n\t\tfor (const menu of menus) {\n\t\t\tif (!menu) {\n\t\t\t\tif (!has) { continue; }\n\t\t\t\tdivider = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (divider) {\n\t\t\t\tdivider = false;\n\t\t\t\tparent.appendChild(document.createElement('hr'));\n\t\t\t}\n\t\t\tconst item = renderMenu(menu, level);\n\t\t\tif (!item) { continue; }\n\t\t\tchildren.push(item);\n\t\t\thas = true;\n\t\t\tparent.appendChild(item.el);\n\t\t\tallMenus.push(item.el);\n\t\t\titem.el.style.setProperty('--NavMenu-level', String(level));\n\t\t}\n\t\treturn children;\n\t}\n\tconst menuList = renderChildren(root, menus, 0);\n\tlet destroyed = false;\n\tfunction destroy() {\n\t\tif (destroyed) { return; }\n\t\tdestroyed = true;\n\t\tfor (const m of allMenus) {\n\t\t\tm.remove();\n\t\t}\n\t\tfor (const destroy of destroyList) {\n\t\t\tdestroy();\n\t\t}\n\t}\n\tconst signal = options.signal || createNeverAbortedSignal();\n\tif (signal.aborted) {\n\t\tdestroy();\n\t} else {\n\t\tsignal.addEventListener('abort', destroy, { once: true });\n\t}\n\t/** @type {HTMLElement[]} */\n\tlet parents = [];\n\twatch(() => {\n\t\tconst active = options.active;\n\t\tif (!active) { return null; }\n\t\tif (typeof active === 'string') {\n\t\t\treturn active.replace(/#.*/, '') || '';\n\t\t}\n\t\tif (!Array.isArray(active)) { return null; }\n\t\tconst page = active[1] || null;\n\t\tif (!page) {\n\t\t\treturn active[0]?.replace(/#.*/, '') || null;\n\n\t\t}\n\t\t/** @type {[string, PageIdent | null]} */\n\t\tconst result = [active[0]?.replace(/#.*/, '') || '', active[1] || null];\n\t\treturn result;\n\t}, active => {\n\t\tif (!active) { return; }\n\t\tconst path = Array.isArray(active) ? active[0] : '';\n\t\tconst page = Array.isArray(active) ? active[1] : null;\n\t\tfor (const menus of findMenu(path, menuMap, pathMenuMap, page, identMap)) {\n\t\t\tconst clicked = clickedItem && menus.includes(clickedItem) ? clickedItem : null;\n\t\t\tif (clicked) { clickedItem = null; }\n\t\t\tif (!clicked && current && menus.includes(current)) { return; }\n\t\t\tconst menu = clicked || menus[0];\n\t\t\tconst list = [];\n\t\t\tlet parent = menu.parentElement;\n\t\t\tfor (; parent && parent !== root; parent = parent.parentElement) {\n\t\t\t\tlist.push(parent);\n\t\t\t}\n\t\t\tif (parent !== root) { return; }\n\t\t\tparents = list;\n\t\t\tcurrent?.classList.remove('NavMenu-current');\n\t\t\tfor (const item of parents) {\n\t\t\t\titem.setAttribute('open', '');\n\t\t\t}\n\t\t\tcurrent = menu;\n\t\t\tcurrent?.classList.add('NavMenu-current');\n\t\t\treturn;\n\t\t}\n\n\n\t}, { signal, immediate: true });\n\t/**\n\t * \n\t * @param {string} text \n\t * @returns \n\t */\n\treturn text => {\n\t\t/** @type {string[]?} */\n\t\tconst texts = text.toLowerCase().split(/[\\s\\n]+/).filter(Boolean);\n\t\tif (texts.length) {\n\t\t\treturn menuList.flatMap(v => v.filter(false, texts));\n\t\t}\n\t\tmenuList.flatMap(v => v.filter(false));\n\t\tfor (const item of parents) {\n\t\t\titem.setAttribute('open', '');\n\t\t}\n\t\treturn [];\n\t};\n}\n","import { Application, createComputed, createIcon, createState, effect, flatPermission, Menu, PageIdent, toPermissionFilter, User } from '@yongdall/web';\nimport createNavMenu from '../menu/createNavMenu.mjs';\n\n\n\n\nexport const menuContainer = document.createElement('div');\n\n\nmenuContainer.style.display = 'flex';\nmenuContainer.style.flexDirection = 'column';\nconst header = menuContainer.appendChild(document.createElement('header'));\nheader.classList.add('NavMenu-header');\nconst filter = header.appendChild(document.createElement('input'));\nfilter.placeholder = '过滤菜单...';\nfilter.type = 'search';\nconst refreshButton = header.appendChild(document.createElement('button'));\nrefreshButton.appendChild(createIcon('refresh', true));\nrefreshButton.classList.add('icon');\nrefreshButton.title = '刷新';\n\n\nconst main = menuContainer.appendChild(document.createElement('main'));\nmain.style.flex = '1';\nmain.style.overflow = 'auto';\nmain.classList.add('NavMenu');\nlet k = 0;\nlet loaded = false;\n/** @type {ReturnType<typeof createNavMenu>?} */\nlet navMenu = null;\nfunction filterMenu() {\n\tconst list = navMenu?.(filter.value) || [];\n\tconst highlight = new Highlight(...list);\n\tCSS.highlights.set(\"NavMenu-filter-highlight\", highlight);\n}\nfilter.addEventListener('input', filterMenu);\n\nconst allMenus = createComputed(\n\t() => Menu.fromDefine(Application.menus, [])\n);\nconst currentMenus = createComputed(() => {\n\tconst permissions = User.permissions;\n\tconst menus = allMenus.get();\n\tif (permissions.size < 0) { return menus; }\n\n\tconst filter = toPermissionFilter({\n\t\tpermissions,\n\t\torganizationPermissions: User.organizationPermissions,\n\t\tallOrganizationPermissions: User.allOrganizationPermissions,\n\t});\n\treturn Menu.filter(menus, m => {\n\t\tconst permissions = flatPermission(m.permission);\n\t\tif (!permissions.length) { return true; }\n\t\treturn Boolean(permissions.find(filter));\n\t});\n});\nconst currentPath = createState(/** @type {string | [string, PageIdent]} */(''));\n/** @type {AbortController?} */\nlet ac = null;\neffect(() => {\n\tac?.abort();\n\tmain.innerHTML = '';\n\tac = new AbortController();\n\tnavMenu = createNavMenu(main, currentMenus.get(), {\n\t\tsignal: ac.signal,\n\t\tget active() { return currentPath.get(); },\n\t});\n\tfilterMenu();\n});\n/**\n * \n * @param {string} path \n * @param {string} search \n * @param {string} hash \n * @param {(PageIdent & {path: string})?} page \n */\nexport function updatePath(path, search, hash, page) {\n\tif (!page) {\n\t\tcurrentPath.set(`${path}${search}`);\n\t\treturn;\n\t}\n\tcurrentPath.set([`${path}${search}`, page]);\n}\n\nrefreshButton.addEventListener('click', () => Application.loadMenus(true));\n","import { createComputed, createIcon, createNeverAbortedSignal, effect, User } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\n\n\n/**\n * \n * @param {string} avatar \n * @param {AbortSignal} signal\n * @param {boolean} [button] \n */\nfunction createAvatar(avatar, signal, button) {\n\tif (!avatar) {\n\t\tconst svg = createIcon('user', signal);\n\t\tif (!button) { svg.setAttribute('fill-opacity', '0.5'); }\n\t\treturn svg;\n\t}\n\tconst img = document.createElement('img');\n\timg.src = avatar;\n\treturn img;\n\n}\n/**\n * \n * @param {HTMLElement} root \n * @param {boolean} [button] \n * @param {AbortSignal} [signal] \n * @returns \n */\nexport function createUserAvatar(root, button, signal = createNeverAbortedSignal()) {\n\troot.classList.add(`${cssPrefix}-user-avatar`);\n\n\tconst sessionAvatarComputed = createComputed(() => User.single ? null : User.session?.avatar || '');\n\t/** @type {string?} */\n\tlet sessionAvatar = sessionAvatarComputed.get();\n\t/** @type {AbortController?} */\n\tlet sessionAbortController = new AbortController();\n\tconst sessionSignal = AbortSignal.any([sessionAbortController.signal, signal]);\n\tlet sessionAvatarElement = sessionAvatar === null\n\t\t? createIcon('singleUser', sessionSignal)\n\t\t: createAvatar(sessionAvatar, sessionSignal, button);\n\troot.appendChild(sessionAvatarElement);\n\teffect(() => {\n\t\tconst newAvatar = User.single ? null : User.session?.avatar || '';\n\t\tif (newAvatar === sessionAvatar) { return; }\n\t\tsessionAvatar = newAvatar;\n\t\tsessionAbortController?.abort();\n\t\tsessionAbortController = new AbortController();\n\n\t\tconst sessionSignal = AbortSignal.any([sessionAbortController.signal, signal]);\n\t\tconst newAvatarElement = sessionAvatar === null\n\t\t\t? createIcon('singleUser', sessionSignal)\n\t\t\t: createAvatar(sessionAvatar, sessionSignal, button);\n\t\tif (!button && sessionAvatar === null) {\n\t\t\tnewAvatarElement.setAttribute('fill-opacity', '0.5');\n\t\t}\n\t\troot.replaceChild(newAvatarElement, sessionAvatarElement);\n\t\tsessionAvatarElement.remove();\n\t\tsessionAvatarElement = newAvatarElement;\n\t}, signal);\n\n\tconst targetAvatarComputed = createComputed(() => {\n\t\tconst target = User.target;\n\t\tconst session = User.session;\n\t\tif (!target) { return null; }\n\t\tif (target.id === (session?.id || '')) { return null; }\n\t\treturn target.avatar || '';\n\t});\n\t/** @type {string?} */\n\tlet targetAvatar = null;\n\t/** @type {Element?} */\n\tlet targetAvatarElement = null;\n\t/** @type {AbortController?} */\n\tlet targetAbortController = null;\n\teffect(() => {\n\t\tconst newAvatar = targetAvatarComputed.get();\n\t\tif (newAvatar === targetAvatar) { return; }\n\t\ttargetAvatar = newAvatar;\n\t\ttargetAvatarElement?.remove();\n\t\ttargetAvatarElement = null;\n\t\ttargetAbortController?.abort();\n\t\tif (newAvatar === null) { return; }\n\t\ttargetAbortController = new AbortController();\n\t\tconst targetSignal = AbortSignal.any([targetAbortController.signal, signal]);\n\t\ttargetAvatarElement = createAvatar(newAvatar, targetSignal, button);\n\t\troot.insertBefore(targetAvatarElement, sessionAvatarElement);\n\t}, signal);\n\n}\n","import { Application, createComputed, createIcon, effect, Menu, User, watch } from '@yongdall/web';\nimport { createUserAvatar } from './userAvatar.mjs';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport createNavMenu from '../menu/createNavMenu.mjs';\n\nexport const userContainer = document.createElement('div');\nuserContainer.classList.add(`${cssPrefix}-user`);\nexport const userButton = document.createElement('div');\nuserButton.classList.add(`${cssPrefix}-user-button`);\ncreateUserAvatar(userButton, true);\nconst userInfo = userContainer.appendChild(document.createElement('span'));\nuserInfo.classList.add(`${cssPrefix}-user-info`);\nconst avatar = userInfo.appendChild(document.createElement('span'));\ncreateUserAvatar(avatar);\navatar.classList.add('avatar');\nconst username = userInfo.appendChild(document.createElement('span'));\nusername.classList.add('username');\nusername.innerText = '用户名';\nconst btns = userInfo.appendChild(document.createElement('span'));\nbtns.classList.add('btns');\n\n/** @type {ChildNode} */\nlet helpEl = btns.appendChild(document.createComment(''));\nwatch(() => Application.help, (help, _help, onCleanup) => {\n\tif (!help) {\n\t\tconst el = document.createComment('');\n\t\thelpEl.replaceWith(el);\n\t\thelpEl = el;\n\t\treturn;\n\t}\n\tconst el = document.createElement('a');\n\tel.href = help;\n\tel.target = '_blank';\n\tel.appendChild(createIcon('help', onCleanup()));\n\tel.title = '帮助';\n\thelpEl.replaceWith(el);\n\thelpEl = el;\n}, { immediate: true });\n\nconst exitButton = btns.appendChild(document.createElement('div'));\nexitButton.appendChild(createIcon('logout', true));\nexitButton.title = '退出登录';\neffect(() => {\n\texitButton.hidden = !User.operator;\n});\nexitButton.addEventListener('click', () => User.exit());\n\neffect(() => {\n\tusername.innerText = User.operator?.name || '';\n});\n\n\nconst allMenus = createComputed(\n\t() => Menu.fromDefine(Application.userMenus, [])\n);\n\n\nconst currentMenus = createComputed(() => {\n\tconst menus = allMenus.get();\n\tif (User.operator) { return menus; }\n\treturn Menu.filter(menus, v => !v.logged);\n});\n\nconst main = userContainer.appendChild(document.createElement('main'));\nmain.style.flex = '1';\nmain.style.overflow = 'auto';\nmain.classList.add('NavMenu');\n\n/** @type {AbortController?} */\nlet ac = null;\neffect(() => {\n\tac?.abort();\n\tmain.innerHTML = '';\n\tac = new AbortController();\n\tcreateNavMenu(main, currentMenus.get(), {\n\t\tsignal: ac.signal,\n\t});\n});\n","\nimport { Application, createIcon, toFileLink, watch } from '@yongdall/web';\nimport { cssPrefix } from './styles/variables.mjs';\n\nconst logoLink = document.createElement('a');\nlogoLink.classList.add(`${cssPrefix}-logo`);\nwatch(() => Application.root, root => {\n\tlogoLink.href = root;\n}, { immediate: true });\nwatch(() => toFileLink(Application.logo), (logo, _logo, onCleanup) => {\n\tconst signal = onCleanup();\n\tlet logoEl;\n\tif (logo) {\n\t\tlogoEl = document.createElement('img');\n\t\tlogoEl.src = logo.href;\n\t} else {\n\t\tlogoEl = createIcon('logo', signal);\n\t}\n\tlogoLink.appendChild(logoEl);\n\tlogoEl.classList.add('logo');\n\tonCleanup(() => { logoEl.remove(); });\n}, { immediate: true });\nexport { logoLink };\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * @typedef {object} PageError\n * @property {string} title\n * @property {string} [description]\n */\n\n/** @type {Record<string, PageError>} */\nexport const errors = {\n\t404: {\n\t\ttitle: '您所请求的页面无法找到',\n\t\tdescription: '服务器无法正常提供信息。\\n目标页面可能已经被更改、删除或移到其他位置,或您所输入页面地址错误。',\n\t}\n};\n\n/**\n * @param {PageContext} ctx\n * @param {unknown} error\n */\nexport default function renderError(ctx, error) {\n\tif ((error ?? '') == '') {\n\t\tctx.container.appendChild(document.createTextNode('空页面'));\n\t\treturn;\n\t}\n\tconst e = (typeof error === 'number' || typeof error === 'string')\n\t\t&& Object.hasOwn(errors, error) && errors[error]\n\t\t|| errors['404'];\n\tconst title = e?.title || 'Error';\n\tconst info = e?.description;\n\tconst errorContainer = document.createElement('div');\n\tconst main = errorContainer.appendChild(document.createElement('div'));\n\tconst titleDiv = main.appendChild(document.createElement('div'));\n\tconst infoDiv = main.appendChild(document.createElement('div'));\n\terrorContainer.style.marginBlock = '8%';\n\terrorContainer.style.marginInline = 'auto';\n\terrorContainer.style.inlineSize = '600px';\n\terrorContainer.style.maxInlineSize = '100%';\n\terrorContainer.style.padding = '20px';\n\ttitleDiv.style.paddingBlock = '20px';\n\ttitleDiv.style.fontSize = '20px';\n\ttitleDiv.style.color = '#8e8e8e';\n\ttitleDiv.style.textAlign = 'center';\n\tinfoDiv.style.fontSize = '13px';\n\tinfoDiv.style.lineHeight = '1.3em';\n\tinfoDiv.style.color = '#b5b5b5';\n\ttitleDiv.appendChild(document.createTextNode(title));\n\tctx.title = title || 'Error';\n\tif (info && typeof info === 'string') {\n\t\tfor (const p of info.split('\\n')) {\n\t\t\tinfoDiv.appendChild(document.createTextNode(p));\n\t\t\tinfoDiv.appendChild(document.createElement('br'));\n\t\t}\n\t}\n\tctx.container.appendChild(errorContainer);\n\tctx.loading = false;\n}\n","import { cssPrefix } from '../styles/variables.mjs';\n\nexport const prefix = `${cssPrefix}-allSider-nav`\n\nexport const header = document.createElement('header');\nheader.className = `${prefix}-header`;\nexport const actions = header.appendChild(document.createElement('div'));\nactions.classList.add(`${prefix}-actions`)\nexport const sidebar = header.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n","import { createState } from '@yongdall/web';\nimport { prefix, sidebar } from './dom.mjs';\nconst openedClassName = `${prefix}-open`;\n/** @type {(() => void)?} */\nlet current = null;\n\nexport function closeSidebarWhenMobile() {\n\tif (window.innerWidth > 800) { return; }\n\tcurrent?.();\n}\n\nexport default class Sider {\n\t/** @readonly @type {HTMLElement} */\n\tbutton;\n\t/** @readonly @type {HTMLElement} */\n\tsider;\n\t/** @type {() => void} */\n\t#hide;\n\n\t#disabled = false;\n\tget disabled() { return this.#disabled; }\n\tset disabled(v) {\n\t\tif (v) {\n\t\t\tthis.disable();\n\t\t} else {\n\t\t\tthis.enable();\n\t\t}\n\t}\n\tdisable() {\n\t\tif (this.#disabled) { return; }\n\t\tthis.#disabled = true;\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t}\n\t\tthis.button.hidden = true;\n\t\tthis.sider.hidden = true;\n\t\t// TODO: 隐藏分组\n\t}\n\tenable() {\n\t\tif (!this.#disabled) { return; }\n\t\tthis.#disabled = false;\n\t\tthis.button.hidden = false;\n\t\t// TODO: 显示分组\n\t}\n\t#click = () => this.toggle();\n\t/**\n\t * \n\t * @param {HTMLElement} [siderContainer] \n\t * @param {HTMLElement} [buttonContainer] \n\t */\n\tconstructor(siderContainer, buttonContainer) {\n\t\tconst button = buttonContainer instanceof HTMLElement\n\t\t\t? buttonContainer\n\t\t\t: document.createElement('div');\n\t\tconst sider = siderContainer instanceof HTMLElement\n\t\t\t? siderContainer\n\t\t\t: document.createElement('div');\n\t\tbutton.tabIndex = 0;\n\t\tbutton.classList.add(`${prefix}-button`);\n\t\tsider.hidden = true;\n\t\tsidebar.appendChild(sider);\n\t\tbutton.classList.add(`${prefix}-selectable`);\n\t\tconst hide = () => {\n\t\t\tcurrent = null;\n\t\t\tdocument.body.classList.remove(openedClassName);\n\t\t\tbutton.classList.remove(`${prefix}-selected`);\n\t\t\tsider.hidden = true;\n\t\tthis.#shown.set(false);\n\t\t};\n\t\tbutton.addEventListener('click', this.#click);\n\t\tthis.#hide = hide;\n\t\tthis.button = button;\n\t\tthis.sider = sider;\n\t}\n\t#shown = createState(false);\n\tget shown() { return this.#shown.get(); }\n\tset shown(p) {\n\t\tif (p) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\tget hidden() { return this.button.hidden; }\n\tset hidden(v) {\n\t\tthis.button.hidden = Boolean(v);\n\t\tif (!v) { return; }\n\t\tthis.hide();\n\t}\n\tget open() { return current === this.#hide; }\n\tset open(p) {\n\t\tif (p) {\n\t\t\tthis.show();\n\t\t} else {\n\t\t\tthis.hide();\n\t\t}\n\t}\n\tshow() {\n\t\tif (this.hidden) { return; }\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) { return; }\n\t\tcurrent?.();\n\t\tcurrent = hide;\n\t\tdocument.body.classList.add(openedClassName);\n\t\tthis.button.classList.add(`${prefix}-selected`);\n\t\tthis.sider.hidden = false;\n\t\tthis.#shown.set(true);\n\t}\n\ttoggle() {\n\t\tif (this.hidden) { return; }\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t\treturn;\n\t\t}\n\t\tthis.show();\n\t}\n\thide() {\n\t\tif (this.hidden) { return; }\n\t\tif (this.#disabled) { return; }\n\t\tconst hide = this.#hide;\n\t\tif (current !== hide) { return; }\n\t\thide();\n\t}\n\tremove() {\n\t\tconst hide = this.#hide;\n\t\tif (current === hide) {\n\t\t\thide();\n\t\t}\n\t\tconst { button, sider } = this;\n\t\tbutton.remove();\n\t\tsider.remove();\n\t\tbutton.classList.remove(`${prefix}-button`);\n\t\tbutton.classList.remove(`${prefix}-selectable`);\n\t\tbutton.removeEventListener('click', this.#click);\n\t\tsider.hidden = false;\n\t\t// TODO: ...\n\t\t// TODO: 隐藏分组\n\t}\n}\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tcurrent?.();\n});\n","import Sider, { closeSidebarWhenMobile } from './Sider.mjs';\nimport { prefix } from './dom.mjs';\n\n\n\nexport default class Group {\n\t/** @readonly */\n\troot = document.createElement('div');\n\t/** @type {Set<() => void>} */\n\t#children = new Set()\n\t/**\n\t * \n\t * @param {HTMLElement} parent \n\t */\n\tconstructor(parent) {\n\t\tconst root = this.root;\n\t\tparent.appendChild(root);\n\t\troot.className = `${prefix}-group`;\n\t}\n\tremove() {\n\t\tthis.root.remove();\n\t\tfor (const r of [...this.#children]) {\n\t\t\tr();\n\t\t}\n\t}\n\tcreateGroup() {\n\t\tconst group = new Group(this.root);\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); group. remove(); }\n\t\tchildren.add(remove);\n\t\treturn group;\n\t}\n\t/**\n\t * \n\t * @overload\n\t * @param {true} isLink \n\t * @returns {HTMLAnchorElement}\n\t */\n\t/**\n\t * \n\t * @overload\n\t * @param {boolean} [isLink] \n\t * @returns {HTMLElement}\n\t */\n\t/**\n\t * \n\t * @param {boolean} [isLink] \n\t * @returns {HTMLElement}\n\t */\n\tcreateAction(isLink) {\n\t\tconst btn = document.createElement(isLink ? 'a' : 'div');\n\t\tbtn.tabIndex = 0;\n\t\tbtn.classList.add(`${prefix}-button`);\n\t\tbtn.addEventListener('click', () => { closeSidebarWhenMobile(); });\n\t\tthis.root.appendChild(btn);\n\n\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); btn.remove(); }\n\t\tchildren.add(remove);\n\t\treturn btn;\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} [siderContainer] \n\t * @param {HTMLElement} [buttonContainer] \n\t */\n\tcreateSider(siderContainer, buttonContainer) {\n\t\tconst sider = new Sider(siderContainer, buttonContainer);\n\t\tthis.root.appendChild(sider.button);\n\n\n\t\tconst children = this.#children;\n\t\tconst remove = () => {children.delete(remove); sider.remove(); }\n\t\tchildren.add(remove);\n\t\treturn sider;\n\t}\n}\n","import Group from './Group.mjs';\nimport { actions } from './dom.mjs';\nexport const pageSiderContainer = document.createElement('div');\nexport const startGroup = new Group(actions);\nexport const pageGroup = new Group(actions);\nexport const mainGroup = new Group(actions);\nexport const span = actions.appendChild(document.createElement('span'));\nexport const endGroup = new Group(actions);\n\nexport const pageSider = pageGroup.createSider(pageSiderContainer);\npageSider.button.innerText = '页面';\npageSider.disabled = true;\n","import { pageSider, pageSiderContainer } from './sides.mjs';\n\nimport { PageSider, Page } from '@yongdall/web';\n\n\nclass Sider extends PageSider {\n\t#page;\n\t#parent;\n\t/**\n\t * @param {AllSiderPage} page \n\t * @param {ParentNode} parent \n\t * @param {Node?} next \n\t * @param {boolean} inserted \n\t * @param {AbortSignal} signal \n\t * @param {ParentNode} parent \n\t * @returns \n\t */\n\tconstructor(page, parent, next, inserted, signal) {\n\t\tsuper(parent, next, inserted, signal);\n\t\tthis.#page = page;\n\t\tthis.#parent = parent;\n\t\tsignal.addEventListener('abort', () => {\n\t\tthis.#hidden();\n\t\t})\n\t}\n\tinsert() {\n\t\tsuper.insert();\n\n\t\tif (this.#page.show) { pageSider.disabled = false; }\n\t}\n\t#hidden() {\n\t\tif (this.#page.show && !this.#parent.children.length) {\n\t\t\tpageSider.disabled = true;\n\t\t}\n\t}\n\tremove() {\n\t\tsuper.remove();\n\t\tthis.#hidden();\n\t}\n\n}\n\nexport default class AllSiderPage extends Page {\n\t#sides = (() => {\n\t\tconst sides = document.createElement('div');\n\t\tsides.classList.add('Page-sides');\n\t\tpageSiderContainer.appendChild(sides);\n\t\treturn sides;\n\t})();\n\tdestroy() {\n\t\tif (!super.destroy()) { return false; }\n\t\tthis.#sides.remove();\n\t\treturn true;\n\t}\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\ttoggle(show) {\n\t\tsuper.toggle(show);\n\t\t// TODO: 区别区域\n\t\tpageSider.disabled = !(show && this.#sides.children.length);\n\t}\n\tget siderOpen() { return pageSider.open; }\n\tset siderOpen(open) {\n\t\t// TODO: 判断是不是当前的\n\t\tif (open) {\n\t\t\tpageSider.show();\n\t\t} else {\n\t\t\tpageSider.hide();\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {boolean} [inserted] \n\t * @param {AbortSignal} [signal] \n\t * @returns {PageSider}\n\t */\n\tcreateSider(inserted, signal) {\n\t\tif (this.destroyed) { throw new Error('页面组件已被销毁'); }\n\t\tsignal?.throwIfAborted();\n\t\tconst parent = this.#sides;\n\t\treturn new Sider(\n\t\t\tthis,\n\t\t\tparent,\n\t\t\tnull,\n\t\t\tinserted !== false,\n\t\t\tsignal instanceof AbortSignal\n\t\t\t\t? AbortSignal.any([signal, this.signal])\n\t\t\t\t: this.signal\n\t\t);\n\t}\n\t/**\n\t * \n\t * @param {boolean} show \n\t */\n\tconstructor(show) {\n\t\tsuper(show);\n\t\tif (show) {\n\t\t\tpageSider.disabled = !this.#sides.children.length;\n\t\t}\n\t}\n}\n","import '@neeloong/components';\n/** @import { Menu } from '@yongdall/web' */\n/** @import { Menu as NeeloongMenu } from '@neeloong/components'*/\n\n\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu.RendererOptions} options \n */\nexport default function createMenu(menus, options) {\n\tconst {create} = options;\n\t/** @type {NeeloongMenu} */\n\t// @ts-ignore\n\tconst parent = document.createElement('nl-menu');\n\tlet has = false;\n\tlet divider = false;\n\tconst createDivider = () => {\n\t\thas = true;\n\t\tif (!divider) { return; }\n\t\tdivider = false;\n\t\tparent.appendChild(document.createElement('hr'));\n\t};\n\tfor (const menu of menus) {\n\t\tif (!menu) {\n\t\t\tif (!has) { continue; }\n\t\t\tdivider = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst { children } = menu;\n\t\tif (!children?.length) {\n\t\t\tconst result = create(menu);\n\t\t\tif (!result) { continue; }\n\t\t\tcreateDivider();\n\t\t\tparent.appendChild(result);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = createMenu(children, options);\n\t\tif (!child) { continue; }\n\t\tcreateDivider();\n\n\t\tconst item = parent.appendChild(child);\n\t\tconst header = item.insertBefore(document.createElement('div'), item.firstChild);\n\t\theader.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\theader.slot = 'label';\n\t}\n\tif (!has) { return null; }\n\treturn parent;\n}\n","import '@neeloong/components';\nimport createMenu from './createMenu.mjs';\n/** @import { Menu } from '@yongdall/web' */\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu.RendererOptions} options \n */\nexport default function createMenuButtons(menus, options) {\n\tif (options.signal.aborted) { return null; }\n\tconst {create} = options;\n\tconst root = document.createElement('div');\n\tlet has = false;\n\tlet divider = false;\n\tconst createDivider = () => {\n\t\thas = true;\n\t\tif (!divider) { return; }\n\t\tdivider = false;\n\t\troot.appendChild(document.createElement('hr'));\n\t};\n\tfor (const menu of menus) {\n\t\tif (!menu) {\n\t\t\tif (!has) { continue; }\n\t\t\tdivider = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst { children } = menu;\n\t\tif (!children?.length) {\n\t\t\tconst button = create(menu, { button: true });\n\t\t\tif (!button) { continue; }\n\t\t\tcreateDivider();\n\t\t\troot.appendChild(button);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = createMenu(children, options);\n\t\tif (!child) { continue; }\n\t\tcreateDivider();\n\t\tconst button = root.appendChild(document.createElement('button'));\n\t\tbutton.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\t\tchild.targetElement = button;\n\t\tbutton.addEventListener('click', () => child.show?.());\n\t\troot.appendChild(child);\n\t}\n\tif (!root.childNodes.length) { return null; }\n\troot.classList.add('MenuButtons');\n\treturn root;\n}\n","import { Application, createComputed, effect, isMac } from '@yongdall/web';\n/** @import { Menu } from '@yongdall/web' */\n\n\n/**\n * \n * @param {Menu.Renderer.Command} item \n */\nfunction getUri(item) {\n\tconst { page } = item;\n\tif (page) {\n\t\tconst { path } = item;\n\t\treturn new URL(path?.[0] === '/' ? `${page}${path}` : `${page}/${path || ''}`, Application.root).href;\n\t}\n\tconst { uri } = item;\n\tif (uri) { return uri; }\n\treturn null;\n}\n/**\n * \n * @param {Menu} menu \n * @param {Menu.Renderer.Options} options \n * @returns {HTMLElement}\n */\nexport default function createMenuItem(menu, options) {\n\tconst { signal, button: isButton } = options;\n\tconst link = document.createElement('a');\n\tconst button = isButton ? document.createElement('button') : null;\n\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\n\tconst { commands } = options;\n\n\tconst disabled = createComputed(() => {\n\t\tif (menu.disabled) { return true; }\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn Boolean(cmd ? cmd.disabled : options.disabled(menu));\n\t});\n\n\tconst href = createComputed(() => {\n\t\tconst href = getUri(menu);\n\t\tif (href) { return href; }\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn cmd ? getUri(cmd) || null : options.uri(menu) || null;\n\t});\n\tfunction click() {\n\t\tconst { click } = menu;\n\t\tif (typeof click === 'function') { return click(); }\n\t\tconst { script } = menu;\n\t\tif (script) {\n\t\t\t// TODO:\n\t\t\treturn;\n\t\t}\n\t\tconst { command } = menu;\n\t\tconst cmd = command && Object.hasOwn(commands, command) && commands[command];\n\t\treturn cmd ? cmd.click?.() : options.click(menu);\n\t}\n\teffect(() => {\n\t\tconst isDisabled = disabled.get();\n\t\t// @ts-ignore\n\t\tlink.disabled = isDisabled;\n\t\tlink.ariaDisabled = isDisabled ? 'true' : 'false';\n\t\tif (isDisabled) {\n\t\t\tlink.removeAttribute('tabindex');\n\t\t\tlink.removeAttribute('href');\n\t\t\tlink.removeAttribute('target');\n\t\t} else {\n\t\t\tlink.tabIndex = 0;\n\t\t\tlet target = '';\n\t\t\tconst hrefValue = href.get();\n\t\t\tif (hrefValue) {\n\t\t\t\tlink.href = hrefValue;\n\t\t\t\ttarget = menu.target || (menu.page ? '_self' : '');\n\t\t\t}\n\t\t\tif (target) {\n\t\t\t\tlink.target = target;\n\t\t\t} else {\n\t\t\t\tlink.removeAttribute('target');\n\t\t\t}\n\t\t}\n\t\tif (button) {\n\t\t\tbutton.disabled = isDisabled;\n\t\t}\n\t}, signal);\n\tlink.addEventListener('click', (e) => {\n\t\tif (!disabled.get()) { return; }\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t}, { capture: true });\n\tlink.addEventListener('click', (e) => {\n\t\tif (disabled.get()) { return; }\n\t\tif (e.defaultPrevented) { return; }\n\t\tif (href.get()) {\n\t\t\tif (e.shiftKey) { return; }\n\t\t\tif (isMac ? e.metaKey : e.ctrlKey) { return; }\n\t\t\tif (e.altKey) { return; }\n\t\t}\n\t\tif (click() === false) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\tif (button) {\n\t\tbutton.appendChild(link);\n\t\treturn button;\n\t}\n\treturn link;\n\n}\n","import '@neeloong/components';\nimport createMenu from './createMenu.mjs';\nimport { createIcon } from '@yongdall/web';\n/** @import { Menu } from '@yongdall/web' */\n/**\n * \n * @param {(Menu | null)[]} menus \n * @param {Menu?} menu\n * @param {Menu.RendererOptions} options \n */\nexport default function createMenuButton(menus, menu, options) {\n\tconst root = document.createElement('div');\n\tconst child = createMenu(menus, options);\n\tif (!child) { return null; }\n\tconst button = root.appendChild(document.createElement('button'));\n\tconst label = menu?.label || menu?.title || '';\n\tif (label) {\n\t\tbutton.appendChild(document.createTextNode(label));\n\t} else {\n\t\tbutton.appendChild(createIcon(menu?.icon || 'more', options.signal));\n\t}\n\tchild.targetElement = button;\n\tbutton.addEventListener('click', () => child.show());\n\troot.appendChild(child);\n\treturn root;\n}\n","import type { NavButton, Theme } from '@yongdall/web';\nimport { Application, createComputed, createFrame, createIcon, createState, effect, ErrorAlerter, loadNavButtons, root as rootContainer } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport pageManager, { activityContainer, setMode } from '../pageManager/index.mjs';\n\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport { actions, header } from './dom.mjs';\nimport { closeSidebarWhenMobile } from './Sider.mjs';\nimport { endGroup, startGroup } from './sides.mjs';\nimport AllSiderPage from './AllSiderPage.mjs';\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\n\n\nfunction addButton({\n\thidden, title, disabled, createIcon: createButtonIcon,\n\tcreatePanel, href, click,\n}: NavButton, signal: AbortSignal) {\n\tif (signal.aborted) { return; }\n\tconst shown = createState(createState(false));\n\tconst ctx: NavButton.Context = {\n\t\tget shown() { return shown.get().get(); },\n\t\tget signal() { return signal; },\n\t}\n\tlet button: HTMLElement\n\tif (createPanel) {\n\t\tconst sider = startGroup.createSider(createPanel(ctx));\n\t\tbutton = sider.button;\n\t\tshown.set(createComputed(() => sider.shown));\n\t\tsignal.addEventListener('abort', () => { sider.remove(); }, { once: true });\n\t} else if (href) {\n\t\tconst action = startGroup.createAction(true);\n\t\teffect(() => {\n\t\t\tconst url = !disabled?.(ctx) && href(ctx);\n\t\t\tif (url) { action.href = url; }\n\t\t\telse { action.removeAttribute('href'); }\n\t\t}, signal);\n\t\tif (click) {\n\t\t\taction.addEventListener('click', event => {\n\t\t\t\tif (click(ctx) === false) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}, { signal });\n\t\t}\n\t\tbutton = action;\n\t\tsignal.addEventListener('abort', () => { action.remove(); }, { once: true });\n\n\t} else {\n\n\t\tconst action = startGroup.createAction();\n\t\tif (disabled) {\n\t\t\teffect(() => {\n\t\t\t\tif (disabled(ctx)) {\n\n\t\t\t\t\taction.removeAttribute('tabIndex');\n\t\t\t\t} else {\n\t\t\t\t\taction.tabIndex = 0;\n\t\t\t\t}\n\t\t\t}, signal);\n\t\t}\n\t\tif (click) {\n\t\t\taction.addEventListener('click', () => { click(ctx) }, { signal });\n\t\t}\n\t\tbutton = action;\n\t\tsignal.addEventListener('abort', () => { action.remove(); }, { once: true });\n\n\t}\n\tif (hidden) {\n\t\teffect(() => { button.hidden = hidden(ctx); }, signal);\n\t}\n\tif (title) {\n\t\teffect(() => { button.title = title(ctx) }, signal);\n\t}\n\tif (createButtonIcon) {\n\t\tbutton.appendChild(createButtonIcon(ctx));\n\t} else {\n\t\tbutton.appendChild(createIcon(['icon', 'logo'], signal));\n\t}\n}\nconst theme: Theme = {\n\ttitle(p) { return [p.title, Application.title || '拥道YongDall'].filter(Boolean).join(' | ') },\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager,\n\telements: [rootContainer, header],\n\tclassNames: [cssPrefix, `${cssPrefix}-allSider`],\n\tstyleFiles: ['theme-allSider.css'],\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new AllSiderPage(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tasync setup(signal) {\n\t\tsetMode(false);\n\t\tlogoLink.addEventListener('click', () => { closeSidebarWhenMobile(); }, { signal });\n\t\tactions.insertBefore(logoLink, actions.firstElementChild);\n\n\t\tconst workspaceSider = startGroup.createSider(menuContainer);\n\t\tworkspaceSider.button.appendChild(createIcon('menu', signal));\n\t\tworkspaceSider.button.title = '菜单';\n\t\tconst activitySider = startGroup.createSider(activityContainer);\n\t\tactivitySider.button.appendChild(createIcon('activity', signal));\n\t\tactivitySider.button.title = '活动';\n\t\tif (window.innerWidth > 800) {\n\t\t\tworkspaceSider.show();\n\t\t}\n\n\t\tconst userSider = endGroup.createSider(userContainer, userButton);\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\tworkspaceSider.remove();\n\t\t\tactivitySider.remove();\n\t\t\tuserSider.remove();\n\t\t}, { once: true });\n\t\tfor await (const button of loadNavButtons()) {\n\t\t\tif (signal.aborted) { return; }\n\t\t\taddButton(button, signal);\n\t\t}\n\t},\n\n};\n\nexport default theme\n","import { type NavButton, createState, createComputed, effect, createIcon } from '@yongdall/web';\n\nexport function addButton(anchor: Node, container: ParentNode, {\n\thidden, title, disabled, createIcon: createButtonIcon,\n\tcreatePanel, href, click,\n}: NavButton, signal: AbortSignal) {\n\tif (signal.aborted) { return; }\n\tconst parent = anchor.parentNode;\n\tif (!parent) { return; }\n\tconst shown = createState(createState(false));\n\tconst ctx: NavButton.Context = {\n\t\tget shown() { return shown.get().get(); },\n\t\tget signal() { return signal; },\n\t};\n\tlet button;\n\tif (createPanel) {\n\t\tconst btn = document.createElement('div');\n\t\tconst panel = createPanel(ctx);\n\t\tbutton = btn;\n\t\tconst panelShown = createState(true);\n\t\tshown.set(createComputed(() => !shown.get()));\n\n\t\tcontainer.appendChild(panel);\n\t\tbtn.addEventListener('click', () => { panel.showPopover(); }, { signal });\n\t\tpanel.setAttribute('popover', 'auto');\n\t\tpanel.addEventListener('toggle', event => { panelShown.set(event.newState === 'closed'); }, { signal });\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tpanel.removeAttribute('popover');\n\t\t\tpanel.remove();\n\t\t}, { once: true });\n\t} else if (href) {\n\t\tconst action = document.createElement('a');\n\t\tif (click) {\n\t\t\taction.addEventListener('click', event => {\n\t\t\t\tif (click(ctx) === false) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}, { signal });\n\t\t}\n\t\teffect(() => {\n\t\t\tconst url = !disabled?.(ctx) && href(ctx);\n\t\t\tif (url) { action.href = url; }\n\t\t\telse { action.removeAttribute('href'); }\n\t\t}, signal);\n\t\tbutton = action;\n\t} else {\n\t\tconst action = document.createElement('div');\n\t\tif (click) {\n\t\t\taction.addEventListener('click', () => { click(ctx) }, { signal });\n\t\t}\n\t\tif (disabled) {\n\t\t\teffect(() => {\n\t\t\t\tif (disabled(ctx)) {\n\n\t\t\t\t\taction.removeAttribute('tabIndex');\n\t\t\t\t} else {\n\t\t\t\t\taction.tabIndex = 0;\n\t\t\t\t}\n\t\t\t}, signal);\n\t\t}\n\t\tbutton = action;\n\t}\n\tif (hidden) {\n\t\teffect(() => { button.hidden = hidden(ctx); }, signal);\n\t}\n\tif (title) {\n\t\teffect(() => { button.title = title(ctx); }, signal);\n\t}\n\tparent.insertBefore(button, anchor);\n\tif (createButtonIcon) {\n\t\tbutton.appendChild(createButtonIcon(ctx));\n\t} else {\n\t\tbutton.appendChild(createIcon(['icon', 'logo'], signal));\n\t}\n\tsignal.addEventListener('abort', () => { button.remove(); }, { once: true });\n}\n","import type { State, Theme } from '@yongdall/web';\nimport { createFrame, createTick, ErrorAlerter, loadNavButtons, Page, root as rootContainer } from '@yongdall/web';\nimport { Application, createIcon, effect } from '@yongdall/web';\n\nimport { cssPrefix } from '../styles/variables.mjs';\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\nimport { addButton } from '../utils/addButton.mts';\n\n\n\nconst prefix = `${cssPrefix}-base`;\nconst styleFiles = ['theme-base.css'];\n\nconst headerEl = document.createElement('header');\nconst header = headerEl.appendChild(document.createElement('div'));\nheader.classList.add(`${prefix}-header`);\nconst sidebar = headerEl.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n\nconst menuButton = header.appendChild(createIcon('menu', true));\nmenuButton.classList.add(`${prefix}-menu-button`);\n\nconst span = header.appendChild(document.createElement('span'));\n\nconst openedClassName = `${prefix}-menu-open`;\n\nmenuButton.addEventListener('click', () => {\n\tdocument.body.classList.toggle(openedClassName);\n});\n\n\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tdocument.body.classList.remove(openedClassName);\n});\n\n\nlet tick: State<number> | null = null;\nconst spinner = '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏';\n\n\nconst theme: Theme = {\n\ttitle(p) {\n\t\treturn [[\n\t\t\ttick && p.loading ? spinner[tick.get() % spinner.length] : '',\n\t\t\tp.unsaved ? '🔴' : '',\n\t\t\tp.title,\n\t\t].join(''), Application.title || '拥道YongDall'].filter(Boolean).join(' | ')\n\t},\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager(page) {\n\t\tlet shown = false;\n\t\teffect(() => {\n\t\t\tif (!page.current) {\n\t\t\t\tif (shown) { page.destroy(); }\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tshown = true;\n\t\t}, page.signal);\n\t},\n\telements: [headerEl, rootContainer],\n\tclassNames: [cssPrefix, prefix],\n\tstyleFiles,\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error); },\n\tasync setup(signal) {\n\t\ttick = createTick(80, signal);\n\t\tlogoLink.addEventListener('click', () => {\n\t\t\tif (window.innerWidth > 800) { return; }\n\t\t\tdocument.body.classList.remove(openedClassName);\n\t\t}, { signal });\n\n\t\tconst titleSpan = document.createElement('div');\n\t\ttitleSpan.classList.add(`${prefix}-header-title`);\n\t\teffect(() => {\n\t\t\ttitleSpan.innerText = Application.title || Application.company || '';\n\t\t}, signal);\n\t\theader.insertBefore(logoLink, span);\n\t\theader.insertBefore(titleSpan, span);\n\n\t\tif (window.innerWidth > 800) {\n\t\t\tdocument.body.classList.add(openedClassName);\n\t\t}\n\n\t\tsidebar.appendChild(menuContainer);\n\n\t\tconst panelContainer = document.createElement('div');\n\t\tpanelContainer.classList.add(`${prefix}-panels`);\n\t\tdocument.body.appendChild(panelContainer);\n\n\t\tpanelContainer.appendChild(userContainer);\n\t\tuserContainer.setAttribute('popover', 'auto');\n\t\tuserButton.addEventListener('click', () => { userContainer.showPopover(); }, { signal });\n\n\n\n\t\tconst actions = header.appendChild(document.createElement('div'));\n\t\tactions.classList.add(`${prefix}-actions`);\n\n\t\tconst anchor = actions.appendChild(document.createElement('span'));\n\t\tactions.appendChild(userButton);\n\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\ttitleSpan.remove();\n\t\t\tmenuContainer.remove();\n\t\t\tpanelContainer.remove();\n\t\t\tuserContainer.removeAttribute('popover');\n\t\t\tuserContainer.remove();\n\t\t\tuserButton.remove();\n\t\t\tanchor.remove();\n\t\t\tactions.remove();\n\t\t}, { once: true });\n\t\tfor await (const button of loadNavButtons()) {\n\t\t\tif (signal.aborted) { return; }\n\t\t\taddButton(anchor, panelContainer, button, signal);\n\t\t}\n\t},\n\n};\nexport default theme;\n","import { createIcon } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\n\nexport const prefix = `${cssPrefix}-tabs`;\n\nexport const headerEl = document.createElement('header');\nexport const header = headerEl.appendChild(document.createElement('div'));\nheader.classList.add(`${prefix}-header`);\nexport const sidebar = headerEl.appendChild(document.createElement('div'));\nsidebar.classList.add(`${prefix}-sidebar`);\n\nconst menuButton = header.appendChild(createIcon('menu', true));\nmenuButton.classList.add(`${prefix}-menu-button`);\n\nexport const span = header.appendChild(document.createElement('span'));\n\n\nexport const openedClassName = `${prefix}-menu-open`;\n\nmenuButton.addEventListener('click', () => {\n\tdocument.body.classList.toggle(openedClassName);\n});\n\n\nexport function closeSidebarWhenMobile() {\n\tif (window.innerWidth > 800) { return; }\n\tdocument.body.classList.remove(openedClassName);\n}\nsidebar.addEventListener('click', (e) => {\n\tif (e.target !== e.currentTarget) { return; }\n\tdocument.body.classList.remove(openedClassName);\n});\n","import type { Theme } from '@yongdall/web';\nimport { Application, createFrame, effect, ErrorAlerter, loadNavButtons, Page, root as rootContainer } from '@yongdall/web';\nimport { cssPrefix } from '../styles/variables.mjs';\nimport pageManager, { activityContainer, setMode } from '../pageManager/index.mjs';\n\nimport List from '../components/List.mjs';\nimport Pagination from '../components/Pagination.mjs';\nimport { default as home } from '../home/index.mjs';\nimport { menuContainer, updatePath } from '../workspace/index.mjs';\nimport { userButton, userContainer } from '../user/index.mjs';\nimport { logoLink } from '../logo.mjs';\nimport renderError from '../error/index.mjs';\n\nimport { header, closeSidebarWhenMobile, openedClassName, prefix, span } from './dom.mjs';\nimport { headerEl, sidebar } from './dom.mjs';\nimport createMenuButtons from '../menu/createMenuButtons.mjs';\nimport createMenuItem from '../menu/createMenuItem.mjs';\nimport createMenuButton from '../menu/createMenuButton.mjs';\nimport { addButton } from '../utils/addButton.mts';\n\n\n\nconst theme: Theme = {\n\ttitle(p) { return [p.title, Application.title || '拥道YongDall'].filter(Boolean).join(' | ') },\n\ticon(p) { return p.icon },\n\tcomponents: { List, Pagination, createMenuButtons, createMenuItem, createMenuButton },\n\tupdatePath,\n\tpageManager,\n\telements: [headerEl, rootContainer],\n\tclassNames: [cssPrefix, `${cssPrefix}-tabs`],\n\tstyleFiles: ['theme-tabs.css'],\n\thome,\n\talertError: ErrorAlerter,\n\trootClassName: `${cssPrefix}-root`,\n\tcreateFrame,\n\tcreatePage(show) { return new Page(show); },\n\trenderError(ctx, error) { renderError(ctx, error);},\n\tasync setup(signal) {\n\t\tsetMode(true);\n\t\tlogoLink.addEventListener('click', () => { closeSidebarWhenMobile(); }, {signal});\n\n\t\tconst titleSpan = document.createElement('div');\n\t\ttitleSpan.classList.add(`${prefix}-header-title`);\n\t\teffect(() => {\n\t\t\ttitleSpan.innerText = Application.title || Application.company || '';\n\t\t}, signal);\n\t\t\n\t\theader.insertBefore(logoLink, span);\n\t\theader.insertBefore(titleSpan, span);\n\t\theaderEl.appendChild(activityContainer);\n\n\t\tif (window.innerWidth > 800) {\n\t\t\tdocument.body.classList.add(openedClassName);\n\t\t}\n\n\t\tsidebar.appendChild(menuContainer);\n\n\t\tconst panelContainer = document.createElement('div');\n\t\tpanelContainer.classList.add(`${prefix}-panels`);\n\t\tdocument.body.appendChild(panelContainer);\n\n\t\tpanelContainer.appendChild(userContainer);\n\t\tuserContainer.setAttribute('popover', 'auto')\n\t\tuserButton.addEventListener('click', () => { userContainer.showPopover(); }, {signal});\n\n\n\t\tconst actions = header.appendChild(document.createElement('div'));\n\t\tactions.classList.add(`${prefix}-actions`);\n\n\t\tconst anchor = actions.appendChild(document.createElement('span'));\n\t\tactions.appendChild(userButton);\n\n\n\t\tsignal.addEventListener('abort', () => {\n\t\t\tlogoLink.remove();\n\t\t\ttitleSpan.remove();\n\t\t\tactivityContainer.remove();\n\t\t\tmenuContainer.remove();\n\t\t\tuserContainer.removeAttribute('popover')\n\t\t\tuserContainer.remove();\n\t\t\tuserButton.remove();\n\t\t}, {once: true});\n\t\t\t\tfor await (const button of loadNavButtons()) {\n\t\t\t\t\tif (signal.aborted) { return; }\n\t\t\t\t\taddButton(anchor, panelContainer, button, signal);\n\t\t\t\t}\n\t},\n\n};\n\nexport default theme;\n"],"mappings":"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"}