@agile-team/mach-table 0.31.2 → 0.32.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/README.md +27 -1
- package/dist/adapter.cjs +1 -1
- package/dist/adapter.d.cts +20 -3
- package/dist/adapter.d.ts +20 -3
- package/dist/adapter.js +1 -1
- package/dist/analysis.cjs +3 -0
- package/dist/analysis.d.cts +60 -0
- package/dist/analysis.d.ts +60 -0
- package/dist/analysis.js +3 -0
- package/dist/{options-Bi_m5kXL.d.cts → api-pOhyuSQk.d.cts} +780 -754
- package/dist/{options-Bi_m5kXL.d.ts → api-pOhyuSQk.d.ts} +780 -754
- package/dist/{configuration-C9KYeIy1.d.ts → configuration-SYWVjGft.d.ts} +1 -1
- package/dist/{configuration-Bj_JwdTd.d.cts → configuration-gAE1eZuB.d.cts} +1 -1
- package/dist/index.cjs +6 -6
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +6 -6
- package/dist/mach-table.css +1 -1
- package/dist/multi-range.cjs +4 -0
- package/dist/multi-range.d.cts +13 -0
- package/dist/multi-range.d.ts +13 -0
- package/dist/multi-range.js +4 -0
- package/dist/ordering.cjs +1 -0
- package/dist/ordering.d.cts +93 -0
- package/dist/ordering.d.ts +93 -0
- package/dist/ordering.js +1 -0
- package/dist/preferences.cjs +1 -0
- package/dist/preferences.d.cts +71 -0
- package/dist/preferences.d.ts +71 -0
- package/dist/preferences.js +1 -0
- package/dist/server-side.cjs +1 -0
- package/dist/server-side.css +1 -0
- package/dist/server-side.css.d.ts +2 -0
- package/dist/server-side.d.cts +132 -0
- package/dist/server-side.d.ts +132 -0
- package/dist/server-side.js +1 -0
- package/dist/shared-Bi8hAuzn.d.cts +12 -0
- package/dist/shared-Bn77TiBm.d.ts +12 -0
- package/dist/workbench.cjs +1 -0
- package/dist/workbench.css +1 -0
- package/dist/workbench.css.d.ts +2 -0
- package/dist/workbench.d.cts +72 -0
- package/dist/workbench.d.ts +72 -0
- package/dist/workbench.js +1 -0
- package/dist/worker.d.cts +2 -2
- package/dist/worker.d.ts +2 -2
- package/package.json +72 -5
- /package/{styles → dist}/mach-table.css.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var w=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var Y=(e,n)=>{for(var t in n)w(e,t,{get:n[t],enumerable:!0})},Z=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of $(n))!B.call(e,o)&&o!==t&&w(e,o,{get:()=>n[o],enumerable:!(r=W(n,o))||r.enumerable});return e};var J=e=>Z(w({},"__esModule",{value:!0}),e);var Ne={};Y(Ne,{GridPreferenceConflictError:()=>T,createGridPreferenceStore:()=>Q,migrateGridState:()=>b});module.exports=J(Ne);var ee=new Set(["contains","notContains","equals","notEquals","startsWith","endsWith","blank","notBlank"]),ne=new Set(["equals","notEquals","lessThan","lessThanOrEqual","greaterThan","greaterThanOrEqual","inRange","blank","notBlank"]),te=new Set(["equals","notEquals","lessThan","greaterThan","inRange","blank","notBlank"]);function re(e){return e==null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)}function oe(e){return e==="text"?ee:e==="number"?ne:te}function ie(e,n,t){if(e==null||typeof e!="object")return null;let r=e;return typeof r.match!="string"||!t.has(r.match)?null:{match:r.match,...le(r,n)}}function le(e,n){let t=n==="number"?N(e.value):typeof e.value=="string"?e.value:void 0,r=n==="number"?N(e.value2):typeof e.value2=="string"?e.value2:void 0;return{...t!==void 0?{value:t}:{},...r!==void 0?{value2:r}:{}}}function N(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function se(e,n){let t=[],r=oe(n);for(let o of e.slice(0,20)){let i=ie(o,n,r);i&&t.push(i)}return t}function A(e){if(e==null||typeof e!="object")return null;let n=e;return n.type==="set"?Array.isArray(n.values)?{type:"set",values:n.values.filter(re).slice(0,2e3)}:null:n.type!=="text"&&n.type!=="number"&&n.type!=="date"||!Array.isArray(n.conditions)?null:{type:n.type,...n.operator==="or"||n.operator==="and"?{operator:n.operator}:{},conditions:se(n.conditions,n.type)}}function ae(e,n){if(typeof e.colId!="string"||!e.colId.trim())return null;let t=e.colId.trim();if(n.validColumnIds?.has(t)===!1)return null;let r=A(e.filter);return r?{kind:"condition",colId:t,filter:r}:null}function de(e,n,t){if(!Array.isArray(e.children))return null;let r=[];for(let o of e.children){let i=P(o,n+1,t);i&&r.push(i)}return r.length===0?null:{kind:"group",operator:e.operator==="or"?"or":"and",children:r,...e.not===!0?{not:!0}:{}}}function ue(e,n,t){return n<=16&&t.nodes<512&&e!=null&&typeof e=="object"}function P(e,n,t){if(!ue(e,n,t)||t.ancestors.has(e))return null;t.ancestors.add(e),t.nodes++;let r=e,o=r.kind==="condition"?ae(r,t):r.kind==="group"?de(r,n,t):null;return t.ancestors.delete(e),o}function _(e,n){if(e==null||typeof e!="object")return null;let t=e;if(t.version!==1||t.root==null)return null;let r=P(t.root,0,{ancestors:new WeakSet,nodes:0,validColumnIds:n});return r?{version:1,root:r}:null}function O(e,n){if(e==null||typeof e!="object"||Array.isArray(e))return{};let t={};for(let[r,o]of Object.entries(e).slice(0,2e3)){let i=r.trim();if(!i||n?.has(i)===!1)continue;let s=A(o);s&&(t[i]=s)}return t}var L=2e3,ce=1e5,k=512,fe=1e4;function G(e){return Array.isArray(e)?[...new Set(e.slice(0,ce).filter(n=>typeof n=="string"&&n.length>0&&n.length<=k))]:[]}function x(e,n){return typeof e=="number"&&Number.isFinite(e)&&e>=1?Math.floor(e):n}function D(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:void 0}function pe(e,n){let t=D(n.flex);for(let r of["width","contentWidth"]){let o=D(n[r]);o!==void 0&&(e[r]=o)}n.flex===null?e.flex=null:t!==void 0&&(e.flex=t),(n.widthMode==="auto"||n.widthMode==="manual")&&(e.widthMode=n.widthMode)}function me(e,n){typeof n.hide=="boolean"&&(e.hide=n.hide),(n.pinned===null||n.pinned==="left"||n.pinned==="right")&&(e.pinned=n.pinned)}function ge(e,n){if(e==null||typeof e!="object")return null;let t=e,r=typeof t.colId=="string"?t.colId.trim():"";if(!r||r.length>k||n.has(r))return null;n.add(r);let o={colId:r};return me(o,t),pe(o,t),o}function ye(e){if(!Array.isArray(e))return[];let n=[],t=new Set;for(let r of e.slice(0,L)){let o=ge(r,t);o&&n.push(o)}return n}function Me(e){if(!Array.isArray(e))return[];let n=[],t=new Set;for(let r of e.slice(0,L)){if(r==null||typeof r!="object")continue;let o=r,i=typeof o.colId=="string"?o.colId.trim():"";!i||i.length>k||t.has(i)||o.direction!=="asc"&&o.direction!=="desc"||(t.add(i),n.push({colId:i,direction:o.direction}))}return n}function q(e){if(e==null||typeof e!="object")return null;let n=e;if(n.version!==2||!Array.isArray(n.columns)||!Array.isArray(n.sortModel))return null;let t=n.pagination!=null&&typeof n.pagination=="object"?n.pagination:{};return{version:2,columns:ye(n.columns),sortModel:Me(n.sortModel),filterModel:O(n.filterModel),advancedFilterModel:_(n.advancedFilterModel),quickFilterText:typeof n.quickFilterText=="string"&&n.quickFilterText.trim()?n.quickFilterText.slice(0,fe):null,pagination:{enabled:t.enabled===!0,page:x(t.page,1),pageSize:x(t.pageSize,20)},selectedRowIds:G(n.selectedRowIds),expandedRowIds:G(n.expandedRowIds),expandedGroupIds:G(n.expandedGroupIds)}}var S=2e3,z=256,C=512;function g(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)?e:null}function F(e){return typeof e=="string"&&e.length<=512&&e.trim().length>0&&!["__proto__","prototype","constructor"].includes(e)}function f(e,n){e.length<z-1?e.push(n):e.length===z-1&&e.push({code:"LIMIT_EXCEEDED",path:"report"})}function Ie(e,n){if(e.columns.length>S||e.columns.some(o=>!F(o)||o!==o.trim()))throw new TypeError("[MachTable] Preference columns must contain at most 2000 valid stable IDs.");let t=new Set(e.columns);if(t.size!==e.columns.length)throw new TypeError("[MachTable] Preference column IDs must be unique.");let r=new Map(Object.entries(e.renameColumns??{}));if(r.size>S||[...r].some(([o,i])=>!F(o)||!t.has(i)))throw new TypeError("[MachTable] Preference rename targets must identify current columns.");return(o,i)=>{if(!F(o))return f(n,{code:"REMOVED_COLUMN",path:i}),null;let s=o.trim(),c=r.get(s)??s;return t.has(c)?(s!==c&&f(n,{code:"RENAMED_COLUMN",path:i,from:s,to:c}),c):(f(n,{code:"REMOVED_COLUMN",path:i,from:s}),null)}}function he(e){let n=Object.entries(e.columnTypes??{}),t=new Set(e.columns);if(n.length>S||n.some(([r,o])=>!t.has(r)||!["text","number","date","set",!1].includes(o)))throw new TypeError("[MachTable] Preference filter types must identify current columns and supported types.");return new Map(n)}function Se(e,n){return n.match==="blank"||n.match==="notBlank"?!0:e==="number"?typeof n.value!="number"||!Number.isFinite(n.value)?!1:n.match!=="inRange"||typeof n.value2=="number"&&Number.isFinite(n.value2)&&n.value2>=n.value:typeof n.value!="string"?!1:e==="text"?!0:Number.isFinite(Date.parse(n.value))?n.match!=="inRange"||typeof n.value2=="string"&&Number.isFinite(Date.parse(n.value2))&&Date.parse(n.value2)>=Date.parse(n.value):!1}function be(e,n){let t=typeof e=="string"?e.length:0;return t>1024||n.filterCharacters<t?!1:(n.filterCharacters-=t,!0)}function j(e,n){return n.filterItems<=0?!1:(n.filterItems--,e.every(t=>be(t,n)))}function ve(e){let n=g(e);return n?.operator!==void 0&&n.operator!=="and"&&n.operator!=="or"?null:A(n&&{type:n.type,operator:n.operator,values:Array.isArray(n.values)?n.values.slice(0,2e3):void 0,conditions:Array.isArray(n.conditions)?n.conditions.slice(0,20):void 0})}function U(e,n,t,r){let o=r.report;if(r.filterItems<=0)return f(o,{code:"LIMIT_EXCEEDED",path:t}),null;let i=ve(e);if(!i)return f(o,{code:"INVALID_FILTER",path:t}),null;let s=r.types.get(n);if(s!==void 0&&s!==i.type)return f(o,{code:"TYPE_CHANGED",path:t,from:i.type,to:s===!1?"disabled":s}),null;if(i.type==="set"){let y=i.values.filter(M=>(M===null||typeof M=="string"||typeof M=="number")&&j([M],r)),h=g(e)?.values;return Array.isArray(h)&&h.length!==y.length&&f(o,{code:"NORMALIZED",path:t}),{type:"set",values:y}}let c=i.conditions.filter(y=>j(Object.values(y),r)&&Se(i.type,y)),p=g(e)?.conditions;return Array.isArray(p)&&p.length!==c.length&&f(o,{code:"INVALID_FILTER",path:t}),c.length?{...i,conditions:c}:null}function Ae(e,n,t){let r=t.resolve(e.colId,`${n}.colId`);if(!r)return null;let o=U(e.filter,r,`${n}.filter`,t);return o?{kind:"condition",colId:r,filter:o}:null}function Ee(e,n,t,r){if(!Array.isArray(e.children)||!["and","or"].includes(e.operator))return f(r.report,{code:"INVALID_FILTER",path:n}),null;let o=[];for(let i=0;i<Math.min(e.children.length,C);i++){let s=H(e.children[i],`${n}.children[${i}]`,t+1,r);s&&o.push(s)}return e.children.length>C&&f(r.report,{code:"LIMIT_EXCEEDED",path:n}),o.length?{kind:"group",operator:e.operator,children:o,...e.not===!0?{not:!0}:{}}:null}function H(e,n,t,r){let o=g(e);if(!o||t>16||r.nodes>=C||r.ancestors.has(o))return f(r.report,{code:"LIMIT_EXCEEDED",path:n}),null;r.nodes++,r.ancestors.add(o);let i=null;return o.kind==="condition"?i=Ae(o,n,r):o.kind==="group"?i=Ee(o,n,t,r):f(r.report,{code:"INVALID_FILTER",path:n}),r.ancestors.delete(o),i}function V(e,n,t){let r=new Set;return e.flatMap((o,i)=>{let s=t.resolve(o.colId,`${n}[${i}]`);return s?r.has(s)?(f(t.report,{code:"DUPLICATE_COLUMN",path:n,from:o.colId,to:s}),[]):(r.add(s),[{...o,colId:s}]):[]})}function Te(e,n){let t=g(e.filterModel),r=Object.create(null);if(!t)return r;let o=0;for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;if(o++>=S){f(n.report,{code:"LIMIT_EXCEEDED",path:"filterModel"});break}let s=`filterModel.${i.slice(0,512)}`,c=n.resolve(i,s);if(!c)continue;if(Object.prototype.hasOwnProperty.call(r,c)){f(n.report,{code:"DUPLICATE_COLUMN",path:"filterModel",from:i,to:c});continue}let p=U(t[i],c,s,n);p&&(r[c]=p)}return r}function Re(e){let n=g(e.pagination);return g(e.filterModel)!==null&&n!==null&&typeof n.enabled=="boolean"&&typeof n.page=="number"&&typeof n.pageSize=="number"&&(e.quickFilterText===null||typeof e.quickFilterText=="string")&&[e.selectedRowIds,e.expandedRowIds,e.expandedGroupIds].every(Array.isArray)}function we(e,n){if(e.version!==2||e.advancedFilterModel==null)return null;let t=g(e.advancedFilterModel);if(t?.version!==1)return f(n.report,{code:"INVALID_FILTER",path:"advancedFilterModel"}),null;let r=H(t.root,"advancedFilterModel.root",0,n);return r?{version:1,root:r}:null}function X(e){return Array.isArray(e)?e.slice(0,S).filter(n=>{let t=g(n)?.colId;return typeof t!="string"||t.length<=512}):e}function b(e,n){let t=[],r=g(e),o=Ie(n,t),i=he(n);if(!r||![1,2].includes(r.version))return f(t,{code:"UNSUPPORTED_VERSION",path:"version"}),{state:null,report:t};let s=q({version:2,columns:X(r.columns),sortModel:X(r.sortModel),filterModel:{},advancedFilterModel:null,quickFilterText:typeof r.quickFilterText=="string"?r.quickFilterText.slice(0,1e4):r.quickFilterText,pagination:r.pagination,selectedRowIds:r.selectedRowIds,expandedRowIds:r.expandedRowIds,expandedGroupIds:r.expandedGroupIds});if(!s||!Array.isArray(r.columns)||!Array.isArray(r.sortModel))return f(t,{code:"INVALID_STATE",path:"state"}),{state:null,report:t};if(r.version===1&&!Re(r))return{state:null,report:[{code:"INVALID_STATE",path:"state"}]};r.version===1&&f(t,{code:"VERSION_MIGRATED",path:"version",from:"1",to:"2"});let c={report:t,resolve:o,types:i,ancestors:new WeakSet,nodes:0,filterItems:1e4,filterCharacters:64e3};for(let p of["columns","sortModel"])r[p].length!==s[p].length&&f(t,{code:"NORMALIZED",path:p});return s.columns=V(s.columns,"columns",c),s.sortModel=V(s.sortModel,"sortModel",c),s.filterModel=Te(r,c),s.advancedFilterModel=we(r,c),{state:s,report:t}}var Ge=64,ke=64;function I(){let e=new Error("[MachTable] Preference operation no longer belongs to the current identity.");return e.name="AbortError",e}function E(e){return typeof e=="string"&&e.length<=512&&e.trim().length>0}function Fe(e){if(e==null)return null;let{tenantId:n,userId:t,pageId:r,schemaId:o}=e;if(![n,t,r,o].every(E))throw new TypeError("[MachTable] Invalid preference identity.");return Object.freeze({tenantId:n,userId:t,pageId:r,schemaId:o})}function Ce(e){return e?JSON.stringify([e.tenantId,e.userId,e.pageId,e.schemaId]):""}function K(e,n){return new Promise((t,r)=>{let o=()=>r(I());if(e.then(t,r).finally(()=>n.removeEventListener("abort",o)),n.aborted){r(I());return}n.addEventListener("abort",o,{once:!0})})}function v(e){let n=Promise.reject(e instanceof Error?e:new Error(String(e)));return n.catch(()=>{}),n}function Q(e){let n={columns:[...e.columns],renameColumns:{...e.renameColumns},columnTypes:{...e.columnTypes}};b(null,n);let t=null,r=!1,o=()=>{if(r)throw I();let l=Fe(e.identity()),d=Ce(l);if(t?.fingerprint===d)return t;if(t)throw r=!0,t.controller.abort(),t.keys.clear(),t=null,I();return t=l?{identity:l,fingerprint:d,controller:new AbortController,keys:new Map}:null,t},i=l=>{if(r||l.controller.signal.aborted||o()!==l)throw I()},s=(l,d)=>{if(!E(d))throw new TypeError("[MachTable] Invalid preference table key.");let u=l.keys.get(d);if(u)return l.keys.delete(d),l.keys.set(d,u),u;if(l.keys.size>=Ge){let m=[...l.keys].find(([,R])=>R.pending===0);if(!m)throw new RangeError("[MachTable] Too many active preference keys (maximum 64).");l.keys.delete(m[0])}let a={tail:Promise.resolve(),pending:0,revision:void 0};return l.keys.set(d,a),a},c=(l,d,u)=>{let a;try{if(a=s(l,d),a.pending>=ke)throw new RangeError("[MachTable] Too many pending preference operations for one key (maximum 64).")}catch(R){return v(R)}a.pending++;let m=a.tail.then(()=>(i(l),u(a)));return a.tail=m.then(()=>{},()=>{}).finally(()=>{a.pending--}),m},p=(l,d)=>({identity:l.identity,key:d,signal:l.controller.signal}),y=async(l,d,u)=>{i(l);let a=await K(Promise.resolve().then(()=>(i(l),e.load(p(l,d)))),l.controller.signal);if(i(l),a!=null&&!E(a.revision))throw new TypeError("[MachTable] Preference transport returned an invalid revision.");return u.revision=a?.revision??null,a},h=(l,d,u)=>{let a=b(l,n);if(a.report.length)try{e.onMigration?.(a,p(d,u))}catch{}return a},M=async(l,d,u,a)=>{a.revision===void 0&&await y(l,d,a),i(l);let m=await K(Promise.resolve().then(()=>(i(l),e.save({...p(l,d),state:u,expectedRevision:a.revision??null}))),l.controller.signal);if(i(l),!m||!E(m.revision))throw new TypeError("[MachTable] Preference save must return its committed revision.");a.revision=m.revision};return o(),{load(l){try{let d=o();return d?c(d,l,async u=>{let a=await y(d,l,u),m=a?h(a.state,d,l).state:null;return i(d),m}).catch(u=>{if(u?.name==="AbortError")return null;throw u}):Promise.resolve(null)}catch(d){return v(d)}},save(l,d){try{let u=o();if(!u)return v(I());let a=h(d,u,l).state;return a?c(u,l,m=>M(u,l,a,m)):v(new TypeError("[MachTable] Cannot save invalid grid preferences."))}catch(u){return v(u)}},dispose(){r||(r=!0,t?.controller.abort(),t?.keys.clear(),t=null)}}}var T=class extends Error{constructor(n,t){super("[MachTable] Grid preference revision conflict; reload and review before saving again."),this.name="GridPreferenceConflictError",this.expectedRevision=n,this.actualRevision=t}};0&&(module.exports={GridPreferenceConflictError,createGridPreferenceStore,migrateGridState});
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { f as GridState, g as GridStateStore, F as FilterType } from './api-pOhyuSQk.cjs';
|
|
2
|
+
|
|
3
|
+
interface GridStateMigrationOptions {
|
|
4
|
+
/** Current stable column IDs; removed IDs are not restored. */
|
|
5
|
+
columns: readonly string[];
|
|
6
|
+
/** Explicit old ID → current ID mapping, applied to layout, sort and filters. */
|
|
7
|
+
renameColumns?: Readonly<Record<string, string>>;
|
|
8
|
+
/** Optional target filter types. Omitted IDs keep their existing type; false disables filtering. */
|
|
9
|
+
columnTypes?: Readonly<Record<string, FilterType | false>>;
|
|
10
|
+
}
|
|
11
|
+
interface GridStateMigrationIssue {
|
|
12
|
+
code: "VERSION_MIGRATED" | "UNSUPPORTED_VERSION" | "INVALID_STATE" | "REMOVED_COLUMN" | "RENAMED_COLUMN" | "DUPLICATE_COLUMN" | "TYPE_CHANGED" | "INVALID_FILTER" | "NORMALIZED" | "LIMIT_EXCEEDED";
|
|
13
|
+
path: string;
|
|
14
|
+
from?: string;
|
|
15
|
+
to?: string;
|
|
16
|
+
}
|
|
17
|
+
interface GridStateMigrationResult {
|
|
18
|
+
state: GridState | null;
|
|
19
|
+
report: GridStateMigrationIssue[];
|
|
20
|
+
}
|
|
21
|
+
/** Application identity, independent from the table's existing persistence key. */
|
|
22
|
+
interface GridPreferenceIdentity {
|
|
23
|
+
tenantId: string;
|
|
24
|
+
userId: string;
|
|
25
|
+
pageId: string;
|
|
26
|
+
schemaId: string;
|
|
27
|
+
}
|
|
28
|
+
interface GridPreferenceRequest {
|
|
29
|
+
identity: Readonly<GridPreferenceIdentity>;
|
|
30
|
+
key: string;
|
|
31
|
+
signal: AbortSignal;
|
|
32
|
+
}
|
|
33
|
+
interface GridPreferenceRecord {
|
|
34
|
+
state: unknown;
|
|
35
|
+
revision: string;
|
|
36
|
+
}
|
|
37
|
+
interface GridPreferenceSaveRequest extends GridPreferenceRequest {
|
|
38
|
+
state: GridState;
|
|
39
|
+
/** null means create only; the transport must compare atomically on the server. */
|
|
40
|
+
expectedRevision: string | null;
|
|
41
|
+
}
|
|
42
|
+
interface GridPreferenceStoreOptions extends GridStateMigrationOptions {
|
|
43
|
+
/** Checked at start/completion. An instance binds its first valid identity; changes invalidate it. */
|
|
44
|
+
identity(): GridPreferenceIdentity | null;
|
|
45
|
+
load(request: GridPreferenceRequest): GridPreferenceRecord | null | Promise<GridPreferenceRecord | null>;
|
|
46
|
+
save(request: GridPreferenceSaveRequest): {
|
|
47
|
+
revision: string;
|
|
48
|
+
} | Promise<{
|
|
49
|
+
revision: string;
|
|
50
|
+
}>;
|
|
51
|
+
/** An observer; exceptions are isolated from persistence. */
|
|
52
|
+
onMigration?(result: GridStateMigrationResult, request: GridPreferenceRequest): void;
|
|
53
|
+
}
|
|
54
|
+
interface GridPreferenceStore extends GridStateStore {
|
|
55
|
+
/** Abort in-flight transport and reject queued operations; idempotent. */
|
|
56
|
+
dispose(): void;
|
|
57
|
+
}
|
|
58
|
+
/** Transports can use this error for an authoritative server-side CAS conflict. */
|
|
59
|
+
declare class GridPreferenceConflictError extends Error {
|
|
60
|
+
readonly expectedRevision: string | null;
|
|
61
|
+
readonly actualRevision?: string;
|
|
62
|
+
constructor(expectedRevision: string | null, actualRevision?: string);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Optional transport adapter; no account store, HTTP client or global registry is retained. */
|
|
66
|
+
declare function createGridPreferenceStore(options: GridPreferenceStoreOptions): GridPreferenceStore;
|
|
67
|
+
|
|
68
|
+
/** Opt-in v1→v2 and current-column migration; the default Core remains strict v2. */
|
|
69
|
+
declare function migrateGridState(input: unknown, options: GridStateMigrationOptions): GridStateMigrationResult;
|
|
70
|
+
|
|
71
|
+
export { GridPreferenceConflictError, type GridPreferenceIdentity, type GridPreferenceRecord, type GridPreferenceRequest, type GridPreferenceSaveRequest, type GridPreferenceStore, type GridPreferenceStoreOptions, type GridStateMigrationIssue, type GridStateMigrationOptions, type GridStateMigrationResult, createGridPreferenceStore, migrateGridState };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { f as GridState, g as GridStateStore, F as FilterType } from './api-pOhyuSQk.js';
|
|
2
|
+
|
|
3
|
+
interface GridStateMigrationOptions {
|
|
4
|
+
/** Current stable column IDs; removed IDs are not restored. */
|
|
5
|
+
columns: readonly string[];
|
|
6
|
+
/** Explicit old ID → current ID mapping, applied to layout, sort and filters. */
|
|
7
|
+
renameColumns?: Readonly<Record<string, string>>;
|
|
8
|
+
/** Optional target filter types. Omitted IDs keep their existing type; false disables filtering. */
|
|
9
|
+
columnTypes?: Readonly<Record<string, FilterType | false>>;
|
|
10
|
+
}
|
|
11
|
+
interface GridStateMigrationIssue {
|
|
12
|
+
code: "VERSION_MIGRATED" | "UNSUPPORTED_VERSION" | "INVALID_STATE" | "REMOVED_COLUMN" | "RENAMED_COLUMN" | "DUPLICATE_COLUMN" | "TYPE_CHANGED" | "INVALID_FILTER" | "NORMALIZED" | "LIMIT_EXCEEDED";
|
|
13
|
+
path: string;
|
|
14
|
+
from?: string;
|
|
15
|
+
to?: string;
|
|
16
|
+
}
|
|
17
|
+
interface GridStateMigrationResult {
|
|
18
|
+
state: GridState | null;
|
|
19
|
+
report: GridStateMigrationIssue[];
|
|
20
|
+
}
|
|
21
|
+
/** Application identity, independent from the table's existing persistence key. */
|
|
22
|
+
interface GridPreferenceIdentity {
|
|
23
|
+
tenantId: string;
|
|
24
|
+
userId: string;
|
|
25
|
+
pageId: string;
|
|
26
|
+
schemaId: string;
|
|
27
|
+
}
|
|
28
|
+
interface GridPreferenceRequest {
|
|
29
|
+
identity: Readonly<GridPreferenceIdentity>;
|
|
30
|
+
key: string;
|
|
31
|
+
signal: AbortSignal;
|
|
32
|
+
}
|
|
33
|
+
interface GridPreferenceRecord {
|
|
34
|
+
state: unknown;
|
|
35
|
+
revision: string;
|
|
36
|
+
}
|
|
37
|
+
interface GridPreferenceSaveRequest extends GridPreferenceRequest {
|
|
38
|
+
state: GridState;
|
|
39
|
+
/** null means create only; the transport must compare atomically on the server. */
|
|
40
|
+
expectedRevision: string | null;
|
|
41
|
+
}
|
|
42
|
+
interface GridPreferenceStoreOptions extends GridStateMigrationOptions {
|
|
43
|
+
/** Checked at start/completion. An instance binds its first valid identity; changes invalidate it. */
|
|
44
|
+
identity(): GridPreferenceIdentity | null;
|
|
45
|
+
load(request: GridPreferenceRequest): GridPreferenceRecord | null | Promise<GridPreferenceRecord | null>;
|
|
46
|
+
save(request: GridPreferenceSaveRequest): {
|
|
47
|
+
revision: string;
|
|
48
|
+
} | Promise<{
|
|
49
|
+
revision: string;
|
|
50
|
+
}>;
|
|
51
|
+
/** An observer; exceptions are isolated from persistence. */
|
|
52
|
+
onMigration?(result: GridStateMigrationResult, request: GridPreferenceRequest): void;
|
|
53
|
+
}
|
|
54
|
+
interface GridPreferenceStore extends GridStateStore {
|
|
55
|
+
/** Abort in-flight transport and reject queued operations; idempotent. */
|
|
56
|
+
dispose(): void;
|
|
57
|
+
}
|
|
58
|
+
/** Transports can use this error for an authoritative server-side CAS conflict. */
|
|
59
|
+
declare class GridPreferenceConflictError extends Error {
|
|
60
|
+
readonly expectedRevision: string | null;
|
|
61
|
+
readonly actualRevision?: string;
|
|
62
|
+
constructor(expectedRevision: string | null, actualRevision?: string);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Optional transport adapter; no account store, HTTP client or global registry is retained. */
|
|
66
|
+
declare function createGridPreferenceStore(options: GridPreferenceStoreOptions): GridPreferenceStore;
|
|
67
|
+
|
|
68
|
+
/** Opt-in v1→v2 and current-column migration; the default Core remains strict v2. */
|
|
69
|
+
declare function migrateGridState(input: unknown, options: GridStateMigrationOptions): GridStateMigrationResult;
|
|
70
|
+
|
|
71
|
+
export { GridPreferenceConflictError, type GridPreferenceIdentity, type GridPreferenceRecord, type GridPreferenceRequest, type GridPreferenceSaveRequest, type GridPreferenceStore, type GridPreferenceStoreOptions, type GridStateMigrationIssue, type GridStateMigrationOptions, type GridStateMigrationResult, createGridPreferenceStore, migrateGridState };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var K=new Set(["contains","notContains","equals","notEquals","startsWith","endsWith","blank","notBlank"]),Q=new Set(["equals","notEquals","lessThan","lessThanOrEqual","greaterThan","greaterThanOrEqual","inRange","blank","notBlank"]),W=new Set(["equals","notEquals","lessThan","greaterThan","inRange","blank","notBlank"]);function $(e){return e==null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)}function B(e){return e==="text"?K:e==="number"?Q:W}function Y(e,n,t){if(e==null||typeof e!="object")return null;let r=e;return typeof r.match!="string"||!t.has(r.match)?null:{match:r.match,...Z(r,n)}}function Z(e,n){let t=n==="number"?C(e.value):typeof e.value=="string"?e.value:void 0,r=n==="number"?C(e.value2):typeof e.value2=="string"?e.value2:void 0;return{...t!==void 0?{value:t}:{},...r!==void 0?{value2:r}:{}}}function C(e){return typeof e=="number"&&Number.isFinite(e)?e:void 0}function J(e,n){let t=[],r=B(n);for(let o of e.slice(0,20)){let i=Y(o,n,r);i&&t.push(i)}return t}function v(e){if(e==null||typeof e!="object")return null;let n=e;return n.type==="set"?Array.isArray(n.values)?{type:"set",values:n.values.filter($).slice(0,2e3)}:null:n.type!=="text"&&n.type!=="number"&&n.type!=="date"||!Array.isArray(n.conditions)?null:{type:n.type,...n.operator==="or"||n.operator==="and"?{operator:n.operator}:{},conditions:J(n.conditions,n.type)}}function ee(e,n){if(typeof e.colId!="string"||!e.colId.trim())return null;let t=e.colId.trim();if(n.validColumnIds?.has(t)===!1)return null;let r=v(e.filter);return r?{kind:"condition",colId:t,filter:r}:null}function ne(e,n,t){if(!Array.isArray(e.children))return null;let r=[];for(let o of e.children){let i=N(o,n+1,t);i&&r.push(i)}return r.length===0?null:{kind:"group",operator:e.operator==="or"?"or":"and",children:r,...e.not===!0?{not:!0}:{}}}function te(e,n,t){return n<=16&&t.nodes<512&&e!=null&&typeof e=="object"}function N(e,n,t){if(!te(e,n,t)||t.ancestors.has(e))return null;t.ancestors.add(e),t.nodes++;let r=e,o=r.kind==="condition"?ee(r,t):r.kind==="group"?ne(r,n,t):null;return t.ancestors.delete(e),o}function P(e,n){if(e==null||typeof e!="object")return null;let t=e;if(t.version!==1||t.root==null)return null;let r=N(t.root,0,{ancestors:new WeakSet,nodes:0,validColumnIds:n});return r?{version:1,root:r}:null}function _(e,n){if(e==null||typeof e!="object"||Array.isArray(e))return{};let t={};for(let[r,o]of Object.entries(e).slice(0,2e3)){let i=r.trim();if(!i||n?.has(i)===!1)continue;let s=v(o);s&&(t[i]=s)}return t}var D=2e3,re=1e5,w=512,oe=1e4;function R(e){return Array.isArray(e)?[...new Set(e.slice(0,re).filter(n=>typeof n=="string"&&n.length>0&&n.length<=w))]:[]}function O(e,n){return typeof e=="number"&&Number.isFinite(e)&&e>=1?Math.floor(e):n}function x(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:void 0}function ie(e,n){let t=x(n.flex);for(let r of["width","contentWidth"]){let o=x(n[r]);o!==void 0&&(e[r]=o)}n.flex===null?e.flex=null:t!==void 0&&(e.flex=t),(n.widthMode==="auto"||n.widthMode==="manual")&&(e.widthMode=n.widthMode)}function le(e,n){typeof n.hide=="boolean"&&(e.hide=n.hide),(n.pinned===null||n.pinned==="left"||n.pinned==="right")&&(e.pinned=n.pinned)}function se(e,n){if(e==null||typeof e!="object")return null;let t=e,r=typeof t.colId=="string"?t.colId.trim():"";if(!r||r.length>w||n.has(r))return null;n.add(r);let o={colId:r};return le(o,t),ie(o,t),o}function ae(e){if(!Array.isArray(e))return[];let n=[],t=new Set;for(let r of e.slice(0,D)){let o=se(r,t);o&&n.push(o)}return n}function de(e){if(!Array.isArray(e))return[];let n=[],t=new Set;for(let r of e.slice(0,D)){if(r==null||typeof r!="object")continue;let o=r,i=typeof o.colId=="string"?o.colId.trim():"";!i||i.length>w||t.has(i)||o.direction!=="asc"&&o.direction!=="desc"||(t.add(i),n.push({colId:i,direction:o.direction}))}return n}function L(e){if(e==null||typeof e!="object")return null;let n=e;if(n.version!==2||!Array.isArray(n.columns)||!Array.isArray(n.sortModel))return null;let t=n.pagination!=null&&typeof n.pagination=="object"?n.pagination:{};return{version:2,columns:ae(n.columns),sortModel:de(n.sortModel),filterModel:_(n.filterModel),advancedFilterModel:P(n.advancedFilterModel),quickFilterText:typeof n.quickFilterText=="string"&&n.quickFilterText.trim()?n.quickFilterText.slice(0,oe):null,pagination:{enabled:t.enabled===!0,page:O(t.page,1),pageSize:O(t.pageSize,20)},selectedRowIds:R(n.selectedRowIds),expandedRowIds:R(n.expandedRowIds),expandedGroupIds:R(n.expandedGroupIds)}}var S=2e3,q=256,k=512;function g(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)?e:null}function G(e){return typeof e=="string"&&e.length<=512&&e.trim().length>0&&!["__proto__","prototype","constructor"].includes(e)}function f(e,n){e.length<q-1?e.push(n):e.length===q-1&&e.push({code:"LIMIT_EXCEEDED",path:"report"})}function ue(e,n){if(e.columns.length>S||e.columns.some(o=>!G(o)||o!==o.trim()))throw new TypeError("[MachTable] Preference columns must contain at most 2000 valid stable IDs.");let t=new Set(e.columns);if(t.size!==e.columns.length)throw new TypeError("[MachTable] Preference column IDs must be unique.");let r=new Map(Object.entries(e.renameColumns??{}));if(r.size>S||[...r].some(([o,i])=>!G(o)||!t.has(i)))throw new TypeError("[MachTable] Preference rename targets must identify current columns.");return(o,i)=>{if(!G(o))return f(n,{code:"REMOVED_COLUMN",path:i}),null;let s=o.trim(),c=r.get(s)??s;return t.has(c)?(s!==c&&f(n,{code:"RENAMED_COLUMN",path:i,from:s,to:c}),c):(f(n,{code:"REMOVED_COLUMN",path:i,from:s}),null)}}function ce(e){let n=Object.entries(e.columnTypes??{}),t=new Set(e.columns);if(n.length>S||n.some(([r,o])=>!t.has(r)||!["text","number","date","set",!1].includes(o)))throw new TypeError("[MachTable] Preference filter types must identify current columns and supported types.");return new Map(n)}function fe(e,n){return n.match==="blank"||n.match==="notBlank"?!0:e==="number"?typeof n.value!="number"||!Number.isFinite(n.value)?!1:n.match!=="inRange"||typeof n.value2=="number"&&Number.isFinite(n.value2)&&n.value2>=n.value:typeof n.value!="string"?!1:e==="text"?!0:Number.isFinite(Date.parse(n.value))?n.match!=="inRange"||typeof n.value2=="string"&&Number.isFinite(Date.parse(n.value2))&&Date.parse(n.value2)>=Date.parse(n.value):!1}function pe(e,n){let t=typeof e=="string"?e.length:0;return t>1024||n.filterCharacters<t?!1:(n.filterCharacters-=t,!0)}function z(e,n){return n.filterItems<=0?!1:(n.filterItems--,e.every(t=>pe(t,n)))}function me(e){let n=g(e);return n?.operator!==void 0&&n.operator!=="and"&&n.operator!=="or"?null:v(n&&{type:n.type,operator:n.operator,values:Array.isArray(n.values)?n.values.slice(0,2e3):void 0,conditions:Array.isArray(n.conditions)?n.conditions.slice(0,20):void 0})}function X(e,n,t,r){let o=r.report;if(r.filterItems<=0)return f(o,{code:"LIMIT_EXCEEDED",path:t}),null;let i=me(e);if(!i)return f(o,{code:"INVALID_FILTER",path:t}),null;let s=r.types.get(n);if(s!==void 0&&s!==i.type)return f(o,{code:"TYPE_CHANGED",path:t,from:i.type,to:s===!1?"disabled":s}),null;if(i.type==="set"){let y=i.values.filter(M=>(M===null||typeof M=="string"||typeof M=="number")&&z([M],r)),h=g(e)?.values;return Array.isArray(h)&&h.length!==y.length&&f(o,{code:"NORMALIZED",path:t}),{type:"set",values:y}}let c=i.conditions.filter(y=>z(Object.values(y),r)&&fe(i.type,y)),p=g(e)?.conditions;return Array.isArray(p)&&p.length!==c.length&&f(o,{code:"INVALID_FILTER",path:t}),c.length?{...i,conditions:c}:null}function ge(e,n,t){let r=t.resolve(e.colId,`${n}.colId`);if(!r)return null;let o=X(e.filter,r,`${n}.filter`,t);return o?{kind:"condition",colId:r,filter:o}:null}function ye(e,n,t,r){if(!Array.isArray(e.children)||!["and","or"].includes(e.operator))return f(r.report,{code:"INVALID_FILTER",path:n}),null;let o=[];for(let i=0;i<Math.min(e.children.length,k);i++){let s=U(e.children[i],`${n}.children[${i}]`,t+1,r);s&&o.push(s)}return e.children.length>k&&f(r.report,{code:"LIMIT_EXCEEDED",path:n}),o.length?{kind:"group",operator:e.operator,children:o,...e.not===!0?{not:!0}:{}}:null}function U(e,n,t,r){let o=g(e);if(!o||t>16||r.nodes>=k||r.ancestors.has(o))return f(r.report,{code:"LIMIT_EXCEEDED",path:n}),null;r.nodes++,r.ancestors.add(o);let i=null;return o.kind==="condition"?i=ge(o,n,r):o.kind==="group"?i=ye(o,n,t,r):f(r.report,{code:"INVALID_FILTER",path:n}),r.ancestors.delete(o),i}function j(e,n,t){let r=new Set;return e.flatMap((o,i)=>{let s=t.resolve(o.colId,`${n}[${i}]`);return s?r.has(s)?(f(t.report,{code:"DUPLICATE_COLUMN",path:n,from:o.colId,to:s}),[]):(r.add(s),[{...o,colId:s}]):[]})}function Me(e,n){let t=g(e.filterModel),r=Object.create(null);if(!t)return r;let o=0;for(let i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;if(o++>=S){f(n.report,{code:"LIMIT_EXCEEDED",path:"filterModel"});break}let s=`filterModel.${i.slice(0,512)}`,c=n.resolve(i,s);if(!c)continue;if(Object.prototype.hasOwnProperty.call(r,c)){f(n.report,{code:"DUPLICATE_COLUMN",path:"filterModel",from:i,to:c});continue}let p=X(t[i],c,s,n);p&&(r[c]=p)}return r}function Ie(e){let n=g(e.pagination);return g(e.filterModel)!==null&&n!==null&&typeof n.enabled=="boolean"&&typeof n.page=="number"&&typeof n.pageSize=="number"&&(e.quickFilterText===null||typeof e.quickFilterText=="string")&&[e.selectedRowIds,e.expandedRowIds,e.expandedGroupIds].every(Array.isArray)}function he(e,n){if(e.version!==2||e.advancedFilterModel==null)return null;let t=g(e.advancedFilterModel);if(t?.version!==1)return f(n.report,{code:"INVALID_FILTER",path:"advancedFilterModel"}),null;let r=U(t.root,"advancedFilterModel.root",0,n);return r?{version:1,root:r}:null}function V(e){return Array.isArray(e)?e.slice(0,S).filter(n=>{let t=g(n)?.colId;return typeof t!="string"||t.length<=512}):e}function A(e,n){let t=[],r=g(e),o=ue(n,t),i=ce(n);if(!r||![1,2].includes(r.version))return f(t,{code:"UNSUPPORTED_VERSION",path:"version"}),{state:null,report:t};let s=L({version:2,columns:V(r.columns),sortModel:V(r.sortModel),filterModel:{},advancedFilterModel:null,quickFilterText:typeof r.quickFilterText=="string"?r.quickFilterText.slice(0,1e4):r.quickFilterText,pagination:r.pagination,selectedRowIds:r.selectedRowIds,expandedRowIds:r.expandedRowIds,expandedGroupIds:r.expandedGroupIds});if(!s||!Array.isArray(r.columns)||!Array.isArray(r.sortModel))return f(t,{code:"INVALID_STATE",path:"state"}),{state:null,report:t};if(r.version===1&&!Ie(r))return{state:null,report:[{code:"INVALID_STATE",path:"state"}]};r.version===1&&f(t,{code:"VERSION_MIGRATED",path:"version",from:"1",to:"2"});let c={report:t,resolve:o,types:i,ancestors:new WeakSet,nodes:0,filterItems:1e4,filterCharacters:64e3};for(let p of["columns","sortModel"])r[p].length!==s[p].length&&f(t,{code:"NORMALIZED",path:p});return s.columns=j(s.columns,"columns",c),s.sortModel=j(s.sortModel,"sortModel",c),s.filterModel=Me(r,c),s.advancedFilterModel=he(r,c),{state:s,report:t}}var Se=64,be=64;function I(){let e=new Error("[MachTable] Preference operation no longer belongs to the current identity.");return e.name="AbortError",e}function E(e){return typeof e=="string"&&e.length<=512&&e.trim().length>0}function ve(e){if(e==null)return null;let{tenantId:n,userId:t,pageId:r,schemaId:o}=e;if(![n,t,r,o].every(E))throw new TypeError("[MachTable] Invalid preference identity.");return Object.freeze({tenantId:n,userId:t,pageId:r,schemaId:o})}function Ae(e){return e?JSON.stringify([e.tenantId,e.userId,e.pageId,e.schemaId]):""}function H(e,n){return new Promise((t,r)=>{let o=()=>r(I());if(e.then(t,r).finally(()=>n.removeEventListener("abort",o)),n.aborted){r(I());return}n.addEventListener("abort",o,{once:!0})})}function b(e){let n=Promise.reject(e instanceof Error?e:new Error(String(e)));return n.catch(()=>{}),n}function Ee(e){let n={columns:[...e.columns],renameColumns:{...e.renameColumns},columnTypes:{...e.columnTypes}};A(null,n);let t=null,r=!1,o=()=>{if(r)throw I();let l=ve(e.identity()),d=Ae(l);if(t?.fingerprint===d)return t;if(t)throw r=!0,t.controller.abort(),t.keys.clear(),t=null,I();return t=l?{identity:l,fingerprint:d,controller:new AbortController,keys:new Map}:null,t},i=l=>{if(r||l.controller.signal.aborted||o()!==l)throw I()},s=(l,d)=>{if(!E(d))throw new TypeError("[MachTable] Invalid preference table key.");let u=l.keys.get(d);if(u)return l.keys.delete(d),l.keys.set(d,u),u;if(l.keys.size>=Se){let m=[...l.keys].find(([,T])=>T.pending===0);if(!m)throw new RangeError("[MachTable] Too many active preference keys (maximum 64).");l.keys.delete(m[0])}let a={tail:Promise.resolve(),pending:0,revision:void 0};return l.keys.set(d,a),a},c=(l,d,u)=>{let a;try{if(a=s(l,d),a.pending>=be)throw new RangeError("[MachTable] Too many pending preference operations for one key (maximum 64).")}catch(T){return b(T)}a.pending++;let m=a.tail.then(()=>(i(l),u(a)));return a.tail=m.then(()=>{},()=>{}).finally(()=>{a.pending--}),m},p=(l,d)=>({identity:l.identity,key:d,signal:l.controller.signal}),y=async(l,d,u)=>{i(l);let a=await H(Promise.resolve().then(()=>(i(l),e.load(p(l,d)))),l.controller.signal);if(i(l),a!=null&&!E(a.revision))throw new TypeError("[MachTable] Preference transport returned an invalid revision.");return u.revision=a?.revision??null,a},h=(l,d,u)=>{let a=A(l,n);if(a.report.length)try{e.onMigration?.(a,p(d,u))}catch{}return a},M=async(l,d,u,a)=>{a.revision===void 0&&await y(l,d,a),i(l);let m=await H(Promise.resolve().then(()=>(i(l),e.save({...p(l,d),state:u,expectedRevision:a.revision??null}))),l.controller.signal);if(i(l),!m||!E(m.revision))throw new TypeError("[MachTable] Preference save must return its committed revision.");a.revision=m.revision};return o(),{load(l){try{let d=o();return d?c(d,l,async u=>{let a=await y(d,l,u),m=a?h(a.state,d,l).state:null;return i(d),m}).catch(u=>{if(u?.name==="AbortError")return null;throw u}):Promise.resolve(null)}catch(d){return b(d)}},save(l,d){try{let u=o();if(!u)return b(I());let a=h(d,u,l).state;return a?c(u,l,m=>M(u,l,a,m)):b(new TypeError("[MachTable] Cannot save invalid grid preferences."))}catch(u){return b(u)}},dispose(){r||(r=!0,t?.controller.abort(),t?.keys.clear(),t=null)}}}var F=class extends Error{constructor(n,t){super("[MachTable] Grid preference revision conflict; reload and review before saving again."),this.name="GridPreferenceConflictError",this.expectedRevision=n,this.actualRevision=t}};export{F as GridPreferenceConflictError,Ee as createGridPreferenceStore,A as migrateGridState};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var A=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var $=Object.prototype.hasOwnProperty;var J=(n,e)=>{for(var t in e)A(n,t,{get:e[t],enumerable:!0})},U=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of W(e))!$.call(n,o)&&o!==t&&A(n,o,{get:()=>e[o],enumerable:!(r=H(e,o))||r.enumerable});return n};var Y=n=>U(A({},"__esModule",{value:!0}),n);var ge={};J(ge,{ServerSideVersionConflictError:()=>m,bindServerSideGrid:()=>V,createServerSideGroupColumn:()=>j,createServerSideStore:()=>O,serverSideDataColumn:()=>Q});module.exports=Y(ge);function g(n){if(n.reason instanceof Error)return n.reason;let e=new Error(typeof n.reason=="string"?n.reason:"Block request aborted");return e.name="AbortError",e}function b(n){return Number.isFinite(n)?Math.max(1,Math.trunc(n)):1}var w=class{constructor(e,t,r=4){this.maxBlocks=e;this.onEvict=t;this.maxConcurrentRequests=r;this.e=new Map;this.t=new Map;this.f=0;this.generation=0;this.hitCount=0;this.missCount=0;this.evictionCount=0;this.i=0;this.s=new Set;this.maxBlocks=b(e),this.maxConcurrentRequests=b(r)}configure(e,t=this.maxConcurrentRequests){this.maxBlocks=b(e),this.maxConcurrentRequests=b(t),this.c(),this.a()}retain(e){this.s=e,this.c()}peek(e){let t=this.e.get(e);if(t)return t.touchedAt=++this.f,t}has(e){return this.e.has(e)}invalidate(e){let t=this.t.get(e);t&&(this.t.delete(e),t.controller.abort(),t.state==="queued"&&t.reject(g(t.controller.signal)));let r=this.e.get(e);r&&(this.e.delete(e),this.onEvict?.(e,r))}load(e,t,r,o=0){if(r?.aborted)return Promise.reject(g(r));let s=this.peek(e);if(s)return this.hitCount++,Promise.resolve(s);let i=this.t.get(e);if(i)return this.hitCount++,i.priority=Math.max(i.priority,o),this.a(),this.v(e,i,r);this.missCount++;let a=new AbortController,d,u,l=new Promise((k,X)=>{d=k,u=X}),h={controller:a,promise:l,consumers:0,loader:t,priority:o,state:"queued",resolve:d,reject:u};this.t.set(e,h);let p=this.v(e,h,r);return this.a(),p}purge(){this.generation++,this.s.clear();for(let e of this.t.values())e.controller.abort(),e.state==="queued"&&e.reject(g(e.controller.signal));this.t.clear();for(let[e,t]of this.e)this.onEvict?.(e,t);this.e.clear()}snapshot(){let e=0,t=0;for(let r of this.e.values())e+=r.rows.length;for(let r of this.t.values())r.state==="active"&&t++;return{cachedBlockCount:this.e.size,loadingBlockCount:this.t.size,activeRequestCount:t,queuedRequestCount:Math.max(0,this.t.size-t),cachedRowCount:e,hitCount:this.hitCount,missCount:this.missCount,evictionCount:this.evictionCount}}a(){for(;this.i<this.maxConcurrentRequests;){let e,t;for(let[r,o]of this.t)o.state!=="queued"||o.controller.signal.aborted||(!t||o.priority>t.priority)&&(e=r,t=o);if(e==null||!t)return;this.g(e,t)}}g(e,t){t.state="active",this.i++;let r=this.generation;this.y(t).then(o=>{r===this.generation&&!t.controller.signal.aborted&&(this.e.set(e,{rows:o.rows,...o.lastRow==null?{}:{lastRow:o.lastRow},touchedAt:++this.f}),this.c()),t.resolve(o)},t.reject).finally(()=>{this.i=Math.max(0,this.i-1),this.t.get(e)===t&&this.t.delete(e),this.a()})}y(e){let{signal:t}=e.controller;return t.aborted?Promise.reject(g(t)):new Promise((r,o)=>{let s=()=>o(g(t));t.addEventListener("abort",s,{once:!0}),Promise.resolve().then(()=>e.loader(t)).then(r,o).finally(()=>{t.removeEventListener("abort",s)})})}v(e,t,r){return t.consumers++,new Promise((o,s)=>{let i=!1,a=u=>{i||(i=!0,r?.removeEventListener("abort",d),t.consumers=Math.max(0,t.consumers-1),u())},d=()=>a(()=>{t.consumers===0&&this.t.get(e)===t&&(this.t.delete(e),t.controller.abort(r?.reason),t.state==="queued"&&t.reject(g(t.controller.signal))),s(g(r))});r?.addEventListener("abort",d,{once:!0}),t.promise.then(u=>a(()=>o(u)),u=>a(()=>s(u instanceof Error?u:new Error(String(u??"Block request failed")))))})}c(){let e=Math.max(this.maxBlocks,this.s.size+1);for(;this.e.size>e;){let t=-1,r=Number.POSITIVE_INFINITY;for(let[s,i]of this.e)this.s.has(s)||i.touchedAt<r&&(t=s,r=i.touchedAt);if(t<0)return;let o=this.e.get(t);this.e.delete(t),this.evictionCount++,o&&this.onEvict?.(t,o)}}};var Z=new Set(["contains","notContains","equals","notEquals","startsWith","endsWith","blank","notBlank"]),ee=new Set(["equals","notEquals","lessThan","lessThanOrEqual","greaterThan","greaterThanOrEqual","inRange","blank","notBlank"]),te=new Set(["equals","notEquals","lessThan","greaterThan","inRange","blank","notBlank"]);function re(n){return n==null||typeof n=="string"||typeof n=="number"&&Number.isFinite(n)}function ne(n){return n==="text"?Z:n==="number"?ee:te}function oe(n,e,t){if(n==null||typeof n!="object")return null;let r=n;return typeof r.match!="string"||!t.has(r.match)?null:{match:r.match,...ie(r,e)}}function ie(n,e){let t=e==="number"?M(n.value):typeof n.value=="string"?n.value:void 0,r=e==="number"?M(n.value2):typeof n.value2=="string"?n.value2:void 0;return{...t!==void 0?{value:t}:{},...r!==void 0?{value2:r}:{}}}function M(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function se(n,e){let t=[],r=ne(e);for(let o of n.slice(0,20)){let s=oe(o,e,r);s&&t.push(s)}return t}function E(n){if(n==null||typeof n!="object")return null;let e=n;return e.type==="set"?Array.isArray(e.values)?{type:"set",values:e.values.filter(re).slice(0,2e3)}:null:e.type!=="text"&&e.type!=="number"&&e.type!=="date"||!Array.isArray(e.conditions)?null:{type:e.type,...e.operator==="or"||e.operator==="and"?{operator:e.operator}:{},conditions:se(e.conditions,e.type)}}function ae(n,e){if(typeof n.colId!="string"||!n.colId.trim())return null;let t=n.colId.trim();if(e.validColumnIds?.has(t)===!1)return null;let r=E(n.filter);return r?{kind:"condition",colId:t,filter:r}:null}function le(n,e,t){if(!Array.isArray(n.children))return null;let r=[];for(let o of n.children){let s=P(o,e+1,t);s&&r.push(s)}return r.length===0?null:{kind:"group",operator:n.operator==="or"?"or":"and",children:r,...n.not===!0?{not:!0}:{}}}function de(n,e,t){return e<=16&&t.nodes<512&&n!=null&&typeof n=="object"}function P(n,e,t){if(!de(n,e,t)||t.ancestors.has(n))return null;t.ancestors.add(n),t.nodes++;let r=n,o=r.kind==="condition"?ae(r,t):r.kind==="group"?le(r,e,t):null;return t.ancestors.delete(n),o}function q(n,e){if(n==null||typeof n!="object")return null;let t=n;if(t.version!==1||t.root==null)return null;let r=P(t.root,0,{ancestors:new WeakSet,nodes:0,validColumnIds:e});return r?{version:1,root:r}:null}function F(n,e){if(n==null||typeof n!="object"||Array.isArray(n))return{};let t={};for(let[r,o]of Object.entries(n).slice(0,2e3)){let s=r.trim();if(!s||e?.has(s)===!1)continue;let i=E(o);i&&(t[s]=i)}return t}function f(){let n=new Error("[MachTable] Server-side operation cancelled or replaced.");return n.name="AbortError",n}function v(n,e,t,r=1){return n!=null&&Number.isFinite(n)?Math.max(r,Math.min(t,Math.floor(n))):e}function R(n){if(!Array.isArray(n)||n.length>16||n.some(e=>typeof e!="string"||e.length>512))throw new TypeError("[MachTable] Invalid server-side group route.");return[...n]}function x(n,e){let t={...e,...n},r=t.rowGroupCols??[],o=t.valueCols??[];if(r.length>16||o.length>128)throw new RangeError("[MachTable] Server-side query exceeds group/aggregate column limits.");if([...r,...o].some(i=>typeof i.colId!="string"||!i.colId||i.colId.length>512))throw new TypeError("[MachTable] Invalid server-side query column.");return{rowGroupCols:r.map(i=>({colId:i.colId,...i.field?{field:i.field}:{}})),valueCols:o.map(i=>({colId:i.colId,aggFunc:i.aggFunc,...i.field?{field:i.field}:{}})),sortModel:(t.sortModel??[]).slice(0,2e3).filter(i=>i.direction==="asc"||i.direction==="desc").map(i=>({...i})),filterModel:F(t.filterModel),advancedFilterModel:q(t.advancedFilterModel),quickFilterText:t.quickFilterText?.slice(0,1e4)||null}}function ue(n,e,t){if(!n||!Array.isArray(n.rows)||n.rows.length>t||!Number.isInteger(n.rowCount)||n.rowCount<0||n.rows.length>0&&n.rowCount<e+n.rows.length||typeof n.revision!="string"||!n.revision||n.revision.length>512)throw new TypeError("[MachTable] Invalid server-side route response.")}function N(n,e,t){return e>0&&n>=e?Math.floor((e-1)/t)*t:null}function I(n,e,t,r){ue(n,e,t);let o=new Set,s=new Set;for(let i of n.rows){if(typeof i.id!="string"||!i.id||i.id.length>512||o.has(i.id))throw new TypeError("[MachTable] Duplicate/invalid server-side row ID.");if(o.add(i.id),r){if(typeof i.groupKey!="string"||i.groupKey.length>512||s.has(i.groupKey))throw new TypeError("[MachTable] Duplicate/invalid group key.");s.add(i.groupKey)}else if(i.groupKey!==void 0)throw new TypeError("[MachTable] Leaf routes cannot return group rows.")}return{rows:n.rows.map(i=>({...i})),rowCount:n.rowCount,revision:n.revision}}function B(n,e){return new Promise((t,r)=>{if(e.aborted){r(f());return}let o=()=>{clearTimeout(s),r(f())},s=setTimeout(()=>{e.removeEventListener("abort",o),t()},n);e.addEventListener("abort",o,{once:!0})})}function G(n,e){return new Promise((t,r)=>{let o=()=>r(f());if(n.then(t,r).finally(()=>e.removeEventListener("abort",o)),e.aborted){r(f());return}e.addEventListener("abort",o,{once:!0})})}function c(n){return JSON.stringify(n)}function z(n,e){return JSON.stringify([n,e])}function y(n,e){return n.length>=e.length&&e.every((t,r)=>n[r]===t)}var T=class{constructor(){this.selected=new Map;this.r=new Map;this.routes=new Map;this.excludedRoutes=new Map}d(e){let t=!1;for(let r=0;r<=e.length;r++){let o=c(e.slice(0,r));this.routes.has(o)&&(t=!0),this.excludedRoutes.has(o)&&(t=!1)}return t}nested(e,t,r=!1){return[...e.values()].some(o=>y(o,t)&&(!r||o.length>t.length))}get(e){if(e.groupKey===void 0)return this.selected.has(e.key)||!this.r.has(e.key)&&this.d(e.route)?"selected":"none";let t=[...e.route,e.groupKey];if(this.r.has(e.key))return this.d(t)?"partial":"none";let r=this.d(t)||this.selected.has(e.key);return(r?this.nested(this.r,t)||this.nested(this.excludedRoutes,t,!0):this.nested(this.selected,t)||this.nested(this.routes,t,!0))?"partial":r?"selected":"none"}S(e,t){for(let[r,o]of e)y(o,t)&&e.delete(r)}select(e,t,r){let o=c([...e.route,e.groupKey??e.id]);if(!(this.selected.has(e.key)||this.r.has(e.key)||this.routes.has(o)||this.excludedRoutes.has(o))&&this.selected.size+this.r.size+this.routes.size+this.excludedRoutes.size>=1e4)throw new RangeError("[MachTable] Server-side selection exceeds 10000 explicit rules; clear selection first.");if(e.groupKey!==void 0&&r==="descendants"){let i=[...e.route,e.groupKey];for(let a of[this.selected,this.r,this.routes,this.excludedRoutes])this.S(a,i);this.selected.delete(e.key),this.r.delete(e.key),t?this.routes.set(c(i),i):this.excludedRoutes.set(c(i),i);return}this.selected.delete(e.key),this.r.delete(e.key),t?this.selected.set(e.key,e.route):this.r.set(e.key,e.route)}clear(){this.selected.clear(),this.r.clear(),this.routes.clear(),this.excludedRoutes.clear()}snapshot(){return{selectedKeys:[...this.selected.keys()],excludedKeys:[...this.r.keys()],selectedRoutes:[...this.routes.values()].map(e=>[...e]),excludedRoutes:[...this.excludedRoutes.values()].map(e=>[...e])}}};var m=class extends Error{constructor(t,r){super("[MachTable] Server-side route revision changed; refresh before retrying the transaction.");this.expectedRevision=t;this.actualRevision=r;this.name="ServerSideVersionConflictError"}};var C=class{constructor(e){this.options=e;this.routes=new Map;this.e=new Map;this.indices=new Map;this.expanded=new Set;this.selection=new T;this.l=new Set;this.o=new Set;this.b=0;this.generation=0;this.revision=0;this.disposed=!1;this.u=0;this.snapshot=null;this.query=x(e.query??{}),this.blockSize=v(e.blockSize,100,1e3),this.cache=new w(v(e.maxBlocks,12,256),t=>this.onEvict(t),v(e.maxConcurrentRequests,4,16))}n(){if(this.disposed)throw f()}w(){if(this.u>=256)throw new RangeError("[MachTable] Server-side load queue limit reached (256).")}emit(e=!1){if(!this.disposed){this.snapshot=null,e&&this.revision++;for(let t of this.l)try{t()}catch(r){this.report(r,[])}}}report(e,t){if(e?.name!=="AbortError")try{this.options.onError?.(e,t)}catch{}}state(e){let t=R(e);if(t.length>this.query.rowGroupCols.length)throw new RangeError("[MachTable] Route exceeds configured grouping depth.");let r=c(t),o=this.routes.get(r);if(o)return this.routes.delete(r),this.routes.set(r,o),o;if(this.routes.size>=256){let i=[...this.routes].find(([a,d])=>a!=="[]"&&d.pending===0&&!this.expanded.has(a));if(!i)throw new RangeError("[MachTable] Server-side route metadata limit reached (256).");this.h(i[0]),this.routes.delete(i[0])}let s={route:t,startRow:0,endRow:0,rowCount:null,revision:null,loading:!1,error:null,generation:0,active:null,pending:0,requestVersion:0};return this.routes.set(r,s),s}onEvict(e){this.snapshot=null;let t=this.indices.get(e);if(!t)return;this.indices.delete(e),this.e.get(t.key)===t&&this.e.delete(t.key);let r=this.routes.get(t.route);r?.active===e&&(r.active=null)}h(e,t){for(let r of[...this.indices.values()])r.route!==e||r.index===t||(this.cache.invalidate(r.index),this.onEvict(r.index))}p(){let e=new Set;for(let[t,r]of this.routes)r.active!=null&&(t==="[]"||this.expanded.has(t))&&e.add(r.active);this.cache.retain(e)}block(e,t){let r=JSON.stringify([e,t]),o=this.e.get(r);if(o)return o;let s={index:++this.b,key:r,route:e,start:t};return this.e.set(r,s),this.indices.set(s.index,s),s}async fetch(e,t,r){let o=v(this.options.retryCount,1,5,0),s=this.query;for(let i=0;;i++){if(r.aborted)throw f();try{let a=await this.options.getRows({...s,route:[...e.route],startRow:t,endRow:t+this.blockSize,revision:e.revision,signal:r});if(r.aborted)throw f();return I(a,t,this.blockSize,e.route.length<s.rowGroupCols.length)}catch(a){if(r.aborted||i>=o)throw a;await B(Math.min(3e4,v(this.options.retryDelay,200,1e4,0)*2**i),r)}}}current(e,t,r,o){return!this.disposed&&r===this.generation&&e.generation===o&&this.cache.has(t.index)}async load(e=[],t=0,r){this.n(),this.w();let o=this.state(e),s=Math.floor(v(t,0,Number.MAX_SAFE_INTEGER,0)/this.blockSize)*this.blockSize,i=this.block(c(o.route),s),a=this.generation,d=o.generation,u=++o.requestVersion;this.u++,o.pending++,o.loading=!0,o.error=null,this.p(),this.emit();try{let l=await this.cache.load(i.index,async k=>({rows:[await this.fetch(o,s,k)]}),r,100);if(!this.current(o,i,a,d))throw f();if(u!==o.requestVersion)return;let h=l.rows[0];o.revision!=null&&o.revision!==h.revision&&(o.generation++,this.h(i.route,i.index)),o.revision=h.revision;let p=N(s,h.rowCount,this.blockSize);if(p!=null){await this.load(o.route,p,r);return}o.active=i.index,o.startRow=s,o.endRow=s+h.rows.length,o.rowCount=h.rowCount,o.revision=h.revision,this.p(),this.emit(!0),await this.m(o.route)}catch(l){throw this.x(o,a,d,u)&&(o.error=l?.name==="AbortError"?null:l,this.report(l,o.route)),l}finally{o.pending=Math.max(0,o.pending-1),this.u--,u===o.requestVersion&&(o.loading=!1),this.cache.has(i.index)||this.onEvict(i.index),a===this.generation&&this.emit()}}x(e,t,r,o){return!this.disposed&&t===this.generation&&e.generation===r&&o===e.requestVersion}async expand(e){this.n();let t=R(e),r=this.state(t),o=c(t);if(!this.expanded.has(o)&&this.expanded.size>=128)throw new RangeError("[MachTable] Expanded group limit reached (128).");this.expanded.add(o),this.emit(!0),r.active==null?await this.load(t,r.startRow):await this.m(t)}collapse(e){let t=R(e);for(let r of this.expanded)y(JSON.parse(r),t)&&this.expanded.delete(r);this.p(),this.emit(!0)}R(e){for(let[t,r]of this.routes)y(r.route,e)&&(r.generation++,r.active=null,r.revision=null,r.error=null,this.h(t))}async m(e){let t=this.routes.get(c(e)),r=t?.active==null?void 0:this.cache.peek(t.active)?.rows[0];if(!r)return;let o=r.rows.flatMap(s=>s.groupKey!==void 0&&this.expanded.has(c([...e,s.groupKey]))?[[...e,s.groupKey]]:[]);await Promise.all(o.map(s=>this.expand(s)))}async refresh(e=[]){this.n();let t=this.state(e);this.R(t.route),this.emit(!0),await this.load(t.route,t.startRow)}async setQuery(e){this.n();let t=x(e,this.query);if(JSON.stringify(t)!==JSON.stringify(this.query)){this.generation++,this.cache.purge(),this.e.clear(),this.indices.clear(),this.routes.clear(),this.expanded.clear();for(let r of this.o)r.abort();this.selection.clear(),this.query=t,this.emit(!0),await this.load()}}async transact(e){this.n();let t=this.state(e.route);if(t.revision!==e.expectedRevision)throw new m(e.expectedRevision,t.revision);if(!this.options.transact)throw new Error("[MachTable] A server-side transaction transport is required.");if(this.o.size>=v(this.options.maxConcurrentRequests,4,16))throw new RangeError("[MachTable] Too many active server-side transactions.");let r=new AbortController;this.o.add(r);let o=this.generation,s=t.generation;try{let i=await G(Promise.resolve().then(()=>{if(r.signal.aborted)throw f();return this.options.transact({...e,route:[...t.route],query:this.query,signal:r.signal})}),r.signal);if(r.signal.aborted||o!==this.generation||s!==t.generation)throw f();if(typeof i?.revision!="string"||!i.revision||i.revision.length>512)throw new TypeError("[MachTable] Transaction transport must return the committed revision.");await this.refresh([])}finally{this.o.delete(r)}}select(e,t,r="descendants"){this.n(),this.selection.select(e,t,r),this.emit()}getSelection(e){return this.selection.get(e)}clearSelection(){this.selection.clear(),this.emit()}getSnapshot(){if(this.snapshot)return this.snapshot;let e=[],t=r=>{let o=this.routes.get(c(r)),s=o?.active==null?void 0:this.cache.peek(o.active)?.rows[0];if(s)for(let i of s.rows){let a=i.groupKey!==void 0&&this.expanded.has(c([...r,i.groupKey]));e.push({...i,key:z(r,i.id),route:[...r],depth:r.length,expanded:a}),a&&t([...r,i.groupKey])}};return t([]),this.snapshot={rows:e,routes:[...this.routes.values()].map(({route:r,startRow:o,endRow:s,rowCount:i,revision:a,loading:d,error:u})=>({route:[...r],startRow:o,endRow:s,rowCount:i,revision:a,loading:d,error:u})),selection:this.selection.snapshot(),query:x(this.query),revision:this.revision,cachedBlockCount:this.cache.snapshot().cachedBlockCount},this.snapshot}subscribe(e){return this.n(),this.l.add(e),()=>this.l.delete(e)}dispose(){if(!this.disposed){this.disposed=!0,this.generation++,this.cache.purge();for(let e of this.o)e.abort();this.o.clear(),this.routes.clear(),this.e.clear(),this.indices.clear(),this.expanded.clear(),this.selection.clear(),this.l.clear(),this.snapshot=null}}};function O(n){return new C(n)}var ce=new Set(["__proto__","prototype","constructor"]);function he(n){return typeof n!="string"||n.length===0?!1:n.split(".").every(t=>t.length>0&&!ce.has(t))}function _(n,e){if(n==null||!he(e))return;if(e.indexOf(".")<0)return n[e];let r=n,o=0;for(;o<e.length;){if(r==null)return;let s=e.indexOf(".",o);if(s<0){r=r[e.slice(o)];break}r=r[e.slice(o,s)],o=s+1}return r}var pe=Symbol.for("mach-table.adapter.lifecycle.v1");function D(n){return!n.isDestroyed()&&(n[pe]?.canReplaceData()??!1)}function S(n,e,t=!1){let r=document.createElement("button");return r.type="button",r.className="mach-server-button",r.textContent=n,r.disabled=t,r.addEventListener("click",o=>{o.stopPropagation();try{Promise.resolve(e()).catch(()=>{})}catch{}}),r}function fe(n){return n?n.loading?"\u52A0\u8F7D\u4E2D\u2026":n.error?"\u52A0\u8F7D\u5931\u8D25":`${n.endRow>n.startRow?n.startRow+1:0}\u2013${n.endRow} / ${n.rowCount??"?"}`:"\u5C1A\u672A\u52A0\u8F7D"}function K(n,e){let t=n.getSnapshot().routes.find(s=>c(s.route)===c(e)),r=document.createElement("span");r.className="mach-server-paging";let o=document.createElement("span");return o.className="mach-server-range",o.textContent=fe(t),o.setAttribute("aria-live","polite"),r.append(o),r.append(S("\u4E0A\u4E00\u9875",()=>n.load(e,Math.max(0,(t?.startRow??0)-1)),!t||t.loading||t.startRow===0)),r.append(S("\u4E0B\u4E00\u9875",()=>n.load(e,t?.endRow??0),!t||t.loading||t.rowCount===null||t.endRow>=t.rowCount)),t?.error&&r.append(S("\u91CD\u8BD5",()=>n.refresh(e))),r}function j(n,e={}){return{colId:"__server_group",headerName:e.headerName??"\u670D\u52A1\u7AEF\u5206\u7EC4",width:e.width??420,minWidth:260,pinned:"left",sortable:!1,filter:!1,editable:!1,headerComponent:()=>{let t=document.createElement("div");t.className="mach-server-header";let r=()=>{t.replaceChildren(K(n,[]),S("\u5237\u65B0",()=>n.refresh()),S("\u6E05\u9664\u9009\u62E9",()=>n.clearSelection()))};return r(),{el:t,destroy:n.subscribe(r)}},cellRenderer:({data:t})=>{if(!t)return"";let r=document.createElement("div");r.className="mach-server-cell",r.style.paddingInlineStart=`${t.depth*16}px`;let o=document.createElement("input");o.type="checkbox";let s=n.getSelection(t);if(o.checked=s==="selected",o.indeterminate=s==="partial",o.setAttribute("aria-label",`\u9009\u62E9 ${t.groupKey??t.id}`),o.addEventListener("click",a=>{a.stopPropagation(),n.select(t,o.checked)}),r.append(o),t.groupKey!==void 0){let a=[...t.route,t.groupKey],d=S(t.expanded?"\u25BE":"\u25B8",()=>t.expanded?n.collapse(a):n.expand(a));d.setAttribute("aria-expanded",String(t.expanded)),d.setAttribute("aria-label",`${t.expanded?"\u6536\u8D77":"\u5C55\u5F00"} ${t.groupKey||"\u7A7A\u767D\u5206\u7EC4"}`),r.append(d)}let i=document.createElement("span");return i.className="mach-server-label",i.textContent=e.label?.(t)??t.groupKey??t.id,r.append(i),t.expanded&&t.groupKey!==void 0&&r.append(K(n,[...t.route,t.groupKey])),r}}}function Q(n,e={}){let t=e.colId??n;return{...e,colId:t,headerName:e.headerName??n,editable:!1,valueGetter:({data:r})=>r?.groupKey!==void 0&&r.aggValues&&Object.prototype.hasOwnProperty.call(r.aggValues,t)?r.aggValues[t]:_(r?.data,n)}}function ve(n,e){var r;let t=n.querySelectorAll(".mach-server-header button,.mach-server-cell button,.mach-server-cell input");for(let o of t)e?((r=o.dataset).serverWasDisabled??(r.serverWasDisabled=String(o.disabled)),o.disabled=!0):o.dataset.serverWasDisabled!==void 0&&(o.disabled=o.dataset.serverWasDisabled==="true",delete o.dataset.serverWasDisabled)}function L(n,e){let t=n.view.getRoot();if(!t)return;ve(t,e);let r=t.querySelector(".mach-server-sync-notice");if(!e){r?.remove(),delete t.dataset.serverPending;return}if(t.dataset.serverPending="true",r)return;let o=document.createElement("div");o.className="mach-server-sync-notice",o.setAttribute("role","status"),o.textContent="\u65B0\u6570\u636E\u7B49\u5F85\u663E\u793A\uFF1A\u8BF7\u5148\u4FDD\u5B58\u3001\u53D6\u6D88\u7F16\u8F91\u6216\u56DE\u6EDA\u4FEE\u6539",t.append(o)}function V(n,e){if(!D(n))throw new Error("[MachTable] Save or cancel grid edits before binding server-side data.");let t=!1,r=-1,o=!1,s=()=>{if(t||o||n.isDestroyed())return;let l=e.getSnapshot(),h=l.revision!==r&&!D(n);if(L(n,h),!h){t=!0;try{l.revision!==r&&(r=l.revision,n.rows.setData([...l.rows])),n.selection.setRows(l.rows.filter(p=>e.getSelection(p)==="selected"),!0),n.view.refreshCells()}finally{t=!1}}},i=()=>{t||o||e.setQuery({sortModel:n.sorting.getModel(),filterModel:n.filtering.getModel(),advancedFilterModel:n.filtering.getAdvancedModel(),quickFilterText:n.filtering.getQuickText()}).catch(()=>{})},a=()=>{e.getSnapshot().revision!==r&&s()};n.updateOptions({rowKey:l=>l.key,rowSelection:"multiple",manualFiltering:!0,manualSorting:!0,pagination:!1});let d=[e.subscribe(s),n.on("sortChanged",i),n.on("filterChanged",i),n.on("dirtyStateChanged",a),n.on("cellEditingStopped",a),n.on("rowEditingStopped",a),n.on("selectionChanged",()=>{if(t||o||e.getSnapshot().revision!==r)return;let l=new Set(n.selection.getIds()),h=e.getSnapshot().rows.filter(p=>l.has(p.key)!==(e.getSelection(p)==="selected"));for(let p of h)e.select(p,l.has(p.key))})],u=()=>{if(!o){o=!0;for(let l of d)l();L(n,!1),e.dispose()}};return d.push(n.on("gridDestroyed",u)),s(),e.setQuery({sortModel:n.sorting.getModel(),filterModel:n.filtering.getModel(),advancedFilterModel:n.filtering.getAdvancedModel(),quickFilterText:n.filtering.getQuickText()}).then(()=>e.getSnapshot().routes.length===0?e.load():void 0).catch(()=>{}),u}0&&(module.exports={ServerSideVersionConflictError,bindServerSideGrid,createServerSideGroupColumn,createServerSideStore,serverSideDataColumn});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.mach-server-header,.mach-server-cell,.mach-server-paging{display:flex;align-items:center;gap:6px;min-width:0;font:inherit;color:inherit}.mach-server-header{flex-wrap:wrap;gap:4px}.mach-server-cell{width:100%;box-sizing:border-box}.mach-server-cell input[type=checkbox]{flex:none;accent-color:var(--mach-primary,#2563eb);width:14px;height:14px;margin:0 2px}.mach-server-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:20px}.mach-server-paging{margin-inline-start:auto;flex:none;font-size:11px;gap:3px}.mach-server-range{font-variant-numeric:tabular-nums;opacity:.72;white-space:nowrap}.mach-server-button{font:inherit;font-size:11px;line-height:20px;min-width:22px;padding:0 5px;border:1px solid transparent;border-radius:4px;background:transparent;color:inherit;cursor:pointer;white-space:nowrap}.mach-server-button:hover:not(:disabled){background:var(--mach-row-hover-bg,rgba(128,140,160,.12));border-color:var(--mach-border-color,#d9e1eb)}.mach-server-button:focus-visible{outline:2px solid var(--mach-primary,#2563eb);outline-offset:1px}.mach-server-button:disabled{opacity:.35;cursor:default}.mach-server-sync-notice{position:absolute;inset-inline-start:8px;top:5px;z-index:15;max-width:calc(100% - 16px);box-sizing:border-box;padding:6px 10px;border:1px solid var(--mach-border-color,#d9e1eb);border-radius:5px;background:var(--mach-header-bg,#f4f7fb);color:var(--mach-header-fg,#344054);box-shadow:0 2px 8px #0f172a1f;font-size:12px;line-height:18px}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { S as SortModel, h as FilterModel, A as AdvancedFilterModel, b as GridApi, C as ColDef, i as FieldPath } from './api-pOhyuSQk.cjs';
|
|
2
|
+
|
|
3
|
+
interface ServerSideGroupColumn {
|
|
4
|
+
colId: string;
|
|
5
|
+
field?: string;
|
|
6
|
+
}
|
|
7
|
+
interface ServerSideValueColumn extends ServerSideGroupColumn {
|
|
8
|
+
aggFunc: string;
|
|
9
|
+
}
|
|
10
|
+
interface ServerSideQuery {
|
|
11
|
+
rowGroupCols: readonly ServerSideGroupColumn[];
|
|
12
|
+
valueCols: readonly ServerSideValueColumn[];
|
|
13
|
+
sortModel: SortModel;
|
|
14
|
+
filterModel: FilterModel;
|
|
15
|
+
advancedFilterModel: AdvancedFilterModel | null;
|
|
16
|
+
quickFilterText: string | null;
|
|
17
|
+
}
|
|
18
|
+
interface ServerSideRequest extends ServerSideQuery {
|
|
19
|
+
/** Group keys from root to parent; [] identifies the root sibling store. */
|
|
20
|
+
route: readonly string[];
|
|
21
|
+
startRow: number;
|
|
22
|
+
endRow: number;
|
|
23
|
+
revision: string | null;
|
|
24
|
+
signal: AbortSignal;
|
|
25
|
+
}
|
|
26
|
+
interface ServerSideRow<TData> {
|
|
27
|
+
/** Unique among siblings, independent from the row's current offset. */
|
|
28
|
+
id: string;
|
|
29
|
+
data: TData;
|
|
30
|
+
/** Present only for groups; appended to the parent route on expansion. */
|
|
31
|
+
groupKey?: string;
|
|
32
|
+
childCount?: number;
|
|
33
|
+
aggValues?: Readonly<Record<string, unknown>>;
|
|
34
|
+
}
|
|
35
|
+
interface ServerSideResult<TData> {
|
|
36
|
+
rows: readonly ServerSideRow<TData>[];
|
|
37
|
+
/** Total sibling count for this route, never the flattened tree total. */
|
|
38
|
+
rowCount: number;
|
|
39
|
+
revision: string;
|
|
40
|
+
}
|
|
41
|
+
interface ServerSideTransaction<TData> {
|
|
42
|
+
route: readonly string[];
|
|
43
|
+
expectedRevision: string;
|
|
44
|
+
add?: readonly ServerSideRow<TData>[];
|
|
45
|
+
update?: readonly ServerSideRow<TData>[];
|
|
46
|
+
remove?: readonly string[];
|
|
47
|
+
}
|
|
48
|
+
interface ServerSideProjection<TData> extends ServerSideRow<TData> {
|
|
49
|
+
key: string;
|
|
50
|
+
route: readonly string[];
|
|
51
|
+
depth: number;
|
|
52
|
+
expanded: boolean;
|
|
53
|
+
}
|
|
54
|
+
interface ServerSideRouteSnapshot {
|
|
55
|
+
route: readonly string[];
|
|
56
|
+
startRow: number;
|
|
57
|
+
endRow: number;
|
|
58
|
+
rowCount: number | null;
|
|
59
|
+
revision: string | null;
|
|
60
|
+
loading: boolean;
|
|
61
|
+
error: unknown | null;
|
|
62
|
+
}
|
|
63
|
+
interface ServerSideSelection {
|
|
64
|
+
selectedKeys: readonly string[];
|
|
65
|
+
/** Descendant intent includes unloaded rows in these group routes. */
|
|
66
|
+
selectedRoutes: readonly (readonly string[])[];
|
|
67
|
+
excludedRoutes: readonly (readonly string[])[];
|
|
68
|
+
excludedKeys: readonly string[];
|
|
69
|
+
}
|
|
70
|
+
interface ServerSideSnapshot<TData> {
|
|
71
|
+
/** Only visible active pages; this is not a full server-side export. */
|
|
72
|
+
rows: readonly ServerSideProjection<TData>[];
|
|
73
|
+
routes: readonly ServerSideRouteSnapshot[];
|
|
74
|
+
selection: ServerSideSelection;
|
|
75
|
+
query: ServerSideQuery;
|
|
76
|
+
revision: number;
|
|
77
|
+
cachedBlockCount: number;
|
|
78
|
+
}
|
|
79
|
+
interface ServerSideStoreOptions<TData> {
|
|
80
|
+
getRows(request: ServerSideRequest): Promise<ServerSideResult<TData>>;
|
|
81
|
+
/** Must atomically compare expectedRevision and return the committed revision. */
|
|
82
|
+
transact?(transaction: ServerSideTransaction<TData> & {
|
|
83
|
+
query: ServerSideQuery;
|
|
84
|
+
signal: AbortSignal;
|
|
85
|
+
}): Promise<{
|
|
86
|
+
revision: string;
|
|
87
|
+
}>;
|
|
88
|
+
query?: Partial<ServerSideQuery>;
|
|
89
|
+
blockSize?: number;
|
|
90
|
+
maxBlocks?: number;
|
|
91
|
+
maxConcurrentRequests?: number;
|
|
92
|
+
retryCount?: number;
|
|
93
|
+
retryDelay?: number;
|
|
94
|
+
onError?(error: unknown, route: readonly string[]): void;
|
|
95
|
+
}
|
|
96
|
+
interface ServerSideStore<TData> {
|
|
97
|
+
load(route?: readonly string[], startRow?: number, signal?: AbortSignal): Promise<void>;
|
|
98
|
+
expand(route: readonly string[]): Promise<void>;
|
|
99
|
+
collapse(route: readonly string[]): void;
|
|
100
|
+
refresh(route?: readonly string[]): Promise<void>;
|
|
101
|
+
setQuery(query: Partial<ServerSideQuery>): Promise<void>;
|
|
102
|
+
transact(transaction: ServerSideTransaction<TData>): Promise<void>;
|
|
103
|
+
select(row: ServerSideProjection<TData>, selected: boolean, mode?: "self" | "descendants"): void;
|
|
104
|
+
getSelection(row: ServerSideProjection<TData>): "selected" | "partial" | "none";
|
|
105
|
+
clearSelection(): void;
|
|
106
|
+
getSnapshot(): ServerSideSnapshot<TData>;
|
|
107
|
+
subscribe(listener: () => void): () => void;
|
|
108
|
+
dispose(): void;
|
|
109
|
+
}
|
|
110
|
+
declare class ServerSideVersionConflictError extends Error {
|
|
111
|
+
readonly expectedRevision: string;
|
|
112
|
+
readonly actualRevision: string | null;
|
|
113
|
+
constructor(expectedRevision: string, actualRevision: string | null);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Hierarchical route paging, deliberately separate from the default row model. */
|
|
117
|
+
declare function createServerSideStore<T>(options: ServerSideStoreOptions<T>): ServerSideStore<T>;
|
|
118
|
+
|
|
119
|
+
type Row<T> = ServerSideProjection<T>;
|
|
120
|
+
interface ServerSideGroupColumnOptions<T> {
|
|
121
|
+
headerName?: string;
|
|
122
|
+
width?: number;
|
|
123
|
+
label?(row: Row<T>): string;
|
|
124
|
+
}
|
|
125
|
+
/** Accessible group, hierarchy-selection and route-paging controls; no synthetic data rows. */
|
|
126
|
+
declare function createServerSideGroupColumn<T>(store: ServerSideStore<T>, options?: ServerSideGroupColumnOptions<T>): ColDef<Row<T>>;
|
|
127
|
+
/** Aggregate values take precedence on group rows; business data stays under data. */
|
|
128
|
+
declare function serverSideDataColumn<T>(field: FieldPath<T>, options?: Omit<ColDef<Row<T>>, "field" | "valueGetter" | "editable">): ColDef<Row<T>>;
|
|
129
|
+
/** One-way projection updates; guarded grid event listeners only change the server query/selection. */
|
|
130
|
+
declare function bindServerSideGrid<T>(api: GridApi<Row<T>>, store: ServerSideStore<T>): () => void;
|
|
131
|
+
|
|
132
|
+
export { type ServerSideGroupColumn, type ServerSideGroupColumnOptions, type ServerSideProjection, type ServerSideQuery, type ServerSideRequest, type ServerSideResult, type ServerSideRouteSnapshot, type ServerSideRow, type ServerSideSelection, type ServerSideSnapshot, type ServerSideStore, type ServerSideStoreOptions, type ServerSideTransaction, type ServerSideValueColumn, ServerSideVersionConflictError, bindServerSideGrid, createServerSideGroupColumn, createServerSideStore, serverSideDataColumn };
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { S as SortModel, h as FilterModel, A as AdvancedFilterModel, b as GridApi, C as ColDef, i as FieldPath } from './api-pOhyuSQk.js';
|
|
2
|
+
|
|
3
|
+
interface ServerSideGroupColumn {
|
|
4
|
+
colId: string;
|
|
5
|
+
field?: string;
|
|
6
|
+
}
|
|
7
|
+
interface ServerSideValueColumn extends ServerSideGroupColumn {
|
|
8
|
+
aggFunc: string;
|
|
9
|
+
}
|
|
10
|
+
interface ServerSideQuery {
|
|
11
|
+
rowGroupCols: readonly ServerSideGroupColumn[];
|
|
12
|
+
valueCols: readonly ServerSideValueColumn[];
|
|
13
|
+
sortModel: SortModel;
|
|
14
|
+
filterModel: FilterModel;
|
|
15
|
+
advancedFilterModel: AdvancedFilterModel | null;
|
|
16
|
+
quickFilterText: string | null;
|
|
17
|
+
}
|
|
18
|
+
interface ServerSideRequest extends ServerSideQuery {
|
|
19
|
+
/** Group keys from root to parent; [] identifies the root sibling store. */
|
|
20
|
+
route: readonly string[];
|
|
21
|
+
startRow: number;
|
|
22
|
+
endRow: number;
|
|
23
|
+
revision: string | null;
|
|
24
|
+
signal: AbortSignal;
|
|
25
|
+
}
|
|
26
|
+
interface ServerSideRow<TData> {
|
|
27
|
+
/** Unique among siblings, independent from the row's current offset. */
|
|
28
|
+
id: string;
|
|
29
|
+
data: TData;
|
|
30
|
+
/** Present only for groups; appended to the parent route on expansion. */
|
|
31
|
+
groupKey?: string;
|
|
32
|
+
childCount?: number;
|
|
33
|
+
aggValues?: Readonly<Record<string, unknown>>;
|
|
34
|
+
}
|
|
35
|
+
interface ServerSideResult<TData> {
|
|
36
|
+
rows: readonly ServerSideRow<TData>[];
|
|
37
|
+
/** Total sibling count for this route, never the flattened tree total. */
|
|
38
|
+
rowCount: number;
|
|
39
|
+
revision: string;
|
|
40
|
+
}
|
|
41
|
+
interface ServerSideTransaction<TData> {
|
|
42
|
+
route: readonly string[];
|
|
43
|
+
expectedRevision: string;
|
|
44
|
+
add?: readonly ServerSideRow<TData>[];
|
|
45
|
+
update?: readonly ServerSideRow<TData>[];
|
|
46
|
+
remove?: readonly string[];
|
|
47
|
+
}
|
|
48
|
+
interface ServerSideProjection<TData> extends ServerSideRow<TData> {
|
|
49
|
+
key: string;
|
|
50
|
+
route: readonly string[];
|
|
51
|
+
depth: number;
|
|
52
|
+
expanded: boolean;
|
|
53
|
+
}
|
|
54
|
+
interface ServerSideRouteSnapshot {
|
|
55
|
+
route: readonly string[];
|
|
56
|
+
startRow: number;
|
|
57
|
+
endRow: number;
|
|
58
|
+
rowCount: number | null;
|
|
59
|
+
revision: string | null;
|
|
60
|
+
loading: boolean;
|
|
61
|
+
error: unknown | null;
|
|
62
|
+
}
|
|
63
|
+
interface ServerSideSelection {
|
|
64
|
+
selectedKeys: readonly string[];
|
|
65
|
+
/** Descendant intent includes unloaded rows in these group routes. */
|
|
66
|
+
selectedRoutes: readonly (readonly string[])[];
|
|
67
|
+
excludedRoutes: readonly (readonly string[])[];
|
|
68
|
+
excludedKeys: readonly string[];
|
|
69
|
+
}
|
|
70
|
+
interface ServerSideSnapshot<TData> {
|
|
71
|
+
/** Only visible active pages; this is not a full server-side export. */
|
|
72
|
+
rows: readonly ServerSideProjection<TData>[];
|
|
73
|
+
routes: readonly ServerSideRouteSnapshot[];
|
|
74
|
+
selection: ServerSideSelection;
|
|
75
|
+
query: ServerSideQuery;
|
|
76
|
+
revision: number;
|
|
77
|
+
cachedBlockCount: number;
|
|
78
|
+
}
|
|
79
|
+
interface ServerSideStoreOptions<TData> {
|
|
80
|
+
getRows(request: ServerSideRequest): Promise<ServerSideResult<TData>>;
|
|
81
|
+
/** Must atomically compare expectedRevision and return the committed revision. */
|
|
82
|
+
transact?(transaction: ServerSideTransaction<TData> & {
|
|
83
|
+
query: ServerSideQuery;
|
|
84
|
+
signal: AbortSignal;
|
|
85
|
+
}): Promise<{
|
|
86
|
+
revision: string;
|
|
87
|
+
}>;
|
|
88
|
+
query?: Partial<ServerSideQuery>;
|
|
89
|
+
blockSize?: number;
|
|
90
|
+
maxBlocks?: number;
|
|
91
|
+
maxConcurrentRequests?: number;
|
|
92
|
+
retryCount?: number;
|
|
93
|
+
retryDelay?: number;
|
|
94
|
+
onError?(error: unknown, route: readonly string[]): void;
|
|
95
|
+
}
|
|
96
|
+
interface ServerSideStore<TData> {
|
|
97
|
+
load(route?: readonly string[], startRow?: number, signal?: AbortSignal): Promise<void>;
|
|
98
|
+
expand(route: readonly string[]): Promise<void>;
|
|
99
|
+
collapse(route: readonly string[]): void;
|
|
100
|
+
refresh(route?: readonly string[]): Promise<void>;
|
|
101
|
+
setQuery(query: Partial<ServerSideQuery>): Promise<void>;
|
|
102
|
+
transact(transaction: ServerSideTransaction<TData>): Promise<void>;
|
|
103
|
+
select(row: ServerSideProjection<TData>, selected: boolean, mode?: "self" | "descendants"): void;
|
|
104
|
+
getSelection(row: ServerSideProjection<TData>): "selected" | "partial" | "none";
|
|
105
|
+
clearSelection(): void;
|
|
106
|
+
getSnapshot(): ServerSideSnapshot<TData>;
|
|
107
|
+
subscribe(listener: () => void): () => void;
|
|
108
|
+
dispose(): void;
|
|
109
|
+
}
|
|
110
|
+
declare class ServerSideVersionConflictError extends Error {
|
|
111
|
+
readonly expectedRevision: string;
|
|
112
|
+
readonly actualRevision: string | null;
|
|
113
|
+
constructor(expectedRevision: string, actualRevision: string | null);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Hierarchical route paging, deliberately separate from the default row model. */
|
|
117
|
+
declare function createServerSideStore<T>(options: ServerSideStoreOptions<T>): ServerSideStore<T>;
|
|
118
|
+
|
|
119
|
+
type Row<T> = ServerSideProjection<T>;
|
|
120
|
+
interface ServerSideGroupColumnOptions<T> {
|
|
121
|
+
headerName?: string;
|
|
122
|
+
width?: number;
|
|
123
|
+
label?(row: Row<T>): string;
|
|
124
|
+
}
|
|
125
|
+
/** Accessible group, hierarchy-selection and route-paging controls; no synthetic data rows. */
|
|
126
|
+
declare function createServerSideGroupColumn<T>(store: ServerSideStore<T>, options?: ServerSideGroupColumnOptions<T>): ColDef<Row<T>>;
|
|
127
|
+
/** Aggregate values take precedence on group rows; business data stays under data. */
|
|
128
|
+
declare function serverSideDataColumn<T>(field: FieldPath<T>, options?: Omit<ColDef<Row<T>>, "field" | "valueGetter" | "editable">): ColDef<Row<T>>;
|
|
129
|
+
/** One-way projection updates; guarded grid event listeners only change the server query/selection. */
|
|
130
|
+
declare function bindServerSideGrid<T>(api: GridApi<Row<T>>, store: ServerSideStore<T>): () => void;
|
|
131
|
+
|
|
132
|
+
export { type ServerSideGroupColumn, type ServerSideGroupColumnOptions, type ServerSideProjection, type ServerSideQuery, type ServerSideRequest, type ServerSideResult, type ServerSideRouteSnapshot, type ServerSideRow, type ServerSideSelection, type ServerSideSnapshot, type ServerSideStore, type ServerSideStoreOptions, type ServerSideTransaction, type ServerSideValueColumn, ServerSideVersionConflictError, bindServerSideGrid, createServerSideGroupColumn, createServerSideStore, serverSideDataColumn };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function g(n){if(n.reason instanceof Error)return n.reason;let e=new Error(typeof n.reason=="string"?n.reason:"Block request aborted");return e.name="AbortError",e}function b(n){return Number.isFinite(n)?Math.max(1,Math.trunc(n)):1}var w=class{constructor(e,t,r=4){this.maxBlocks=e;this.onEvict=t;this.maxConcurrentRequests=r;this.e=new Map;this.t=new Map;this.f=0;this.generation=0;this.hitCount=0;this.missCount=0;this.evictionCount=0;this.i=0;this.s=new Set;this.maxBlocks=b(e),this.maxConcurrentRequests=b(r)}configure(e,t=this.maxConcurrentRequests){this.maxBlocks=b(e),this.maxConcurrentRequests=b(t),this.c(),this.a()}retain(e){this.s=e,this.c()}peek(e){let t=this.e.get(e);if(t)return t.touchedAt=++this.f,t}has(e){return this.e.has(e)}invalidate(e){let t=this.t.get(e);t&&(this.t.delete(e),t.controller.abort(),t.state==="queued"&&t.reject(g(t.controller.signal)));let r=this.e.get(e);r&&(this.e.delete(e),this.onEvict?.(e,r))}load(e,t,r,o=0){if(r?.aborted)return Promise.reject(g(r));let s=this.peek(e);if(s)return this.hitCount++,Promise.resolve(s);let i=this.t.get(e);if(i)return this.hitCount++,i.priority=Math.max(i.priority,o),this.a(),this.v(e,i,r);this.missCount++;let a=new AbortController,d,u,l=new Promise((k,K)=>{d=k,u=K}),h={controller:a,promise:l,consumers:0,loader:t,priority:o,state:"queued",resolve:d,reject:u};this.t.set(e,h);let p=this.v(e,h,r);return this.a(),p}purge(){this.generation++,this.s.clear();for(let e of this.t.values())e.controller.abort(),e.state==="queued"&&e.reject(g(e.controller.signal));this.t.clear();for(let[e,t]of this.e)this.onEvict?.(e,t);this.e.clear()}snapshot(){let e=0,t=0;for(let r of this.e.values())e+=r.rows.length;for(let r of this.t.values())r.state==="active"&&t++;return{cachedBlockCount:this.e.size,loadingBlockCount:this.t.size,activeRequestCount:t,queuedRequestCount:Math.max(0,this.t.size-t),cachedRowCount:e,hitCount:this.hitCount,missCount:this.missCount,evictionCount:this.evictionCount}}a(){for(;this.i<this.maxConcurrentRequests;){let e,t;for(let[r,o]of this.t)o.state!=="queued"||o.controller.signal.aborted||(!t||o.priority>t.priority)&&(e=r,t=o);if(e==null||!t)return;this.g(e,t)}}g(e,t){t.state="active",this.i++;let r=this.generation;this.y(t).then(o=>{r===this.generation&&!t.controller.signal.aborted&&(this.e.set(e,{rows:o.rows,...o.lastRow==null?{}:{lastRow:o.lastRow},touchedAt:++this.f}),this.c()),t.resolve(o)},t.reject).finally(()=>{this.i=Math.max(0,this.i-1),this.t.get(e)===t&&this.t.delete(e),this.a()})}y(e){let{signal:t}=e.controller;return t.aborted?Promise.reject(g(t)):new Promise((r,o)=>{let s=()=>o(g(t));t.addEventListener("abort",s,{once:!0}),Promise.resolve().then(()=>e.loader(t)).then(r,o).finally(()=>{t.removeEventListener("abort",s)})})}v(e,t,r){return t.consumers++,new Promise((o,s)=>{let i=!1,a=u=>{i||(i=!0,r?.removeEventListener("abort",d),t.consumers=Math.max(0,t.consumers-1),u())},d=()=>a(()=>{t.consumers===0&&this.t.get(e)===t&&(this.t.delete(e),t.controller.abort(r?.reason),t.state==="queued"&&t.reject(g(t.controller.signal))),s(g(r))});r?.addEventListener("abort",d,{once:!0}),t.promise.then(u=>a(()=>o(u)),u=>a(()=>s(u instanceof Error?u:new Error(String(u??"Block request failed")))))})}c(){let e=Math.max(this.maxBlocks,this.s.size+1);for(;this.e.size>e;){let t=-1,r=Number.POSITIVE_INFINITY;for(let[s,i]of this.e)this.s.has(s)||i.touchedAt<r&&(t=s,r=i.touchedAt);if(t<0)return;let o=this.e.get(t);this.e.delete(t),this.evictionCount++,o&&this.onEvict?.(t,o)}}};var L=new Set(["contains","notContains","equals","notEquals","startsWith","endsWith","blank","notBlank"]),j=new Set(["equals","notEquals","lessThan","lessThanOrEqual","greaterThan","greaterThanOrEqual","inRange","blank","notBlank"]),Q=new Set(["equals","notEquals","lessThan","greaterThan","inRange","blank","notBlank"]);function V(n){return n==null||typeof n=="string"||typeof n=="number"&&Number.isFinite(n)}function X(n){return n==="text"?L:n==="number"?j:Q}function H(n,e,t){if(n==null||typeof n!="object")return null;let r=n;return typeof r.match!="string"||!t.has(r.match)?null:{match:r.match,...W(r,e)}}function W(n,e){let t=e==="number"?D(n.value):typeof n.value=="string"?n.value:void 0,r=e==="number"?D(n.value2):typeof n.value2=="string"?n.value2:void 0;return{...t!==void 0?{value:t}:{},...r!==void 0?{value2:r}:{}}}function D(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function $(n,e){let t=[],r=X(e);for(let o of n.slice(0,20)){let s=H(o,e,r);s&&t.push(s)}return t}function M(n){if(n==null||typeof n!="object")return null;let e=n;return e.type==="set"?Array.isArray(e.values)?{type:"set",values:e.values.filter(V).slice(0,2e3)}:null:e.type!=="text"&&e.type!=="number"&&e.type!=="date"||!Array.isArray(e.conditions)?null:{type:e.type,...e.operator==="or"||e.operator==="and"?{operator:e.operator}:{},conditions:$(e.conditions,e.type)}}function J(n,e){if(typeof n.colId!="string"||!n.colId.trim())return null;let t=n.colId.trim();if(e.validColumnIds?.has(t)===!1)return null;let r=M(n.filter);return r?{kind:"condition",colId:t,filter:r}:null}function U(n,e,t){if(!Array.isArray(n.children))return null;let r=[];for(let o of n.children){let s=E(o,e+1,t);s&&r.push(s)}return r.length===0?null:{kind:"group",operator:n.operator==="or"?"or":"and",children:r,...n.not===!0?{not:!0}:{}}}function Y(n,e,t){return e<=16&&t.nodes<512&&n!=null&&typeof n=="object"}function E(n,e,t){if(!Y(n,e,t)||t.ancestors.has(n))return null;t.ancestors.add(n),t.nodes++;let r=n,o=r.kind==="condition"?J(r,t):r.kind==="group"?U(r,e,t):null;return t.ancestors.delete(n),o}function P(n,e){if(n==null||typeof n!="object")return null;let t=n;if(t.version!==1||t.root==null)return null;let r=E(t.root,0,{ancestors:new WeakSet,nodes:0,validColumnIds:e});return r?{version:1,root:r}:null}function q(n,e){if(n==null||typeof n!="object"||Array.isArray(n))return{};let t={};for(let[r,o]of Object.entries(n).slice(0,2e3)){let s=r.trim();if(!s||e?.has(s)===!1)continue;let i=M(o);i&&(t[s]=i)}return t}function f(){let n=new Error("[MachTable] Server-side operation cancelled or replaced.");return n.name="AbortError",n}function v(n,e,t,r=1){return n!=null&&Number.isFinite(n)?Math.max(r,Math.min(t,Math.floor(n))):e}function R(n){if(!Array.isArray(n)||n.length>16||n.some(e=>typeof e!="string"||e.length>512))throw new TypeError("[MachTable] Invalid server-side group route.");return[...n]}function x(n,e){let t={...e,...n},r=t.rowGroupCols??[],o=t.valueCols??[];if(r.length>16||o.length>128)throw new RangeError("[MachTable] Server-side query exceeds group/aggregate column limits.");if([...r,...o].some(i=>typeof i.colId!="string"||!i.colId||i.colId.length>512))throw new TypeError("[MachTable] Invalid server-side query column.");return{rowGroupCols:r.map(i=>({colId:i.colId,...i.field?{field:i.field}:{}})),valueCols:o.map(i=>({colId:i.colId,aggFunc:i.aggFunc,...i.field?{field:i.field}:{}})),sortModel:(t.sortModel??[]).slice(0,2e3).filter(i=>i.direction==="asc"||i.direction==="desc").map(i=>({...i})),filterModel:q(t.filterModel),advancedFilterModel:P(t.advancedFilterModel),quickFilterText:t.quickFilterText?.slice(0,1e4)||null}}function Z(n,e,t){if(!n||!Array.isArray(n.rows)||n.rows.length>t||!Number.isInteger(n.rowCount)||n.rowCount<0||n.rows.length>0&&n.rowCount<e+n.rows.length||typeof n.revision!="string"||!n.revision||n.revision.length>512)throw new TypeError("[MachTable] Invalid server-side route response.")}function F(n,e,t){return e>0&&n>=e?Math.floor((e-1)/t)*t:null}function N(n,e,t,r){Z(n,e,t);let o=new Set,s=new Set;for(let i of n.rows){if(typeof i.id!="string"||!i.id||i.id.length>512||o.has(i.id))throw new TypeError("[MachTable] Duplicate/invalid server-side row ID.");if(o.add(i.id),r){if(typeof i.groupKey!="string"||i.groupKey.length>512||s.has(i.groupKey))throw new TypeError("[MachTable] Duplicate/invalid group key.");s.add(i.groupKey)}else if(i.groupKey!==void 0)throw new TypeError("[MachTable] Leaf routes cannot return group rows.")}return{rows:n.rows.map(i=>({...i})),rowCount:n.rowCount,revision:n.revision}}function I(n,e){return new Promise((t,r)=>{if(e.aborted){r(f());return}let o=()=>{clearTimeout(s),r(f())},s=setTimeout(()=>{e.removeEventListener("abort",o),t()},n);e.addEventListener("abort",o,{once:!0})})}function B(n,e){return new Promise((t,r)=>{let o=()=>r(f());if(n.then(t,r).finally(()=>e.removeEventListener("abort",o)),e.aborted){r(f());return}e.addEventListener("abort",o,{once:!0})})}function c(n){return JSON.stringify(n)}function G(n,e){return JSON.stringify([n,e])}function S(n,e){return n.length>=e.length&&e.every((t,r)=>n[r]===t)}var T=class{constructor(){this.selected=new Map;this.r=new Map;this.routes=new Map;this.excludedRoutes=new Map}d(e){let t=!1;for(let r=0;r<=e.length;r++){let o=c(e.slice(0,r));this.routes.has(o)&&(t=!0),this.excludedRoutes.has(o)&&(t=!1)}return t}nested(e,t,r=!1){return[...e.values()].some(o=>S(o,t)&&(!r||o.length>t.length))}get(e){if(e.groupKey===void 0)return this.selected.has(e.key)||!this.r.has(e.key)&&this.d(e.route)?"selected":"none";let t=[...e.route,e.groupKey];if(this.r.has(e.key))return this.d(t)?"partial":"none";let r=this.d(t)||this.selected.has(e.key);return(r?this.nested(this.r,t)||this.nested(this.excludedRoutes,t,!0):this.nested(this.selected,t)||this.nested(this.routes,t,!0))?"partial":r?"selected":"none"}S(e,t){for(let[r,o]of e)S(o,t)&&e.delete(r)}select(e,t,r){let o=c([...e.route,e.groupKey??e.id]);if(!(this.selected.has(e.key)||this.r.has(e.key)||this.routes.has(o)||this.excludedRoutes.has(o))&&this.selected.size+this.r.size+this.routes.size+this.excludedRoutes.size>=1e4)throw new RangeError("[MachTable] Server-side selection exceeds 10000 explicit rules; clear selection first.");if(e.groupKey!==void 0&&r==="descendants"){let i=[...e.route,e.groupKey];for(let a of[this.selected,this.r,this.routes,this.excludedRoutes])this.S(a,i);this.selected.delete(e.key),this.r.delete(e.key),t?this.routes.set(c(i),i):this.excludedRoutes.set(c(i),i);return}this.selected.delete(e.key),this.r.delete(e.key),t?this.selected.set(e.key,e.route):this.r.set(e.key,e.route)}clear(){this.selected.clear(),this.r.clear(),this.routes.clear(),this.excludedRoutes.clear()}snapshot(){return{selectedKeys:[...this.selected.keys()],excludedKeys:[...this.r.keys()],selectedRoutes:[...this.routes.values()].map(e=>[...e]),excludedRoutes:[...this.excludedRoutes.values()].map(e=>[...e])}}};var y=class extends Error{constructor(t,r){super("[MachTable] Server-side route revision changed; refresh before retrying the transaction.");this.expectedRevision=t;this.actualRevision=r;this.name="ServerSideVersionConflictError"}};var A=class{constructor(e){this.options=e;this.routes=new Map;this.e=new Map;this.indices=new Map;this.expanded=new Set;this.selection=new T;this.l=new Set;this.o=new Set;this.b=0;this.generation=0;this.revision=0;this.disposed=!1;this.u=0;this.snapshot=null;this.query=x(e.query??{}),this.blockSize=v(e.blockSize,100,1e3),this.cache=new w(v(e.maxBlocks,12,256),t=>this.onEvict(t),v(e.maxConcurrentRequests,4,16))}n(){if(this.disposed)throw f()}w(){if(this.u>=256)throw new RangeError("[MachTable] Server-side load queue limit reached (256).")}emit(e=!1){if(!this.disposed){this.snapshot=null,e&&this.revision++;for(let t of this.l)try{t()}catch(r){this.report(r,[])}}}report(e,t){if(e?.name!=="AbortError")try{this.options.onError?.(e,t)}catch{}}state(e){let t=R(e);if(t.length>this.query.rowGroupCols.length)throw new RangeError("[MachTable] Route exceeds configured grouping depth.");let r=c(t),o=this.routes.get(r);if(o)return this.routes.delete(r),this.routes.set(r,o),o;if(this.routes.size>=256){let i=[...this.routes].find(([a,d])=>a!=="[]"&&d.pending===0&&!this.expanded.has(a));if(!i)throw new RangeError("[MachTable] Server-side route metadata limit reached (256).");this.h(i[0]),this.routes.delete(i[0])}let s={route:t,startRow:0,endRow:0,rowCount:null,revision:null,loading:!1,error:null,generation:0,active:null,pending:0,requestVersion:0};return this.routes.set(r,s),s}onEvict(e){this.snapshot=null;let t=this.indices.get(e);if(!t)return;this.indices.delete(e),this.e.get(t.key)===t&&this.e.delete(t.key);let r=this.routes.get(t.route);r?.active===e&&(r.active=null)}h(e,t){for(let r of[...this.indices.values()])r.route!==e||r.index===t||(this.cache.invalidate(r.index),this.onEvict(r.index))}p(){let e=new Set;for(let[t,r]of this.routes)r.active!=null&&(t==="[]"||this.expanded.has(t))&&e.add(r.active);this.cache.retain(e)}block(e,t){let r=JSON.stringify([e,t]),o=this.e.get(r);if(o)return o;let s={index:++this.b,key:r,route:e,start:t};return this.e.set(r,s),this.indices.set(s.index,s),s}async fetch(e,t,r){let o=v(this.options.retryCount,1,5,0),s=this.query;for(let i=0;;i++){if(r.aborted)throw f();try{let a=await this.options.getRows({...s,route:[...e.route],startRow:t,endRow:t+this.blockSize,revision:e.revision,signal:r});if(r.aborted)throw f();return N(a,t,this.blockSize,e.route.length<s.rowGroupCols.length)}catch(a){if(r.aborted||i>=o)throw a;await I(Math.min(3e4,v(this.options.retryDelay,200,1e4,0)*2**i),r)}}}current(e,t,r,o){return!this.disposed&&r===this.generation&&e.generation===o&&this.cache.has(t.index)}async load(e=[],t=0,r){this.n(),this.w();let o=this.state(e),s=Math.floor(v(t,0,Number.MAX_SAFE_INTEGER,0)/this.blockSize)*this.blockSize,i=this.block(c(o.route),s),a=this.generation,d=o.generation,u=++o.requestVersion;this.u++,o.pending++,o.loading=!0,o.error=null,this.p(),this.emit();try{let l=await this.cache.load(i.index,async k=>({rows:[await this.fetch(o,s,k)]}),r,100);if(!this.current(o,i,a,d))throw f();if(u!==o.requestVersion)return;let h=l.rows[0];o.revision!=null&&o.revision!==h.revision&&(o.generation++,this.h(i.route,i.index)),o.revision=h.revision;let p=F(s,h.rowCount,this.blockSize);if(p!=null){await this.load(o.route,p,r);return}o.active=i.index,o.startRow=s,o.endRow=s+h.rows.length,o.rowCount=h.rowCount,o.revision=h.revision,this.p(),this.emit(!0),await this.m(o.route)}catch(l){throw this.x(o,a,d,u)&&(o.error=l?.name==="AbortError"?null:l,this.report(l,o.route)),l}finally{o.pending=Math.max(0,o.pending-1),this.u--,u===o.requestVersion&&(o.loading=!1),this.cache.has(i.index)||this.onEvict(i.index),a===this.generation&&this.emit()}}x(e,t,r,o){return!this.disposed&&t===this.generation&&e.generation===r&&o===e.requestVersion}async expand(e){this.n();let t=R(e),r=this.state(t),o=c(t);if(!this.expanded.has(o)&&this.expanded.size>=128)throw new RangeError("[MachTable] Expanded group limit reached (128).");this.expanded.add(o),this.emit(!0),r.active==null?await this.load(t,r.startRow):await this.m(t)}collapse(e){let t=R(e);for(let r of this.expanded)S(JSON.parse(r),t)&&this.expanded.delete(r);this.p(),this.emit(!0)}R(e){for(let[t,r]of this.routes)S(r.route,e)&&(r.generation++,r.active=null,r.revision=null,r.error=null,this.h(t))}async m(e){let t=this.routes.get(c(e)),r=t?.active==null?void 0:this.cache.peek(t.active)?.rows[0];if(!r)return;let o=r.rows.flatMap(s=>s.groupKey!==void 0&&this.expanded.has(c([...e,s.groupKey]))?[[...e,s.groupKey]]:[]);await Promise.all(o.map(s=>this.expand(s)))}async refresh(e=[]){this.n();let t=this.state(e);this.R(t.route),this.emit(!0),await this.load(t.route,t.startRow)}async setQuery(e){this.n();let t=x(e,this.query);if(JSON.stringify(t)!==JSON.stringify(this.query)){this.generation++,this.cache.purge(),this.e.clear(),this.indices.clear(),this.routes.clear(),this.expanded.clear();for(let r of this.o)r.abort();this.selection.clear(),this.query=t,this.emit(!0),await this.load()}}async transact(e){this.n();let t=this.state(e.route);if(t.revision!==e.expectedRevision)throw new y(e.expectedRevision,t.revision);if(!this.options.transact)throw new Error("[MachTable] A server-side transaction transport is required.");if(this.o.size>=v(this.options.maxConcurrentRequests,4,16))throw new RangeError("[MachTable] Too many active server-side transactions.");let r=new AbortController;this.o.add(r);let o=this.generation,s=t.generation;try{let i=await B(Promise.resolve().then(()=>{if(r.signal.aborted)throw f();return this.options.transact({...e,route:[...t.route],query:this.query,signal:r.signal})}),r.signal);if(r.signal.aborted||o!==this.generation||s!==t.generation)throw f();if(typeof i?.revision!="string"||!i.revision||i.revision.length>512)throw new TypeError("[MachTable] Transaction transport must return the committed revision.");await this.refresh([])}finally{this.o.delete(r)}}select(e,t,r="descendants"){this.n(),this.selection.select(e,t,r),this.emit()}getSelection(e){return this.selection.get(e)}clearSelection(){this.selection.clear(),this.emit()}getSnapshot(){if(this.snapshot)return this.snapshot;let e=[],t=r=>{let o=this.routes.get(c(r)),s=o?.active==null?void 0:this.cache.peek(o.active)?.rows[0];if(s)for(let i of s.rows){let a=i.groupKey!==void 0&&this.expanded.has(c([...r,i.groupKey]));e.push({...i,key:G(r,i.id),route:[...r],depth:r.length,expanded:a}),a&&t([...r,i.groupKey])}};return t([]),this.snapshot={rows:e,routes:[...this.routes.values()].map(({route:r,startRow:o,endRow:s,rowCount:i,revision:a,loading:d,error:u})=>({route:[...r],startRow:o,endRow:s,rowCount:i,revision:a,loading:d,error:u})),selection:this.selection.snapshot(),query:x(this.query),revision:this.revision,cachedBlockCount:this.cache.snapshot().cachedBlockCount},this.snapshot}subscribe(e){return this.n(),this.l.add(e),()=>this.l.delete(e)}dispose(){if(!this.disposed){this.disposed=!0,this.generation++,this.cache.purge();for(let e of this.o)e.abort();this.o.clear(),this.routes.clear(),this.e.clear(),this.indices.clear(),this.expanded.clear(),this.selection.clear(),this.l.clear(),this.snapshot=null}}};function ee(n){return new A(n)}var te=new Set(["__proto__","prototype","constructor"]);function re(n){return typeof n!="string"||n.length===0?!1:n.split(".").every(t=>t.length>0&&!te.has(t))}function z(n,e){if(n==null||!re(e))return;if(e.indexOf(".")<0)return n[e];let r=n,o=0;for(;o<e.length;){if(r==null)return;let s=e.indexOf(".",o);if(s<0){r=r[e.slice(o)];break}r=r[e.slice(o,s)],o=s+1}return r}var ne=Symbol.for("mach-table.adapter.lifecycle.v1");function C(n){return!n.isDestroyed()&&(n[ne]?.canReplaceData()??!1)}function m(n,e,t=!1){let r=document.createElement("button");return r.type="button",r.className="mach-server-button",r.textContent=n,r.disabled=t,r.addEventListener("click",o=>{o.stopPropagation();try{Promise.resolve(e()).catch(()=>{})}catch{}}),r}function oe(n){return n?n.loading?"\u52A0\u8F7D\u4E2D\u2026":n.error?"\u52A0\u8F7D\u5931\u8D25":`${n.endRow>n.startRow?n.startRow+1:0}\u2013${n.endRow} / ${n.rowCount??"?"}`:"\u5C1A\u672A\u52A0\u8F7D"}function O(n,e){let t=n.getSnapshot().routes.find(s=>c(s.route)===c(e)),r=document.createElement("span");r.className="mach-server-paging";let o=document.createElement("span");return o.className="mach-server-range",o.textContent=oe(t),o.setAttribute("aria-live","polite"),r.append(o),r.append(m("\u4E0A\u4E00\u9875",()=>n.load(e,Math.max(0,(t?.startRow??0)-1)),!t||t.loading||t.startRow===0)),r.append(m("\u4E0B\u4E00\u9875",()=>n.load(e,t?.endRow??0),!t||t.loading||t.rowCount===null||t.endRow>=t.rowCount)),t?.error&&r.append(m("\u91CD\u8BD5",()=>n.refresh(e))),r}function ie(n,e={}){return{colId:"__server_group",headerName:e.headerName??"\u670D\u52A1\u7AEF\u5206\u7EC4",width:e.width??420,minWidth:260,pinned:"left",sortable:!1,filter:!1,editable:!1,headerComponent:()=>{let t=document.createElement("div");t.className="mach-server-header";let r=()=>{t.replaceChildren(O(n,[]),m("\u5237\u65B0",()=>n.refresh()),m("\u6E05\u9664\u9009\u62E9",()=>n.clearSelection()))};return r(),{el:t,destroy:n.subscribe(r)}},cellRenderer:({data:t})=>{if(!t)return"";let r=document.createElement("div");r.className="mach-server-cell",r.style.paddingInlineStart=`${t.depth*16}px`;let o=document.createElement("input");o.type="checkbox";let s=n.getSelection(t);if(o.checked=s==="selected",o.indeterminate=s==="partial",o.setAttribute("aria-label",`\u9009\u62E9 ${t.groupKey??t.id}`),o.addEventListener("click",a=>{a.stopPropagation(),n.select(t,o.checked)}),r.append(o),t.groupKey!==void 0){let a=[...t.route,t.groupKey],d=m(t.expanded?"\u25BE":"\u25B8",()=>t.expanded?n.collapse(a):n.expand(a));d.setAttribute("aria-expanded",String(t.expanded)),d.setAttribute("aria-label",`${t.expanded?"\u6536\u8D77":"\u5C55\u5F00"} ${t.groupKey||"\u7A7A\u767D\u5206\u7EC4"}`),r.append(d)}let i=document.createElement("span");return i.className="mach-server-label",i.textContent=e.label?.(t)??t.groupKey??t.id,r.append(i),t.expanded&&t.groupKey!==void 0&&r.append(O(n,[...t.route,t.groupKey])),r}}}function se(n,e={}){let t=e.colId??n;return{...e,colId:t,headerName:e.headerName??n,editable:!1,valueGetter:({data:r})=>r?.groupKey!==void 0&&r.aggValues&&Object.prototype.hasOwnProperty.call(r.aggValues,t)?r.aggValues[t]:z(r?.data,n)}}function ae(n,e){var r;let t=n.querySelectorAll(".mach-server-header button,.mach-server-cell button,.mach-server-cell input");for(let o of t)e?((r=o.dataset).serverWasDisabled??(r.serverWasDisabled=String(o.disabled)),o.disabled=!0):o.dataset.serverWasDisabled!==void 0&&(o.disabled=o.dataset.serverWasDisabled==="true",delete o.dataset.serverWasDisabled)}function _(n,e){let t=n.view.getRoot();if(!t)return;ae(t,e);let r=t.querySelector(".mach-server-sync-notice");if(!e){r?.remove(),delete t.dataset.serverPending;return}if(t.dataset.serverPending="true",r)return;let o=document.createElement("div");o.className="mach-server-sync-notice",o.setAttribute("role","status"),o.textContent="\u65B0\u6570\u636E\u7B49\u5F85\u663E\u793A\uFF1A\u8BF7\u5148\u4FDD\u5B58\u3001\u53D6\u6D88\u7F16\u8F91\u6216\u56DE\u6EDA\u4FEE\u6539",t.append(o)}function le(n,e){if(!C(n))throw new Error("[MachTable] Save or cancel grid edits before binding server-side data.");let t=!1,r=-1,o=!1,s=()=>{if(t||o||n.isDestroyed())return;let l=e.getSnapshot(),h=l.revision!==r&&!C(n);if(_(n,h),!h){t=!0;try{l.revision!==r&&(r=l.revision,n.rows.setData([...l.rows])),n.selection.setRows(l.rows.filter(p=>e.getSelection(p)==="selected"),!0),n.view.refreshCells()}finally{t=!1}}},i=()=>{t||o||e.setQuery({sortModel:n.sorting.getModel(),filterModel:n.filtering.getModel(),advancedFilterModel:n.filtering.getAdvancedModel(),quickFilterText:n.filtering.getQuickText()}).catch(()=>{})},a=()=>{e.getSnapshot().revision!==r&&s()};n.updateOptions({rowKey:l=>l.key,rowSelection:"multiple",manualFiltering:!0,manualSorting:!0,pagination:!1});let d=[e.subscribe(s),n.on("sortChanged",i),n.on("filterChanged",i),n.on("dirtyStateChanged",a),n.on("cellEditingStopped",a),n.on("rowEditingStopped",a),n.on("selectionChanged",()=>{if(t||o||e.getSnapshot().revision!==r)return;let l=new Set(n.selection.getIds()),h=e.getSnapshot().rows.filter(p=>l.has(p.key)!==(e.getSelection(p)==="selected"));for(let p of h)e.select(p,l.has(p.key))})],u=()=>{if(!o){o=!0;for(let l of d)l();_(n,!1),e.dispose()}};return d.push(n.on("gridDestroyed",u)),s(),e.setQuery({sortModel:n.sorting.getModel(),filterModel:n.filtering.getModel(),advancedFilterModel:n.filtering.getAdvancedModel(),quickFilterText:n.filtering.getQuickText()}).then(()=>e.getSnapshot().routes.length===0?e.load():void 0).catch(()=>{}),u}export{y as ServerSideVersionConflictError,le as bindServerSideGrid,ie as createServerSideGroupColumn,ee as createServerSideStore,se as serverSideDataColumn};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { b as GridApi } from './api-pOhyuSQk.cjs';
|
|
2
|
+
|
|
3
|
+
interface WorkbenchHandle {
|
|
4
|
+
refresh(): void;
|
|
5
|
+
destroy(): void;
|
|
6
|
+
}
|
|
7
|
+
interface WorkbenchOptions<TData = any> {
|
|
8
|
+
api: GridApi<TData>;
|
|
9
|
+
onClose?: () => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type { WorkbenchOptions as W, WorkbenchHandle as a };
|