@yongdall/pages 0.1.0
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/assets.yongdall.mjs +3 -0
- package/hooks.yongdall.mjs +42 -0
- package/hooks.yongdall.mjs.map +1 -0
- package/index.mjs +8 -0
- package/index.mjs.map +1 -0
- package/package.json +18 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//#region packages/pages/hooks.yongdall.mjs
|
|
2
|
+
const enumerations = { page: [
|
|
3
|
+
{
|
|
4
|
+
page: "@yongdall/pages#list",
|
|
5
|
+
label: "文档列表",
|
|
6
|
+
type: "main"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
page: "@yongdall/pages#details",
|
|
10
|
+
label: "文档查看",
|
|
11
|
+
type: "details"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
page: "@yongdall/pages#details",
|
|
15
|
+
label: "文档查看",
|
|
16
|
+
type: "edit"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
page: "@yongdall/pages#edit",
|
|
20
|
+
label: "文档编辑",
|
|
21
|
+
type: "details"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
page: "@yongdall/pages#edit",
|
|
25
|
+
label: "文档编辑",
|
|
26
|
+
type: "edit"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
page: "@yongdall/pages#new",
|
|
30
|
+
label: "文档创建",
|
|
31
|
+
type: "input"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
page: "@yongdall/pages#new",
|
|
35
|
+
label: "文档复制",
|
|
36
|
+
type: "copy"
|
|
37
|
+
}
|
|
38
|
+
] };
|
|
39
|
+
|
|
40
|
+
//#endregion
|
|
41
|
+
export { enumerations };
|
|
42
|
+
//# sourceMappingURL=hooks.yongdall.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.yongdall.mjs","names":[],"sources":["../../packages/pages/hooks.yongdall.mjs"],"sourcesContent":["export const enumerations = {\n\tpage: [\n\t\t{ page: '@yongdall/pages#list', label: '文档列表', type: 'main' },\n\t\t{ page: '@yongdall/pages#details', label: '文档查看', type: 'details' },\n\t\t{ page: '@yongdall/pages#details', label: '文档查看', type: 'edit' },\n\t\t{ page: '@yongdall/pages#edit', label: '文档编辑', type: 'details' },\n\t\t{ page: '@yongdall/pages#edit', label: '文档编辑', type: 'edit' },\n\t\t{ page: '@yongdall/pages#new', label: '文档创建', type: 'input' },\n\t\t{ page: '@yongdall/pages#new', label: '文档复制', type: 'copy' },\n\t]\n};\n"],"mappings":";AAAA,MAAa,eAAe,EAC3B,MAAM;CACL;EAAE,MAAM;EAAwB,OAAO;EAAQ,MAAM;EAAQ;CAC7D;EAAE,MAAM;EAA2B,OAAO;EAAQ,MAAM;EAAW;CACnE;EAAE,MAAM;EAA2B,OAAO;EAAQ,MAAM;EAAQ;CAChE;EAAE,MAAM;EAAwB,OAAO;EAAQ,MAAM;EAAW;CAChE;EAAE,MAAM;EAAwB,OAAO;EAAQ,MAAM;EAAQ;CAC7D;EAAE,MAAM;EAAuB,OAAO;EAAQ,MAAM;EAAS;CAC7D;EAAE,MAAM;EAAuB,OAAO;EAAQ,MAAM;EAAQ;CAC5D,EACD"}
|
package/index.mjs
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{Command as e,Menu as t,Pagination as n,Search as r,User as i,createComputed as a,createQuickFilters as o,createShowField as s,createState as c,createStore as l,effect as u,filterPermission as d,formLayoutsService as f,getAuthorizations as p,getPatternFields as m,modelService as h,renderForm as g,runPattern as _,showFilterDialog as v,waitAbortSignal as y,watch as b,webRoot as x}from"@yongdall/web";import S from"@yongdall/web/plugin";
|
|
2
|
+
/*!
|
|
3
|
+
* @neeloong/table v0.0.2
|
|
4
|
+
* (c) 2023-2024 匿龙NeeLoong
|
|
5
|
+
* @license MIT
|
|
6
|
+
*/
|
|
7
|
+
function C(e){return typeof e==`function`?e:typeof e==`string`&&e?t=>t[e]:e=>e.id}function w(e){return typeof e==`function`?e:typeof e==`string`&&e?t=>t[e]:()=>void 0}const T=new Set([`vertical-lr`,`vertical-rl`,`sideways-lr`,`sideways-rl`]);function E(e,t,n,r,i){let a=[...t],o=[...n];for(;o.length+a.length;){if(!o.length){for(let t of a)e.appendChild(t.el),r(t);break}if(!a.length){for(let e of o)e.el.remove(),i(e);break}let[t]=o,[n]=a;if(t.el===n.el){o.shift(),a.shift(),r(n);continue}n.index<=t.index&&(e.insertBefore(n.el,t.el),r(n),a.shift()),t.index<=n.index&&(t.el.remove(),i(t),o.shift())}return t}function D(e){let{elMap:t}=e;return t||(t=new Map,e.elMap=t,t)}function O(e,t){let n=D(e),r=n.get(t);if(r)return r.index=e.index,r;let i=e.createProxy();return n.set(t,i),i}function k(e,t,n,r,i,a){let o=new Set;for(let s=r;s<=i;s++){let r=n[s];if(typeof r!=`number`)continue;let i=e[r];if(!i)continue;let c=O(i,a);if(o.has(c))continue;o.add(c);let{parentId:l}=i;if(l===void 0)continue;let u=t.get(l);for(;u;){let e=D(u),n=e.get(a);if(!n)n=u.createProxy(),e.set(a,n);else if(o.has(n))break;o.add(n);let{parentId:r}=u;if(r===void 0)break;u=t.get(r)}}return[...o].sort(({index:e},{index:t})=>e-t)}function A(e){}function j(e){for(let t of e.shown)t.el.remove();e.shown=[]}function M(e,t,n,r){if(e<t[n])return n;if(e>t[r])return r+1;let i=Math.floor((n+r)/2),a=t[i];return a===e?i:i===n?r:a<e?i+1>=r?i+1:M(e,t,i+1,r):i-1<n?i:M(e,t,n,i-1)}function N(){}function P(e,t,n,r,i){let{render:a,field:o}=n,s=!1,c=new Set,{listen:l}=e,u=a({...t,value:o?t.data?.[o]:void 0},Object.assign(Object.create(e),{listen:(e,t)=>{if(s)return N;let n=l(e,t),r=()=>{n(),c.delete(r)};return c.add(r),r}})),d=u.root;return d.classList.add(`neeloong-table-cell`),{el:d,index:r,column:n,destroy(){if(!s){s=!0,u.destroy();for(let e of[...c])e();i()}},setHidden:u.setHidden.bind(u),update(e){u.update({...e,value:o?e.data?.[o]:void 0})}}}function F(e){let{column:t}=e,{el:n}=e;n.style.setProperty(`--neeloong-table-column-start`,`${t.start}px`),n.style.inlineSize=`${t.width}px`,t.spillable?n.classList.remove(`neeloong-table-cell-ellipsis`):n.classList.add(`neeloong-table-cell-ellipsis`),e.setHidden(!1)}function I(e,t,n,r,i,a,o,s,c,l){let u=M(e.index,a,0,a.length-1),{el:d,row:{id:f},cells:p,api:m}=e;t===f?d.classList.add(`neeloong-table-row-hover`):d.classList.remove(`neeloong-table-row-hover`),n===f?d.classList.add(`neeloong-table-row-selected`):d.classList.remove(`neeloong-table-row-selected`),r.has(f)?d.classList.add(`neeloong-table-row-checked`):d.classList.remove(`neeloong-table-row-checked`),d.style.insetBlockStart=`${o*u}px`,d.style.blockSize=`${o}px`;let h=new Set,g=Math.min(i,c);function _(t){let n=s[t];if(n.hidden)return;let r=n.start,a=p.get(n);if(a)a.index=r;else{let t=!1;function i(){t||(t=!0,p.get(n)===a&&p.delete(n))}a=P(m,e.row.value,n,r,i),t||p.set(n,a)}h.add(a),t<i?a.el.classList.add(`neeloong-table-cell-fixed`):a.el.classList.remove(`neeloong-table-cell-fixed`)}for(let e=0;e<g;e++)_(e);for(let e=c;e<=l;e++)_(e);e.shown=E(d,[...h].sort(({index:e},{index:t})=>e-t),e.shown,F,A)}function L([e,t],[n,r],i,a,o,s,c,l,u,d,f,p,m){return E(m,k(i,a,o,e,t,m),c,e=>I(e,l,u,d,s,o,f,p,n,r),j)}function R(e){for(let t of e)t.el.remove(),j(t);return[]}function z(e,t,n,r){let i=Math.max(0,Math.floor(t/e)),a=Math.min(r,Math.ceil(n/e));return i>a?null:[i,a]}function B(e,t,n){if(t>=n)return null;let r=e.findIndex(e=>e>t);if(r<0)return null;let i=Math.max(r-1,0),a=e.findIndex(e=>e>n,r),o=a<0?e.length-2:Math.max(a-1,0);return i>o?null:[i,o]}function V(e,t){let n=[0,0,window.innerWidth,window.innerHeight];for(let{left:e,top:r,right:i,bottom:a}of t())n=[Math.max(n[0],e),Math.max(n[1],r),Math.min(n[2],i),Math.min(n[3],a)];let{left:r,top:i,width:a,height:o}=e.getBoundingClientRect(),s=n[2]-r-a,c=n[3]-i-o;return[[-r+n[0],a,-s],[-i+n[1],o,-c]]}function H(e){let t=e.customize({column:e.options})||null;return t?(t&&t.root.classList.add(`neeloong-table-customize`),[t,{fixed:!1,hidden:!1}]):null}var U=class{root;#e=document.createElement(`div`);#t=()=>[];get getClientRects(){return this.#t}set getClientRects(e){this.#c||(this.#t=e,this.requestRender())}#n=0;get rowHeight(){return this.#n}set rowHeight(e){this.#c||(this.#n=e,this.root.style.setProperty(`--neeloong-table-row-height`,`${e}px`),this.requestRender())}#r;#i;constructor(e,t,n){this.#i=n,this.#r=t;let r=e||document.createElement(`div`);this.root=r;let i=r.appendChild(this.#e);r.classList.add(`neeloong-table`,`neeloong-table-body`),i.classList.add(`neeloong-table-main`),this.rowHeight=24}#a=[];#o=new Map;#s=[];_updateColumns(e){let t=this.#o,n=new Map,r=[];this.#s=r,this.#o=n;let i=this.root;for(let a of e){let e=t.get(a);t.delete(a);let o=e===void 0?H(a):e;if(n.set(a,o),r.push(o),!o)continue;let[s]=o;i.appendChild(s.root),s.update?.(a.options)}for(let e of t.values()){if(!e)continue;let[t]=e;t.root.remove(),t.destroy()}}_hide(){this.#a=R(this.#a)}#c=!1;destroy(){if(!this.#c){this.#c=!0,this.#i(),this._hide();for(let e of this.#s){if(!e)continue;let[t]=e;t.root.remove(),t.destroy()}}}#l=``;paused=!1;requestRender(){this.#c||(this.#l=``,this.#r.requestRender(this))}_render(e,t,n,r,i,a,o,s,c,l=!1){if(this.#c||this.paused)return;let{root:u}=this,d=getComputedStyle(u),f=d.writingMode?.toLowerCase(),p=T.has(f),m=V(u,this.getClientRects);p&&m.reverse(),[`vertical-rl`,`sideways-rl`].includes(f)&&m[1].reverse(),d.direction.toLowerCase()===`rtl`!=(f===`sideways-lr`)&&m[0].reverse();let h=m.toString();if(!l&&this.#l===h)return;this.#l=h;let[g,_]=m,v=this.#n,y=z(v,_[0],_[1]-_[2],t.length);if(!y)return this._hide();W(e,this.#s);let b=B(s,g[0],g[1]-g[2]);if(!b)return this._hide();this.#a=L(y,b,t,n,r,c,this.#a,i,a,o,v,e,this.#e)}};function W(e,t){let n=0;for(let{width:r,hidden:i,start:a,fixed:o}of e){let e=t[n];if(n++,!e)continue;let[{root:s},c]=e;o!==c.fixed&&(c.fixed=o,o?s.classList.add(`neeloong-table-customize-fixed`):s.classList.remove(`neeloong-table-customize-fixed`)),i!==c.hidden&&(c.hidden=i,s.hidden=i),!i&&(c.start!==a&&(c.start=a,s.style.setProperty(`--neeloong-table-column-start`,`${a}px`)),c.width!==r&&(c.width=r,s.style.inlineSize=`${r}px`))}}function G(e,t){let n,r=!1;function i(t){r||=(n=e(t),t.currentTarget.setPointerCapture(t.pointerId),!0)}function a(e){e.currentTarget.hasPointerCapture(e.pointerId)&&t(e,n)}function o(e){let{pointerId:t}=e;try{e.currentTarget.releasePointerCapture(t)}catch(e){console.error(e)}r=!1}return[i,a,o]}function K(e,t,n){let r=document.createElement(`div`);r.classList.add(`neeloong-table-resize`);let i=n.header({column:n.options});i.root.classList.add(`neeloong-table-header`);let[a,o,s]=G(e=>{let t=getComputedStyle(r),n=t.writingMode?.toLowerCase(),i=T.has(n);return(t.direction.toLowerCase()===`rtl`==(n===`sideways-lr`)?1:-1)*(i?e.offsetY:e.offsetX)},(i,a)=>{if(!n.resizable)return;let o=t.getBoundingClientRect(),s=getComputedStyle(r),c=s.writingMode?.toLowerCase(),l=T.has(c),u=l?o.y:o.x,d=l?o.height:o.width,f=l?i.clientY:i.clientX,p=s.direction.toLowerCase()===`rtl`==(c===`sideways-lr`)?f-a-u:u+d-(f+a);n.width=Math.max(1,n.minWidth||0,Math.min(p-n.start,n.maxWidth||1/0)),e()});return r.addEventListener(`pointerdown`,e=>{n.resizable&&a(e)}),r.addEventListener(`pointermove`,o),r.addEventListener(`pointercancel`,s),r.addEventListener(`pointerup`,s),[i,r,{fixed:!1,hidden:!1,resizable:!1}]}var q=class{root;#e;#t;constructor(e,t,n){this.#t=n,this.#e=t;let r=e||document.createElement(`div`);this.root=r,r.classList.add(`neeloong-table`,`neeloong-table-headers`),r.appendChild(document.createElement(`div`)).className=`neeloong-table-fixed-line`}#n=new Map;#r=[];_updateColumns(e){let t=this.#n,n=new Map,r=[],i=()=>{this.#e.requestRender()};this.#r=r,this.#n=n;let a=this.root;for(let o of e){let e=t.get(o)||K(i,a,o);t.delete(o),n.set(o,e),r.push(e);let[s,c]=e;a.appendChild(s.root),a.appendChild(c),s.update?.(o.options)}for(let e of t.values()){if(!e)continue;let[t,n]=e;t.root.remove(),n.remove(),t.destroy()}}_hide(){}#i=!1;destroy(){if(!this.#i){this.#i=!0,this.#t(),this._hide();for(let e of this.#r){if(!e)continue;let[t,n]=e;t.root.remove(),n.remove(),t.destroy()}}}paused=!1;requestRender(){this.#i||this.#e.requestRender(this)}_render(e,t=!1){if(this.#i)return;let n=this.#r,r=0;for(let{width:t,hidden:i,start:a,fixed:o,resizable:s,end:c}of e){let e=n[r];if(r++,!e)continue;let[{root:l},u,d]=e;o!==d.fixed&&(d.fixed=o,o?(l.classList.add(`neeloong-table-header-fixed`),u.classList.add(`neeloong-table-resize-fixed`)):(l.classList.remove(`neeloong-table-header-fixed`),u.classList.remove(`neeloong-table-resize-fixed`))),i!==d.hidden&&(d.hidden=i,l.hidden=i,u.hidden=i),!i&&(d.start!==a&&(d.start=a,l.style.setProperty(`--neeloong-table-column-start`,`${a}px`)),d.end!==c&&(d.end=c,u.style.setProperty(`--neeloong-table-column-start`,`${c}px`)),s!==d.resizable&&(d.resizable=s,s?u.classList.add(`neeloong-table-resize-resizable`):u.classList.remove(`neeloong-table-resize-resizable`)),d.width!==t&&(d.width=t,l.style.inlineSize=`${t}px`))}}};function J(e,t){let n=0,r=[n],i=0;for(let a of e){let{width:e,hidden:o}=a;a.fixed=i<t,i++,a.start=n,o||(n+=e),a.end=n,r.push(n)}return r}function Y(e){if(!e)return[];if(!Array.isArray(e))return Y([e]);let t=[];for(let n of e){if(typeof n==`function`){t.push([n,{}]);continue}let{extension:e}=n;typeof e==`function`&&t.push([e,n])}return t}const ee=({column:{title:e=``}})=>{let t=document.createElement(`div`);return t.innerText=e,{root:t,destroy(){},update(e){t.innerText=e.title||``}}},te=({value:e})=>{let t=document.createElement(`div`);function n(e){t.innerText=e??``}return n(e),{root:t,destroy(){},setHidden(){},update:e=>n(e.value)}},ne=()=>({root:document.createElement(`div`),destroy:N,setHidden:N,update:N}),X=()=>({updateData:N,render:ne,header:ne,customize:N});function re(e,t,n,r){let i=typeof e.render==`function`?e.render:te,a=typeof e.header==`function`?e.header:ee,o=!1,s=[],c=t=>o?X():(s.push((e,n)=>t(n)),{...e,render:i,header:a,updateData:N,customize:N}),l=[];l[t.length]=s;let u=[];for(let i=t.length-1;i>=0;i--){let a=[];l[i]=a;let s=t[i],d=c;c=t=>{if(o)return X();let{updateData:c,updateOptions:l,destroy:f,customize:p,...m}=s(n[i]||{},t,r,d,e);return typeof l==`function`&&a.push(l),typeof f==`function`&&u.push(f),{...m,updateData:typeof c==`function`?c:N,customize:typeof p==`function`?p:N}}}function d(e,t){if(o)return;n=e;let r=l.map(e=>[...e]);for(let e=0;e<r.length;e++){let i=n[e]||{};for(let n of r[e])n(i,t)}}function f(){if(!o){o=!0;for(let e of u)e()}}return[c,d,f]}function ie(e,t,n,r,i){let[a,o,s]=re(t,n,r,e),c={width:0,hidden:!1,resizable:!1,minWidth:0,maxWidth:1/0},l=a(({width:e,minWidth:t,maxWidth:n,resizable:r,hidden:a})=>{e&&(c.width=Math.max(e,1),i()),typeof a==`boolean`&&(c.hidden=a,i()),typeof t==`number`&&Number.isFinite(t)&&t>0&&(c.minWidth=t),typeof n==`number`&&!Number.isNaN(t)&&n>0&&(c.maxWidth=n),typeof r==`boolean`&&(c.resizable=r,i())}),{updateData:u,header:d,width:f,render:p,customize:m,field:h}=l,{title:g}=l,{meta:_,resizable:v,minWidth:y,maxWidth:b,spillable:x,hidden:S}=l;c.width||=Math.max(1,f||200),typeof S==`boolean`&&(c.hidden=S),typeof v==`boolean`&&(c.resizable=v),y&&(c.minWidth=y),b&&(c.maxWidth=b);let{key:C}=t,w={get key(){return C},get meta(){return _},get field(){return h},get title(){return g},get width(){return c.width},get minWidth(){return c.minWidth},get maxWidth(){return c.maxWidth},get resizable(){return c.resizable},get hidden(){return c.hidden}};return{fixed:!1,options:t,key:C,extensions:n,start:0,end:0,updateData:u||N,update(e,t){g=typeof e.title==`string`?g:``,o(t,e)},destroy(){s()},get width(){return c.width},set width(e){c.width=e},get minWidth(){return c.minWidth},get maxWidth(){return c.maxWidth},get resizable(){return c.resizable},get hidden(){return c.hidden},title:g,render:(t,n)=>p({...t,rowApi:n,api:e,column:w,meta:_}),header:e=>d(e),customize:e=>m(e),field:h,meta:_,spillable:x}}function ae(e,t,n,r,i=[]){let a=[];for(let o of i){let i=Y(o.extensions),s=i.map(e=>e[0]),c=i.map(e=>e[1]),{field:l}=o,{meta:u}=o,d=o.key||l,{length:f}=s,p=n.findIndex(e=>{if(e.meta!==u||e.field!==l||e.key!==d)return;let{extensions:t}=e;if(e.extensions.length===s.length){for(let e=0;e<f;e++)if(t[e]!==s[e])return;return!0}}),m=p<0?ie(t,o,s,c,e):n.splice(p,1)[0];a.push(m),p>=0?m.update(o,c):m.updateData(r)}for(let e of n)e.destroy();return a}var oe=class{#e;#t=0;get startFixed(){return this.#t}set startFixed(e){this.#l||(this.#t=e,this.requestRender())}#n;#r;#i;constructor(e,t,n){this.#n=n,this.#r=t,this.#i=()=>e.requestRender(this),this.#e={toggleSelected:t=>e.toggleSelected(t),setCollapse:(t,n)=>e.setCollapse(t,n),isCollapsed:t=>e.isCollapsed(t),setChecked:(t,n)=>e.setChecked(t,n),isChecked:t=>e.isChecked(t),isAllChecked:()=>e.isAllChecked(),hasChecked:()=>e.hasChecked(),checkedAll:()=>e.checkedAll(),cleanChecked:()=>e.cleanChecked(),emit:e.emit,listen:e.listen,emitRow:e.emitRow,listenRow:e.listenRow,setStyleVar:(e,t)=>this.setStyleVar(e,t),removeStyleVar:e=>this.removeStyleVar(e)}}createHeader(e){let t=new q(e,this,()=>{this.#d.delete(t)});if(t.requestRender=()=>this.requestRender(t),this.#d.add(t),this.#l)t.destroy();else{t._updateColumns(this.#a);for(let[e,n]of this.#f)t.root.style.setProperty(e,n)}return this.requestRender(t),t}createBody(e,t){let n=new U(e,this,()=>{this.#u.delete(n)});if(t&&t>0&&(n.rowHeight=t),n.requestRender=()=>this.requestRender(n),this.#u.add(n),this.#l)n.destroy();else{n._updateColumns(this.#a);for(let[e,t]of this.#f)n.root.style.setProperty(e,t)}return this.requestRender(n),n}#a=[];get columns(){return this.#a}_updateData(e){this.#o();for(let t of this.#a)t.updateData(e)}setColumns(e){if(this.#l)return;let t=ae(()=>this.requestRender(),this.#e,this.#a,this.#r(),e||[]);this.#a=t;for(let e of this.#d)e._updateColumns(t);for(let e of this.#u)e._updateColumns(t);this.requestRender()}#o(){for(let e of this.#d)e._hide();for(let e of this.#u)e._hide()}paused=!1;#s=new Set;#c=!1;requestRender(e){this.#l||(this.#i(),e?this.#s.add(e):this.#c=!0)}#l=!1;destroy(){if(!this.#l){this.#l=!0,this.#n(),this.#o();for(let e of[...this.#d])e.destroy();for(let e of[...this.#u])e.destroy();for(let e of this.#a)e.destroy();this.#a=[]}}#u=new Set;#d=new Set;_render(e,t,n,r,i,a,o=this.#c){if(this.#l)return;this.setStyleVar(`row-visible`,`${n.length}`);let{startFixed:s}=this,c=this.#a,l=J(c,s),u=l[l.length-1];this.setStyleVar(`width`,`${u}px`);let d=s<l.length&&l[s]||0;if(this.setStyleVar(`fixed-start-width`,`${d>0?d:-100}px`),this.paused)return;this.#c=!1;let f=new Set(this.#s);this.#s.clear();for(let e of this.#d)e._render(c,o||f.has(e));for(let u of this.#u)u._render(c,e,t,n,r,i,a,l,s,o||f.has(u))}#f=new Map;setStyleVar(e,t){let n=`--neeloong-table-${e}`;this.#f.set(n,t);for(let e of this.#d)e.root.style.setProperty(n,t);for(let e of this.#u)e.root.style.setProperty(n,t)}removeStyleVar(e){let t=`--neeloong-table-${e}`;this.#f.delete(t);for(let e of this.#d)e.root.style.removeProperty(t);for(let e of this.#u)e.root.style.removeProperty(t)}};function Z(e,t){let{length:n}=e;if(n!==t.length)return!1;for(let r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}function se(e,t){let n=t in e&&e[t];return n instanceof Set?n:(n=new Set,e[t]=n,n)}function ce(e){return(t,n)=>{let r=se(e,t),i=(...e)=>n(...e);return r.add(i),()=>{r.delete(i)}}}function le(e){return(t,n,r)=>{let i=t in e&&e[t];if(!(i instanceof Set))return!0;let a=!0,o=!1,s=!!r?.cancelable,c={stop(){o=!0},prevent(){a=!0},get cancelable(){return s},get prevented(){return a}};for(let e of[...i])if(e(n,c),o)break;return!a}}function ue(e,t){let n=e.get(t);return n||(n=new Map,e.set(t,n),n)}function de(e,t){let n=e.get(t);return n||(n=new Set,e.set(t,n),n)}function fe(e){return(t,n,r)=>{let i=ue(e,t),a=de(i,n),o=(...e)=>r(...e);return a.add(o),()=>{a.delete(o),!a.size&&(i.delete(n),!i.size&&e.delete(t))}}}function pe(e){return(t,n,r,i)=>{let a=e.get(t)?.get(n);if(!a)return!0;let o=!0,s=!1,c=!!i?.cancelable,l={stop(){s=!0},prevent(){o=!0},get cancelable(){return c},get prevented(){return o}};for(let e of[...a])if(e(r,l),s)break;return!o}}function*me(e,t){if(t.has(e.id))for(let n of e.children)yield n.index,yield*me(n,t)}function he(e,t,n){let r=t.get(e.parentId);for(;r;){if(!n.has(r.id))return!1;r=t.get(r.parentId)}return!0}function ge(e,t,n,r,i){if(!e.children.length||!he(e,n,r))return!1;let{index:a}=e,o=M(a+1,i,0,i.length-1);if(o<0)return!1;let s=M(a+e.descendants.length,i,0,i.length-1);i[s]>a+e.descendants.length&&s--;let c=s-o+1;if(i.splice(o,c),t)return!0;let l=o;for(let t of me(e,r))i.splice(l,0,t),l++;return!0}function _e(e,t,n){let r=[],{length:i}=e;for(let a=0;a<i;a++)he(e[a],t,n)&&r.push(a);return r}function ve(e,t,n){let r=[],i=new Map;for(let a of e||[]){let e=t(a),o=i.get(e);if(o){o[1]=a;continue}o=[e,a,n(a)],i.set(e,o),r.push(o)}return r}function ye(e){let t=new Set(e.map(e=>e[0])),n=[],r=new Map;for(let i of e){let e=i[2];if(e===void 0||!t.has(e)){n.push(i);continue}let a=r.get(e);if(a){a.push(i);continue}r.set(e,[i])}function*i(e){for(let t of e){yield t;let e=t[0],n=r.get(e);n&&(r.delete(e),yield*i(n))}}let a=[...i(n)];for(;r.size;){let[e]=r.keys(),t=r.get(e);if(r.delete(e),t)for(let e of i(t))a.push(e)}return a}function be(e){let t=document.createElement(`div`);return t.className=`neeloong-table-row`,t.addEventListener(`click`,n=>{for(let e of n.composedPath()){if(e===t)break;if(e instanceof Element&&e.classList.contains(`neeloong-table-selectable`))return}e()}),t.appendChild(document.createElement(`div`)).className=`neeloong-table-fixed-line`,t}function xe(e,t,n,r,i){return{emit:i,listen:r,setCollapse:n=>e.setCollapse(t,n),get collapsed(){return e.isCollapsed(t)},set collapsed(n){e.setCollapse(t,n)},setChecked:n=>{e.setChecked(t,n)},get checked(){return e.isChecked(t)},set checked(n){e.setChecked(t,n)},addClass(...e){n.classList.add(...e)},removeClass(...e){n.classList.remove(...e)},hasClass(e){return n.classList.contains(e)}}}function Se(e,t,n,r,i,a){let o=ye(ve(t,C(i),w(a))),s=[],c=new Map,l=new Set,u=[],d=[],f=0;for(let[t,i,a]of o){let o=c.get(t);if(o){o.value.data=i;continue}o=r.get(t);let p=a===void 0?0:u.lastIndexOf(a)+1;if(u.length=p,d.length=p,o)r.delete(t),l.add(o),o.index=f,o.parentId=p?a:void 0,o.value={id:t,data:i,parentId:a,level:p,children:[]},o.descendants=[],o.children=[];else{let r=e.emitRow.bind(null,t),s=e.listenRow.bind(null,t);o={index:f,parentId:a,emit:r,listen:s,value:{id:t,data:i,parentId:p?a:void 0,level:p,children:[]},id:t,descendants:[],children:[],createProxy(){let i=be(()=>e.toggleSelected(this.id));return i.addEventListener(`pointerenter`,()=>{n(t)}),i.addEventListener(`pointerleave`,()=>{n()}),{el:i,index:this.index,row:this,cells:new Map,shown:[],api:xe(e,t,i,s,r)}}}}f++;let m=d[d.length-1];m&&(m.value.children.push(o.value),m.children.push(o));for(let e of d)e.descendants.push(o);d.push(o),u.push(t),c.set(t,o),s.push(o)}for(let e of l){let{value:t,elMap:n}=e;if(n)for(let e of[...n.values()].flatMap(e=>[...e.cells.values()]))e&&e.update(t)}for(let e of r.values()){let{elMap:t}=e;if(t)for(let e of[...t.values()].flatMap(e=>[...e.cells.values()]))e&&e.destroy()}return[s,c]}var Ce=class{#e=[];#t=new Map;#n;#r;#i=[];#a=new Map;emitRow=pe(this.#a);listenRow=fe(this.#a);#o={};emit=le(this.#o);listen=ce(this.#o);#s=!1;get selectable(){return this.#s}set selectable(e){if(e){this.#s=!0;return}this.#s=!1;let t=this.#c;t!==void 0&&(this.#c=void 0,this.requestRender(),this.emit(`selectedChange`,void 0),this.emitRow(t,`selectedChange`,!1))}paused=!1;#c;get selectedId(){return this.#c}set selectedId(e){if(!this.#s)return;let t=this.#c;e!==t&&(this.#c=e,this.requestRender(),this.emit(`selectedChange`,e),t!==void 0&&this.emitRow(t,`selectedChange`,!1),e!==void 0&&this.emitRow(e,`selectedChange`,!0))}toggleSelected(e){if(!this.#s)return;let t=this.#c,n=t===e?void 0:e;this.#c=n,this.requestRender(),this.emit(`selectedChange`,n),t!==void 0&&t!==e&&this.emitRow(t,`selectedChange`,!1),e!==void 0&&this.emitRow(e,`selectedChange`,!0)}#l=[];#u=new Set;#d=!1;get checked(){return[...this.#l]}set checked(e){let t=new Set,n=this.#t,r=[];for(let i of e)t.has(i)||n.has(i)&&(t.add(i),r.push(i));if(Z(this.#l,r))return;let i=this.#u,a=new Set(r);this.#l=r,this.#u=a,this.#d=a.size===n.size,this.requestRender(),this.emit(`checkedChange`,[...r]);for(let e of a)i.has(e)||this.emitRow(e,`checkedChange`,!0);for(let e of i)a.has(e)||this.emitRow(e,`checkedChange`,!1)}isChecked(e){return this.#u.has(e)}setChecked(e,t){let n=this.#t;if(!n.has(e))return!1;let r=this.#u;if(typeof t==`boolean`){if(t===r.has(e))return t}else t=!r.has(e);let i=this.#l;if(t)i.push(e),r.add(e),this.#d=r.size===n.size;else{let t=i.indexOf(e);t>=0&&i.splice(t,1),r.delete(e),this.#d=!1}return this.requestRender(),this.emit(`checkedChange`,[...this.#l]),this.emitRow(e,`checkedChange`,t),t}get allChecked(){return this.#d}checkedAll(){let e=this.#e.map(e=>e.id);if(Z(this.#l,e))return;let t=this.#u,n=new Set(e);this.#l=e,this.#u=n,this.#d=!0,this.requestRender(),this.emit(`checkedChange`,[...this.#l]);for(let e of n)t.has(e)||this.emitRow(e,`checkedChange`,!0)}cleanChecked(){let e=this.#l;if(e.length){this.#l=[],this.#u=new Set,this.#d=!1,this.requestRender(),this.emit(`checkedChange`,[...this.#l]);for(let t of e)this.emitRow(t,`checkedChange`,!1)}}#f=new Set;get expanded(){return[...this.#f]}set expanded(e){let t=[...e],n=this.#f;if(t.length===n.size&&t.findIndex(e=>!n.has(e))<0)return;let r=this.#t,i=this.#e,a=new Set(n),o=new Set;n.clear();for(let e of t){let t=r.get(e);t&&(n.add(e),a.delete(e)||o.add(t))}for(let e of a)r.get(e)?.emit(`collapseChange`,!0);for(let e of o)e.emit(`collapseChange`,!1);this.#i=_e(i,r,n),this.requestRender()}isCollapsed(e){return!this.#f.has(e)}setCollapse(e,t){let n=this.#t,r=n.get(e);if(!r)return;let i=this.#f,a=typeof t==`boolean`?t:i.has(e);if(i.has(e)!==a)return;i[a?`delete`:`add`](e);let o=this.#i;ge(r,a,n,i,o)&&this.requestRender(),r.emit(`collapseChange`,a),this.emit(`collapseChange`,[...this.#f])}isAllChecked(){return this.#d}hasChecked(){return this.#u.size>0}constructor({idKey:e,parentKey:t}={}){this.#n=e,this.#r=t}createGroup(e,t){let n=new oe(this,()=>this.#x,()=>{this.#p.delete(n)});return n.startFixed=t||0,n.requestRender=()=>this.requestRender(n),this.requestRender(n),this.#p.add(n),n.setColumns(e),n}#p=new Set;#m=requestAnimationFrame(()=>{this.#b()});#h=new Set;#g=!1;requestRender(e){e?this.#h.add(e):this.#g=!0}*#_(){let e=[...this.#p];if(this.#g){this.#g=!1,this.#h.clear();for(let t of e)yield[t,!0];return}let t=new Set(this.#h);this.#h.clear();for(let n of e)yield[n,t.has(n)]}#v=!1;destroy(){if(!this.#v){this.#v=!0,cancelAnimationFrame(this.#m);for(let e of[...this.#p])e.destroy()}}#y;#b(){if(this.#v||(this.#m=requestAnimationFrame(()=>{this.#b()}),this.paused))return;let e=[...this.#_()],t=this.#i,n=this.#c,r=this.#u,i=this.#t,a=this.#e,o=this.#y;for(let[s,c]of e)s._render(a,i,t,o,n,r,c)}#x=[];setValue(e){let t=this.#t,[n,r]=Se(this,e,e=>{this.#y=e,this.requestRender()},t,this.#n,this.#r);this.#e=n,this.#t=r;let i=n.map(e=>e.value);this.#x=Object.freeze(i);for(let e of this.#p)e._updateData(i);let a=this.#f;this.#i=_e(n,r,a),this.requestRender();let o=[];for(let e of this.#l)r.has(e)&&o.push(e);if(Z(this.#l,o))return;let s=new Set(o);this.#l=o,this.#u=s,this.#d=s.size===r.size,this.requestRender(),this.emit(`checkedChange`,[...this.#l])}};const Q={selectable:`neeloong-table-selectable`,checkable:`neeloong-table-checkable`};function we(e){return t=>{let{rowApi:n}=t,r=document.createElement(`input`);r.type=`checkbox`;let i=document.createElement(`div`);i.appendChild(r),i.classList.add(Q.checkable),i.classList.add(Q.selectable),r.checked=n.checked,r.addEventListener(`change`,()=>{n.checked=r.checked});let a=n.listen(`checkedChange`,e=>{r.checked=e}),o=e(t);i.appendChild(o.root);let s=!1;return{root:i,destroy(){s||(s=!0,a(),o.destroy())},setHidden:o.setHidden.bind(o),update:o.update.bind(o)}}}function Te(e,t){return n=>{let r=document.createElement(`div`),i=document.createElement(`input`);i.type=`checkbox`,i.checked=!1,r.appendChild(i),r.classList.add(Q.checkable),i.addEventListener(`change`,()=>{i.checked?e.checkedAll():e.cleanChecked()});let a=e.isAllChecked();i.checked=a,i.indeterminate=!a&&e.hasChecked();let o=e.listen(`checkedChange`,()=>{let t=e.isAllChecked();i.checked=t,i.indeterminate=!t&&e.hasChecked()}),s=t(n);return r.appendChild(s.root),{...s,root:r,destroy(){o(),s.destroy()}}}}const Ee=(e,t,n,r)=>{let i=r(({...e})=>{typeof e.width==`number`&&(e.width+=30),t(e)});return{...i,width:(i.width||0)+30,render:we(i.render),header:Te(n,i.header)}};function $(e,t,n,r,i){let o=document.createElement(`a`);o.appendChild(document.createTextNode(r.label||r.title||``));let{page:s,path:c,uri:l,command:d}=r,f=a(()=>!!e(r)),p=``,m=r.target;return s?(p=new URL(c?.[0]===`/`?`${s}${c}`:`${s}/${c||``}`,x).href,m||=`_self`):l?p=l:d&&(p=t(r)),u(()=>{let e=f.get();o.disabled=e,o.ariaDisabled=e?`true`:`false`,e?(o.removeAttribute(`tabindex`),o.removeAttribute(`href`)):(o.tabIndex=0,p&&(o.href=p))},i),o.addEventListener(`click`,e=>{f.get()&&(e.preventDefault(),e.stopPropagation())}),p&&m&&(o.target=m??`_blank`),!p&&d&&o.addEventListener(`click`,e=>{f.get()||e.defaultPrevented||n(r)}),o}S.importStyle(`@neeloong/table/style.css`);async function De(l){let f=l.ident;if(f.type!==`model`)return l.setError(404);if(!l.search.slice(1)){let e=l.define?.defaultQuery;e&&l.setPath(`?${e.replaceAll(`#`,`%23`)}${l.hash}`,!0)}let g=a(()=>r.parse(l.search.slice(1)));function y(e){let t=r.stringify({...g.get(),...e},!0);t!==l.search.slice(1)&&l.setPath(`?${t}`,!0)}let x=l.container;l.panel=!0;let S=l.createHeader(),C=S?.container||x.appendChild(document.createElement(`div`)),w=S?.container||C.appendChild(document.createElement(`div`));w.classList.add(`QueryFilters`);let T=h(f.model);l.title=l.define?.title||`列表`,l.mode=`flex`;let E=await T.loadScript();if(l.destroyed)return;let D=E?.label||E.id||``;l.title=l.define?.title||(D?`列表:${D}`:`列表`);let O=c([]),k=new Ce({idKey:`_`,parentKey:`parent`}),A=c([]),j=a(()=>new Set(A.get())),M=a(()=>{let e=j.get();return O.get().filter(t=>e.has(t._))}),N=E.fields,P=Object.entries(N).filter(([,{type:e}])=>e&&typeof e!=`object`),F=P.filter(([,e])=>e.primary).map(([e])=>e),I=E.labelPattern||``,L=[];for(let{field:e,width:t,label:n}of l.define?.fields||[]){if(!e||!Object.hasOwn(N,e))continue;let r=N[e];if(!r)continue;let i=r.type;!i||typeof i!=`string`||L.push({name:e,width:t||void 0,title:n||r.label||``,field:r})}if(!L.length){for(let[e,t]of P)if(L.push({name:e,title:t.label||``,field:t}),L.length>=4)break}let R=[...new Set([...L.map(e=>e.name),...F,...m(I)])];u(()=>k.setValue(O.get()),l.signal);let z=L.map(({name:e,field:t,title:n,width:r})=>({field:e,title:n,width:r,resizable:!0,render(n){let r=document.createElement(`div`),i=s(e,t,{},n.data);return r.appendChild(i.root),{root:r,destroy(){i.destroy()},setHidden(){},update(){i.destroy(),r.innerHTML=``,i=s(e,t,{},n.data),r.appendChild(i.root)}}}}));z.unshift({field:`_`,width:200,resizable:!0,render(e){let t=e.data,n=document.createElement(`a`),r=_(I,t)||F.map(e=>t[e]).join(`$`);return n.href=l.toUrl(``,{...f,page:void 0,workspace:void 0,continuation:void 0,setting:!1,id:F.map(e=>t[e]).join(`$`)}),n.appendChild(document.createTextNode(r)),{root:n,destroy(){},setHidden(){},update(){n.innerHTML=``,n.href=l.toUrl(``,{...f,page:void 0,workspace:void 0,continuation:void 0,setting:!1,id:F.map(e=>t[e]).join(`$`)}),n.appendChild(document.createTextNode(r))}}}}),z.unshift({field:`_`,extensions:[Ee],render(e){return{root:document.createElement(`div`),destroy(){},setHidden(){},update(){}}}});let B=k.createGroup(z,2),V=document.createElement(`table`);B.createHeader(V.appendChild(document.createElement(`div`))),B.createBody(V.appendChild(document.createElement(`div`)));let H=new n,{limit:U,page:W}=g.get();U&&(H.size=U),W&&(H.page=W),H.listen(()=>{y({limit:H.size,page:H.page})});let G=0,K=c(!1);async function q(){if(!l.destroyed&&!K.get())try{K.set(!0),G++;let e=G,t=g.get(),n=l.define,r=await T.query({...t,where:[...t.where||[],...n?.where||[]],or:n?.orWhere,select:R});if(l.destroyed||e!==G)return;l.loading=!1,O.set(r.documents.map(e=>({...e,_:F.map(t=>e[t]).join(`$`)}))),H.total=r.total}finally{K.set(!1)}}function J(){v(E,g.get().where,x).then(e=>{y({where:e})}).catch(()=>{})}let Y=l.toUrl(``,{...f,page:void 0,workspace:void 0,input:`*`,setting:!1,id:void 0});if(l.renderSides(l.define?.sides||[],{type:`documents`,pageIdent:f,model:E,get checkedDocuments(){return M.get()},get documents(){return O.get()},get where(){return g.get().where},set where(e){y({where:e})},get orWhere(){return g.get().orWhere},set orWhere(e){y({orWhere:e})}}),S){let n={type:`documents`,pageIdent:f,model:E,get checkedDocuments(){return M.get()},get documents(){return O.get()}},r=$.bind(null,t=>{switch(t.command){case`refresh`:return K.get()}return e.disabled(n,t)},t=>{switch(t.command){case`create`:return Y}return e.toHref(n,t)},t=>{if(!l.destroyed){switch(t.command){case`refresh`:return q();case`filter`:return J()}return e.exec(n,t)}}),o=l.define?.menus;o?.length||(o=[{label:`创建`,command:`create`,children:[],buttons:[]},{label:`刷新`,command:`refresh`,children:[],buttons:[]},{label:`过滤`,command:`filter`,children:[],buttons:[]}]);let s=a(()=>{let e=i.permissions;return e?p(E.permissions||[],e):{has(){return!0}}}),c=a(()=>{let e=i.permissions;return e?t.filter(o,t=>{let n=t.permission;return n?d(n,e,{has(e){return s.get().has(e)}}):!0},!1):o});S.setMenu(c.get(),r)}else{let e=C.appendChild(document.createElement(`button`)).appendChild(document.createElement(`a`));e.appendChild(document.createTextNode(`创建`)),e.href=Y;let t=C.appendChild(document.createElement(`button`));t.appendChild(document.createTextNode(`刷新`)),t.addEventListener(`click`,q),b(()=>K.get(),e=>t.disabled=e,{immediate:!0,signal:l.signal});let n=C.appendChild(document.createElement(`button`));n.appendChild(document.createTextNode(`过滤`)),n.addEventListener(`click`,()=>{J()})}o({get(){return g.get().where||[]},set(e){y({where:e}),q()}},w,l.define?.filters||[],{fields:E.fields,signal:l.signal,inline:!0}),x.appendChild(V),(l.createFooter()?.container||x.appendChild(document.createElement(`div`))).appendChild(H.root),b(()=>g.get(),q,{signal:l.signal}),await q()}async function Oe(n){n.title=`详情`;let r=n.ident;if(r.type!==`model`)return n.setError(404);let o=n.container;n.panel=!0;let s=n.createHeader(),m=s?.container||o.appendChild(document.createElement(`div`)),v=h(r.model),b=r.id,x=v.document(b),S=n.define?.forms.view?.layoutId,[C,w]=await Promise.all([v.loadScript(),S&&f(S).load().catch(()=>null)||null]);if(n.destroyed)return;let T=C?.label||C.id||``,E=T?`详情:${T}`:`详情`;n.title=E;let D=l(C);D.readonly=!0;let O=g(C,D,o.appendChild(document.createElement(`div`)),{enableLink:!0,editable:!1},w?.layout,w?.type);y(n.signal).then(()=>{O()});let k=c(!1),A=c(!1);u(()=>n.loading=A.get()||!k.get(),n.signal);async function j(){if(!A.get()&&!n.destroyed){A.set(!0);try{let e=await x.get();if(n.destroyed)return;D.reset(e),D.readonly=!0,n.title=_(C?.labelPattern,e)||E}finally{k.set(!0),A.set(!1)}}}if(n.renderSides(n.define?.sides||[],{type:`document`,pageIdent:r,model:C,get document(){return D.value},get store(){return D}}),s){let o={type:`document`,pageIdent:r,model:C,get document(){return D.value},get store(){return D}},c=$.bind(null,t=>{switch(t.command){case`refresh`:return A.get()||!k.get()}return e.disabled(o,t)},t=>{switch(t.command){case`edit`:return n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0});case`copy`:return n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0,input:`*`})}return e.toHref(o,t)},t=>{if(!n.destroyed){switch(t.command){case`refresh`:return j()}return e.exec(o,t)}}),l=n.define?.menus;l?.length||(l=[{label:`刷新`,command:`refresh`,children:[],buttons:[]},{label:`编辑`,command:`edit`,children:[],buttons:[]}]);let u=a(()=>{let e=i.permissions;return e?p(C.permissions||[],e,D.value):{has(){return!0}}}),f=a(()=>{let e=i.permissions;return e?t.filter(l,t=>{let n=t.permission;return n?d(n,e,{has(e){return u.get().has(e)}}):!0},!1):l});s.setMenu(f.get(),c)}else{let e=m.appendChild(document.createElement(`button`)),t=e.appendChild(document.createElement(`a`));t.appendChild(document.createTextNode(`编辑`)),t.href=n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0}),u(()=>e.disabled=A.get()||!k.get(),n.signal)}await j()}async function ke(n){n.title=`编辑`;let r=n.ident;if(r.type!==`model`)return n.setError(404);let o=n.container;n.panel=!0;let s=n.createHeader(),m=s?.container||o.appendChild(document.createElement(`div`)),v=h(r.model),b=r.id,x=v.document(b),S=n.define?.forms.edit?.layoutId,[C,w]=await Promise.all([v.loadScript(),S&&f(S).load().catch(()=>null)||null]);if(n.destroyed)return;let T=C?.label||C.id||``,E=T?`编辑:${T}`:`编辑`;n.title=E;let D=l(C);u(()=>{n.unsaved=D.changed},n.signal);let O=g(C,D,o.appendChild(document.createElement(`div`)),{enableLink:!0,editable:!0},w?.layout,w?.type);y(n.signal).then(()=>{O()});let k=c(!1),A=c(!1);u(()=>n.loading=A.get()||!k.get(),n.signal);function j(e){let t=_(C?.labelPattern,e);t?n.title=t?`编辑:${t}`:`编辑`:n.title=E}async function M(){if(!A.get()&&!n.destroyed){A.set(!0);try{let e=await x.get();if(n.destroyed)return;D.reset(e,!1),j(e)}finally{k.set(!0),A.set(!1)}}}async function N(){if(!(A.get()||!k.get())&&!n.destroyed){A.set(!0);try{let e=await x.update(D.value);if(!e||(j(e),n.destroyed))return;D.reset(e,!1)}finally{A.set(!1)}}}if(n.renderSides(n.define?.sides||[],{type:`editDocument`,pageIdent:r,model:C,get document(){return D.value},get store(){return D}}),s){let o={type:`editDocument`,pageIdent:r,model:C,get document(){return D.value},get store(){return D}},c=$.bind(null,t=>{switch(t.command){case`save`:case`refresh`:return A.get()||!k.get()}return e.disabled(o,t)},t=>{switch(t.command){case`copy`:return n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0,input:`*`})}return e.toHref(o,t)},t=>{if(!n.destroyed){switch(t.command){case`refresh`:return M();case`save`:return N()}return e.exec(o,t)}}),l=n.define?.menus;l?.length||(l=[{label:`刷新`,command:`refresh`,children:[],buttons:[]},{label:`更新`,command:`save`,children:[],buttons:[]}]);let u=a(()=>{let e=i.permissions;return e?p(C.permissions||[],e,D.value):{has(){return!0}}}),f=a(()=>{let e=i.permissions;return e?t.filter(l,t=>{let n=t.permission;return n?d(n,e,{has(e){return u.get().has(e)}}):!0},!1):l});s.setMenu(f.get(),c)}else{let e=m.appendChild(document.createElement(`button`));e.disabled=!0,e.appendChild(document.createTextNode(`更新`)),u(()=>e.disabled=A.get()||!k.get(),n.signal),e.addEventListener(`click`,async()=>{N()})}await M()}function Ae(e){e.title=`!代办`,e.panel=!0,e.container.appendChild(document.createTextNode(`!代办`)),e.loading=!1}function je(e){e.title=`设置`,e.panel=!0,e.container.appendChild(document.createTextNode(`设置`)),e.loading=!1}function Me(e){e.title=`搜索`,e.panel=!0,e.container.appendChild(document.createTextNode(`搜索`)),e.loading=!1}function Ne(e){e.title=`状态管理`,e.panel=!0,e.container.appendChild(document.createTextNode(`状态管理`)),e.loading=!1}async function Pe(n){let r=n.ident;if(r.type!==`model`)return n.setError(404);let o=h(r.model),s=n.container;n.panel=!0;let p=n.createHeader(),m=p?.container||s.appendChild(document.createElement(`div`)),v=n.define,b=v?.forms.new?.layoutId,[x,S]=await Promise.all([o.loadScript(),b&&f(b).load().catch(()=>null)||null]);if(n.destroyed||!x)return;let C=l(x);C.new=!0,u(()=>{n.unsaved=!C.changed},n.signal);let w=g(x,C,s.appendChild(document.createElement(`div`)),{enableLink:!0,editable:!0},S?.layout,S?.type);y(n.signal).then(()=>{w()});let T=c(!1);async function E(){if(!T.get()){T.set(!0);try{return await o.create(C.value)}finally{T.set(!1)}}}async function D(){let e=await E();e&&(n.open(`.`,{...r,page:void 0,continuation:void 0,setting:void 0,input:void 0,edit:!1,id:e.id},!0),n.destroy(!0))}if(n.renderSides(n.define?.sides||[],{type:`createDocument`,pageIdent:r,model:x,get document(){return C.value},get store(){return C}}),p){let o={type:`createDocument`,pageIdent:r,model:x,get document(){return C.value},get store(){return C}},s=$.bind(null,t=>{switch(t.command){case`create`:case`createGoto`:return T.get()}return e.disabled(o,t)},t=>e.toHref(o,t),t=>{if(!n.destroyed){switch(t.command){case`create`:return E();case`createGoto`:return D()}return e.exec(o,t)}}),c=n.define?.menus;c?.length||(c=[{label:`创建`,command:`createGoto`,children:[],buttons:[]}]);let l=a(()=>{let e=i.permissions;return e?t.filter(c,t=>{let n=t.permission;return n?d(n,e):!0},!1):c});p.setMenu(l.get(),s)}else{let e=m.appendChild(document.createElement(`button`));e.disabled=!0,e.appendChild(document.createTextNode(`创建`)),e.addEventListener(`click`,()=>{D()}),u(()=>{e.disabled=T.get()},n.signal)}if(r.id){let e=await o.document(r.id);if(n.destroyed)return;let t=_(x?.labelPattern,e);t&&(n.title=`复制:${t}`),C.reset(e)}else C.reset({});n.loading=!1;let O=x?.label||x.id||``;n.title=v?.title||(O?`新建:${O}`:`新建`)}function Fe(e){let t=e.ident;if(t.type===`model`){if(e.title=e.define?.title||`新建`,(t.input||`*`)!==`*`)return Pe(e);e.open(e.path,{...t,setting:!1,input:`${Math.random()}`.slice(2)},!0),e.destroy(!0)}}function Ie(e){e.open(`.`,{...e.ident,page:void 0,workspace:void 0,continuation:void 0,setting:void 0,id:void 0},!0),e.destroy(!0)}export{Oe as details,ke as edit,De as list,Fe as new,Me as search,je as settings,Ne as status,Ie as toMain,Ae as todo};
|
|
8
|
+
//# sourceMappingURL=index.mjs.map
|
package/index.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#getClientRects","#destroyed","#rowHeight","#remove","#group","#main","#customizeMap","#customizeList","#shownRows","#lastSize","#headerMap","#headerList","#startFixed","#getData","#requestRender","#api","#headers","#columns","#styles","#bodies","#hide","#renderSet","#renderAll","#rowEvents","#events","#selectable","#selectedId","#checkedList","#rowMap","#checkedSet","#allChecked","#rowData","#expanded","#visibleRowIndexes","#idKey","#parentKey","#data","#groups","#render","#getNeedRender","#renderId","#hoverId"],"sources":["../../node_modules/.pnpm/@neeloong+table@0.0.2/node_modules/@neeloong/table/index.mjs","../../packages/pages/createMenuItem.mjs","../../packages/pages/list/index.mjs","../../packages/pages/details/index.mjs","../../packages/pages/edit/index.mjs","../../packages/pages/todo/index.mjs","../../packages/pages/settings/index.mjs","../../packages/pages/search/index.mjs","../../packages/pages/status/index.mjs","../../packages/pages/new/index.mjs","../../packages/pages/toMain.mjs"],"sourcesContent":["/*!\n* @neeloong/table v0.0.2\n* (c) 2023-2024 匿龙NeeLoong\n* @license MIT\n*/\n\n/**\n * @template {object} [T=object]\n * @param {import('./types/index.mjs').IdKey<T>} [idKey] \n * @returns {(v: any) => string | number}\n */\nfunction createIdKey(idKey) {\n\tif (typeof idKey === 'function') {\n\t\treturn idKey;\n\t}\n\tif (typeof idKey === 'string' && idKey) {\n\t\treturn v => v[idKey];\n\t}\n\treturn v => v.id;\n}\n\n/**\n * @template R\n * @template {object} [T=object]\n * @param {import('./types/index.mjs').Key<R, T>} [key] \n * @returns {(v: any) => R | undefined}\n */\nfunction createKey(key) {\n\tif (typeof key === 'function') {\n\t\treturn key;\n\t}\n\tif (typeof key === 'string' && key) {\n\t\treturn v => v[key];\n\t}\n\treturn () => undefined;\n}\n/**\n * \n * @param {string | Date | undefined} date \n * @returns \n */\nfunction toDate(date) {\n\tif (!date) { return undefined; }\n\tif (!(date instanceof Date)) {\n\t\tconst d = new Date(Date.parse(date));\n\t\tdate = new Date(\n\t\t\td.getUTCFullYear(),\n\t\t\td.getUTCMonth(),\n\t\t\td.getUTCDate(),\n\t\t\td.getUTCHours(),\n\t\t\td.getUTCMinutes(),\n\t\t\td.getUTCSeconds(),\n\t\t\td.getUTCMilliseconds()\n\t\t);\n\t}\n\treturn Number(date) ? date : undefined;\n}\n/**\n * \n * @template {object} [T=object]\n * @param {import('./types/index.mjs').Key<Date | string | undefined, T>} [key] \n * @returns {(v: any) => Date | undefined}\n */\nfunction createDateKey(key) {\n\tif (typeof key === 'function') {\n\t\treturn v => toDate(key(v));\n\t}\n\tif (typeof key === 'string' && key) {\n\t\treturn v => toDate(v[key]);\n\t}\n\treturn v => undefined;\n}\n\nconst defaultWidth = 200;\nconst defaultRowHeight = 24;\n\nconst verticalWritingMode = new Set([\n\t'vertical-lr', 'vertical-rl', 'sideways-lr', 'sideways-rl',\n]);\n\n/**\n * @template {{ el: Element; index: number; }} T\n * @param {Element} root \n * @param {T[]} newList \n * @param {T[]} oldList \n * @param {(v: T) => void} show \n * @param {(v: T) => void} hide \n * @returns {T[]}\n */\nfunction replaceShow(root, newList, oldList, show, hide) {\n\tconst list = [...newList];\n\tconst old = [...oldList];\n\tfor (; old.length + list.length;) {\n\t\tif (!old.length) {\n\t\t\tfor (const n of list) {\n\t\t\t\troot.appendChild(n.el);\n\t\t\t\tshow(n);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tif (!list.length) {\n\t\t\tfor (const n of old) {\n\t\t\t\tn.el.remove();\n\t\t\t\thide(n);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tconst [o] = old;\n\t\tconst [l] = list;\n\t\tif (o.el === l.el) {\n\t\t\told.shift();\n\t\t\tlist.shift();\n\t\t\tshow(l);\n\t\t\tcontinue;\n\t\t}\n\t\tif (l.index <= o.index) {\n\t\t\troot.insertBefore(l.el, o.el);\n\t\t\tshow(l);\n\t\t\tlist.shift();\n\t\t}\n\t\tif (o.index <= l.index) {\n\t\t\to.el.remove();\n\t\t\thide(o);\n\t\t\told.shift();\n\t\t}\n\t}\n\treturn newList;\n}\n\n/**\n * \n * @param {import('../types/Row.mjs').Row} row \n * @returns \n */\nfunction getElMap(row) {\n\tlet { elMap } = row;\n\tif (elMap) { return elMap; }\n\telMap = new Map();\n\trow.elMap = elMap;\n\treturn elMap;\n}\n/**\n * \n * @param {import('../types/Row.mjs').Row} row \n * @param {any} key \n * @returns \n */\nfunction getProxy(row, key) {\n\tconst elMap = getElMap(row);\n\tconst proxy = elMap.get(key);\n\tif (proxy) {\n\t\tproxy.index = row.index;\n\t\treturn proxy;\n\t}\n\t/** @type {import('../types/Row.mjs').RowDataProxy} */\n\tconst elProxy = row.createProxy();\n\telMap.set(key, elProxy);\n\treturn elProxy;\n}\n/**\n * \n * @param {import('../types/Row.mjs').Row[]} list \n * @param {Map<string | number | symbol, import('../types/Row.mjs').Row>} map \n * @param {number[]} visible \n * @param {number} rStart \n * @param {number} rEnd \n * @param {any} key \n * @returns \n */\nfunction getRow$1(list, map, visible, rStart, rEnd, key) {\n\t/** @type {Set<import('../types/Row.mjs').RowDataProxy>} */\n\tconst needShowRow = new Set();\n\tfor (let i = rStart; i <= rEnd; i++) {\n\t\tlet index = visible[i];\n\t\tif (typeof index !== 'number') { continue; }\n\t\tconst row = list[index];\n\t\tif (!row) { continue; }\n\t\tconst elProxy = getProxy(row, key);\n\t\tif (needShowRow.has(elProxy)) { continue; }\n\t\tneedShowRow.add(elProxy);\n\t\t// 需要显示浮动的行首和行尾部\n\t\tconst { parentId } = row;\n\t\tif (parentId === undefined) { continue; }\n\t\tlet parent = map.get(parentId);\n\t\twhile (parent) {\n\t\t\tconst elMap = getElMap(parent);\n\t\t\tlet proxy = elMap.get(key);\n\t\t\tif (!proxy) {\n\t\t\t\tproxy = parent.createProxy();\n\t\t\t\telMap.set(key, proxy);\n\t\t\t} else if (needShowRow.has(proxy)) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tneedShowRow.add(proxy);\n\t\t\tconst { parentId } = parent;\n\t\t\tif (parentId === undefined) { break; }\n\t\t\tparent = map.get(parentId);\n\t\t}\n\t}\n\treturn [...needShowRow].sort(({ index: a }, { index: b }) => a - b);\n\n}\n\n/**\n * \n * @param {import('../types/Row.mjs').Cell} c \n */\nfunction hideCell(c) {\n\t// c.destroy();\n\t// return;\n\t// c.setHidden(true);\n}\n\n/**\n * \n * @param {import('../types/Row.mjs').RowDataProxy} row \n */\nfunction hideRow(row) {\n\tfor (const c of row.shown) {\n\t\tc.el.remove();\n\t}\n\trow.shown = [];\n}\n\n/**\n * \n * @param {number} target \n * @param {number[]} list \n * @param {number} start \n * @param {number} end \n * @returns {number}\n */\nfunction binarySearch(target, list, start, end) {\n\tif (target < list[start]) { return start; }\n\tif (target > list[end]) { return end + 1; }\n\tconst index = Math.floor((start + end) / 2);\n\tconst value = list[index];\n\tif (value === target) { return index; }\n\tif (index === start) { return end; }\n\tif (value < target) {\n\t\tif (index + 1 >= end) { return index + 1; }\n\t\treturn binarySearch(target, list, index + 1, end);\n\t}\n\tif (index - 1 < start) { return index; }\n\treturn binarySearch(target, list, start, index - 1);\n}\n\nfunction noop() { }\n\n/**\n * \n * @param {import('../types/index.mjs').RowApi} rowApi \n * @param {import('../types/index.mjs').RowValue} row \n * @param {import('../types/index.mjs').ColumnCell} column \n * @param {number} index \n * @param {() => void} destroy \n * @returns {import('../types/Row.mjs').Cell}\n */\nfunction createCell$1(rowApi, row, column, index, destroy) {\n\tconst { render, field } = column;\n\tlet destroyed = false;\n\t/** @type {Set<() => void>} */\n\tconst cancelSet = new Set();\n\tconst { listen } = rowApi;\n\n\tconst comp = render({\n\t\t...row, value: field ? row.data?.[field] : undefined,\n\t}, Object.assign(Object.create(rowApi), {\n\t\t/**\n\t\t * \n\t\t * @param {string | symbol} k \n\t\t * @param {import('../types/index.mjs').Listener<any>} fn \n\t\t * @returns \n\t\t */\n\t\tlisten: (k, fn) => {\n\t\t\tif (destroyed) { return noop; }\n\t\t\tconst c = listen(/** @type {any} */(k), fn);\n\t\t\tconst cc = () => { c(); cancelSet.delete(cc); };\n\t\t\tcancelSet.add(cc);\n\t\t\treturn cc;\n\t\t},\n\t}));\n\tconst el = comp.root;\n\tel.classList.add('neeloong-table-cell');\n\treturn {\n\t\tel, index, column,\n\t\tdestroy() {\n\t\t\tif (destroyed) { return; }\n\t\t\tdestroyed = true;\n\t\t\tcomp.destroy();\n\t\t\tfor (const k of [...cancelSet]) {\n\t\t\t\tk();\n\t\t\t}\n\t\t\tdestroy();\n\t\t},\n\t\tsetHidden: comp.setHidden.bind(comp),\n\t\tupdate(row) {\n\t\t\tcomp.update({ ...row, value: field ? row.data?.[field] : undefined });\n\t\t},\n\t};\n}\n\n/**\n * \n * @param {import('../types/Row.mjs').Cell} c \n */\nfunction showCell(c) {\n\tconst {column} = c;\n\tconst {el} = c;\n\tel.style.setProperty('--neeloong-table-column-start', `${column.start}px`);\n\tel.style.inlineSize = `${column.width}px`;\n\tif (column.spillable) {\n\t\tel.classList.remove('neeloong-table-cell-ellipsis');\n\t} else {\n\t\tel.classList.add('neeloong-table-cell-ellipsis');\n\n\t}\n\tc.setHidden(false);\n}\n\n/**\n * \n * @param {import('../types/Row.mjs').RowDataProxy} r \n * @param {string | number | symbol | undefined} hoverId \n * @param {string | number | symbol | undefined} selectedId \n * @param {Set<string | number | symbol>} checkedSet \n * @param {number} startFixed \n * @param {number[]} visible \n * @param {number} rowHeight \n * @param {import('../types/index.mjs').ColumnCell[]} columns \n * @param {number} cStart \n * @param {number} cEnd \n */\nfunction showRow(\n\tr,\n\thoverId,\n\tselectedId,\n\tcheckedSet,\n\tstartFixed,\n\tvisible,\n\trowHeight,\n\tcolumns,\n\tcStart,\n\tcEnd,\n) {\n\t// 计算出在显示的项目当中的编号\n\tconst showIndex = binarySearch(r.index, visible, 0, visible.length - 1);\n\tconst { el, row: { id }, cells, api } = r;\n\tif (hoverId === id) {\n\t\tel.classList.add('neeloong-table-row-hover');\n\t} else {\n\t\tel.classList.remove('neeloong-table-row-hover');\n\t}\n\tif (selectedId === id) {\n\t\tel.classList.add('neeloong-table-row-selected');\n\t} else {\n\t\tel.classList.remove('neeloong-table-row-selected');\n\t}\n\tif (checkedSet.has(id)) {\n\t\tel.classList.add('neeloong-table-row-checked');\n\t} else {\n\t\tel.classList.remove('neeloong-table-row-checked');\n\t}\n\tel.style.insetBlockStart = `${rowHeight * showIndex}px`;\n\tel.style.blockSize = `${rowHeight}px`;\n\n\t/** @type {Set<import('../types/Row.mjs').Cell>} */\n\tconst needCells = new Set();\n\tconst startFixedMax = Math.min(startFixed, cStart);\n\t/**\n\t * \n\t * @param {number} i \n\t * @returns \n\t */\n\tfunction add(i) {\n\t\tconst column = columns[i];\n\t\tif (column.hidden) { return; }\n\t\tconst index = column.start;\n\t\tlet cell = cells.get(column);\n\n\t\tif (cell) {\n\t\t\tcell.index = index;\n\t\t} else {\n\t\t\tlet destroyed = false;\n\t\t\tfunction destroy() {\n\t\t\t\tif (destroyed) { return; }\n\t\t\t\tdestroyed = true;\n\t\t\t\tif (cells.get(column) !== cell) { return; }\n\t\t\t\tcells.delete(column);\n\t\t\t}\n\t\t\tcell = createCell$1(api, r.row.value, column, index, destroy);\n\t\t\tif (!destroyed) {\n\t\t\t\tcells.set(column, cell);\n\t\t\t}\n\t\t}\n\t\tneedCells.add(cell);\n\t\tif (i < startFixed) {\n\t\t\tcell.el.classList.add('neeloong-table-cell-fixed');\n\t\t} else {\n\t\t\tcell.el.classList.remove('neeloong-table-cell-fixed');\n\t\t}\n\t}\n\tfor (let i = 0; i < startFixedMax; i++) {\n\t\tadd(i);\n\t}\n\tfor (let i = cStart; i <= cEnd; i++) {\n\t\tadd(i);\n\t}\n\tr.shown = replaceShow(\n\t\tel,\n\t\t[...needCells].sort(({ index: a }, { index: b }) => a - b),\n\t\tr.shown,\n\t\tshowCell,\n\t\thideCell,\n\t);\n}\n\n/**\n * \n * @param {[number, number]} rowRange \n * @param {[number, number]} colRange \n * @param {import('../types/Row.mjs').Row[]} rowData \n * @param {Map<string | number | symbol, import('../types/Row.mjs').Row>} rowMap \n * @param {number[]} visible \n * @param {number} startFixed \n * @param {import('../types/Row.mjs').RowDataProxy[]} shownRows \n * @param {string | number | undefined} hoverId \n * @param {string | number | symbol | undefined} selectedId \n * @param {Set<string | number | symbol>} checkedSet \n * @param {number} rowHeight \n * @param {import('../types/index.mjs').ColumnCell[]} columns \n * @param {HTMLElement} body \n * @returns \n */\nfunction render(\n\t[rStart, rEnd],\n\t[cStart, cEnd],\n\trowData,\n\trowMap,\n\tvisible,\n\tstartFixed,\n\tshownRows,\n\thoverId,\n\tselectedId,\n\tcheckedSet,\n\trowHeight,\n\tcolumns,\n\tbody,\n) {\n\treturn replaceShow(\n\t\tbody,\n\t\tgetRow$1(rowData, rowMap, visible, rStart, rEnd, body),\n\t\tshownRows,\n\t\tr => showRow(\n\t\t\tr,\n\t\t\thoverId,\n\t\t\tselectedId,\n\t\t\tcheckedSet,\n\t\t\tstartFixed,\n\t\t\tvisible,\n\t\t\trowHeight,\n\t\t\tcolumns,\n\t\t\tcStart,\n\t\t\tcEnd,\n\t\t),\n\t\thideRow,\n\t);\n}\n\n/**\n * \n * @param {import('../types/Row.mjs').RowDataProxy[]} list \n * @returns \n */\nfunction hideAll(list) {\n\tfor (const r of list) {\n\t\tr.el.remove();\n\t\thideRow(r);\n\t}\n\treturn [];\n}\n\n/**\n * \n * @param {number} rowHeight \n * @param {number} start \n * @param {number} end \n * @param {number} max \n * @returns {[number, number]?}\n */\nfunction findRow(rowHeight, start, end, max) {\n\tconst sIndex = Math.max(0, Math.floor(start / rowHeight));\n\tconst eIndex = Math.min(max, Math.ceil(end / rowHeight));\n\tif (sIndex > eIndex) { return null; }\n\treturn [sIndex, eIndex];\n}\n\n/**\n * \n * @param {number[]} separate \n * @param {number} start \n * @param {number} end \n * @returns {[number, number]?}\n */\nfunction findCol(separate, start, end) {\n\tif (start >= end) { return null; }\n\tconst startIndex = separate.findIndex(v => v > start);\n\tif (startIndex < 0) { return null; }\n\tconst sIndex = Math.max(startIndex - 1, 0);\n\tconst endIndex = separate.findIndex(v => v > end, startIndex);\n\tconst eIndex = endIndex < 0 ? separate.length - 2 : Math.max(endIndex - 1, 0);\n\tif (sIndex > eIndex) { return null; }\n\treturn [sIndex, eIndex];\n}\n\n/**\n * \n * @param {HTMLElement} root \n * @param {() => Iterable<DOMRect>} getClientRects \n * @returns {[[number, number, number], [number, number, number]]}\n */\nfunction getBoundingClientRect(root, getClientRects) {\n\t/** @type {[number, number, number, number]} */\n\tlet view = [0, 0, window.innerWidth, window.innerHeight];\n\tfor (const { left, top, right, bottom } of getClientRects()) {\n\t\tview = [\n\t\t\tMath.max(view[0], left),\n\t\t\tMath.max(view[1], top),\n\t\t\tMath.min(view[2], right),\n\t\t\tMath.min(view[3], bottom),\n\t\t];\n\t}\n\tconst { left, top, width, height } = root.getBoundingClientRect();\n\tconst right = view[2] - left - width;\n\tconst bottom = view[3] - top - height;\n\treturn [\n\t\t[-left + view[0], width, -right],\n\t\t[-top + view[1], height, -bottom],\n\t];\n\n}\n/**\n * @typedef {object} ColumnState\n * @property {boolean} fixed\n * @property {boolean} hidden\n * @property {number} [start]\n * @property {number} [width]\n */\n/**\n * \n * @param {import('../types/index.mjs').ColumnCell} column \n * @returns {[import('../types/index.mjs').CustomizeComponent, ColumnState]?}\n */\nfunction createCustomize(column) {\n\tconst customizeComponent = column.customize({ column: column.options }) || null;\n\tif (!customizeComponent) { return null; }\n\tif (customizeComponent) {\n\t\tcustomizeComponent.root.classList.add('neeloong-table-customize');\n\t}\n\treturn [customizeComponent, { fixed: false, hidden: false }];\n}\nclass Body {\n\t/** @readonly @type {HTMLElement} */\n\troot;\n\t/** @readonly @type {HTMLElement} */\n\t#main = document.createElement('div');\n\t/** @returns {Iterable<DOMRect>} */\n\t#getClientRects = () => [];\n\tget getClientRects() { return this.#getClientRects; }\n\tset getClientRects(v) {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#getClientRects = v;\n\t\tthis.requestRender();\n\t}\n\t/** @type {number} */\n\t#rowHeight = 0;\n\tget rowHeight() { return this.#rowHeight; }\n\tset rowHeight(v) {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#rowHeight = v;\n\t\tthis.root.style.setProperty('--neeloong-table-row-height', `${v}px`);\n\t\tthis.requestRender();\n\t}\n\t/** @type {import('../Group/index.mjs').default} */\n\t#group;\n\t/** @type {() => void} */\n\t#remove;\n\t/**\n\t * \n\t * @param {HTMLElement | undefined} root \n\t * @param {import('../Group/index.mjs').default} group \n\t * @param {() => void} remove \n\t */\n\tconstructor(root, group, remove) {\n\t\tthis.#remove = remove;\n\t\tthis.#group = group;\n\t\tconst body = root || document.createElement('div');\n\t\tthis.root = body;\n\t\tconst main = body.appendChild(this.#main);\n\t\tbody.classList.add('neeloong-table', 'neeloong-table-body');\n\t\tmain.classList.add('neeloong-table-main');\n\t\tthis.rowHeight = defaultRowHeight;\n\t}\n\t/** @type {import('../types/Row.mjs').RowDataProxy[]} */\n\t#shownRows = [];\n\n\t/** @type {Map<import('../types/index.mjs').ColumnCell, [import('../types/index.mjs').CustomizeComponent, ColumnState] | null>} */\n\t#customizeMap = new Map();\n\t/** @type {([import('../types/index.mjs').CustomizeComponent, ColumnState] | null)[]} */\n\t#customizeList = [];\n\t/**\n\t * \n\t * @param {import('../types/index.mjs').ColumnCell[]} columns \n\t */\n\t_updateColumns(columns) {\n\t\tconst oldMap = this.#customizeMap;\n\t\t/** @type {Map<import('../types/index.mjs').ColumnCell, [import('../types/index.mjs').CustomizeComponent, ColumnState] | null>} */\n\t\tconst newMap = new Map();\n\t\t/** @type {([import('../types/index.mjs').CustomizeComponent, ColumnState] | null)[]} */\n\t\tconst list = [];\n\t\tthis.#customizeList = list;\n\t\tthis.#customizeMap = newMap;\n\t\tconst body = this.root;\n\t\tfor (const column of columns) {\n\t\t\tconst c = oldMap.get(column);\n\t\t\toldMap.delete(column);\n\t\t\tconst cs = c === undefined ? createCustomize(column) : c;\n\t\t\tnewMap.set(column, cs);\n\t\t\tlist.push(cs);\n\t\t\tif (!cs) { continue; }\n\t\t\tconst [component] = cs;\n\t\t\tbody.appendChild(component.root);\n\t\t\tcomponent.update?.(column.options);\n\t\t}\n\t\tfor (const c of oldMap.values()) {\n\t\t\tif (!c) { continue; }\n\t\t\tconst [component] = c;\n\t\t\tcomponent.root.remove();\n\t\t\tcomponent.destroy();\n\t\t}\n\n\t}\n\t_hide() {\n\t\tthis.#shownRows = hideAll(this.#shownRows);\n\t}\n\t#destroyed = false;\n\tdestroy() {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#destroyed = true;\n\t\tthis.#remove();\n\t\tthis._hide();\n\t\tfor (const c of this.#customizeList) {\n\t\t\tif (!c) { continue; }\n\t\t\tconst [component] = c;\n\t\t\tcomponent.root.remove();\n\t\t\tcomponent.destroy();\n\t\t}\n\t\t// TODO:\n\t}\n\t#lastSize = '';\n\tpaused = false;\n\trequestRender() {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#lastSize = '';\n\t\tthis.#group.requestRender(this);\n\t}\n\t/**\n\t * \n\t * @param {import('../types/index.mjs').ColumnCell[]} columns \n\t * @param {import('../types/Row.mjs').Row[]} rowData \n\t * @param {Map<string | number | symbol, import('../types/Row.mjs').Row>} rowMap \n\t * @param {number[]} visibleRowIndexes \n\t * @param {string | number | undefined} hoverId \n\t * @param {string | number | symbol | undefined} selectedId \n\t * @param {Set<string | number | symbol>} checkedSet \n\t * @param {number[]} separate \n\t * @param {number} startFixed \n\t * @param {boolean} [force] \n\t * @returns \n\t */\n\t_render(\n\t\tcolumns,\n\t\trowData,\n\t\trowMap,\n\t\tvisibleRowIndexes,\n\t\thoverId,\n\t\tselectedId,\n\t\tcheckedSet,\n\t\tseparate,\n\t\tstartFixed,\n\t\tforce = false,\n\t) {\n\t\tif (this.#destroyed) { return; }\n\t\tif (this.paused) { return; }\n\t\tconst { root } = this;\n\t\tconst style = getComputedStyle(root);\n\t\tconst writingMode = style.writingMode?.toLowerCase();\n\t\tconst vertical = verticalWritingMode.has(writingMode);\n\t\tconst size = getBoundingClientRect(root, this.getClientRects);\n\t\tif (vertical) { size.reverse(); }\n\t\tif (['vertical-rl', 'sideways-rl'].includes(writingMode)) {\n\t\t\tsize[1].reverse();\n\t\t}\n\t\tconst rtl =\n\t\t\t(style.direction.toLowerCase() === 'rtl')\n\t\t\t!== (writingMode === 'sideways-lr');\n\t\tif (rtl) { size[0].reverse(); }\n\n\t\tconst lastSize = size.toString();\n\t\tif (!force && this.#lastSize === lastSize) { return; }\n\t\tthis.#lastSize = lastSize;\n\n\t\tconst [c, r] = size;\n\t\tconst rowHeight = this.#rowHeight;\n\t\tconst row = findRow(rowHeight, r[0], r[1] - r[2], rowData.length);\n\t\tif (!row) { return this._hide(); }\n\t\trenderCustomize(columns, this.#customizeList);\n\n\n\t\tconst col = findCol(separate, c[0], c[1] - c[2]);\n\n\t\tif (!col) { return this._hide(); }\n\n\t\tthis.#shownRows = render(\n\t\t\trow,\n\t\t\tcol,\n\t\t\trowData,\n\t\t\trowMap,\n\t\t\tvisibleRowIndexes,\n\t\t\tstartFixed,\n\t\t\tthis.#shownRows,\n\t\t\thoverId,\n\t\t\tselectedId,\n\t\t\tcheckedSet,\n\t\t\trowHeight,\n\t\t\tcolumns,\n\t\t\tthis.#main,\n\t\t);\n\t}\n}\n/**\n * \n * @param {import('../types/index.mjs').ColumnCell[]} columns \n * @param {([import('../types/index.mjs').CustomizeComponent, ColumnState] | null)[]} list \n */\nfunction renderCustomize(columns, list) {\n\tlet i = 0;\n\tfor (const { width, hidden, start, fixed } of columns) {\n\t\tconst item = list[i];\n\t\ti++;\n\t\tif (!item) { continue; }\n\t\tconst [{ root }, state] = item;\n\n\t\tif (fixed !== state.fixed) {\n\t\t\tstate.fixed = fixed;\n\t\t\tif (fixed) {\n\t\t\t\troot.classList.add('neeloong-table-customize-fixed');\n\t\t\t} else {\n\t\t\t\troot.classList.remove('neeloong-table-customize-fixed');\n\t\t\t}\n\t\t}\n\t\tif (hidden !== state.hidden) {\n\t\t\tstate.hidden = hidden;\n\t\t\troot.hidden = hidden;\n\t\t}\n\t\tif (hidden) { continue; }\n\t\tif (state.start !== start) {\n\t\t\tstate.start = start;\n\t\t\troot.style.setProperty('--neeloong-table-column-start', `${start}px`);\n\t\t}\n\t\tif (state.width !== width) {\n\t\t\tstate.width = width;\n\t\t\troot.style.inlineSize = `${width}px`;\n\t\t}\n\t}\n}\n\n/**\n * @template T\n * @param {(event: PointerEvent) => T} downFn \n * @param {(event: PointerEvent, value: T) => void} moveFn \n * @returns {[(event: PointerEvent) => void, (event: PointerEvent) => void, (event: PointerEvent) => void]}\n */\nfunction pointerCapture(downFn, moveFn) {\n\t/** @type {any} */\n\tlet state;\n\tlet captured = false;\n\t/** @param {PointerEvent} e */\n\tfunction begin(e) {\n\t\tif (captured) { return; }\n\t\tstate = downFn(e);\n\t\t/** @type {Element} */(e.currentTarget).setPointerCapture(e.pointerId);\n\t\tcaptured = true;\n\t}\n\t/** @param {PointerEvent} e */\n\tfunction move(e) {\n\t\tconst el = /** @type {Element} */(e.currentTarget);\n\t\tif (!el.hasPointerCapture(e.pointerId)) { return; }\n\t\tmoveFn(e, state);\n\t}\n\t/** @param {PointerEvent} e */\n\tfunction end(e) {\n\t\tconst { pointerId } = e;\n\t\ttry {\n\t\t\tconst el = /** @type {Element} */(e.currentTarget);\n\t\t\tel.releasePointerCapture(pointerId);\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t}\n\t\tcaptured = false;\n\t}\n\treturn [begin, move, end];\n}\n\n/**\n * @typedef {object} ColumnState\n * @property {boolean} fixed\n * @property {boolean} hidden\n * @property {boolean} resizable\n * @property {number} [start]\n * @property {number} [end]\n * @property {number} [width]\n */\n/**\n * \n * @param {() => void} requestRender \n * @param {HTMLElement} header \n * @param {import('../types/index.mjs').ColumnCell} column \n * @returns {[import('../types/index.mjs').ColumnComponent, HTMLElement, ColumnState]}\n */\nfunction createHeader$1(requestRender, header, column) {\n\tconst resize = document.createElement('div');\n\tresize.classList.add('neeloong-table-resize');\n\tconst headerComponent = column.header({ column: column.options });\n\tconst el = headerComponent.root;\n\tel.classList.add('neeloong-table-header');\n\tconst [begin, move, end] = pointerCapture(\n\t\te => {\n\t\t\tconst style = getComputedStyle(resize);\n\t\t\tconst writingMode = style.writingMode?.toLowerCase();\n\t\t\tconst vertical = verticalWritingMode.has(writingMode);\n\t\t\tconst rtl = style.direction.toLowerCase() === 'rtl';\n\t\t\tconst secDir = rtl === (writingMode === 'sideways-lr') ? 1 : -1;\n\t\t\treturn secDir * (vertical ? e.offsetY : e.offsetX);\n\t\t},\n\t\t(e, o) => {\n\t\t\tif (!column.resizable) { return; }\n\t\t\tconst rect = header.getBoundingClientRect();\n\t\t\tconst style = getComputedStyle(resize);\n\t\t\tconst writingMode = style.writingMode?.toLowerCase();\n\t\t\tconst vertical = verticalWritingMode.has(writingMode);\n\t\t\tconst begin = vertical ? rect.y : rect.x;\n\t\t\tconst size = vertical ? rect.height : rect.width;\n\t\t\tconst client = vertical ? e.clientY : e.clientX;\n\t\t\tconst rtl = style.direction.toLowerCase() === 'rtl';\n\t\t\tconst secDir = rtl !== (writingMode === 'sideways-lr');\n\t\t\tconst offset = secDir ? begin + size - (client + o) : (client - o) - begin;\n\t\t\tcolumn.width = Math.max(\n\t\t\t\t1,\n\t\t\t\tcolumn.minWidth || 0,\n\t\t\t\tMath.min(offset - column.start, column.maxWidth || Infinity),\n\t\t\t);\n\t\t\trequestRender();\n\t\t});\n\tresize.addEventListener('pointerdown', e => {\n\t\tif (!column.resizable) { return; }\n\t\tbegin(e);\n\t});\n\tresize.addEventListener('pointermove', move);\n\tresize.addEventListener('pointercancel', end);\n\tresize.addEventListener('pointerup', end);\n\treturn [headerComponent, resize, { fixed: false, hidden: false, resizable: false }];\n}\n\nclass Header {\n\t/** @readonly @type {HTMLElement} */\n\troot;\n\t/** @type {import('../Group/index.mjs').default} */\n\t#group;\n\t/** @type {() => void} */\n\t#remove;\n\t/**\n\t * \n\t * @param {HTMLElement | undefined} root \n\t * @param {import('../Group/index.mjs').default} group \n\t * @param {() => void} remove \n\t */\n\tconstructor(root, group, remove) {\n\t\tthis.#remove = remove;\n\t\tthis.#group = group;\n\t\tconst header = root || document.createElement('div');\n\t\tthis.root = header;\n\t\theader.classList.add('neeloong-table', 'neeloong-table-headers');\n\t\theader.appendChild(document.createElement('div')).className = 'neeloong-table-fixed-line';\n\t}\n\t/** @type {Map<import('../types/index.mjs').ColumnCell, [import('../types/index.mjs').ColumnComponent, HTMLElement, import('./createHeader.mjs').ColumnState]>} */\n\t#headerMap = new Map();\n\t/** @type {[import('../types/index.mjs').ColumnComponent, HTMLElement, import('./createHeader.mjs').ColumnState][]} */\n\t#headerList = [];\n\t/**\n\t * \n\t * @param {import('../types/index.mjs').ColumnCell[]} columns \n\t */\n\t_updateColumns(columns) {\n\t\tconst oldMap = this.#headerMap;\n\t\t/** @type {Map<import('../types/index.mjs').ColumnCell, [import('../types/index.mjs').ColumnComponent, HTMLElement, import('./createHeader.mjs').ColumnState]>} */\n\t\tconst newMap = new Map();\n\t\t/** @type {[import('../types/index.mjs').ColumnComponent, HTMLElement, import('./createHeader.mjs').ColumnState][]} */\n\t\tconst list = [];\n\t\tconst requestRender = () => {\n\t\t\tthis.#group.requestRender();\n\t\t};\n\t\tthis.#headerList = list;\n\t\tthis.#headerMap = newMap;\n\t\tconst header = this.root;\n\t\tfor (const column of columns) {\n\t\t\tconst c = oldMap.get(column) || createHeader$1(requestRender, header, column);\n\t\t\toldMap.delete(column);\n\t\t\tnewMap.set(column, c);\n\t\t\tlist.push(c);\n\t\t\tconst [component, resize] = c;\n\t\t\theader.appendChild(component.root);\n\t\t\theader.appendChild(resize);\n\t\t\tcomponent.update?.(column.options);\n\t\t}\n\t\tfor (const c of oldMap.values()) {\n\t\t\tif (!c) { continue; }\n\t\t\tconst [component, resize] = c;\n\t\t\tcomponent.root.remove();\n\t\t\tresize.remove();\n\t\t\tcomponent.destroy();\n\t\t}\n\n\t}\n\n\n\t_hide() {\n\t}\n\t#destroyed = false;\n\tdestroy() {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#destroyed = true;\n\t\tthis.#remove();\n\t\tthis._hide();\n\t\tfor (const c of this.#headerList) {\n\t\t\tif (!c) { continue; }\n\t\t\tconst [component, resize] = c;\n\t\t\tcomponent.root.remove();\n\t\t\tresize.remove();\n\t\t\tcomponent.destroy();\n\t\t}\n\t\t// TODO:\n\t}\n\tpaused = false;\n\trequestRender() {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#group.requestRender(this);\n\t}\n\t/**\n\t * \n\t * @param {import('../types/index.mjs').ColumnCell[]} columns \n\t * @param {boolean} [force] \n\t * @returns \n\t */\n\t_render(columns, force = false) {\n\t\tif (this.#destroyed) { return; }\n\n\t\tconst list = this.#headerList;\n\n\n\t\tlet i = 0;\n\t\tfor (const { width, hidden, start, fixed, resizable, end } of columns) {\n\t\t\tconst item = list[i];\n\t\t\ti++;\n\t\t\tif (!item) { continue; }\n\t\t\tconst [{ root }, resize, state] = item;\n\n\t\t\tif (fixed !== state.fixed) {\n\t\t\t\tstate.fixed = fixed;\n\t\t\t\tif (fixed) {\n\t\t\t\t\troot.classList.add('neeloong-table-header-fixed');\n\t\t\t\t\tresize.classList.add('neeloong-table-resize-fixed');\n\t\t\t\t} else {\n\t\t\t\t\troot.classList.remove('neeloong-table-header-fixed');\n\t\t\t\t\tresize.classList.remove('neeloong-table-resize-fixed');\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hidden !== state.hidden) {\n\t\t\t\tstate.hidden = hidden;\n\t\t\t\troot.hidden = hidden;\n\t\t\t\tresize.hidden = hidden;\n\t\t\t}\n\t\t\tif (hidden) { continue; }\n\t\t\tif (state.start !== start) {\n\t\t\t\tstate.start = start;\n\t\t\t\troot.style.setProperty('--neeloong-table-column-start', `${start}px`);\n\t\t\t}\n\t\t\tif (state.end !== end) {\n\t\t\t\tstate.end = end;\n\t\t\t\tresize.style.setProperty('--neeloong-table-column-start', `${end}px`);\n\t\t\t}\n\t\t\tif (resizable !== state.resizable) {\n\t\t\t\tstate.resizable = resizable;\n\t\t\t\tif (resizable) {\n\t\t\t\t\tresize.classList.add('neeloong-table-resize-resizable');\n\t\t\t\t} else {\n\t\t\t\t\tresize.classList.remove('neeloong-table-resize-resizable');\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (state.width !== width) {\n\t\t\t\tstate.width = width;\n\t\t\t\troot.style.inlineSize = `${width}px`;\n\t\t\t}\n\n\t\t}\n\n\n\t}\n}\n\n/**\n * \n * @param {import('../types/index.mjs').ColumnCell[]} columns \n * @param {number} startFixed \n * @returns \n */\nfunction updateColumn(columns, startFixed) {\n\tlet start = 0;\n\tlet separate = [start];\n\tlet i = 0;\n\tfor (const c of columns) {\n\t\tconst { width, hidden } = c;\n\t\tconst fixed = i < startFixed;\n\t\tc.fixed = fixed;\n\t\ti++;\n\t\tc.start = start;\n\t\tif (!hidden) {\n\t\t\tstart += width;\n\t\t}\n\t\tc.end = start;\n\t\tseparate.push(start);\n\t}\n\treturn separate;\n}\n\n/** @typedef {[import('../types/index.mjs').Extension, Record<string, any>][]} ExtensionList */\n/**\n * \n * @param {import('../types/index.mjs').ExtensionOption | import('../types/index.mjs').ExtensionOption[]} [extensions] \n * @returns {ExtensionList}\n */\nfunction getExtensionList(extensions) {\n\tif (!extensions) { return []; }\n\tif (!Array.isArray(extensions)) {\n\t\treturn getExtensionList([extensions]);\n\t}\n\t/** @type {ExtensionList} */\n\tconst list = [];\n\tfor (const extension of extensions) {\n\t\tif (typeof extension === 'function') {\n\t\t\tlist.push([extension, {}]);\n\t\t\tcontinue;\n\t\t}\n\t\tconst { extension: e } = extension;\n\t\tif (typeof e !== 'function') { continue; }\n\t\tlist.push([e, extension]);\n\t}\n\treturn list;\n}\n\n/**\n * \n * @param {import('../types/index.mjs').ColumnParam} param \n * @returns {import('../types/index.mjs').ColumnComponent}\n */\nconst defaultHeaderRenderer = ({ column: { title = '' } }) => {\n\tconst root = document.createElement('div');\n\n\troot.innerText = title;\n\treturn {\n\t\troot,\n\t\tdestroy() { },\n\t\tupdate(c) {\n\t\t\troot.innerText = c.title || '';\n\t\t},\n\t};\n};\n/**\n * \n * @param {import('../types/index.mjs').CellParam} param \n * @returns {import('../types/index.mjs').CellComponent}\n */\nconst defaultRenderer = ({ value }) => {\n\tconst root = document.createElement('div');\n\n\t/**\n\t * \n\t * @param {any} v \n\t */\n\tfunction setValue(v) {\n\t\troot.innerText = v === undefined || v === null ? '' : v;\n\t}\n\tsetValue(value);\n\t/**\n\t * \n\t * @param {import('../types/index.mjs').CellUpdate} row \n\t * @returns \n\t */\n\tconst update = (row) => setValue(row.value);\n\n\treturn { root, destroy() { }, setHidden() { }, update };\n};\n\nconst noopRender = () => ({\n\troot: document.createElement('div'),\n\tdestroy: noop,\n\tsetHidden: noop,\n\tupdate: noop,\n});\n/** @returns {import('../types/index.mjs').ColumnDefine} */\nconst createNoop = () => ({ updateData: noop, render: noopRender, header: noopRender, customize: noop });\n/**\n * \n * @param {import('../types/index.mjs').ColumnOptions} column \n * @param {import('../types/index.mjs').Extension[]} exFns \n * @param {Record<string, any>} exOptions \n * @param {import('../types/index.mjs').Api} api \n * @returns {[import('../types/index.mjs').NextColumn, (allOptions: Record<string, any>[], opt: import('../types/index.mjs').ColumnOptions) => void, () => void]}\n */\nfunction createColumnFn(\n\tcolumn,\n\texFns,\n\texOptions,\n\tapi,\n) {\n\tconst render = typeof column.render === 'function' ? column.render : defaultRenderer;\n\tconst header = typeof column.header === 'function' ? column.header : defaultHeaderRenderer;\n\n\tlet destroyed = false;\n\t/** @type {((options: Record<string, any>, columnOptions: import('../types/index.mjs').ColumnOptions) => void)[]} */\n\tconst rootUpdates = [];\n\t/** @type {import('../types/index.mjs').NextColumn} */\n\tlet fn = u => {\n\t\tif (destroyed) { return createNoop(); }\n\t\trootUpdates.push((_, v) => u(v));\n\t\treturn ({ ...column, render, header, updateData:noop, customize: noop });\n\t};\n\t/** @type {((options: Record<string, any>, columnOptions: import('../types/index.mjs').ColumnOptions) => void)[][]} */\n\tconst updates = [];\n\tupdates[exFns.length] = rootUpdates;\n\t/** @type {(() => void)[]} */\n\tconst destroys = [];\n\tfor (let i = exFns.length - 1; i >= 0; i--) {\n\t\t/** @type {((options: Record<string, any>, columnOptions: import('../types/index.mjs').ColumnOptions) => void)[]} */\n\t\tconst update = [];\n\t\tupdates[i] = update;\n\t\tconst exFn = exFns[i];\n\t\tconst f = fn;\n\t\tfn = u => {\n\t\t\tif (destroyed) { return createNoop(); }\n\t\t\tconst { updateData, updateOptions, destroy, customize, ...r } = exFn(exOptions[i] || {}, u, api, f, column);\n\t\t\tif (typeof updateOptions === 'function') {\n\t\t\t\tupdate.push(updateOptions);\n\t\t\t}\n\t\t\tif (typeof destroy === 'function') {\n\t\t\t\tdestroys.push(destroy);\n\t\t\t}\n\t\t\treturn /** @type {import('../types/index.mjs').ColumnDefine} */({ ...r,\n\t\t\t\tupdateData: typeof updateData === 'function' ? updateData : noop,\n\t\t\t\tcustomize: typeof customize === 'function' ? customize : noop,\n\t\t\t});\n\t\t};\n\t}\n\t/**\n\t * \n\t * @param {Record<string, any>[]} allOptions \n\t * @param {import('../types/index.mjs').ColumnOptions} opt \n\t * @returns \n\t */\n\tfunction updateExtensions(allOptions, opt) {\n\t\tif (destroyed) { return; }\n\t\texOptions = allOptions;\n\t\tconst allUpdates = updates.map(v => [...v]);\n\t\tfor (let i = 0; i < allUpdates.length; i++) {\n\t\t\tconst o = exOptions[i] || {};\n\t\t\tfor (const update of allUpdates[i]) {\n\t\t\t\tupdate(o, opt);\n\t\t\t}\n\t\t}\n\t}\n\tfunction destroy() {\n\t\tif (destroyed) { return; }\n\t\tdestroyed = true;\n\t\tfor (const destroy of destroys) {\n\t\t\tdestroy();\n\t\t}\n\t}\n\treturn [fn, updateExtensions, destroy];\n}\n\n/**\n * \n * @param {import('../types/index.mjs').Api} api \n * @param {import('../types/index.mjs').ColumnOptions} options \n * @param {import('../types/index.mjs').Extension[]} exFns \n * @param {Record<string, any>} exOptions \n * @param {() => void} requestRender \n * @returns \n */\nfunction createColumn(api, options, exFns, exOptions, requestRender) {\n\tconst [fn, updateExtensions, destroyExt] = createColumnFn(options, exFns, exOptions, api);\n\n\t/** @type {import('../types/index.mjs').ColumnUpdatable} */\n\tconst columnValue = {\n\t\twidth: 0, hidden: false,\n\t\tresizable: false,\n\t\tminWidth: 0,\n\t\tmaxWidth: Infinity,\n\t};\n\tconst col = fn(({ width, minWidth, maxWidth, resizable, hidden }) => {\n\t\tif (width) {\n\t\t\tcolumnValue.width = Math.max(width, 1);\n\t\t\trequestRender();\n\t\t}\n\t\tif (typeof hidden === 'boolean') {\n\t\t\tcolumnValue.hidden = hidden;\n\t\t\trequestRender();\n\t\t}\n\t\tif (typeof minWidth === 'number' && Number.isFinite(minWidth) && minWidth > 0) {\n\t\t\tcolumnValue.minWidth = minWidth;\n\t\t}\n\t\tif (typeof maxWidth === 'number' && !Number.isNaN(minWidth) && maxWidth > 0) {\n\t\t\tcolumnValue.maxWidth = maxWidth;\n\t\t}\n\t\tif (typeof resizable === 'boolean') {\n\t\t\tcolumnValue.resizable = resizable;\n\t\t\trequestRender();\n\t\t}\n\t});\n\n\tconst { updateData, header, width, render, customize, field } = col;\n\tlet {title} = col;\n\tconst { meta, resizable, minWidth, maxWidth, spillable, hidden } = col;\n\tif (!columnValue.width) { columnValue.width = Math.max(1, width || defaultWidth); }\n\tif (typeof hidden === 'boolean') { columnValue.hidden = hidden; }\n\tif (typeof resizable === 'boolean') { columnValue.resizable = resizable; }\n\tif (minWidth) { columnValue.minWidth = minWidth; }\n\tif (maxWidth) { columnValue.maxWidth = maxWidth; }\n\n\tconst {key} = options;\n\t/** @type {import('../types/index.mjs').ColumnInfo} */\n\tconst info = {\n\t\tget key() { return key; },\n\t\tget meta() { return meta; },\n\t\tget field() { return field; },\n\n\t\tget title() { return title; },\n\t\tget width() { return columnValue.width; },\n\t\tget minWidth() { return columnValue.minWidth; },\n\t\tget maxWidth() { return columnValue.maxWidth; },\n\t\tget resizable() { return columnValue.resizable; },\n\t\tget hidden() { return columnValue.hidden; },\n\n\t};\n\t/** @type {import('../types/index.mjs').ColumnCell} */\n\tconst column = {\n\t\tfixed: false,\n\t\toptions: options,\n\t\tkey,\n\t\textensions: exFns,\n\t\tstart: 0,\n\t\tend: 0,\n\t\tupdateData: updateData || noop,\n\t\tupdate(opt, extensions) {\n\t\t\tconst t = opt.title;\n\t\t\ttitle = typeof t === 'string' ? title : '';\n\t\t\tupdateExtensions(extensions, opt);\n\t\t},\n\t\tdestroy() {\n\t\t\tdestroyExt();\n\t\t},\n\t\tget width() { return columnValue.width; },\n\t\tset width(v) { columnValue.width =v; },\n\t\tget minWidth() { return columnValue.minWidth; },\n\t\tget maxWidth() { return columnValue.maxWidth; },\n\t\tget resizable() { return columnValue.resizable; },\n\t\tget hidden() { return columnValue.hidden; },\n\t\ttitle,\n\t\trender: (p, rowApi) => render({...p, rowApi, api, column: info, meta}),\n\t\theader: p => header(p),\n\t\tcustomize: p => customize(p),\n\t\tfield,\n\t\tmeta,\n\t\tspillable,\n\t};\n\treturn column;\n}\n\n/**\n * \n * @param {() => void} requestRender \n * @param {import('../types/index.mjs').Api} api \n * @param {import('../types/index.mjs').ColumnCell[]} oldColumns \n * @param {readonly import('../types/index.mjs').RowValue[]} data \n * @param {import('../types/index.mjs').ColumnOptions[]} [columns] \n * @returns \n */\nfunction createColumns(\n\trequestRender,\n\tapi,\n\toldColumns,\n\tdata,\n\tcolumns = [],\n) {\n\t/** @type {import('../types/index.mjs').ColumnCell[]} */\n\tconst list = [];\n\n\tfor (const c of columns) {\n\t\tconst extensions = getExtensionList(c.extensions);\n\t\tconst exFns = extensions.map(v => v[0]);\n\t\tconst exOptions = extensions.map(v => v[1]);\n\t\tconst {field} = c;\n\t\tconst {meta} = c;\n\t\tconst key = c.key || field;\n\t\tconst {length} = exFns;\n\t\tconst index = oldColumns.findIndex(c => {\n\t\t\tif (c.meta !== meta) { return; }\n\t\t\tif (c.field !== field) { return; }\n\t\t\tif (c.key !== key) { return; }\n\t\t\tconst {extensions} = c;\n\t\t\tif (c.extensions.length !== exFns.length) { return; }\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tif (extensions[i] !== exFns[i]) { return; }\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\tconst col = index < 0\n\t\t\t? createColumn(api, c, exFns, exOptions, requestRender)\n\t\t\t: oldColumns.splice(index, 1)[0];\n\t\tlist.push(col);\n\t\tif (index >= 0) {\n\t\t\tcol.update(c, exOptions);\n\t\t} else {\n\t\t\tcol.updateData(data);\n\t\t}\n\n\n\t}\n\tfor (const c of oldColumns) {\n\t\tc.destroy();\n\t}\n\treturn list;\n}\n\nclass Group {\n\t/** @type {import('../types/index.mjs').Api} */\n\t#api;\n\t#startFixed = 0;\n\tget startFixed() { return this.#startFixed; }\n\tset startFixed(v) {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#startFixed = v;\n\t\tthis.requestRender();\n\t}\n\t/** @type {() => void} */\n\t#remove;\n\t/** @type {() => readonly import('../types/index.mjs').RowValue[]} */\n\t#getData;\n\t/** @type {() => void} */\n\t#requestRender;\n\t/**\n\t * \n\t * @param {import('../Source/index.mjs').default} source \n\t * @param {() => readonly import('../types/index.mjs').RowValue[]} getData \n\t * @param {() => void} remove \n\t */\n\tconstructor(\n\t\tsource,\n\t\tgetData,\n\t\tremove,\n\t) {\n\t\tthis.#remove = remove;\n\t\tthis.#getData = getData;\n\t\tthis.#requestRender = () => source.requestRender(this);\n\t\tthis.#api = {\n\t\t\ttoggleSelected: id => source.toggleSelected(id),\n\t\t\tsetCollapse: (k, c) => source.setCollapse(k, c),\n\t\t\tisCollapsed: k => source.isCollapsed(k),\n\t\t\tsetChecked: (k, v) => source.setChecked(k, v),\n\t\t\tisChecked: k => source.isChecked(k),\n\t\t\tisAllChecked: () => source.isAllChecked(),\n\t\t\thasChecked: () => source.hasChecked(),\n\t\t\tcheckedAll: () => source.checkedAll(),\n\t\t\tcleanChecked: () => source.cleanChecked(),\n\n\t\t\temit: source.emit,\n\t\t\tlisten: source.listen,\n\t\t\temitRow: source.emitRow,\n\t\t\tlistenRow: source.listenRow,\n\t\t\tsetStyleVar: (k, v) => this.setStyleVar(k, v),\n\t\t\tremoveStyleVar: k => this.removeStyleVar(k),\n\t\t};\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} [root] \n\t * @returns \n\t */\n\tcreateHeader(root) {\n\t\tconst header = new Header(root, this, () => {\n\t\t\tthis.#headers.delete(header);\n\t\t});\n\n\t\theader.requestRender = () => this.requestRender(header);\n\t\tthis.#headers.add(header);\n\t\tif (this.#destroyed) {\n\t\t\theader.destroy();\n\t\t} else {\n\t\t\theader._updateColumns(this.#columns);\n\t\t\tfor (const [k, v] of this.#styles) {\n\t\t\t\theader.root.style.setProperty(k, v);\n\t\t\t}\n\t\t}\n\t\tthis.requestRender(header);\n\t\treturn header;\n\t}\n\t/**\n\t * \n\t * @param {HTMLElement} [root] \n\t * @param {number} [rowHeight] \n\t * @returns \n\t */\n\tcreateBody(root, rowHeight) {\n\t\tconst area = new Body(root, this, () => {\n\t\t\tthis.#bodies.delete(area);\n\t\t});\n\t\tif (rowHeight && rowHeight > 0) {\n\t\t\tarea.rowHeight = rowHeight;\n\t\t}\n\n\t\tarea.requestRender = () => this.requestRender(area);\n\t\tthis.#bodies.add(area);\n\t\tif (this.#destroyed) {\n\t\t\tarea.destroy();\n\t\t} else {\n\t\t\tarea._updateColumns(this.#columns);\n\t\t\tfor (const [k, v] of this.#styles) {\n\t\t\t\tarea.root.style.setProperty(k, v);\n\t\t\t}\n\t\t}\n\t\tthis.requestRender(area);\n\t\treturn area;\n\t}\n\t/** @type {import('../types/index.mjs').ColumnCell[]} */\n\t#columns = [];\n\tget columns() { return this.#columns; }\n\t/**\n\t * \n\t * @param {import('../types/index.mjs').RowValue[]} data \n\t */\n\t_updateData(data) {\n\t\tthis.#hide();\n\t\tfor (const column of this.#columns) {\n\t\t\tcolumn.updateData(data);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {import('../types/index.mjs').ColumnOptions[]} [v] \n\t * @returns \n\t */\n\tsetColumns(v) {\n\t\tif (this.#destroyed) { return; }\n\t\tconst columns = createColumns(\n\t\t\t() => this.requestRender(),\n\t\t\tthis.#api,\n\t\t\tthis.#columns,\n\t\t\tthis.#getData(),\n\t\t\tv || [],\n\t\t);\n\t\tthis.#columns = columns;\n\t\tfor (const header of this.#headers) {\n\t\t\theader._updateColumns(columns);\n\t\t}\n\t\tfor (const area of this.#bodies) {\n\t\t\tarea._updateColumns(columns);\n\t\t}\n\t\tthis.requestRender();\n\t}\n\n\t#hide() {\n\t\tfor (const header of this.#headers) {\n\t\t\theader._hide();\n\t\t}\n\t\tfor (const area of this.#bodies) {\n\t\t\tarea._hide();\n\t\t}\n\t}\n\tpaused = false;\n\t#renderSet = new Set();\n\t#renderAll = false;\n\t/**\n\t * \n\t * @param {any} [p] \n\t * @returns \n\t */\n\trequestRender(p) {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#requestRender();\n\t\tif (p) {\n\t\t\tthis.#renderSet.add(p);\n\t\t} else {\n\t\t\tthis.#renderAll = true;\n\t\t}\n\t}\n\t#destroyed = false;\n\tdestroy() {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#destroyed = true;\n\t\tthis.#remove();\n\t\tthis.#hide();\n\t\tfor (const c of [...this.#headers]) {\n\t\t\tc.destroy();\n\t\t}\n\t\tfor (const c of [...this.#bodies]) {\n\t\t\tc.destroy();\n\t\t}\n\t\tfor (const c of this.#columns) {\n\t\t\tc.destroy();\n\t\t}\n\t\tthis.#columns = [];\n\n\t}\n\t/** @type {Set<Body>} */\n\t#bodies = new Set();\n\t/** @type {Set<Header>} */\n\t#headers = new Set();\n\t/**\n\t * \n\t * @param {import('../types/Row.mjs').Row[]} rowData \n\t * @param {Map<string | number | symbol, import('../types/Row.mjs').Row>} rowMap \n\t * @param {number[]} visibleRowIndexes \n\t * @param {string | number | undefined} hoverId \n\t * @param {string | number | symbol | undefined} selectedId \n\t * @param {Set<string | number | symbol>} checkedSet \n\t * @param {boolean} [force] \n\t * @returns \n\t */\n\t_render(\n\t\trowData,\n\t\trowMap,\n\t\tvisibleRowIndexes,\n\t\thoverId,\n\t\tselectedId,\n\t\tcheckedSet,\n\t\tforce = this.#renderAll,\n\t) {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.setStyleVar('row-visible', `${visibleRowIndexes.length}`);\n\n\t\tconst { startFixed } = this;\n\t\tconst columns = this.#columns;\n\t\tconst separate = updateColumn(columns, startFixed);\n\t\tconst width = separate[separate.length - 1];\n\t\tthis.setStyleVar('width', `${width}px`);\n\t\tconst s = startFixed < separate.length && separate[startFixed] || 0;\n\t\tthis.setStyleVar('fixed-start-width', `${s > 0 ? s : -100}px`);\n\t\tif (this.paused) { return; }\n\t\tthis.#renderAll = false;\n\t\tconst set = new Set(this.#renderSet);\n\t\tthis.#renderSet.clear();\n\n\n\t\tfor (const header of this.#headers) {\n\t\t\theader._render(\n\t\t\t\tcolumns,\n\t\t\t\tforce || set.has(header),\n\t\t\t);\n\t\t}\n\t\tfor (const body of this.#bodies) {\n\t\t\tbody._render(\n\t\t\t\tcolumns,\n\t\t\t\trowData,\n\t\t\t\trowMap,\n\t\t\t\tvisibleRowIndexes,\n\t\t\t\thoverId,\n\t\t\t\tselectedId,\n\t\t\t\tcheckedSet,\n\t\t\t\tseparate,\n\t\t\t\tstartFixed,\n\t\t\t\tforce || set.has(body),\n\t\t\t);\n\t\t}\n\t}\n\t/** @type {Map<string, string>} */\n\t#styles = new Map();\n\t/**\n\t * \n\t * @param {string} k \n\t * @param {string} v \n\t */\n\tsetStyleVar(k, v) {\n\t\tconst key = `--neeloong-table-${k}`;\n\t\tthis.#styles.set(key, v);\n\t\tfor (const area of this.#headers) {\n\t\t\tarea.root.style.setProperty(key, v);\n\t\t}\n\t\tfor (const area of this.#bodies) {\n\t\t\tarea.root.style.setProperty(key, v);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {string} k \n\t */\n\tremoveStyleVar(k) {\n\t\tconst key = `--neeloong-table-${k}`;\n\t\tthis.#styles.delete(key);\n\t\tfor (const area of this.#headers) {\n\t\t\tarea.root.style.removeProperty(key);\n\t\t}\n\t\tfor (const area of this.#bodies) {\n\t\t\tarea.root.style.removeProperty(key);\n\t\t}\n\t}\n}\n\n/**\n * \n * @param {unknown[]} a \n * @param {unknown[]} b \n * @returns \n */\nfunction isEq(a, b) {\n\tconst { length } = a;\n\tif (length !== b.length) { return false; }\n\tfor (let i = 0; i < length; i++) {\n\t\tif (a[i] === b[i]) { continue; }\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/**\n * @param {Record<string | symbol, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>>} events\n * @param {any} key\n * @returns {Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>}\n */\nfunction get$1(events, key) {\n\tlet set = key in events && events[key];\n\tif (set instanceof Set) { return set; }\n\tset = new Set();\n\tevents[key] = set;\n\treturn set;\n}\n/**\n * @template {object} T\n * @param {Record<string | symbol, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>>} events\n * @returns {import('../types/index.mjs').Listen<T>}\n */\nfunction createListen(events) {\n\t/**\n\t * \n\t * @param {any} key \n\t * @param {import('../types/index.mjs').Listener<any>} fn \n\t * @returns \n\t */\n\treturn (key, fn) => {\n\t\tconst set = get$1(events, key);\n\t\t/** @type {(v: any, ctx: import('../types/index.mjs').EventContext) => void} */\n\t\tconst f = (...v) => fn(...v);\n\t\tset.add(f);\n\t\treturn () => { set.delete(f); };\n\t};\n}\n\n/**\n * @template {object} T\n * @param {Record<string | symbol, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => boolean>>} events\n * @returns {import('../types/index.mjs').Emit<T>}\n */\nfunction createEmit(events) {\n\t/**\n\t * \n\t * @param {any} key \n\t * @param {any} value \n\t * @param {import('../types/index.mjs').EmitOption} [opt] \n\t * @returns \n\t */\n\treturn (key, value, opt) => {\n\t\tconst set = key in events && events[key];\n\t\tif (!(set instanceof Set)) { return true; }\n\n\t\tlet prevented = true;\n\t\tlet stop = false;\n\t\tconst cancelable = Boolean(opt?.cancelable);\n\t\t/** @type {import('../types/index.mjs').EventContext} */\n\t\tconst ctx = {\n\t\t\tstop() { stop = true; },\n\t\t\tprevent() { prevented = true; },\n\t\t\tget cancelable() { return cancelable; },\n\t\t\tget prevented() { return prevented; },\n\t\t};\n\t\tfor (const f of [...set]) {\n\t\t\tf(value, ctx);\n\t\t\tif (stop) { break; }\n\t\t}\n\t\treturn !prevented;\n\t};\n}\n\n/**\n * @param {Map<string | number, Map<string | symbol, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>>>} events\n * @param {string | number} row\n * @returns {Map<string | symbol, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>>}\n */\nfunction getRow(events, row) {\n\tlet rowEvents = events.get(row);\n\tif (rowEvents) { return rowEvents; }\n\trowEvents = new Map();\n\tevents.set(row, rowEvents);\n\treturn rowEvents;\n\n}\n/**\n * @param {Map<string | symbol, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>>} rowEvents\n * @param {any} key\n * @returns {Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>}\n */\nfunction get(rowEvents, key) {\n\tlet set = rowEvents.get(key);\n\tif (set) { return set; }\n\tset = new Set();\n\trowEvents.set(key, set);\n\treturn set;\n}\n/**\n * @template {object} T\n * @param {Map<string | number, Map<string | symbol, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>>>} events\n * @returns {import('../types/index.mjs').RowListen<T>}\n */\nfunction createListenRow(events) {\n\t/**\n\t * @param {string | number} row\n\t * @param {any} key\n\t * @param {import('../types/index.mjs').Listener<any>} fn\n\t */\n\treturn (row, key, fn) => {\n\t\tconst rowEvents = getRow(events, row);\n\t\tconst set = get(rowEvents, key);\n\t\t/** @type {(v: any, ctx: import('../types/index.mjs').EventContext) => void} */\n\t\tconst f = (...v) => fn(...v);\n\t\tset.add(f);\n\t\treturn () => {\n\t\t\tset.delete(f);\n\t\t\tif (set.size) { return; }\n\t\t\trowEvents.delete(key);\n\t\t\tif (rowEvents.size) { return; }\n\t\t\tevents.delete(row);\n\t\t};\n\t};\n}\n\n/**\n * @template {object} T\n * @param {Map<string | number | symbol, Map<string | symbol, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>>>} events\n * @returns {import('../types/index.mjs').RowEmit<T>}\n */\nfunction createEmitRow(events) {\n\t/**\n\t * @param {string | number | symbol} row\n\t * @param {any} key\n\t * @param {any} value\n\t * @param {import('../types/index.mjs').EmitOption} [opt]\n\t */\n\treturn (row, key, value, opt) => {\n\t\tconst set = events.get(row)?.get(key);\n\t\tif (!set) { return true; }\n\n\t\tlet prevented = true;\n\t\tlet stop = false;\n\t\tconst cancelable = Boolean(opt?.cancelable);\n\t\t/** @type {import('../types/index.mjs').EventContext} */\n\t\tconst ctx = {\n\t\t\tstop() { stop = true; },\n\t\t\tprevent() { prevented = true; },\n\t\t\tget cancelable() { return cancelable; },\n\t\t\tget prevented() { return prevented; },\n\t\t};\n\t\tfor (const f of [...set]) {\n\t\t\tf(value, ctx);\n\t\t\tif (stop) { break; }\n\t\t}\n\t\treturn !prevented;\n\t};\n}\n\n/**\n * \n * @param {import('../types/Row.mjs').Row} row \n * @param {Set<string | number | symbol>} expanded \n * @returns {Iterable<number>}\n */\nfunction* getList(row, expanded) {\n\tif (!expanded.has(row.id)) { return; }\n\tfor (const r of row.children) {\n\t\tyield r.index;\n\t\tyield* getList(r, expanded);\n\t}\n}\n/**\n * \n * @param {import('../types/Row.mjs').Row} row \n * @param {Map<string | number | symbol, import('../types/Row.mjs').Row>} rowMap \n * @param {Set<string | number | symbol>} expanded \n * @returns \n */\nfunction rowVisible(row, rowMap, expanded) {\n\tlet parent = rowMap.get(/** @type {any} */(row.parentId));\n\twhile (parent) {\n\t\tif (!expanded.has(parent.id)) { return false; }\n\t\tparent = rowMap.get(/** @type {any} */(parent.parentId));\n\t}\n\treturn true;\n}\n\n/**\n * \n * @param {import('../types/Row.mjs').Row} row \n * @param {boolean} closed \n * @param {Map<string | number | symbol, import('../types/Row.mjs').Row>} rowMap \n * @param {Set<string | number>} expanded \n * @param {number[]} visible \n * @returns \n */\nfunction updateCollapse(row, closed, rowMap, expanded, visible) {\n\tif (!row.children.length) { return false; }\n\tif (!rowVisible(row, rowMap, expanded)) { return false; }\n\t// 找到第一个和最后一个 // this.rowData.indexOf(row);\n\tconst { index } = row;\n\tlet first = binarySearch(index + 1, visible, 0, visible.length - 1);\n\tif (first < 0) { return false; }\n\tlet last = binarySearch(index + row.descendants.length, visible, 0, visible.length - 1);\n\tif (visible[last] > index + row.descendants.length) { last--; }\n\tconst length = last - first + 1;\n\tvisible.splice(first, length);\n\tif (closed) { return true; }\n\tlet k = first;\n\tfor (const index of getList(row, expanded)) {\n\t\tvisible.splice(k, 0, index);\n\t\tk++;\n\t}\n\treturn true;\n}\n\n/**\n * \n * @param {import('../types/Row.mjs').Row[]} rowData \n * @param {Map<string | number | symbol, import('../types/Row.mjs').Row>} rowMap \n * @param {Set<string | number>} expanded \n * @returns \n */\nfunction updateVisible(rowData, rowMap, expanded) {\n\n\tconst visible = [];\n\tconst { length } = rowData;\n\tfor (let i = 0; i < length; i++) {\n\t\tif (rowVisible(rowData[i], rowMap, expanded)) {\n\t\t\tvisible.push(i);\n\t\t}\n\t}\n\treturn visible;\n}\n\n/** @typedef {[string | number, any, string | number | undefined]} RowInfo */\n/**\n * \n * @param {any[]} rows \n * @param {(v: any) => string | number} idKey \n * @param {(v: any) => string | number | undefined} parentKey \n * @returns {RowInfo[]}\n */\nfunction unique(rows, idKey, parentKey) {\n\t/** @type {RowInfo[]} */\n\tconst list = [];\n\t/** @type {Map<string | number, RowInfo>} */\n\tconst map = new Map();\n\tfor (const value of rows || []) {\n\t\tconst id = idKey(value);\n\t\tlet row = map.get(id);\n\t\tif (row) {\n\t\t\trow[1] = value;\n\t\t\tcontinue;\n\t\t}\n\t\trow = [id, value, parentKey(value)];\n\t\tmap.set(id, row);\n\t\tlist.push(row);\n\t}\n\treturn list;\n}\n\n/**\n * \n * @param {RowInfo[]} rows \n * @returns {RowInfo[]}\n */\nfunction toTree(rows) {\n\tconst ids = new Set(rows.map(v => v[0]));\n\t/** @type {RowInfo[]} */\n\tconst root = [];\n\t/** @type {Map<string | number, RowInfo[]>} */\n\tconst map = new Map();\n\tfor (const row of rows) {\n\t\tconst parentId = row[2];\n\t\tif (parentId === undefined || !ids.has(parentId)) {\n\t\t\troot.push(row);\n\t\t\tcontinue;\n\t\t}\n\t\tconst list = map.get(parentId);\n\t\tif (list) {\n\t\t\tlist.push(row);\n\t\t\tcontinue;\n\t\t}\n\t\tmap.set(parentId, [row]);\n\t}\n\n\t/**\n\t * \n\t * @param {RowInfo[]} list \n\t * @returns {Iterable<RowInfo>}\n\t */\n\tfunction* get(list) {\n\t\tfor (const row of list) {\n\t\t\tyield row;\n\t\t\tconst id = row[0];\n\t\t\tconst list = map.get(id);\n\t\t\tif (!list) { continue; }\n\t\t\tmap.delete(id);\n\t\t\tyield* get(list);\n\t\t}\n\t}\n\t/** @type {RowInfo[]} */\n\tconst list = [...get(root)];\n\twhile (map.size) {\n\t\tconst [id] = map.keys();\n\t\tconst l = map.get(id);\n\t\tmap.delete(id);\n\t\tif (!l) { continue; }\n\t\tfor (const v of get(l)) {\n\t\t\tlist.push(v);\n\t\t}\n\t}\n\treturn list;\n}\n/**\n * \n * @param {() => void} setSelected \n * @returns \n */\nfunction createRowEl(setSelected) {\n\tconst el = document.createElement('div');\n\tel.className = 'neeloong-table-row';\n\tel.addEventListener('click', e => {\n\t\tfor (const v of e.composedPath()) {\n\t\t\tif (v === el) { break; }\n\t\t\tif (!(v instanceof Element)) { continue; }\n\t\t\tif (v.classList.contains('neeloong-table-selectable')) { return; }\n\t\t}\n\t\tsetSelected();\n\t});\n\tel.appendChild(document.createElement('div')).className = 'neeloong-table-fixed-line';\n\treturn el;\n}\n\n/**\n * \n * @param {import('./index.mjs').default} source \n * @param {string | number} id \n * @param {HTMLDivElement} el \n * @param {import('../types/index.mjs').Listen<import('../types/index.mjs').RowEventMap>} listen \n * @param {import('../types/index.mjs').Emit<import('../types/index.mjs').RowEventMap>} emit \n * @returns {import('../types/index.mjs').RowApi}\n */\nfunction createRowApi(source, id, el, listen, emit) {\n\treturn {\n\t\temit, listen,\n\t\tsetCollapse: v => source.setCollapse(id, v),\n\t\tget collapsed() { return source.isCollapsed(id); },\n\t\tset collapsed(v) { source.setCollapse(id, v); },\n\t\tsetChecked: v => { source.setChecked(id, v); },\n\t\tget checked() { return source.isChecked(id); },\n\t\tset checked(v) { source.setChecked(id, v); },\n\t\taddClass(...c) { el.classList.add(...c); },\n\t\tremoveClass(...c) { el.classList.remove(...c); },\n\t\thasClass(c) { return el.classList.contains(c); },\n\t};\n}\n\n/**\n * @template {object} T\n * @param {import('./index.mjs').default} source \n * @param {object[]} rows \n * @param {(id?: string | number) => void} setHover \n * @param {Map<string | number | symbol, import('../types/Row.mjs').Row>} oldMap \n * @param {import('../types/index.mjs').IdKey<T>} [idKey] \n * @param {import('../types/index.mjs').Key<string | number, T>} [parentKey] \n * @returns {[import('../types/Row.mjs').Row[], Map<string | number | symbol, import('../types/Row.mjs').Row>]}\n */\nfunction setValue(source, rows, setHover, oldMap, idKey, parentKey) {\n\tconst infoList = toTree(unique(rows, createIdKey(idKey), createKey(parentKey)));\n\t/** @type {import('../types/Row.mjs').Row[]} */\n\tconst list = [];\n\t/** @type {Map<string | number | symbol, import('../types/Row.mjs').Row>} */\n\tconst map = new Map();\n\n\t/** @type {Set<import('../types/Row.mjs').Row>} */\n\tconst updatedRow = new Set();\n\t/** @type {(string | number)[]} */\n\tconst ancestorIds = [];\n\t/** @type {import('../types/Row.mjs').Row[]} */\n\tconst ancestors = [];\n\tlet index = 0;\n\tfor (const [id, data, parentId] of infoList) {\n\t\tlet row = map.get(id);\n\t\tif (row) {\n\t\t\trow.value.data = data;\n\t\t\tcontinue;\n\t\t}\n\t\trow = oldMap.get(id);\n\t\tconst level = parentId === undefined ? 0 : ancestorIds.lastIndexOf(parentId) + 1;\n\t\tancestorIds.length = level;\n\t\tancestors.length = level;\n\t\tif (row) {\n\t\t\toldMap.delete(id);\n\t\t\tupdatedRow.add(row);\n\t\t\trow.index = index;\n\t\t\trow.parentId = level ? parentId : undefined;\n\t\t\trow.value = { id, data, parentId, level, children: [] };\n\t\t\trow.descendants = [];\n\t\t\trow.children = [];\n\t\t} else {\n\n\t\t\tconst emit = source.emitRow.bind(null, id);\n\t\t\tconst listen = source.listenRow.bind(null, id);\n\t\t\trow = {\n\t\t\t\tindex, parentId,\n\t\t\t\temit,\n\t\t\t\tlisten,\n\t\t\t\tvalue: { id, data, parentId: level ? parentId : undefined, level, children: [] },\n\t\t\t\tid,\n\t\t\t\tdescendants: [],\n\t\t\t\tchildren: [],\n\t\t\t\tcreateProxy() {\n\t\t\t\t\tconst el = createRowEl(() => source.toggleSelected(this.id));\n\t\t\t\t\tel.addEventListener('pointerenter', () => { setHover(id); });\n\t\t\t\t\tel.addEventListener('pointerleave', () => { setHover(); });\n\t\t\t\t\t/** @type {import('../types/Row.mjs').RowDataProxy} */\n\t\t\t\t\tconst elProxy = {\n\t\t\t\t\t\tel, index: this.index, row: this, cells: new Map(), shown: [],\n\t\t\t\t\t\tapi: createRowApi(source, id, el, listen, emit),\n\t\t\t\t\t};\n\t\t\t\t\treturn elProxy;\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tindex++;\n\t\tconst last = ancestors[ancestors.length - 1];\n\t\tif (last) {\n\t\t\tlast.value.children.push(row.value);\n\t\t\tlast.children.push(row);\n\t\t}\n\t\tfor (const a of ancestors) {\n\t\t\ta.descendants.push(row);\n\t\t}\n\t\tancestors.push(row);\n\t\tancestorIds.push(id);\n\t\tmap.set(id, row);\n\t\tlist.push(row);\n\t}\n\tfor (const row of updatedRow) {\n\t\tconst { value, elMap } = row;\n\t\tif (!elMap) { continue; }\n\t\tfor (const cell of [...elMap.values()].flatMap(e => [...e.cells.values()])) {\n\t\t\tif (!cell) { continue; }\n\t\t\tcell.update(value);\n\t\t}\n\t}\n\tfor (const row of oldMap.values()) {\n\t\tconst { elMap } = row;\n\t\tif (!elMap) { continue; }\n\t\tfor (const cell of [...elMap.values()].flatMap(e => [...e.cells.values()])) {\n\t\t\tif (!cell) { continue; }\n\t\t\tcell.destroy();\n\t\t}\n\t}\n\treturn [list, map];\n}\n\nclass Source {\n\t/** @type {import('../types/Row.mjs').Row[]} */\n\t#rowData = [];\n\t/** @type {Map<string | number | symbol, import('../types/Row.mjs').Row>} */\n\t#rowMap = new Map();\n\t/** @type {import('../types/index.mjs').IdKey<object> | undefined} */\n\t#idKey;\n\t/** @type {import('../types/index.mjs').Key<string | number, object> | undefined} */\n\t#parentKey;\n\t/** @type {number[]} */\n\t#visibleRowIndexes = [];\n\n\t/** @type {Map<string | number, Map<string | symbol, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => void>>>} */\n\t#rowEvents = new Map();\n\t/** @readonly @type {import('../types/index.mjs').RowEmit<import('../types/index.mjs').RowEventMap>} */\n\temitRow = createEmitRow(this.#rowEvents);\n\t/** @readonly @type {import('../types/index.mjs').RowListen<import('../types/index.mjs').RowEventMap>} */\n\tlistenRow = createListenRow(this.#rowEvents);\n\n\t/** @type {Record<any, Set<(v: any, ctx: import('../types/index.mjs').EventContext) => boolean>>} */\n\t#events = {};\n\t/** @readonly @type {import('../types/index.mjs').Emit<import('../types/index.mjs').EventMap>} */\n\temit = createEmit(this.#events);\n\t/** @readonly @type {import('../types/index.mjs').Listen<import('../types/index.mjs').EventMap>} */\n\tlisten = createListen(this.#events);\n\n\t#selectable = false;\n\t/** @type {boolean} */\n\tget selectable() { return this.#selectable; }\n\tset selectable(v) {\n\t\tif (v) {\n\t\t\tthis.#selectable = true;\n\t\t\treturn;\n\t\t}\n\t\tthis.#selectable = false;\n\t\tconst old = this.#selectedId;\n\t\tif (old === undefined) { return; }\n\t\tthis.#selectedId = undefined;\n\t\tthis.requestRender();\n\t\tthis.emit('selectedChange', undefined);\n\t\tthis.emitRow(old, 'selectedChange', false);\n\n\t}\n\tpaused = false;\n\t/** @type {number | string | symbol | undefined} */\n\t#selectedId;\n\tget selectedId() { return this.#selectedId; }\n\tset selectedId(v) {\n\t\tif (!this.#selectable) { return; }\n\t\tconst old = this.#selectedId;\n\t\tif (v === old) { return; }\n\t\tthis.#selectedId = v;\n\t\tthis.requestRender();\n\t\tthis.emit('selectedChange', v);\n\t\tif (old !== undefined) {\n\t\t\tthis.emitRow(old, 'selectedChange', false);\n\t\t}\n\t\tif (v !== undefined) {\n\t\t\tthis.emitRow(v, 'selectedChange', true);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {number | string | symbol} id \n\t * @returns \n\t */\n\ttoggleSelected(id) {\n\t\tif (!this.#selectable) { return; }\n\t\tconst old = this.#selectedId;\n\t\tconst selectedId = old === id ? undefined : id;\n\t\tthis.#selectedId = selectedId;\n\t\tthis.requestRender();\n\t\tthis.emit('selectedChange', selectedId);\n\t\tif (old !== undefined && old !== id) {\n\t\t\tthis.emitRow(old, 'selectedChange', false);\n\t\t}\n\t\tif (id !== undefined) {\n\t\t\tthis.emitRow(id, 'selectedChange', true);\n\t\t}\n\t}\n\n\n\t/** @type {(number | string | symbol)[]} */\n\t#checkedList = [];\n\t/** @type {Set<number | string | symbol>} */\n\t#checkedSet = new Set();\n\t#allChecked = false;\n\tget checked() { return [...this.#checkedList]; }\n\tset checked(v) {\n\t\t/** @type {Set<number | string | symbol>} */\n\t\tconst had = new Set();\n\t\tconst rowMap = this.#rowMap;\n\t\t/** @type {(number | string | symbol)[]} */\n\t\tconst newList = [];\n\t\tfor (const k of v) {\n\t\t\tif (had.has(k)) { continue; }\n\t\t\tif (!rowMap.has(k)) { continue; }\n\t\t\thad.add(k);\n\t\t\tnewList.push(k);\n\t\t}\n\t\tif (isEq(this.#checkedList, newList)) { return; }\n\t\tconst oldSet = this.#checkedSet;\n\t\tconst checkedSet = new Set(newList);\n\t\tthis.#checkedList = newList;\n\t\tthis.#checkedSet = checkedSet;\n\t\tthis.#allChecked = checkedSet.size === rowMap.size;\n\t\tthis.requestRender();\n\t\tthis.emit('checkedChange', [...newList]);\n\t\tfor (const v of checkedSet) {\n\t\t\tif (oldSet.has(v)) { continue; }\n\t\t\tthis.emitRow(v, 'checkedChange', true);\n\t\t}\n\t\tfor (const v of oldSet) {\n\t\t\tif (checkedSet.has(v)) { continue; }\n\t\t\tthis.emitRow(v, 'checkedChange', false);\n\t\t}\n\t}\n\t/**\n\t * \n\t * @param {string | number} id \n\t * @returns \n\t */\n\tisChecked(id) {\n\t\treturn this.#checkedSet.has(id);\n\t}\n\t/**\n\t * \n\t * @param {string | number} id \n\t * @param {boolean} [checked] \n\t * @returns \n\t */\n\tsetChecked(id, checked) {\n\t\tconst rowMap = this.#rowMap;\n\t\tif (!rowMap.has(id)) { return false; }\n\t\tconst checkedSet = this.#checkedSet;\n\t\tif (typeof checked === 'boolean') {\n\t\t\tif (checked === checkedSet.has(id)) { return checked; }\n\t\t} else {\n\t\t\tchecked = !checkedSet.has(id);\n\t\t}\n\t\tconst checkedList = this.#checkedList;\n\t\tif (checked) {\n\t\t\tcheckedList.push(id);\n\t\t\tcheckedSet.add(id);\n\t\t\tthis.#allChecked = checkedSet.size === rowMap.size;\n\t\t} else {\n\t\t\tconst index = checkedList.indexOf(id);\n\t\t\tif (index >= 0) { checkedList.splice(index, 1); }\n\t\t\tcheckedSet.delete(id);\n\t\t\tthis.#allChecked = false;\n\t\t}\n\t\tthis.requestRender();\n\t\tthis.emit('checkedChange', [...this.#checkedList]);\n\t\tthis.emitRow(id, 'checkedChange', checked);\n\t\treturn checked;\n\t}\n\tget allChecked() { return this.#allChecked; }\n\tcheckedAll() {\n\t\tconst newList = this.#rowData.map(v => v.id);\n\t\tif (isEq(this.#checkedList, newList)) { return; }\n\t\tconst oldChecked = this.#checkedSet;\n\t\tconst checkedSet = new Set(newList);\n\t\tthis.#checkedList = newList;\n\t\tthis.#checkedSet = checkedSet;\n\t\tthis.#allChecked = true;\n\t\tthis.requestRender();\n\t\tthis.emit('checkedChange', [...this.#checkedList]);\n\t\tfor (const v of checkedSet) {\n\t\t\tif (oldChecked.has(v)) { continue; }\n\t\t\tthis.emitRow(v, 'checkedChange', true);\n\t\t}\n\t}\n\tcleanChecked() {\n\t\tconst checkedList = this.#checkedList;\n\t\tif (!checkedList.length) { return; }\n\t\tthis.#checkedList = [];\n\t\tthis.#checkedSet = new Set();\n\t\tthis.#allChecked = false;\n\t\tthis.requestRender();\n\t\tthis.emit('checkedChange', [...this.#checkedList]);\n\t\tfor (const v of checkedList) {\n\t\t\tthis.emitRow(v, 'checkedChange', false);\n\t\t}\n\t}\n\n\t/** @type {Set<number | string>} */\n\t#expanded = new Set();\n\t/** @type {(string | number)[]} */\n\tget expanded() { return [...this.#expanded]; }\n\tset expanded(list) {\n\t\tconst nl = [...list];\n\t\tconst expanded = this.#expanded;\n\t\tif (nl.length === expanded.size && nl.findIndex(v => !expanded.has(v)) < 0) { return; }\n\t\tconst rowMap = this.#rowMap;\n\t\tconst rowData = this.#rowData;\n\t\tconst oldExpanded = new Set(expanded);\n\t\t/** @type {Set<import('../types/Row.mjs').Row>} */\n\t\tconst newExpanded = new Set();\n\t\texpanded.clear();\n\t\tfor (const k of nl) {\n\t\t\tconst row = rowMap.get(k);\n\t\t\tif (!row) { continue; }\n\t\t\texpanded.add(k);\n\t\t\tif (!oldExpanded.delete(k)) {\n\t\t\t\tnewExpanded.add(row);\n\t\t\t}\n\t\t}\n\t\tfor (const k of oldExpanded) {\n\t\t\trowMap.get(k)?.emit('collapseChange', true);\n\t\t}\n\t\tfor (const row of newExpanded) {\n\t\t\trow.emit('collapseChange', false);\n\t\t}\n\n\t\tthis.#visibleRowIndexes = updateVisible(rowData, rowMap, expanded);\n\t\tthis.requestRender();\n\t}\n\t/**\n\t * \n\t * @param {string | number} k \n\t * @returns \n\t */\n\tisCollapsed(k) { return !this.#expanded.has(k); }\n\t/**\n\t * \n\t * @param {number | string} k \n\t * @param {boolean} [closed] \n\t * @returns \n\t */\n\tsetCollapse(k, closed) {\n\t\tconst rowMap = this.#rowMap;\n\t\tconst row = rowMap.get(k);\n\t\tif (!row) { return; }\n\t\tconst expanded = this.#expanded;\n\t\tconst c = typeof closed === 'boolean' ? closed : expanded.has(k);\n\t\tif (expanded.has(k) !== c) { return; }\n\t\texpanded[c ? 'delete' : 'add'](k);\n\t\tconst visible = this.#visibleRowIndexes;\n\t\tif (updateCollapse(row, c, rowMap, expanded, visible)) {\n\t\t\tthis.requestRender();\n\t\t}\n\t\trow.emit('collapseChange', c);\n\t\tthis.emit('collapseChange', [...this.#expanded]);\n\t}\n\tisAllChecked() {\n\t\treturn this.#allChecked;\n\t}\n\thasChecked() {\n\t\treturn this.#checkedSet.size > 0;\n\t}\n\t/**\n\t * \n\t * @param {import('../types/index.mjs').Options} options \n\t */\n\tconstructor({\n\t\tidKey,\n\t\tparentKey,\n\t} = {}) {\n\t\tthis.#idKey = idKey;\n\t\tthis.#parentKey = parentKey;\n\t}\n\n\t/**\n\t * \n\t * @param {import('../types/index.mjs').ColumnOptions[]} [columns] \n\t * @param {number} [startFixed] \n\t * @returns \n\t */\n\tcreateGroup(columns, startFixed) {\n\t\tconst area = new Group(\n\t\t\tthis,\n\t\t\t() => this.#data,\n\t\t\t() => { this.#groups.delete(area); },\n\t\t);\n\t\tarea.startFixed = startFixed || 0;\n\t\tarea.requestRender = () => this.requestRender(area);\n\t\tthis.requestRender(area);\n\t\tthis.#groups.add(area);\n\t\tarea.setColumns(columns);\n\t\treturn area;\n\t}\n\t/** @type {Set<Group>} */\n\t#groups = new Set();\n\t#renderId = requestAnimationFrame(() => { this.#render(); });\n\t#renderSet = new Set();\n\t#renderAll = false;\n\t/**\n\t * \n\t * @param {any} [p] \n\t */\n\trequestRender(p) {\n\t\tif (p) {\n\t\t\tthis.#renderSet.add(p);\n\t\t} else {\n\t\t\tthis.#renderAll = true;\n\t\t}\n\t}\n\t/**\n\t * \n\t * @returns {Iterable<[Group, boolean]>}\n\t * @yields {[Group, boolean]}\n\t */\n\t*#getNeedRender() {\n\t\tconst areas = [...this.#groups];\n\t\tif (this.#renderAll) {\n\t\t\tthis.#renderAll = false;\n\t\t\tthis.#renderSet.clear();\n\t\t\tfor (const area of areas) {\n\t\t\t\tyield [area, true];\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst set = new Set(this.#renderSet);\n\t\tthis.#renderSet.clear();\n\t\tfor (const area of areas) {\n\t\t\tyield [area, set.has(area)];\n\t\t}\n\t}\n\t#destroyed = false;\n\tdestroy() {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#destroyed = true;\n\t\tcancelAnimationFrame(this.#renderId);\n\t\tfor (const c of [...this.#groups]) {\n\t\t\tc.destroy();\n\t\t}\n\t}\n\t/** @type {string | number | undefined} */\n\t#hoverId;\n\t#render() {\n\t\tif (this.#destroyed) { return; }\n\t\tthis.#renderId = requestAnimationFrame(() => { this.#render(); });\n\t\tif (this.paused) { return; }\n\t\tconst needRenderList = [...this.#getNeedRender()];\n\n\t\tconst visibleRowIndexes = this.#visibleRowIndexes;\n\t\tconst selectedId = this.#selectedId;\n\t\tconst checkedSet = this.#checkedSet;\n\t\tconst rowMap = this.#rowMap;\n\t\tconst rowData = this.#rowData;\n\t\tconst hoverId = this.#hoverId;\n\n\t\tfor (let [area, force] of needRenderList) {\n\t\t\tarea._render(\n\t\t\t\trowData,\n\t\t\t\trowMap,\n\t\t\t\tvisibleRowIndexes,\n\t\t\t\thoverId,\n\t\t\t\tselectedId,\n\t\t\t\tcheckedSet,\n\t\t\t\tforce,\n\t\t\t);\n\t\t}\n\t}\n\t/** @type {readonly import('../types/index.mjs').RowValue[]} */\n\t#data = [];\n\t/**\n\t * \n\t * @param {object[]} rows \n\t * @returns \n\t */\n\tsetValue(rows) {\n\t\tconst oldMap = this.#rowMap;\n\t\tconst [list, map] = setValue(\n\t\t\tthis,\n\t\t\trows,\n\t\t\tid => { this.#hoverId = id; this.requestRender(); },\n\t\t\toldMap,\n\t\t\tthis.#idKey,\n\t\t\tthis.#parentKey,\n\t\t);\n\t\tthis.#rowData = list;\n\t\tthis.#rowMap = map;\n\t\tconst data = list.map(v => v.value);\n\t\tthis.#data = Object.freeze(data);\n\t\tfor (const area of this.#groups) {\n\t\t\tarea._updateData(data);\n\t\t}\n\n\t\t// TODO: 折叠处理\n\t\tconst expanded = this.#expanded;\n\t\tthis.#visibleRowIndexes = updateVisible(list, map, expanded);\n\t\tthis.requestRender();\n\n\t\t/** @type {(number | string | symbol)[]} */\n\t\tconst newList = [];\n\t\tfor (const k of this.#checkedList) {\n\t\t\tif (!map.has(k)) { continue; }\n\t\t\tnewList.push(k);\n\t\t}\n\t\tif (isEq(this.#checkedList, newList)) { return; }\n\t\tconst checkedSet = new Set(newList);\n\t\tthis.#checkedList = newList;\n\t\tthis.#checkedSet = checkedSet;\n\t\tthis.#allChecked = checkedSet.size === map.size;\n\t\tthis.requestRender();\n\t\tthis.emit('checkedChange', [...this.#checkedList]);\n\t}\n}\n\nconst styles$1 = {\n\tcollapsible: 'neeloong-table-tree-collapsible',\n\tcollapser: 'neeloong-table-tree-collapser',\n\tselectable: 'neeloong-table-selectable',\n};\n/**\n * \n * @param {(param: import('../types/index.mjs').CellParam) => import('../types/index.mjs').CellComponent} render \n * @returns {(param: import('../types/index.mjs').CellParam) => import('../types/index.mjs').CellComponent}\n */\nfunction createRender(render) {\n\treturn p => {\n\t\tconst { rowApi } = p;\n\t\tconst root = document.createElement('div');\n\t\troot.style.display = 'flex';\n\t\troot.classList.add('neeloong-table-tree');\n\t\tconst collapser = root.appendChild(document.createElement('div'));\n\t\tcollapser.className = styles$1.collapser;\n\t\tcollapser.classList.add(styles$1.selectable);\n\t\tcollapser.addEventListener('click', e => {\n\t\t\trowApi.setCollapse();\n\t\t});\n\t\trowApi.listen('collapseChange', c => {\n\t\t\tif (c) {\n\t\t\t\troot.classList.add('neeloong-table-tree-collapsed');\n\t\t\t} else {\n\t\t\t\troot.classList.remove('neeloong-table-tree-collapsed');\n\t\t\t}\n\t\t});\n\t\tif (rowApi.collapsed) {\n\t\t\troot.classList.add('neeloong-table-tree-collapsed');\n\t\t}\n\n\t\t/**\n\t\t * \n\t\t * @param {import('../types/index.mjs').CellUpdate} row \n\t\t */\n\t\tfunction updateCollapser(row) {\n\t\t\troot.style.setProperty(`--neeloong-table-tree-level`, String(row.level));\n\t\t\tif (row.children.length) {\n\t\t\t\troot.classList.add(styles$1.collapsible);\n\t\t\t} else {\n\t\t\t\troot.classList.remove(styles$1.collapsible);\n\t\t\t}\n\t\t}\n\t\tupdateCollapser(p);\n\t\tconst comp = render(p);\n\t\troot.appendChild(comp.root);\n\t\treturn {\n\t\t\t...comp,\n\t\t\troot,\n\t\t\tdestroy: comp.destroy.bind(comp),\n\t\t\tsetHidden: comp.setHidden.bind(comp),\n\t\t\tupdate(row) { updateCollapser(row); return comp.update(row); },\n\t\t};\n\t};\n}\n/** @type {import('../types/index.mjs').Extension} */\nconst Tree = (_, update, api, next) => {\n\tconst cc = next(update);\n\treturn { ...cc, render: createRender(cc.render) };\n};\n\nconst styles = {\n\tselectable: 'neeloong-table-selectable',\n\tcheckable: 'neeloong-table-checkable',\n};\n/**\n * \n * @param {(param: import('../types/index.mjs').CellParam) => import('../types/index.mjs').CellComponent} render \n * @returns {(param: import('../types/index.mjs').CellParam) => import('../types/index.mjs').CellComponent}\n */\nfunction createCell(render) {\n\treturn p => {\n\t\tconst { rowApi } = p;\n\t\tconst checkbox = document.createElement('input');\n\t\tcheckbox.type = 'checkbox';\n\t\tconst root = document.createElement('div');\n\t\troot.appendChild(checkbox);\n\t\troot.classList.add(styles.checkable);\n\t\troot.classList.add(styles.selectable);\n\t\tcheckbox.checked = rowApi.checked;\n\t\tcheckbox.addEventListener('change', () => {\n\t\t\trowApi.checked = checkbox.checked;\n\t\t});\n\t\tconst cel = rowApi.listen('checkedChange', checked => {\n\t\t\tcheckbox.checked = checked;\n\t\t});\n\n\t\tconst comp = render(p);\n\t\troot.appendChild(comp.root);\n\t\tlet destroyed = false;\n\t\treturn {\n\t\t\troot,\n\t\t\tdestroy() {\n\t\t\t\tif (destroyed) { return; }\n\t\t\t\tdestroyed = true;\n\t\t\t\tcel();\n\t\t\t\tcomp.destroy();\n\t\t\t},\n\t\t\tsetHidden: comp.setHidden.bind(comp),\n\t\t\tupdate: comp.update.bind(comp),\n\t\t};\n\t};\n}\n/**\n * \n * @param {import('../types/index.mjs').Api} api \n * @param {(param: import('../types/index.mjs').ColumnParam) => import('../types/index.mjs').ColumnComponent} header \n * @returns {(param: import('../types/index.mjs').ColumnParam) => import('../types/index.mjs').ColumnComponent}\n */\nfunction createHeader(api, header) {\n\treturn p => {\n\n\t\tconst root = document.createElement('div');\n\t\tconst headerCheck = document.createElement('input');\n\t\theaderCheck.type = 'checkbox';\n\t\theaderCheck.checked = false;\n\t\troot.appendChild(headerCheck);\n\t\troot.classList.add(styles.checkable);\n\n\n\t\theaderCheck.addEventListener('change', () => {\n\t\t\tif (headerCheck.checked) {\n\t\t\t\tapi.checkedAll();\n\t\t\t} else {\n\t\t\t\tapi.cleanChecked();\n\t\t\t}\n\t\t});\n\n\t\tconst selected = api.isAllChecked();\n\t\theaderCheck.checked = selected;\n\t\theaderCheck.indeterminate = !selected && api.hasChecked();\n\t\tconst cel = api.listen('checkedChange', () => {\n\t\t\tconst selected = api.isAllChecked();\n\t\t\theaderCheck.checked = selected;\n\t\t\theaderCheck.indeterminate = !selected && api.hasChecked();\n\t\t});\n\n\t\tconst comp = header(p);\n\t\troot.appendChild(comp.root);\n\t\treturn {\n\t\t\t...comp,\n\t\t\troot,\n\t\t\tdestroy() {\n\t\t\t\tcel();\n\t\t\t\tcomp.destroy();\n\t\t\t},\n\t\t};\n\t};\n}\n\n/** @type {import('../types/index.mjs').Extension} */\nconst Check = (_, update, api, next) => {\n\tconst c = next(({...v}) => {\n\t\tif (typeof v.width === 'number') { v.width += 30; }\n\t\tupdate(v);\n\t});\n\treturn {\n\t\t...c,\n\t\twidth: (c.width || 0) + 30,\n\t\trender: createCell(c.render),\n\t\theader: createHeader(api, c.header),\n\t};\n};\n\nexport { Body, Check, Group, Header, Source, Tree, createDateKey, createKey };\n","import { createComputed, effect, webRoot } from '@yongdall/web';\n/** @import { Menu } from '@yongdall/web' */\n\n\n\n/**\n * \n * @param {(menu: Menu) => boolean} disabled \n * @param {(menu: Menu) => void} exec \n * @param {(menu: Menu) => string} toHref \n * @param {Menu} menu \n * @param {AbortSignal} signal \n * @returns {HTMLElement}\n */\nexport default function createMenuItem(disabled, toHref, exec, menu, signal) {\n\tconst link = document.createElement('a');\n\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\n\tconst { page, path, uri, command } = menu;\n\tconst isDisabled = createComputed(() => Boolean(disabled(menu)));\n\n\tlet href = '';\n\tlet target = menu.target;\n\tif (page) {\n\n\t\thref = new URL(path?.[0] === '/' ? `${page}${path}` : `${page}/${path || ''}`, webRoot).href;\n\t\tif (!target) { target = '_self' }\n\t} else if (uri) {\n\t\thref = uri;\n\t} else if (command) {\n\t\thref = toHref(menu);\n\t}\n\n\teffect(() => {\n\t\tconst disabled = isDisabled.get();\n\t\t// @ts-ignore\n\t\tlink.disabled = disabled;\n\t\tlink.ariaDisabled = disabled ? 'true' : 'false';\n\t\tif (disabled) {\n\t\t\tlink.removeAttribute('tabindex');\n\t\t\tlink.removeAttribute('href');\n\t\t} else {\n\t\t\tlink.tabIndex = 0;\n\t\t\tif (href) { link.href = href; }\n\t\t}\n\t}, signal);\n\tlink.addEventListener('click', (e) => {\n\t\tif (!isDisabled.get()) { return; }\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t});\n\n\tif (href && target) { link.target = target ?? '_blank'; }\n\tif (!href && command) {\n\t\tlink.addEventListener('click', (e) => {\n\t\t\tif (isDisabled.get()) { return; }\n\t\t\tif (e.defaultPrevented) { return; }\n\t\t\texec(menu);\n\t\t});\n\t}\n\treturn link;\n\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { Command, createComputed, createQuickFilters, createState, effect, filterPermission, getAuthorizations, Menu, User, watch } from '@yongdall/web';\nimport { Pagination, modelService, createShowField, runPattern, getPatternFields, showFilterDialog, Search } from '@yongdall/web';\nimport Plugin from '@yongdall/web/plugin';\nimport { Body, Check, Group, Header, Source, Tree } from '@neeloong/table';\nimport createMenuItem from '../createMenuItem.mjs';\n/** @import { FieldScriptConfiguration } from '@yongdall/web' */\n/** @import { ColumnOptions } from '@neeloong/table' */\nPlugin.importStyle('@neeloong/table/style.css');\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default async function (ctx) {\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tif (!ctx.search.slice(1)) {\n\t\tconst defaultQuery = ctx.define?.defaultQuery;\n\t\tif (defaultQuery) {\n\t\t\tctx.setPath(`?${defaultQuery.replaceAll('#', '%23')}${ctx.hash}`, true);\n\t\t}\n\t}\n\tconst search = createComputed(() => Search.parse(ctx.search.slice(1)));\n\t/**\n\t * \n\t * @param {*} data \n\t */\n\tfunction setSearch(data) {\n\t\tconst s = Search.stringify({ ...search.get(), ...data }, true);\n\t\tif (s === ctx.search.slice(1)) { return; }\n\t\tctx.setPath(`?${s}`, true);\n\t}\n\tconst container = ctx.container;\n\tctx.panel = true;\n\tconst header = ctx.createHeader();\n\tconst headerContainer = header?.container || container.appendChild(document.createElement('div'));\n\tconst queryFilterContainer = header?.container || headerContainer.appendChild(document.createElement('div'));\n\tqueryFilterContainer.classList.add('QueryFilters')\n\n\tconst currentModel = modelService(pageIdent.model);\n\tctx.title = ctx.define?.title || '列表';\n\tctx.mode = 'flex';\n\tlet modelDefine = await currentModel.loadScript();\n\tif (ctx.destroyed) { return; }\n\tconst label = modelDefine?.label || modelDefine.id || '';\n\tctx.title = ctx.define?.title || (label ? `列表:${label}` : '列表');\n\n\tconst idKey = '_';\n\tconst documents = createState(/** @type {any[]} */([]));\n\tconst source = new Source({ idKey, parentKey: 'parent' });\n\tconst checkedIds = createState(/** @type {any[]} */([]));\n\n\tconst checkedIdSet = createComputed(() => new Set(checkedIds.get()));\n\tconst checked = createComputed(() => {\n\t\tconst set = checkedIdSet.get();\n\t\tconst list = documents.get();\n\t\treturn list.filter(v => set.has(v[idKey]));\n\t});\n\n\n\n\tconst fields = modelDefine.fields;\n\tconst allFields = Object.entries(fields).filter(([, { type }]) => type && typeof type !== 'object');\n\tconst idFields = allFields.filter(([, v]) => v.primary).map(([v]) => v);\n\tconst labelPattern = modelDefine.labelPattern || '';\n\n\t/** @type {{name: string; width?: number; title: string; field: FieldScriptConfiguration}[]} */\n\tconst allFieldsShow = [];\n\tfor (const { field, width, label } of ctx.define?.fields || []) {\n\t\tif (!field) { continue; }\n\t\tif (!Object.hasOwn(fields, field)) { continue; }\n\t\tconst f = fields[field];\n\t\tif (!f) { continue; }\n\t\tconst type = f.type;\n\t\tif (!type || typeof type !== 'string') { continue; }\n\t\tallFieldsShow.push({ name: field, width: width || undefined, title: label || f.label || '', field: f });\n\t}\n\tif (!allFieldsShow.length) {\n\t\tfor (const [name, field] of allFields) {\n\t\t\tallFieldsShow.push({ name, title: field.label || '', field });\n\t\t\tif (allFieldsShow.length >= 4) { break; }\n\t\t}\n\t}\n\tconst queryFields = [...new Set([\n\t\t...allFieldsShow.map(v => v.name),\n\t\t...idFields,\n\t\t...getPatternFields(labelPattern),\n\t])];\n\n\n\teffect(() => source.setValue(documents.get()), ctx.signal);\n\t/** @type {ColumnOptions[]} */\n\tconst columns = allFieldsShow.map(({ name, field, title, width }) => ({\n\t\tfield: name, title, width, resizable: true, render(c) {\n\t\t\tconst root = document.createElement('div');\n\t\t\tlet f = createShowField(name, field, {}, c.data);\n\t\t\troot.appendChild(f.root);\n\t\t\treturn {\n\t\t\t\troot,\n\t\t\t\tdestroy() {\n\t\t\t\t\tf.destroy();\n\t\t\t\t},\n\t\t\t\tsetHidden() { },\n\t\t\t\tupdate() {\n\t\t\t\t\tf.destroy();\n\t\t\t\t\troot.innerHTML = '';\n\t\t\t\t\tf = createShowField(name, field, {}, c.data);\n\t\t\t\t\troot.appendChild(f.root);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}));\n\tcolumns.unshift({\n\t\tfield: '_', width: 200, resizable: true, render(c) {\n\t\t\tlet r = c.data;\n\t\t\tconst root = document.createElement('a');\n\t\t\tconst label = runPattern(labelPattern, r) || idFields.map(v => r[v]).join('$');\n\t\t\troot.href = ctx.toUrl('', {\n\t\t\t\t...pageIdent,\n\t\t\t\tpage: undefined,\n\t\t\t\tworkspace: undefined,\n\t\t\t\tcontinuation: undefined,\n\t\t\t\tsetting: false,\n\t\t\t\tid: idFields.map(v => r[v]).join('$'),\n\t\t\t});\n\t\t\troot.appendChild(document.createTextNode(label));\n\t\t\treturn {\n\t\t\t\troot,\n\t\t\t\tdestroy() { },\n\t\t\t\tsetHidden() { },\n\t\t\t\tupdate() {\n\t\t\t\t\troot.innerHTML = '';\n\t\t\t\t\troot.href = ctx.toUrl('', {\n\t\t\t\t\t\t...pageIdent,\n\t\t\t\t\t\tpage: undefined,\n\t\t\t\t\t\tworkspace: undefined,\n\t\t\t\t\t\tcontinuation: undefined,\n\t\t\t\t\t\tsetting: false,\n\t\t\t\t\t\tid: idFields.map(v => r[v]).join('$'),\n\t\t\t\t\t});\n\t\t\t\t\troot.appendChild(document.createTextNode(label));\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\tcolumns.unshift({\n\t\tfield: '_', extensions: [Check], render(c) {\n\t\t\treturn {\n\t\t\t\troot: document.createElement('div'),\n\t\t\t\tdestroy() { },\n\t\t\t\tsetHidden() { },\n\t\t\t\tupdate() {\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\n\tconst group = source.createGroup(columns, 2);\n\n\tconst listTable = document.createElement('table');\n\tgroup.createHeader(listTable.appendChild(document.createElement('div')));\n\tgroup.createBody(listTable.appendChild(document.createElement('div')));\n\n\tconst pagination = new Pagination();\n\tconst { limit, page } = search.get();\n\tif (limit) { pagination.size = limit; }\n\tif (page) { pagination.page = page; }\n\n\tpagination.listen(() => {\n\t\tsetSearch({\n\t\t\tlimit: pagination.size,\n\t\t\tpage: pagination.page,\n\t\t});\n\t});\n\tlet k = 0;\n\tlet disabled = createState(false);\n\tasync function request() {\n\t\tif (ctx.destroyed) { return; }\n\t\tif (disabled.get()) { return; }\n\t\ttry {\n\t\t\tdisabled.set(true);\n\t\t\tk++;\n\t\t\tconst v = k;\n\t\t\tconst query = search.get();\n\t\t\tconst define = ctx.define;\n\t\t\tconst list = await currentModel.query({\n\t\t\t\t...query,\n\t\t\t\twhere: [...query.where || [], ...define?.where || []],\n\t\t\t\tor: define?.orWhere,\n\t\t\t\tselect: queryFields,\n\t\t\t});\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tif (v !== k) { return; }\n\t\t\tctx.loading = false;\n\t\t\tdocuments.set(\n\t\t\t\tlist.documents.map(v => ({ ...v, _: idFields.map(k => v[k]).join('$') }))\n\t\t\t);\n\t\t\tpagination.total = list.total;\n\t\t} finally {\n\t\t\tdisabled.set(false);\n\n\t\t}\n\t}\n\tfunction updateFilters() {\n\t\tshowFilterDialog(modelDefine, search.get().where, container).then(values => {\n\t\t\tsetSearch({ where: values });\n\t\t}).catch(() => { });\n\t}\n\n\tconst createURL = ctx.toUrl('', {\n\t\t...pageIdent,\n\t\tpage: undefined,\n\t\tworkspace: undefined,\n\t\tinput: '*',\n\t\tsetting: false,\n\t\tid: undefined,\n\t});\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'documents',\n\t\tpageIdent,\n\t\tmodel: modelDefine,\n\t\tget checkedDocuments() { return checked.get(); },\n\t\tget documents() { return documents.get(); },\n\t\tget where() { return search.get().where; },\n\t\tset where(where) { setSearch({ where }); },\n\t\tget orWhere() { return search.get().orWhere; },\n\t\tset orWhere(orWhere) { setSearch({ orWhere }); },\n\t});\n\tif (header) {\n\t\t/*** @type {Command.Options} */\n\t\tconst commandOptions = {\n\t\t\ttype: 'documents',\n\t\t\tpageIdent,\n\t\t\tmodel: modelDefine,\n\t\t\tget checkedDocuments() { return checked.get(); },\n\t\t\tget documents() { return documents.get(); },\n\t\t};\n\t\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'refresh': return disabled.get();\n\t\t\t}\n\t\t\treturn Command.disabled(commandOptions, menu);\n\t\t}, menu => {\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'create': return createURL;\n\t\t\t}\n\t\t\treturn Command.toHref(commandOptions, menu);\n\t\t}, (menu) => {\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'refresh': return request();\n\t\t\t\tcase 'filter': return updateFilters();\n\t\t\t}\n\t\t\treturn Command.exec(commandOptions, menu);\n\t\t});\n\t\tlet menus = ctx.define?.menus;\n\t\tif (!menus?.length) {\n\t\t\tmenus = [\n\t\t\t\t{ label: '创建', command: 'create', children: [], buttons: [] },\n\t\t\t\t{ label: '刷新', command: 'refresh', children: [], buttons: [] },\n\t\t\t\t{ label: '过滤', command: 'filter', children: [], buttons: [] },\n\t\t\t];\n\t\t}\n\t\tconst authorizations = createComputed(() => {\n\t\t\tconst permissions = User.permissions;\n\t\t\tif (!permissions) { return { has() { return true; } }; }\n\t\t\treturn getAuthorizations(modelDefine.permissions || [], permissions);\n\n\t\t});\n\t\tconst currentMenus = createComputed(() => {\n\t\t\tconst permissions = User.permissions;\n\t\t\tif (!permissions) { return menus; }\n\t\t\treturn Menu.filter(menus, menu => {\n\t\t\t\tconst permission = menu.permission;\n\t\t\t\tif (!permission) { return true; }\n\t\t\t\treturn filterPermission(permission, permissions, {\n\t\t\t\t\thas(p) {\n\t\t\t\t\t\treturn authorizations.get().has(p);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, false);\n\t\t});\n\t\theader.setMenu(currentMenus.get(), createMenu);\n\t} else {\n\n\t\tconst createButton = headerContainer.appendChild(document.createElement('button'));\n\t\tconst createLink = createButton.appendChild(document.createElement('a'));\n\t\tcreateLink.appendChild(document.createTextNode('创建'));\n\t\tcreateLink.href = createURL;\n\n\t\tconst reloadButton = headerContainer.appendChild(document.createElement('button'));\n\t\treloadButton.appendChild(document.createTextNode('刷新'));\n\t\treloadButton.addEventListener('click', request);\n\t\twatch(() => disabled.get(), disabled => reloadButton.disabled = disabled, { immediate: true, signal: ctx.signal });\n\n\t\tconst filterButton = headerContainer.appendChild(document.createElement('button'));\n\t\tfilterButton.appendChild(document.createTextNode('过滤'));\n\t\tfilterButton.addEventListener('click', () => { updateFilters(); });\n\t}\n\tcreateQuickFilters({\n\t\tget() { return search.get().where || []; },\n\t\tset(where) {\n\t\t\tsetSearch({ where });\n\t\t\trequest();\n\t},\n\t}, queryFilterContainer, ctx.define?.filters || [], {\n\t\tfields: modelDefine.fields,\n\t\tsignal: ctx.signal,\n\t\tinline: true,\n\t});\n\tcontainer.appendChild(listTable);\n\tconst footer = ctx.createFooter()?.container || container.appendChild(document.createElement('div'));\n\tfooter.appendChild(pagination.root);\n\n\n\twatch(() => search.get(), request, {signal: ctx.signal});\n\tawait request();\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { Command, createComputed, createState, createStore, effect, filterPermission, formLayoutsService, getAuthorizations, Menu, modelService, renderForm, runPattern, User, waitAbortSignal } from '@yongdall/web';\nimport createMenuItem from '../createMenuItem.mjs';\n\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default async function (ctx) {\n\tctx.title = '详情';\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tconst container = ctx.container;\n\tctx.panel = true;\n\tconst header = ctx.createHeader();\n\tconst headerContainer = header?.container || container.appendChild(document.createElement('div'));\n\tconst currentModel = modelService(pageIdent.model);\n\tconst id = /** @type {string} */(pageIdent.id);\n\tconst currentDocument = currentModel.document(id);\n\tconst define = ctx.define;\n\tconst layoutId = define?.forms.view?.layoutId;\n\tconst [model, layout] = await Promise.all([\n\t\tcurrentModel.loadScript(),\n\t\tlayoutId && formLayoutsService(layoutId).load().catch(() => null) || null\n\t]);\n\tif (ctx.destroyed) { return; }\n\tconst label = model?.label || model.id || '';\n\tconst title = label ? `详情:${label}` : '详情';\n\tctx.title = title;\n\tconst store = createStore(model);\n\tstore.readonly = true;\n\tconst destroyForm = renderForm(\n\t\tmodel,\n\t\tstore,\n\t\tcontainer.appendChild(document.createElement('div')),\n\t\t{ enableLink: true, editable: false },\n\t\tlayout?.layout,\n\t\tlayout?.type,\n\t);\n\twaitAbortSignal(ctx.signal).then(() => { destroyForm(); });\n\n\tconst loaded = createState(false);\n\tconst requesting = createState(false);\n\teffect(() => ctx.loading = requesting.get() || !loaded.get(), ctx.signal);\n\n\tasync function request() {\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tconst document = await currentDocument.get();\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tstore.reset(document);\n\t\t\tstore.readonly = true;\n\t\t\tctx.title = runPattern(model?.labelPattern, document) || title;\n\t\t} finally {\n\t\t\tloaded.set(true);\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'document',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t});\n\tif (header) {\n\t\t/*** @type {Command.Options} */\n\t\tconst commandOptions = {\n\t\t\ttype: 'document',\n\t\t\tpageIdent,\n\t\t\tmodel,\n\t\t\tget document() { return store.value; },\n\t\t\tget store() { return store; },\n\t\t};\n\t\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'refresh': { return requesting.get() || !loaded.get(); }\n\t\t\t}\n\t\t\treturn Command.disabled(commandOptions, menu);\n\t\t}, menu => {\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'edit': return ctx.toUrl('', {\n\t\t\t\t\t...pageIdent,\n\t\t\t\t\tpage: undefined,\n\t\t\t\t\tworkspace: undefined,\n\t\t\t\t\tsetting: false,\n\t\t\t\t\tedit: true,\n\t\t\t\t});\n\t\t\t\tcase 'copy': return ctx.toUrl('', {\n\t\t\t\t\t...pageIdent,\n\t\t\t\t\tpage: undefined,\n\t\t\t\t\tworkspace: undefined,\n\t\t\t\t\tsetting: false,\n\t\t\t\t\tedit: true,\n\t\t\t\t\tinput: '*',\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn Command.toHref(commandOptions, menu);\n\t\t}, menu => {\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'refresh': return request();\n\t\t\t}\n\t\t\treturn Command.exec(commandOptions, menu);\n\t\t});\n\n\t\tlet menus = ctx.define?.menus;\n\t\tif (!menus?.length) {\n\t\t\tmenus = [\n\t\t\t\t{ label: '刷新', command: 'refresh', children: [], buttons: [] },\n\t\t\t\t{ label: '编辑', command: 'edit', children: [], buttons: [] },\n\t\t\t];\n\t\t}\n\t\tconst authorizations = createComputed(() => {\n\t\t\tconst permissions = User.permissions;\n\t\t\tif (!permissions) { return { has() { return true; } }; }\n\t\t\treturn getAuthorizations(model.permissions || [], permissions, store.value);\n\n\t\t});\n\t\tconst currentMenus = createComputed(() => {\n\t\t\tconst permissions = User.permissions;\n\t\t\tif (!permissions) { return menus; }\n\t\t\treturn Menu.filter(menus, menu => {\n\t\t\t\tconst permission = menu.permission;\n\t\t\t\tif (!permission) { return true; }\n\t\t\t\treturn filterPermission(permission, permissions, {\n\t\t\t\t\thas(p) {\n\t\t\t\t\t\treturn authorizations.get().has(p);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, false);\n\t\t});\n\t\theader.setMenu(currentMenus.get(), createMenu);\n\t} else {\n\t\tconst createButton = headerContainer.appendChild(document.createElement('button'));\n\t\tconst createLink = createButton.appendChild(document.createElement('a'));\n\t\tcreateLink.appendChild(document.createTextNode('编辑'));\n\t\tcreateLink.href = ctx.toUrl('', {\n\t\t\t...pageIdent,\n\t\t\tpage: undefined,\n\t\t\tworkspace: undefined,\n\t\t\tsetting: false,\n\t\t\tedit: true,\n\t\t});\n\t\teffect(() => createButton.disabled = requesting.get() || !loaded.get(), ctx.signal);\n\t}\n\n\n\n\tawait request();\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { Command, createComputed, createState, createStore, effect, filterPermission, formLayoutsService, getAuthorizations, Menu, modelService, renderForm, runPattern, User, waitAbortSignal } from '@yongdall/web';\nimport createMenuItem from '../createMenuItem.mjs';\n\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default async function (ctx) {\n\tctx.title = '编辑';\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tconst container = ctx.container;\n\tctx.panel = true;\n\tconst header = ctx.createHeader();\n\tconst headerContainer = header?.container || container.appendChild(document.createElement('div'));\n\tconst currentModel = modelService(pageIdent.model);\n\tconst id = /** @type {string} */(pageIdent.id);\n\tconst currentDocument = currentModel.document(id);\n\tconst define = ctx.define;\n\tconst layoutId = define?.forms.edit?.layoutId;\n\tconst [model, layout] = await Promise.all([\n\t\tcurrentModel.loadScript(),\n\t\tlayoutId && formLayoutsService(layoutId).load().catch(() => null) || null\n\t]);\n\tif (ctx.destroyed) { return; }\n\tconst label = model?.label || model.id || '';\n\tconst title = label ? `编辑:${label}` : '编辑';\n\tctx.title = title;\n\tconst store = createStore(model);\n\teffect(() => { ctx.unsaved = store.changed; }, ctx.signal);\n\tconst destroyForm = renderForm(\n\t\tmodel,\n\t\tstore,\n\t\tcontainer.appendChild(document.createElement('div')),\n\t\t{ enableLink: true, editable: true },\n\t\tlayout?.layout,\n\t\tlayout?.type,\n\t);\n\twaitAbortSignal(ctx.signal).then(() => { destroyForm(); });\n\n\n\tconst loaded = createState(false);\n\tconst requesting = createState(false);\n\teffect(() => ctx.loading = requesting.get() || !loaded.get(), ctx.signal);\n\n\n\n\t/**\n\t * \n\t * @param {Record<string, any>} document \n\t */\n\tfunction setTitle(document) {\n\t\tconst label = runPattern(model?.labelPattern, document);\n\t\tif (label) {\n\t\t\tctx.title = label ? `编辑:${label}` : '编辑';\n\t\t} else {\n\t\t\tctx.title = title;\n\t\t}\n\t}\n\n\tasync function request() {\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tconst document = await currentDocument.get();\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tstore.reset(document, false);\n\t\t\tsetTitle(document);\n\t\t} finally {\n\t\t\tloaded.set(true);\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\tasync function save() {\n\t\tif (requesting.get() || !loaded.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tconst data = await currentDocument.update(store.value);\n\t\t\tif (!data) { return; }\n\t\t\tsetTitle(data);\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tstore.reset(data, false);\n\t\t} finally {\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'editDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t});\n\tif (header) {\n\t\t/*** @type {Command.Options} */\n\t\tconst commandOptions = {\n\t\t\ttype: 'editDocument',\n\t\t\tpageIdent,\n\t\t\tmodel,\n\t\t\tget document() { return store.value; },\n\t\t\tget store() { return store; },\n\t\t};\n\t\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'save': case 'refresh': { return requesting.get() || !loaded.get(); }\n\t\t\t}\n\t\t\treturn Command.disabled(commandOptions, menu);\n\t\t}, menu => {\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'copy': return ctx.toUrl('', {\n\t\t\t\t\t...pageIdent,\n\t\t\t\t\tpage: undefined,\n\t\t\t\t\tworkspace: undefined,\n\t\t\t\t\tsetting: false,\n\t\t\t\t\tedit: true,\n\t\t\t\t\tinput: '*',\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn Command.toHref(commandOptions, menu);\n\t\t}, menu => {\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'refresh': return request();\n\t\t\t\tcase 'save': return save();\n\t\t\t}\n\t\t\treturn Command.exec(commandOptions, menu);\n\t\t});\n\n\t\tlet menus = ctx.define?.menus;\n\t\tif (!menus?.length) {\n\t\t\tmenus = [\n\t\t\t\t{ label: '刷新', command: 'refresh', children: [], buttons: [] },\n\t\t\t\t{ label: '更新', command: 'save', children: [], buttons: [] },\n\t\t\t];\n\t\t}\n\t\tconst authorizations = createComputed(() => {\n\t\t\tconst permissions = User.permissions;\n\t\t\tif (!permissions) { return { has() { return true; } }; }\n\t\t\treturn getAuthorizations(model.permissions || [], permissions, store.value);\n\t\t});\n\t\tconst currentMenus = createComputed(() => {\n\t\t\tconst permissions = User.permissions;\n\t\t\tif (!permissions) { return menus; }\n\t\t\treturn Menu.filter(menus, menu => {\n\t\t\t\tconst permission = menu.permission;\n\t\t\t\tif (!permission) { return true; }\n\t\t\t\treturn filterPermission(permission, permissions, {\n\t\t\t\t\thas(p) {\n\t\t\t\t\t\treturn authorizations.get().has(p);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}, false);\n\t\t});\n\t\theader.setMenu(currentMenus.get(), createMenu);\n\t} else {\n\t\tconst button = headerContainer.appendChild(document.createElement('button'));\n\t\tbutton.disabled = true;\n\t\tbutton.appendChild(document.createTextNode('更新'));\n\t\teffect(() => button.disabled = requesting.get() || !loaded.get(), ctx.signal);\n\t\tbutton.addEventListener('click', async () => { save(); });\n\t}\n\tawait request();\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '!代办'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('!代办'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '设置'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('设置'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '搜索'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('搜索'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '状态管理'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('状态管理'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { createStore, Command, formLayoutsService, modelService, renderForm, runPattern, Menu, User, filterPermission, createComputed, createState, effect, waitAbortSignal } from '@yongdall/web';\nimport createMenuItem from '../createMenuItem.mjs';\n\n/**\n * \n * @param {PageContext} ctx \n */\nasync function create(ctx) {\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tconst currentModel = modelService(pageIdent.model);\n\tconst container = ctx.container;\n\tctx.panel = true;\n\tconst header = ctx.createHeader();\n\tconst headerContainer = header?.container || container.appendChild(document.createElement('div'));\n\tconst define = ctx.define;\n\tconst layoutId = define?.forms.new?.layoutId;\n\tconst [model, layout] = await Promise.all([\n\t\tcurrentModel.loadScript(),\n\t\tlayoutId && formLayoutsService(layoutId).load().catch(() => null) || null\n\t]);\n\tif (ctx.destroyed) { return; }\n\tif (!model) {\n\t\t// TODO:\n\t\treturn;\n\t}\n\tconst store = createStore(model);\n\tstore.new = true;\n\teffect(() => { ctx.unsaved = !store.changed; }, ctx.signal);\n\tconst destroyForm = renderForm(\n\t\tmodel,\n\t\tstore,\n\t\tcontainer.appendChild(document.createElement('div')),\n\t\t{ enableLink: true, editable: true },\n\t\tlayout?.layout,\n\t\tlayout?.type,\n\t);\n\twaitAbortSignal(ctx.signal).then(() => { destroyForm(); });\n\tconst creating = createState(false);\n\tasync function create() {\n\t\tif (creating.get()) { return; }\n\t\tcreating.set(true);\n\t\ttry {\n\t\t\treturn await currentModel.create(store.value);\n\t\t} finally {\n\t\t\tcreating.set(false);\n\t\t}\n\n\t}\n\tasync function createGoto() {\n\t\tconst data = await create();\n\t\tif (!data) { return; }\n\t\tctx.open(`.`, {\n\t\t\t...pageIdent,\n\t\t\t// @ts-ignore\n\t\t\tpage: undefined,\n\t\t\t// @ts-ignore\n\t\t\tcontinuation: undefined,\n\t\t\tsetting: undefined,\n\t\t\tinput: undefined,\n\t\t\tedit: false,\n\t\t\tid: data.id,\n\t\t}, true);\n\t\t// TODO: \n\t\tctx.destroy(true);\n\t}\n\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'createDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t});\n\tif (header) {\n\t\t/*** @type {Command.Options} */\n\t\tconst commandOptions = {\n\t\t\ttype: 'createDocument',\n\t\t\tpageIdent,\n\t\t\tmodel,\n\t\t\tget document() { return store.value; },\n\t\t\tget store() { return store; },\n\t\t};\n\n\t\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'create': case 'createGoto': { return creating.get(); }\n\t\t\t}\n\t\t\treturn Command.disabled(commandOptions, menu);\n\t\t}, menu => {\n\t\t\treturn Command.toHref(commandOptions, menu);\n\t\t}, menu => {\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tswitch (menu.command) {\n\t\t\t\tcase 'create': return create();\n\t\t\t\tcase 'createGoto': return createGoto();\n\t\t\t}\n\t\t\treturn Command.exec(commandOptions, menu);\n\t\t});\n\n\t\tlet menus = ctx.define?.menus;\n\t\tif (!menus?.length) {\n\t\t\tmenus = [\n\t\t\t\t{ label: '创建', command: 'createGoto', children: [], buttons: [] },\n\t\t\t];\n\t\t}\n\t\tconst currentMenus = createComputed(() => {\n\t\t\tconst permissions = User.permissions;\n\t\t\tif (!permissions) { return menus; }\n\t\t\treturn Menu.filter(menus, menu => {\n\t\t\t\tconst permission = menu.permission;\n\t\t\t\tif (!permission) { return true; }\n\t\t\t\treturn filterPermission(permission, permissions);\n\t\t\t}, false);\n\t\t});\n\t\theader.setMenu(currentMenus.get(), createMenu);\n\n\t} else {\n\n\t\tconst button = headerContainer.appendChild(document.createElement('button'));\n\t\tbutton.disabled = true;\n\t\tbutton.appendChild(document.createTextNode('创建'));\n\n\t\tbutton.addEventListener('click', () => { createGoto(); });\n\t\teffect(() => { button.disabled = creating.get(); }, ctx.signal);\n\t}\n\t// TODO: 从查询参数中获取初始数据\n\tif (pageIdent.id) {\n\t\tconst document = await currentModel.document(pageIdent.id);\n\t\tif (ctx.destroyed) { return; }\n\t\tconst label = runPattern(model?.labelPattern, document);\n\t\tif (label) {\n\t\t\tctx.title = `复制:${label}`;\n\t\t}\n\t\tstore.reset(document);\n\t} else {\n\t\tstore.reset({});\n\t}\n\tctx.loading = false;\n\tconst label = model?.label || model.id || '';\n\tctx.title = define?.title || (label ? `新建:${label}` : '新建');\n}\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') {\n\t\treturn;\n\t\t// TODO:\n\t}\n\tctx.title = ctx.define?.title || '新建';\n\tif ((pageIdent.input || '*') !== '*') {\n\t\treturn create(ctx);\n\t}\n\tctx.open(ctx.path, {\n\t\t...pageIdent,\n\t\tsetting: false,\n\t\tinput: `${Math.random()}`.slice(2),\n\t}, true);\n\tctx.destroy(true);\n}\n","/** @import { PageContext } from '@yongdall/web' */\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function toMain(ctx) {\n\tctx.open(`.`, {\n\t\t...ctx.ident,\n\t\tpage: undefined,\n\t\tworkspace: undefined,\n\t\tcontinuation: undefined,\n\t\tsetting: undefined,\n\t\tid: undefined,\n\t}, true)\n\tctx.destroy(true);\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@yongdall/pages",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"exports": {
|
|
5
|
+
".": "./index.mjs"
|
|
6
|
+
},
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"@neeloong/table": "^0.0.2"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"@yongdall/web": "^0.1.0"
|
|
12
|
+
},
|
|
13
|
+
"peerDependencies": {
|
|
14
|
+
"@yongdall/web": "^0.1.0"
|
|
15
|
+
},
|
|
16
|
+
"main": "./index.mjs",
|
|
17
|
+
"type": "module"
|
|
18
|
+
}
|