@agile-team/mach-table-react 0.13.0 → 0.15.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 +51 -10
- package/dist/chunk-VVQCWQ2C.js +2 -0
- package/dist/chunk-VVQCWQ2C.js.map +1 -0
- package/dist/chunk-Z5XSUQ5O.cjs +2 -0
- package/dist/chunk-Z5XSUQ5O.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +40 -9
- package/dist/index.d.ts +40 -9
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mach-table.css +110 -3
- package/dist/workflows-BhNumPcR.d.cts +129 -0
- package/dist/workflows-BhNumPcR.d.ts +129 -0
- package/dist/workflows.cjs +2 -0
- package/dist/workflows.cjs.map +1 -0
- package/dist/workflows.d.cts +3 -0
- package/dist/workflows.d.ts +3 -0
- package/dist/workflows.js +2 -0
- package/dist/workflows.js.map +1 -0
- package/package.json +12 -2
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# @agile-team/mach-table-react
|
|
6
6
|
|
|
7
|
-
Official React 18+ adapter for MachTable 0.
|
|
7
|
+
Official React 18+ adapter for MachTable 0.15. It provides a generic `<MachTable>`, full app/route configuration, remote query and editing workflows, a cohesive controller, optional and persistent column resizing, a standard toolbar, React cell/detail renderer factories, latest-closure event handling and StrictMode-safe cleanup. `RobotGrid` remains a deprecated 0.x alias.
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
@@ -39,7 +39,9 @@ export function App({ rows }: { rows: Row[] }) {
|
|
|
39
39
|
apiRef={grid.apiRef}
|
|
40
40
|
rowData={rows}
|
|
41
41
|
columnDefs={columns}
|
|
42
|
-
|
|
42
|
+
rowKey="id"
|
|
43
|
+
stateKey="customer-list"
|
|
44
|
+
enableColumnResize
|
|
43
45
|
/>
|
|
44
46
|
</div>
|
|
45
47
|
);
|
|
@@ -68,22 +70,61 @@ When the page itself is route-lazy, a normal named import inside that page alrea
|
|
|
68
70
|
|
|
69
71
|
## Application and route defaults
|
|
70
72
|
|
|
71
|
-
Providers can be nested; the nearest
|
|
73
|
+
Keep table conventions in one file. Providers can be nested; the nearest configuration is merged, named presets are reusable, and explicit table props win:
|
|
72
74
|
|
|
73
75
|
```tsx
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
76
|
+
// mach-table.config.ts
|
|
77
|
+
import { defineMachTableConfig, defineMachTablePreset } from "@agile-team/mach-table-react";
|
|
78
|
+
export default defineMachTableConfig({
|
|
79
|
+
defaults: {
|
|
80
|
+
size: "compact",
|
|
81
|
+
enableColumnResize: true,
|
|
82
|
+
defaultColDef: { sortable: true, resizable: true, filter: true }
|
|
83
|
+
},
|
|
84
|
+
defaultPreset: "list",
|
|
85
|
+
presets: {
|
|
86
|
+
list: defineMachTablePreset({ pagination: false }),
|
|
87
|
+
crud: defineMachTablePreset({ rowSelection: "multiple", editType: "fullRow" })
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// main.tsx
|
|
92
|
+
<MachTableProvider config={machTableConfig}>
|
|
81
93
|
<App />
|
|
82
94
|
</MachTableProvider>
|
|
83
95
|
```
|
|
84
96
|
|
|
85
97
|
The adapter installs the matching `@agile-team/mach-table` core automatically and re-exports its complete API and types. Only `react >= 18` and `react-dom >= 18` remain peer dependencies supplied by the host application.
|
|
86
98
|
|
|
99
|
+
## Remote lists and standard workflows
|
|
100
|
+
|
|
101
|
+
Import heavier page workflows from the tree-shakeable subpath:
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
import { useMachTableQuery, useMachTableController } from "@agile-team/mach-table-react/workflows";
|
|
105
|
+
import { MachTable, MachTableToolbar } from "@agile-team/mach-table-react";
|
|
106
|
+
|
|
107
|
+
const query = useMachTableQuery({
|
|
108
|
+
query: filters,
|
|
109
|
+
queryKey: filters,
|
|
110
|
+
rowKey: "id",
|
|
111
|
+
request: orderApi.page,
|
|
112
|
+
mode: "manual"
|
|
113
|
+
});
|
|
114
|
+
const controller = useMachTableController({ query });
|
|
115
|
+
|
|
116
|
+
<MachTableToolbar
|
|
117
|
+
api={controller.table.api}
|
|
118
|
+
commands={controller.commands}
|
|
119
|
+
search={controller.search}
|
|
120
|
+
onSearchChange={controller.setSearch}
|
|
121
|
+
loading={controller.busy}
|
|
122
|
+
/>;
|
|
123
|
+
<MachTable apiRef={controller.table.apiRef} {...controller.bindings} />;
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The query hook cancels superseded requests, ignores stale responses, exposes an error overlay and supports cross-page or select-all-matching selection. `useMachTableEditing()` adds dirty state, guarded saves, rollback and reveal helpers.
|
|
127
|
+
|
|
87
128
|
## Cell and full-row editing
|
|
88
129
|
|
|
89
130
|
```tsx
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useMemo as Ce,useState as ue}from"react";function de(){let[r,n]=ue(null),[p,T]=ue(!1);return{apiRef:Ce(()=>{let h=null;return Object.defineProperty({},"current",{enumerable:!0,get:()=>h,set:u=>{u!==h&&(h=u,n(u),T(!1),u&&u.whenReady().then(()=>{h===u&&!u.isDestroyed()&&T(!0)}))}})},[]),api:r,ready:p}}import{useCallback as H,useEffect as fe,useMemo as Ee,useRef as ke,useState as W}from"react";function ge(r,n={}){let[p,T]=W([]),[v,h]=W([]),[u,a]=W(!1),[w,R]=W(null),f=ke(!1),g=H(()=>{let o=r.apiRef.current;if(!o||o.isDestroyed()){h([]),T([]);return}h(o.getDirtyRowIds()),T(o.getChanges())},[r.apiRef]);fe(()=>{let o=r.api;return g(),o&&!o.isDestroyed()?o.addEventListener("dirtyStateChanged",g):void 0},[r.api,g]);let C=H(async(o,D)=>{let y=r.apiRef.current;if(!y||y.isDestroyed())throw new Error("[MachTable] Cannot save before the grid is ready.");if(f.current)throw new Error("[MachTable] A save operation is already in progress.");f.current=!0,a(!0),R(null);try{let m=await y.saveChanges(o,D);return g(),n.onSaveSuccess?.(m),m}catch(m){throw R(m),n.onSaveError?.(m),m}finally{f.current=!1,a(!1)}},[n,g,r.apiRef]),U=H(o=>{let D=r.apiRef.current?.rollbackChanges(o)??!1;return g(),D},[g,r.apiRef]),A=H(o=>{r.apiRef.current?.markChangesSaved(o),g()},[g,r.apiRef]),L=H((o,D,y=!1)=>{let m=r.apiRef.current,z=m?.getNodeById(o);return!m||!z||z.rowIndex<0?!1:(m.scrollToIndex(z.rowIndex,"middle"),D&&y?m.startEditingCell({rowIndex:z.rowIndex,colId:D}):!0)},[r.apiRef]);return fe(()=>{if(!n.guardBeforeUnload||typeof window>"u")return;let o=D=>{if(v.length===0)return;let y=n.beforeUnloadMessage??"\u5B58\u5728\u672A\u4FDD\u5B58\u7684\u8868\u683C\u4FEE\u6539\u3002";return D.preventDefault(),D.returnValue=y,y};return window.addEventListener("beforeunload",o),()=>window.removeEventListener("beforeunload",o)},[v.length,n.beforeUnloadMessage,n.guardBeforeUnload]),Ee(()=>({changes:p,dirtyRowIds:v,dirty:v.length>0,saving:u,saveError:w,save:C,rollback:U,markSaved:A,reveal:L,refresh:g}),[p,v,A,g,L,U,C,w,u])}import{useCallback as s,useEffect as pe,useMemo as ye,useReducer as xe,useRef as S,useState as Q}from"react";import{getByPath as Pe}from"@agile-team/mach-table";function Y(r,n){return typeof r=="number"&&Number.isFinite(r)&&r>0?Math.floor(r):n}function Qe(r){return(r instanceof DOMException||typeof r=="object"&&r!=null&&"name"in r)&&r.name==="AbortError"}function Oe(r){return typeof r=="function"?r():r}function Ke(r){let n=S(r);n.current=r;let[p,T]=Q([]),[v,h]=Q(!1),[u,a]=Q(null),[w,R]=Q(Y(r.initialPage,1)),[f,g]=Q(Y(r.pageSize,20)),[C,U]=Q(0),[A,L]=Q([]),[o,D]=Q({}),[y,m]=Q(r.initialQuickFilterText??null),[,z]=xe(e=>e+1,0),l=S({page:w,pageSize:f,sortModel:A,filterModel:o,quickFilterText:y,rows:p});l.current={page:w,pageSize:f,sortModel:A,filterModel:o,quickFilterText:y,rows:p};let I=S(null),O=S(null),P=S(null),V=S(0),E=S(new Set),k=S(new Set),b=S(new Map),q=S(!1),j=S(!1),N=S(!1),d=s(e=>{let t=n.current.rowKey,c=typeof t=="function"?t(e):Pe(e,t);if(c==null||String(c).length===0)throw new Error(`[MachTable] useMachTableQuery rowKey "${String(t)}" returned an empty value.`);return String(c)},[]),K=s(e=>q.current?!k.current.has(e):E.current.has(e),[]),x=s(()=>z(),[]),G=s(()=>{let e=I.current;if(!(!e||e.isDestroyed())){N.current=!0;try{e.setSelection(l.current.rows.filter(t=>K(d(t))),!0)}finally{N.current=!1}}},[d,K]),Z=s(()=>{V.current++,O.current?.abort(),O.current=null,P.current&&clearTimeout(P.current),P.current=null,h(!1)},[]),$=s((e,t)=>e.signal.aborted||t!==V.current,[]),_=s((e,t,c)=>{if($(t,c))return;if(!e||!Array.isArray(e.rows)||!Number.isFinite(e.total)||e.total<0)throw new TypeError("[MachTable] Remote request must resolve to { rows: TData[], total: non-negative number }.");let i=[...e.rows];for(let J of i){let X=d(J);K(X)?b.current.set(X,J):b.current.delete(X)}l.current.rows=i,T(i),U(Math.floor(e.total)),x(),n.current.onSuccess?.(e),queueMicrotask(G)},[$,x,d,K,G]),ee=s((e,t,c)=>{if($(t,c)||Qe(e))return;let i=e??new Error("Remote request failed");a(i),n.current.onError?.(i)},[$]),re=s((e,t)=>{t===V.current&&(h(!1),O.current===e&&(O.current=null))},[]),M=s(async()=>{P.current&&clearTimeout(P.current),P.current=null,O.current?.abort();let e=new AbortController;O.current=e;let t=++V.current;h(!0),a(null),n.current.keepPreviousData===!1&&T([]);let c=l.current;try{let i=await n.current.request({page:c.page,pageSize:c.pageSize,query:Oe(n.current.query),sortModel:c.sortModel.map(J=>({...J})),filterModel:{...c.filterModel},quickFilterText:c.quickFilterText,signal:e.signal});_(i,e,t)}catch(i){ee(i,e,t)}finally{re(e,t)}},[_,re,ee]),B=s(e=>{e&&(l.current.page=1,R(1)),O.current?.abort(),O.current=null;let t=Math.max(0,n.current.debounceMs??0);P.current&&clearTimeout(P.current),t===0?M():P.current=setTimeout(()=>{M()},t)},[M]),F=s(()=>{let e=q.current||E.current.size>0||k.current.size>0||b.current.size>0;q.current=!1,E.current.clear(),k.current.clear(),b.current.clear(),e&&x(),N.current=!0;try{I.current?.deselectAll()}finally{N.current=!1}},[x]),te=s(e=>{if(j.current)return;let t=l.current;e.page===t.page&&e.pageSize===t.pageSize||(t.page=e.page,t.pageSize=e.pageSize,R(e.page),g(e.pageSize),n.current.mode!=="manual"&&M())},[M]),ne=s(e=>{if(j.current)return;let t=e.sortModel.map(c=>({...c}));l.current.sortModel=t,L(t),n.current.mode!=="manual"?B(!0):(l.current.page=1,R(1))},[B]),ae=s(e=>{if(j.current)return;let t={...e.filterModel};l.current.filterModel=t,l.current.quickFilterText=e.api.getQuickFilter(),D(t),m(l.current.quickFilterText),n.current.clearSelectionOnQueryChange!==!1&&F(),n.current.mode!=="manual"?B(!0):(l.current.page=1,R(1))},[F,B]),oe=s(e=>{if(N.current)return;let t=new Set(l.current.rows.map(d)),c=new Set(e.selectedRows.map(d));if(q.current)for(let i of t)c.has(i)?k.current.delete(i):(k.current.add(i),b.current.delete(i));else{if((n.current.selectionScope??"preserve")==="page")E.current.clear(),b.current.clear();else for(let i of t)E.current.delete(i),b.current.delete(i);for(let i of e.selectedRows)E.current.add(d(i))}for(let i of e.selectedRows)b.current.set(d(i),i);x()},[x,d]),be=s(async(e={})=>{e.resetPage&&(l.current.page=1,R(1)),await M()},[M]),Me=s(async()=>{l.current.page=1,l.current.sortModel=[],l.current.filterModel={},R(1),L([]),D({}),F(),j.current=!0;try{I.current?.setSortModel(null),I.current?.setFilterModel(null)}finally{j.current=!1}await M()},[F,M]),Se=s(()=>{q.current=!0,E.current.clear(),k.current.clear(),b.current.clear();for(let e of l.current.rows)b.current.set(d(e),e);x(),G()},[x,d,G]),ve=s(e=>{E.current.clear(),k.current.clear(),b.current.clear(),q.current=e.mode==="allMatching";for(let t of(e.mode==="allMatching"?e.excludedKeys:e.selectedKeys).map(String))e.mode==="allMatching"?k.current.add(t):E.current.add(t);for(let t of l.current.rows)K(d(t))&&b.current.set(d(t),t);x(),G()},[x,d,K,G]),ie=S(!0),we=r.queryKey===void 0?r.query:r.queryKey;pe(()=>{if(ie.current){ie.current=!1;return}n.current.clearSelectionOnQueryChange!==!1&&F(),n.current.mode!=="manual"?B(!0):(l.current.page=1,R(1))},[we,F,B]),pe(()=>(r.mode!=="manual"&&r.immediate!==!1&&M(),Z),[]);let le=ye(()=>{let e=[...new Set((r.pageSizeOptions??[10,20,50,100]).map(t=>Y(t,0)).filter(Boolean))];return e.includes(f)||e.push(f),e.sort((t,c)=>t-c)},[r.pageSizeOptions,f]),se=ye(()=>({rowData:p,loading:v,error:u,rowKey:d,manualSorting:!0,manualFiltering:!0,quickFilterText:y,overlayErrorTemplate:u?()=>n.current.errorOverlay?.({error:u,retry:M})??"Remote request failed. Please retry.":void 0,overlayNoRowsTemplate:r.emptyOverlay,pagination:{mode:"server",page:w,pageSize:f,pageSizeOptions:le,total:C,showTotal:!0,showPageSizeSelector:!0},onGridReady:({api:e})=>{I.current=e,queueMicrotask(G)},onPaginationChanged:te,onSortChanged:ne,onFilterChanged:ae,onSelectionChanged:oe}),[u,M,v,ae,te,oe,ne,r.emptyOverlay,w,f,le,y,d,p,G,C]),ce=q.current?[]:[...E.current],Re=[...b.current.entries()].filter(([e])=>!k.current.has(e)).map(([,e])=>e),De=q.current?{mode:"allMatching",excludedKeys:[...k.current]}:{mode:"explicit",selectedKeys:ce};return{rows:p,loading:v,error:u,page:w,pageSize:f,total:C,sortModel:A,filterModel:o,quickFilterText:y,setQuickFilterText(e){l.current.quickFilterText=e,m(e),I.current?.setQuickFilter(e)},selectedKeys:ce,selectedRows:Re,selectionState:De,gridProps:se,bindings:se,reload:be,retry:M,reset:Me,abort:Z,clearSelection:F,selectAllMatching:Se,applySelectionState:ve}}import{useEffect as me,useMemo as Te,useState as he}from"react";import{createMachTableCommands as qe}from"@agile-team/mach-table";function Ve(r={}){let n=de(),p=ge(n,r.editing),[T,v]=he(r.initialSearch??""),[h,u]=he([]),a=r.query??null;me(()=>{let C=n.api;if(!C||C.isDestroyed()||a)return;let U=()=>u(C.getSelectedRows());return U(),C.addEventListener("selectionChanged",U)},[a,n.api]),me(()=>{a?a.setQuickFilterText(T||null):n.apiRef.current?.setQuickFilter(T||null)},[a,T,n.apiRef]);let w=Te(()=>async()=>{a?await a.reload():n.apiRef.current?.isInfinite()?await n.apiRef.current.reload():n.apiRef.current?.refreshCells()},[a,n.apiRef]),R=Te(()=>qe({getApi:()=>n.apiRef.current,reload:w}),[w,n.apiRef]),f=a?.selectedRows??h,g=a?a.selectionState.mode==="allMatching"?Math.max(0,a.total-a.selectionState.excludedKeys.length):a.selectionState.selectedKeys.length:f.length;return{table:n,query:a,editing:p,bindings:a?.bindings??{},search:T,setSearch:v,selectedRows:f,selectedCount:g,busy:a?.loading===!0||p.saving,error:a?.error??p.saveError??null,commands:R,reload:w}}export{de as a,ge as b,Ke as c,Ve as d};
|
|
2
|
+
//# sourceMappingURL=chunk-VVQCWQ2C.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/useMachGrid.ts","../src/useMachTableEditing.ts","../src/useMachTableQuery.ts","../src/useMachTableController.ts"],"sourcesContent":["import { useMemo, useState, type MutableRefObject } from \"react\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachGridReturn<TData = any> {\n apiRef: MutableRefObject<GridApi<TData> | null>;\n api: GridApi<TData> | null;\n ready: boolean;\n}\n\nexport function useMachGrid<TData = any>(): UseMachGridReturn<TData> {\n const [api, setApi] = useState<GridApi<TData> | null>(null);\n const [ready, setReady] = useState(false);\n const apiRef = useMemo(() => {\n let current: GridApi<TData> | null = null;\n return Object.defineProperty({}, \"current\", {\n enumerable: true,\n get: () => current,\n set: (next: GridApi<TData> | null) => {\n if (next === current) return;\n current = next;\n setApi(next);\n setReady(false);\n if (next) {\n void next.whenReady().then(() => {\n if (current === next && !next.isDestroyed()) setReady(true);\n });\n }\n }\n }) as MutableRefObject<GridApi<TData> | null>;\n }, []);\n\n return { apiRef, api, ready };\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { GridChange, SaveChangesHandler } from \"@agile-team/mach-table\";\nimport type { UseMachGridReturn } from \"./useMachGrid\";\n\nexport interface UseMachTableEditingOptions<TData = any> {\n guardBeforeUnload?: boolean;\n beforeUnloadMessage?: string;\n onSaveSuccess?(saved: readonly GridChange<TData>[]): void;\n onSaveError?(error: unknown): void;\n}\n\nexport interface UseMachTableEditingReturn<TData = any> {\n changes: GridChange<TData>[];\n dirtyRowIds: string[];\n dirty: boolean;\n saving: boolean;\n saveError: unknown | null;\n save(handler: SaveChangesHandler<TData>, rowIds?: readonly string[]): Promise<GridChange<TData>[]>;\n rollback(rowIds?: readonly string[]): boolean;\n markSaved(rowIds?: readonly string[]): void;\n reveal(rowId: string, colId?: string, edit?: boolean): boolean;\n refresh(): void;\n}\n\n/** Reactive dirty/save workflow layered over useMachGrid(). */\nexport function useMachTableEditing<TData = any>(\n table: UseMachGridReturn<TData>,\n options: UseMachTableEditingOptions<TData> = {}\n): UseMachTableEditingReturn<TData> {\n const [changes, setChanges] = useState<GridChange<TData>[]>([]);\n const [dirtyRowIds, setDirtyRowIds] = useState<string[]>([]);\n const [saving, setSaving] = useState(false);\n const [saveError, setSaveError] = useState<unknown | null>(null);\n const savingRef = useRef(false);\n\n const refresh = useCallback((): void => {\n const api = table.apiRef.current;\n if (!api || api.isDestroyed()) {\n setDirtyRowIds([]);\n setChanges([]);\n return;\n }\n setDirtyRowIds(api.getDirtyRowIds());\n setChanges(api.getChanges());\n }, [table.apiRef]);\n\n useEffect(() => {\n const api = table.api;\n refresh();\n return api && !api.isDestroyed() ? api.addEventListener(\"dirtyStateChanged\", refresh) : undefined;\n }, [table.api, refresh]);\n\n const save = useCallback(async (\n handler: SaveChangesHandler<TData>,\n rowIds?: readonly string[]\n ): Promise<GridChange<TData>[]> => {\n const api = table.apiRef.current;\n if (!api || api.isDestroyed()) throw new Error(\"[MachTable] Cannot save before the grid is ready.\");\n if (savingRef.current) throw new Error(\"[MachTable] A save operation is already in progress.\");\n savingRef.current = true;\n setSaving(true);\n setSaveError(null);\n try {\n const saved = await api.saveChanges(handler, rowIds);\n refresh();\n options.onSaveSuccess?.(saved);\n return saved;\n } catch (error) {\n setSaveError(error);\n options.onSaveError?.(error);\n throw error;\n } finally {\n savingRef.current = false;\n setSaving(false);\n }\n }, [options, refresh, table.apiRef]);\n\n const rollback = useCallback((rowIds?: readonly string[]): boolean => {\n const changed = table.apiRef.current?.rollbackChanges(rowIds) ?? false;\n refresh();\n return changed;\n }, [refresh, table.apiRef]);\n const markSaved = useCallback((rowIds?: readonly string[]): void => {\n table.apiRef.current?.markChangesSaved(rowIds);\n refresh();\n }, [refresh, table.apiRef]);\n const reveal = useCallback((rowId: string, colId?: string, edit = false): boolean => {\n const api = table.apiRef.current;\n const node = api?.getNodeById(rowId);\n if (!api || !node || node.rowIndex < 0) return false;\n api.scrollToIndex(node.rowIndex, \"middle\");\n return colId && edit ? api.startEditingCell({ rowIndex: node.rowIndex, colId }) : true;\n }, [table.apiRef]);\n\n useEffect(() => {\n if (!options.guardBeforeUnload || typeof window === \"undefined\") return;\n const handler = (event: BeforeUnloadEvent): string | undefined => {\n if (dirtyRowIds.length === 0) return undefined;\n const message = options.beforeUnloadMessage ?? \"存在未保存的表格修改。\";\n event.preventDefault();\n event.returnValue = message;\n return message;\n };\n window.addEventListener(\"beforeunload\", handler);\n return () => window.removeEventListener(\"beforeunload\", handler);\n }, [dirtyRowIds.length, options.beforeUnloadMessage, options.guardBeforeUnload]);\n\n return useMemo(() => ({\n changes, dirtyRowIds, dirty: dirtyRowIds.length > 0, saving, saveError,\n save, rollback, markSaved, reveal, refresh\n }), [changes, dirtyRowIds, markSaved, refresh, reveal, rollback, save, saveError, saving]);\n}\n","import { useCallback, useEffect, useMemo, useReducer, useRef, useState } from \"react\";\nimport {\n getByPath,\n type FilterModel,\n type FilterChangedEvent,\n type GridApi,\n type GridOptions,\n type OverlayContent,\n type OverlayTemplate,\n type PaginationChangedEvent,\n type SelectionChangedEvent,\n type SortModel\n} from \"@agile-team/mach-table\";\n\nexport type MachTableQuerySource<TQuery> = TQuery | (() => TQuery);\n\nexport interface MachTablePageRequest<TQuery> {\n page: number;\n pageSize: number;\n query: TQuery;\n sortModel: SortModel;\n filterModel: FilterModel;\n quickFilterText: string | null;\n signal: AbortSignal;\n}\n\nexport interface MachTablePageResult<TData> {\n rows: readonly TData[];\n total: number;\n}\n\nexport type MachTableRemoteSelectionState =\n | { mode: \"explicit\"; selectedKeys: string[] }\n | { mode: \"allMatching\"; excludedKeys: string[] };\n\nexport interface UseMachTableQueryOptions<TData, TQuery = Record<string, unknown>> {\n request(params: MachTablePageRequest<TQuery>): Promise<MachTablePageResult<TData>>;\n query: MachTableQuerySource<TQuery>;\n /** Memoize object queries in React; queryKey can explicitly control reload dependencies. */\n queryKey?: unknown;\n rowKey: string | ((row: TData) => string | number);\n initialPage?: number;\n pageSize?: number;\n pageSizeOptions?: readonly number[];\n immediate?: boolean;\n mode?: \"auto\" | \"manual\";\n debounceMs?: number;\n keepPreviousData?: boolean;\n selectionScope?: \"page\" | \"preserve\" | \"query\";\n clearSelectionOnQueryChange?: boolean;\n initialQuickFilterText?: string | null;\n errorOverlay?(context: { error: unknown; retry(): Promise<void> }): OverlayContent;\n emptyOverlay?: OverlayTemplate;\n onSuccess?(result: MachTablePageResult<TData>): void;\n onError?(error: unknown): void;\n}\n\nexport interface UseMachTableQueryReturn<TData> {\n rows: TData[];\n loading: boolean;\n error: unknown | null;\n page: number;\n pageSize: number;\n total: number;\n sortModel: SortModel;\n filterModel: FilterModel;\n quickFilterText: string | null;\n setQuickFilterText(value: string | null): void;\n selectedKeys: string[];\n selectedRows: TData[];\n selectionState: MachTableRemoteSelectionState;\n gridProps: GridOptions<TData>;\n bindings: GridOptions<TData>;\n reload(options?: { resetPage?: boolean }): Promise<void>;\n retry(): Promise<void>;\n reset(): Promise<void>;\n abort(): void;\n clearSelection(): void;\n selectAllMatching(): void;\n applySelectionState(state: MachTableRemoteSelectionState): void;\n}\n\nfunction positive(value: number | undefined, fallback: number): number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof DOMException\n ? error.name === \"AbortError\"\n : typeof error === \"object\" && error != null && \"name\" in error && (error as { name?: unknown }).name === \"AbortError\";\n}\n\nfunction readQuery<T>(source: MachTableQuerySource<T>): T {\n return typeof source === \"function\" ? (source as () => T)() : source;\n}\n\n/** React remote-list controller with cancellation, stale guards and cross-page selection. */\nexport function useMachTableQuery<TData, TQuery = Record<string, unknown>>(\n options: UseMachTableQueryOptions<TData, TQuery>\n): UseMachTableQueryReturn<TData> {\n const optionsRef = useRef(options);\n optionsRef.current = options;\n const [rows, setRows] = useState<TData[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<unknown | null>(null);\n const [page, setPage] = useState(positive(options.initialPage, 1));\n const [pageSize, setPageSize] = useState(positive(options.pageSize, 20));\n const [total, setTotal] = useState(0);\n const [sortModel, setSortModel] = useState<SortModel>([]);\n const [filterModel, setFilterModel] = useState<FilterModel>({});\n const [quickFilterText, setQuickFilterText] = useState<string | null>(options.initialQuickFilterText ?? null);\n const [, refreshSelection] = useReducer((value: number) => value + 1, 0);\n const stateRef = useRef({ page, pageSize, sortModel, filterModel, quickFilterText, rows });\n stateRef.current = { page, pageSize, sortModel, filterModel, quickFilterText, rows };\n const apiRef = useRef<GridApi<TData> | null>(null);\n const abortRef = useRef<AbortController | null>(null);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const generationRef = useRef(0);\n const selectedIds = useRef(new Set<string>());\n const excludedIds = useRef(new Set<string>());\n const selectedById = useRef(new Map<string, TData>());\n const allMatching = useRef(false);\n const suppressGrid = useRef(false);\n const suppressSelection = useRef(false);\n\n const rowId = useCallback((row: TData): string => {\n const rowKey = optionsRef.current.rowKey;\n const value = typeof rowKey === \"function\" ? rowKey(row) : getByPath(row, rowKey);\n if (value == null || String(value).length === 0) {\n throw new Error(`[MachTable] useMachTableQuery rowKey \"${String(rowKey)}\" returned an empty value.`);\n }\n return String(value);\n }, []);\n const selected = useCallback((id: string): boolean => allMatching.current ? !excludedIds.current.has(id) : selectedIds.current.has(id), []);\n const notifySelection = useCallback(() => refreshSelection(), []);\n const syncVisibleSelection = useCallback((): void => {\n const api = apiRef.current;\n if (!api || api.isDestroyed()) return;\n suppressSelection.current = true;\n try { api.setSelection(stateRef.current.rows.filter((row) => selected(rowId(row))), true); }\n finally { suppressSelection.current = false; }\n }, [rowId, selected]);\n\n const abort = useCallback((): void => {\n generationRef.current++;\n abortRef.current?.abort();\n abortRef.current = null;\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = null;\n setLoading(false);\n }, []);\n\n const isStale = useCallback((controller: AbortController, generation: number): boolean =>\n controller.signal.aborted || generation !== generationRef.current, []);\n\n const applyPageResult = useCallback((\n result: MachTablePageResult<TData>,\n controller: AbortController,\n generation: number\n ): void => {\n if (isStale(controller, generation)) return;\n if (!result || !Array.isArray(result.rows) || !Number.isFinite(result.total) || result.total < 0) {\n throw new TypeError(\"[MachTable] Remote request must resolve to { rows: TData[], total: non-negative number }.\");\n }\n const nextRows = [...result.rows];\n for (const row of nextRows) {\n const id = rowId(row);\n if (selected(id)) selectedById.current.set(id, row);\n else selectedById.current.delete(id);\n }\n stateRef.current.rows = nextRows;\n setRows(nextRows);\n setTotal(Math.floor(result.total));\n notifySelection();\n optionsRef.current.onSuccess?.(result);\n queueMicrotask(syncVisibleSelection);\n }, [isStale, notifySelection, rowId, selected, syncVisibleSelection]);\n\n const handleRequestError = useCallback((\n requestError: unknown,\n controller: AbortController,\n generation: number\n ): void => {\n if (isStale(controller, generation) || isAbortError(requestError)) return;\n const normalized = requestError ?? new Error(\"Remote request failed\");\n setError(normalized);\n optionsRef.current.onError?.(normalized);\n }, [isStale]);\n\n const finishRequest = useCallback((controller: AbortController, generation: number): void => {\n if (generation !== generationRef.current) return;\n setLoading(false);\n if (abortRef.current === controller) abortRef.current = null;\n }, []);\n\n const load = useCallback(async (): Promise<void> => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = null;\n abortRef.current?.abort();\n const controller = new AbortController();\n abortRef.current = controller;\n const generation = ++generationRef.current;\n setLoading(true);\n setError(null);\n if (optionsRef.current.keepPreviousData === false) setRows([]);\n const current = stateRef.current;\n try {\n const result = await optionsRef.current.request({\n page: current.page,\n pageSize: current.pageSize,\n query: readQuery(optionsRef.current.query),\n sortModel: current.sortModel.map((item) => ({ ...item })),\n filterModel: { ...current.filterModel },\n quickFilterText: current.quickFilterText,\n signal: controller.signal\n });\n applyPageResult(result, controller, generation);\n } catch (requestError) {\n handleRequestError(requestError, controller, generation);\n } finally {\n finishRequest(controller, generation);\n }\n }, [applyPageResult, finishRequest, handleRequestError]);\n\n const scheduleLoad = useCallback((resetPage: boolean): void => {\n if (resetPage) {\n stateRef.current.page = 1;\n setPage(1);\n }\n abortRef.current?.abort();\n abortRef.current = null;\n const delay = Math.max(0, optionsRef.current.debounceMs ?? 0);\n if (timerRef.current) clearTimeout(timerRef.current);\n if (delay === 0) void load();\n else timerRef.current = setTimeout(() => { void load(); }, delay);\n }, [load]);\n\n const clearSelection = useCallback((): void => {\n const changed = allMatching.current || selectedIds.current.size > 0 ||\n excludedIds.current.size > 0 || selectedById.current.size > 0;\n allMatching.current = false;\n selectedIds.current.clear();\n excludedIds.current.clear();\n selectedById.current.clear();\n if (changed) notifySelection();\n suppressSelection.current = true;\n try { apiRef.current?.deselectAll(); } finally { suppressSelection.current = false; }\n }, [notifySelection]);\n\n const onPaginationChanged = useCallback((event: PaginationChangedEvent<TData>): void => {\n if (suppressGrid.current) return;\n const current = stateRef.current;\n if (event.page === current.page && event.pageSize === current.pageSize) return;\n current.page = event.page;\n current.pageSize = event.pageSize;\n setPage(event.page);\n setPageSize(event.pageSize);\n if (optionsRef.current.mode !== \"manual\") void load();\n }, [load]);\n const onSortChanged = useCallback((event: { sortModel: SortModel }): void => {\n if (suppressGrid.current) return;\n const next = event.sortModel.map((item) => ({ ...item }));\n stateRef.current.sortModel = next;\n setSortModel(next);\n if (optionsRef.current.mode !== \"manual\") scheduleLoad(true);\n else { stateRef.current.page = 1; setPage(1); }\n }, [scheduleLoad]);\n const onFilterChanged = useCallback((event: FilterChangedEvent<TData>): void => {\n if (suppressGrid.current) return;\n const next = { ...event.filterModel };\n stateRef.current.filterModel = next;\n stateRef.current.quickFilterText = event.api.getQuickFilter();\n setFilterModel(next);\n setQuickFilterText(stateRef.current.quickFilterText);\n if (optionsRef.current.clearSelectionOnQueryChange !== false) clearSelection();\n if (optionsRef.current.mode !== \"manual\") scheduleLoad(true);\n else { stateRef.current.page = 1; setPage(1); }\n }, [clearSelection, scheduleLoad]);\n const onSelectionChanged = useCallback((event: SelectionChangedEvent<TData>): void => {\n if (suppressSelection.current) return;\n const visibleIds = new Set(stateRef.current.rows.map(rowId));\n const nextVisible = new Set(event.selectedRows.map(rowId));\n if (allMatching.current) {\n for (const id of visibleIds) {\n if (nextVisible.has(id)) excludedIds.current.delete(id);\n else { excludedIds.current.add(id); selectedById.current.delete(id); }\n }\n } else {\n if ((optionsRef.current.selectionScope ?? \"preserve\") === \"page\") {\n selectedIds.current.clear(); selectedById.current.clear();\n } else {\n for (const id of visibleIds) { selectedIds.current.delete(id); selectedById.current.delete(id); }\n }\n for (const row of event.selectedRows) selectedIds.current.add(rowId(row));\n }\n for (const row of event.selectedRows) selectedById.current.set(rowId(row), row);\n notifySelection();\n }, [notifySelection, rowId]);\n\n const reload = useCallback(async (reloadOptions: { resetPage?: boolean } = {}): Promise<void> => {\n if (reloadOptions.resetPage) { stateRef.current.page = 1; setPage(1); }\n await load();\n }, [load]);\n const reset = useCallback(async (): Promise<void> => {\n stateRef.current.page = 1;\n stateRef.current.sortModel = [];\n stateRef.current.filterModel = {};\n setPage(1); setSortModel([]); setFilterModel({}); clearSelection();\n suppressGrid.current = true;\n try { apiRef.current?.setSortModel(null); apiRef.current?.setFilterModel(null); }\n finally { suppressGrid.current = false; }\n await load();\n }, [clearSelection, load]);\n const selectAllMatching = useCallback((): void => {\n allMatching.current = true; selectedIds.current.clear(); excludedIds.current.clear(); selectedById.current.clear();\n for (const row of stateRef.current.rows) selectedById.current.set(rowId(row), row);\n notifySelection(); syncVisibleSelection();\n }, [notifySelection, rowId, syncVisibleSelection]);\n const applySelectionState = useCallback((state: MachTableRemoteSelectionState): void => {\n selectedIds.current.clear(); excludedIds.current.clear(); selectedById.current.clear();\n allMatching.current = state.mode === \"allMatching\";\n for (const id of (state.mode === \"allMatching\" ? state.excludedKeys : state.selectedKeys).map(String)) {\n if (state.mode === \"allMatching\") excludedIds.current.add(id); else selectedIds.current.add(id);\n }\n for (const row of stateRef.current.rows) if (selected(rowId(row))) selectedById.current.set(rowId(row), row);\n notifySelection(); syncVisibleSelection();\n }, [notifySelection, rowId, selected, syncVisibleSelection]);\n\n const firstQueryEffect = useRef(true);\n const queryDependency = options.queryKey === undefined ? options.query : options.queryKey;\n useEffect(() => {\n if (firstQueryEffect.current) { firstQueryEffect.current = false; return; }\n if (optionsRef.current.clearSelectionOnQueryChange !== false) clearSelection();\n if (optionsRef.current.mode !== \"manual\") scheduleLoad(true);\n else { stateRef.current.page = 1; setPage(1); }\n }, [queryDependency, clearSelection, scheduleLoad]);\n useEffect(() => {\n if (options.mode !== \"manual\" && options.immediate !== false) void load();\n return abort;\n }, []);\n\n const pageSizes = useMemo(() => {\n const values = [...new Set((options.pageSizeOptions ?? [10, 20, 50, 100]).map((value) => positive(value, 0)).filter(Boolean))];\n if (!values.includes(pageSize)) values.push(pageSize);\n return values.sort((left, right) => left - right);\n }, [options.pageSizeOptions, pageSize]);\n const gridProps = useMemo<GridOptions<TData>>(() => ({\n rowData: rows,\n loading,\n error,\n rowKey: rowId,\n manualSorting: true,\n manualFiltering: true,\n quickFilterText,\n overlayErrorTemplate: error\n ? () => optionsRef.current.errorOverlay?.({ error, retry: load }) ?? \"Remote request failed. Please retry.\"\n : undefined,\n overlayNoRowsTemplate: options.emptyOverlay,\n pagination: {\n mode: \"server\", page, pageSize, pageSizeOptions: pageSizes, total,\n showTotal: true, showPageSizeSelector: true\n },\n onGridReady: ({ api }) => { apiRef.current = api; queueMicrotask(syncVisibleSelection); },\n onPaginationChanged,\n onSortChanged,\n onFilterChanged,\n onSelectionChanged\n }), [error, load, loading, onFilterChanged, onPaginationChanged, onSelectionChanged, onSortChanged, options.emptyOverlay, page, pageSize, pageSizes, quickFilterText, rowId, rows, syncVisibleSelection, total]);\n\n const selectedKeys = allMatching.current ? [] : [...selectedIds.current];\n const selectedRows = [...selectedById.current.entries()]\n .filter(([id]) => !excludedIds.current.has(id))\n .map(([, row]) => row);\n const selectionState: MachTableRemoteSelectionState = allMatching.current\n ? { mode: \"allMatching\", excludedKeys: [...excludedIds.current] }\n : { mode: \"explicit\", selectedKeys };\n\n return {\n rows, loading, error, page, pageSize, total, sortModel, filterModel,\n quickFilterText,\n setQuickFilterText(value) {\n stateRef.current.quickFilterText = value;\n setQuickFilterText(value);\n apiRef.current?.setQuickFilter(value);\n },\n selectedKeys, selectedRows, selectionState, gridProps, bindings: gridProps,\n reload, retry: load, reset, abort, clearSelection, selectAllMatching, applySelectionState\n };\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { createMachTableCommands, type GridOptions, type MachTableCommands } from \"@agile-team/mach-table\";\nimport { useMachGrid, type UseMachGridReturn } from \"./useMachGrid\";\nimport { useMachTableEditing, type UseMachTableEditingOptions, type UseMachTableEditingReturn } from \"./useMachTableEditing\";\nimport type { UseMachTableQueryReturn } from \"./useMachTableQuery\";\n\nexport interface UseMachTableControllerOptions<TData> {\n /** Pass the result of useMachTableQuery for remote workflows. */\n query?: UseMachTableQueryReturn<TData>;\n editing?: UseMachTableEditingOptions<TData>;\n initialSearch?: string;\n}\n\nexport interface UseMachTableControllerReturn<TData> {\n table: UseMachGridReturn<TData>;\n query: UseMachTableQueryReturn<TData> | null;\n editing: UseMachTableEditingReturn<TData>;\n bindings: GridOptions<TData>;\n search: string;\n setSearch(value: string): void;\n selectedRows: TData[];\n selectedCount: number;\n busy: boolean;\n error: unknown | null;\n commands: MachTableCommands;\n reload(): Promise<void>;\n}\n\n/** Cohesive React controller for API readiness, selection, editing and toolbar commands. */\nexport function useMachTableController<TData>(\n options: UseMachTableControllerOptions<TData> = {}\n): UseMachTableControllerReturn<TData> {\n const table = useMachGrid<TData>();\n const editing = useMachTableEditing(table, options.editing);\n const [search, setSearch] = useState(options.initialSearch ?? \"\");\n const [localSelection, setLocalSelection] = useState<TData[]>([]);\n const query = options.query ?? null;\n\n useEffect(() => {\n const api = table.api;\n if (!api || api.isDestroyed() || query) return;\n const sync = () => setLocalSelection(api.getSelectedRows());\n sync();\n return api.addEventListener(\"selectionChanged\", sync);\n }, [query, table.api]);\n useEffect(() => {\n if (!query) table.apiRef.current?.setQuickFilter(search || null);\n else query.setQuickFilterText(search || null);\n }, [query, search, table.apiRef]);\n\n const reload = useMemo(() => async (): Promise<void> => {\n if (query) await query.reload();\n else if (table.apiRef.current?.isInfinite()) await table.apiRef.current.reload();\n else table.apiRef.current?.refreshCells();\n }, [query, table.apiRef]);\n const commands = useMemo(() => createMachTableCommands<TData>({\n getApi: () => table.apiRef.current,\n reload\n }), [reload, table.apiRef]);\n const selectedRows = query?.selectedRows ?? localSelection;\n const selectedCount = query\n ? query.selectionState.mode === \"allMatching\"\n ? Math.max(0, query.total - query.selectionState.excludedKeys.length)\n : query.selectionState.selectedKeys.length\n : selectedRows.length;\n\n return {\n table,\n query,\n editing,\n bindings: query?.bindings ?? {},\n search,\n setSearch,\n selectedRows,\n selectedCount,\n busy: query?.loading === true || editing.saving,\n error: query?.error ?? editing.saveError ?? null,\n commands,\n reload\n };\n}\n"],"mappings":"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","names":["useMemo","useState","useMachGrid","api","setApi","ready","setReady","current","next","useCallback","useEffect","useMemo","useRef","useState","useMachTableEditing","table","options","changes","setChanges","dirtyRowIds","setDirtyRowIds","saving","setSaving","saveError","setSaveError","savingRef","refresh","api","save","handler","rowIds","saved","error","rollback","changed","markSaved","reveal","rowId","colId","edit","node","event","message","useCallback","useEffect","useMemo","useReducer","useRef","useState","getByPath","positive","value","fallback","isAbortError","error","readQuery","source","useMachTableQuery","options","optionsRef","rows","setRows","loading","setLoading","setError","page","setPage","pageSize","setPageSize","total","setTotal","sortModel","setSortModel","filterModel","setFilterModel","quickFilterText","setQuickFilterText","refreshSelection","stateRef","apiRef","abortRef","timerRef","generationRef","selectedIds","excludedIds","selectedById","allMatching","suppressGrid","suppressSelection","rowId","row","rowKey","selected","id","notifySelection","syncVisibleSelection","api","abort","isStale","controller","generation","applyPageResult","result","nextRows","handleRequestError","requestError","normalized","finishRequest","load","current","item","scheduleLoad","resetPage","delay","clearSelection","changed","onPaginationChanged","event","onSortChanged","next","onFilterChanged","onSelectionChanged","visibleIds","nextVisible","reload","reloadOptions","reset","selectAllMatching","applySelectionState","state","firstQueryEffect","queryDependency","pageSizes","values","left","right","gridProps","selectedKeys","selectedRows","selectionState","useEffect","useMemo","useState","createMachTableCommands","useMachTableController","options","table","useMachGrid","editing","useMachTableEditing","search","setSearch","useState","localSelection","setLocalSelection","query","useEffect","api","sync","reload","useMemo","commands","createMachTableCommands","selectedRows","selectedCount"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _react = require('react');function de(){let[r,n]=_react.useState.call(void 0, null),[p,T]=_react.useState.call(void 0, !1);return{apiRef:_react.useMemo.call(void 0, ()=>{let h=null;return Object.defineProperty({},"current",{enumerable:!0,get:()=>h,set:u=>{u!==h&&(h=u,n(u),T(!1),u&&u.whenReady().then(()=>{h===u&&!u.isDestroyed()&&T(!0)}))}})},[]),api:r,ready:p}}function ge(r,n={}){let[p,T]=_react.useState.call(void 0, []),[v,h]=_react.useState.call(void 0, []),[u,a]=_react.useState.call(void 0, !1),[w,R]=_react.useState.call(void 0, null),f=_react.useRef.call(void 0, !1),g=_react.useCallback.call(void 0, ()=>{let o=r.apiRef.current;if(!o||o.isDestroyed()){h([]),T([]);return}h(o.getDirtyRowIds()),T(o.getChanges())},[r.apiRef]);_react.useEffect.call(void 0, ()=>{let o=r.api;return g(),o&&!o.isDestroyed()?o.addEventListener("dirtyStateChanged",g):void 0},[r.api,g]);let C=_react.useCallback.call(void 0, async(o,D)=>{let y=r.apiRef.current;if(!y||y.isDestroyed())throw new Error("[MachTable] Cannot save before the grid is ready.");if(f.current)throw new Error("[MachTable] A save operation is already in progress.");f.current=!0,a(!0),R(null);try{let m=await y.saveChanges(o,D);return g(),_optionalChain([n, 'access', _2 => _2.onSaveSuccess, 'optionalCall', _3 => _3(m)]),m}catch(m){throw R(m),_optionalChain([n, 'access', _4 => _4.onSaveError, 'optionalCall', _5 => _5(m)]),m}finally{f.current=!1,a(!1)}},[n,g,r.apiRef]),U=_react.useCallback.call(void 0, o=>{let D=_nullishCoalesce(_optionalChain([r, 'access', _6 => _6.apiRef, 'access', _7 => _7.current, 'optionalAccess', _8 => _8.rollbackChanges, 'call', _9 => _9(o)]), () => (!1));return g(),D},[g,r.apiRef]),A=_react.useCallback.call(void 0, o=>{_optionalChain([r, 'access', _10 => _10.apiRef, 'access', _11 => _11.current, 'optionalAccess', _12 => _12.markChangesSaved, 'call', _13 => _13(o)]),g()},[g,r.apiRef]),L=_react.useCallback.call(void 0, (o,D,y=!1)=>{let m=r.apiRef.current,z=_optionalChain([m, 'optionalAccess', _14 => _14.getNodeById, 'call', _15 => _15(o)]);return!m||!z||z.rowIndex<0?!1:(m.scrollToIndex(z.rowIndex,"middle"),D&&y?m.startEditingCell({rowIndex:z.rowIndex,colId:D}):!0)},[r.apiRef]);return _react.useEffect.call(void 0, ()=>{if(!n.guardBeforeUnload||typeof window>"u")return;let o=D=>{if(v.length===0)return;let y=_nullishCoalesce(n.beforeUnloadMessage, () => ("\u5B58\u5728\u672A\u4FDD\u5B58\u7684\u8868\u683C\u4FEE\u6539\u3002"));return D.preventDefault(),D.returnValue=y,y};return window.addEventListener("beforeunload",o),()=>window.removeEventListener("beforeunload",o)},[v.length,n.beforeUnloadMessage,n.guardBeforeUnload]),_react.useMemo.call(void 0, ()=>({changes:p,dirtyRowIds:v,dirty:v.length>0,saving:u,saveError:w,save:C,rollback:U,markSaved:A,reveal:L,refresh:g}),[p,v,A,g,L,U,C,w,u])}var _machtable = require('@agile-team/mach-table');function Y(r,n){return typeof r=="number"&&Number.isFinite(r)&&r>0?Math.floor(r):n}function Qe(r){return(r instanceof DOMException||typeof r=="object"&&r!=null&&"name"in r)&&r.name==="AbortError"}function Oe(r){return typeof r=="function"?r():r}function Ke(r){let n=_react.useRef.call(void 0, r);n.current=r;let[p,T]=_react.useState.call(void 0, []),[v,h]=_react.useState.call(void 0, !1),[u,a]=_react.useState.call(void 0, null),[w,R]=_react.useState.call(void 0, Y(r.initialPage,1)),[f,g]=_react.useState.call(void 0, Y(r.pageSize,20)),[C,U]=_react.useState.call(void 0, 0),[A,L]=_react.useState.call(void 0, []),[o,D]=_react.useState.call(void 0, {}),[y,m]=_react.useState.call(void 0, _nullishCoalesce(r.initialQuickFilterText, () => (null))),[,z]=_react.useReducer.call(void 0, e=>e+1,0),l=_react.useRef.call(void 0, {page:w,pageSize:f,sortModel:A,filterModel:o,quickFilterText:y,rows:p});l.current={page:w,pageSize:f,sortModel:A,filterModel:o,quickFilterText:y,rows:p};let I=_react.useRef.call(void 0, null),O=_react.useRef.call(void 0, null),P=_react.useRef.call(void 0, null),V=_react.useRef.call(void 0, 0),E=_react.useRef.call(void 0, new Set),k=_react.useRef.call(void 0, new Set),b=_react.useRef.call(void 0, new Map),q=_react.useRef.call(void 0, !1),j=_react.useRef.call(void 0, !1),N=_react.useRef.call(void 0, !1),d=_react.useCallback.call(void 0, e=>{let t=n.current.rowKey,c=typeof t=="function"?t(e):_machtable.getByPath.call(void 0, e,t);if(c==null||String(c).length===0)throw new Error(`[MachTable] useMachTableQuery rowKey "${String(t)}" returned an empty value.`);return String(c)},[]),K=_react.useCallback.call(void 0, e=>q.current?!k.current.has(e):E.current.has(e),[]),x=_react.useCallback.call(void 0, ()=>z(),[]),G=_react.useCallback.call(void 0, ()=>{let e=I.current;if(!(!e||e.isDestroyed())){N.current=!0;try{e.setSelection(l.current.rows.filter(t=>K(d(t))),!0)}finally{N.current=!1}}},[d,K]),Z=_react.useCallback.call(void 0, ()=>{V.current++,_optionalChain([O, 'access', _16 => _16.current, 'optionalAccess', _17 => _17.abort, 'call', _18 => _18()]),O.current=null,P.current&&clearTimeout(P.current),P.current=null,h(!1)},[]),$=_react.useCallback.call(void 0, (e,t)=>e.signal.aborted||t!==V.current,[]),_=_react.useCallback.call(void 0, (e,t,c)=>{if($(t,c))return;if(!e||!Array.isArray(e.rows)||!Number.isFinite(e.total)||e.total<0)throw new TypeError("[MachTable] Remote request must resolve to { rows: TData[], total: non-negative number }.");let i=[...e.rows];for(let J of i){let X=d(J);K(X)?b.current.set(X,J):b.current.delete(X)}l.current.rows=i,T(i),U(Math.floor(e.total)),x(),_optionalChain([n, 'access', _19 => _19.current, 'access', _20 => _20.onSuccess, 'optionalCall', _21 => _21(e)]),queueMicrotask(G)},[$,x,d,K,G]),ee=_react.useCallback.call(void 0, (e,t,c)=>{if($(t,c)||Qe(e))return;let i=_nullishCoalesce(e, () => (new Error("Remote request failed")));a(i),_optionalChain([n, 'access', _22 => _22.current, 'access', _23 => _23.onError, 'optionalCall', _24 => _24(i)])},[$]),re=_react.useCallback.call(void 0, (e,t)=>{t===V.current&&(h(!1),O.current===e&&(O.current=null))},[]),M=_react.useCallback.call(void 0, async()=>{P.current&&clearTimeout(P.current),P.current=null,_optionalChain([O, 'access', _25 => _25.current, 'optionalAccess', _26 => _26.abort, 'call', _27 => _27()]);let e=new AbortController;O.current=e;let t=++V.current;h(!0),a(null),n.current.keepPreviousData===!1&&T([]);let c=l.current;try{let i=await n.current.request({page:c.page,pageSize:c.pageSize,query:Oe(n.current.query),sortModel:c.sortModel.map(J=>({...J})),filterModel:{...c.filterModel},quickFilterText:c.quickFilterText,signal:e.signal});_(i,e,t)}catch(i){ee(i,e,t)}finally{re(e,t)}},[_,re,ee]),B=_react.useCallback.call(void 0, e=>{e&&(l.current.page=1,R(1)),_optionalChain([O, 'access', _28 => _28.current, 'optionalAccess', _29 => _29.abort, 'call', _30 => _30()]),O.current=null;let t=Math.max(0,_nullishCoalesce(n.current.debounceMs, () => (0)));P.current&&clearTimeout(P.current),t===0?M():P.current=setTimeout(()=>{M()},t)},[M]),F=_react.useCallback.call(void 0, ()=>{let e=q.current||E.current.size>0||k.current.size>0||b.current.size>0;q.current=!1,E.current.clear(),k.current.clear(),b.current.clear(),e&&x(),N.current=!0;try{_optionalChain([I, 'access', _31 => _31.current, 'optionalAccess', _32 => _32.deselectAll, 'call', _33 => _33()])}finally{N.current=!1}},[x]),te=_react.useCallback.call(void 0, e=>{if(j.current)return;let t=l.current;e.page===t.page&&e.pageSize===t.pageSize||(t.page=e.page,t.pageSize=e.pageSize,R(e.page),g(e.pageSize),n.current.mode!=="manual"&&M())},[M]),ne=_react.useCallback.call(void 0, e=>{if(j.current)return;let t=e.sortModel.map(c=>({...c}));l.current.sortModel=t,L(t),n.current.mode!=="manual"?B(!0):(l.current.page=1,R(1))},[B]),ae=_react.useCallback.call(void 0, e=>{if(j.current)return;let t={...e.filterModel};l.current.filterModel=t,l.current.quickFilterText=e.api.getQuickFilter(),D(t),m(l.current.quickFilterText),n.current.clearSelectionOnQueryChange!==!1&&F(),n.current.mode!=="manual"?B(!0):(l.current.page=1,R(1))},[F,B]),oe=_react.useCallback.call(void 0, e=>{if(N.current)return;let t=new Set(l.current.rows.map(d)),c=new Set(e.selectedRows.map(d));if(q.current)for(let i of t)c.has(i)?k.current.delete(i):(k.current.add(i),b.current.delete(i));else{if((_nullishCoalesce(n.current.selectionScope, () => ("preserve")))==="page")E.current.clear(),b.current.clear();else for(let i of t)E.current.delete(i),b.current.delete(i);for(let i of e.selectedRows)E.current.add(d(i))}for(let i of e.selectedRows)b.current.set(d(i),i);x()},[x,d]),be=_react.useCallback.call(void 0, async(e={})=>{e.resetPage&&(l.current.page=1,R(1)),await M()},[M]),Me=_react.useCallback.call(void 0, async()=>{l.current.page=1,l.current.sortModel=[],l.current.filterModel={},R(1),L([]),D({}),F(),j.current=!0;try{_optionalChain([I, 'access', _34 => _34.current, 'optionalAccess', _35 => _35.setSortModel, 'call', _36 => _36(null)]),_optionalChain([I, 'access', _37 => _37.current, 'optionalAccess', _38 => _38.setFilterModel, 'call', _39 => _39(null)])}finally{j.current=!1}await M()},[F,M]),Se=_react.useCallback.call(void 0, ()=>{q.current=!0,E.current.clear(),k.current.clear(),b.current.clear();for(let e of l.current.rows)b.current.set(d(e),e);x(),G()},[x,d,G]),ve=_react.useCallback.call(void 0, e=>{E.current.clear(),k.current.clear(),b.current.clear(),q.current=e.mode==="allMatching";for(let t of(e.mode==="allMatching"?e.excludedKeys:e.selectedKeys).map(String))e.mode==="allMatching"?k.current.add(t):E.current.add(t);for(let t of l.current.rows)K(d(t))&&b.current.set(d(t),t);x(),G()},[x,d,K,G]),ie=_react.useRef.call(void 0, !0),we=r.queryKey===void 0?r.query:r.queryKey;_react.useEffect.call(void 0, ()=>{if(ie.current){ie.current=!1;return}n.current.clearSelectionOnQueryChange!==!1&&F(),n.current.mode!=="manual"?B(!0):(l.current.page=1,R(1))},[we,F,B]),_react.useEffect.call(void 0, ()=>(r.mode!=="manual"&&r.immediate!==!1&&M(),Z),[]);let le=_react.useMemo.call(void 0, ()=>{let e=[...new Set((_nullishCoalesce(r.pageSizeOptions, () => ([10,20,50,100]))).map(t=>Y(t,0)).filter(Boolean))];return e.includes(f)||e.push(f),e.sort((t,c)=>t-c)},[r.pageSizeOptions,f]),se=_react.useMemo.call(void 0, ()=>({rowData:p,loading:v,error:u,rowKey:d,manualSorting:!0,manualFiltering:!0,quickFilterText:y,overlayErrorTemplate:u?()=>_nullishCoalesce(_optionalChain([n, 'access', _40 => _40.current, 'access', _41 => _41.errorOverlay, 'optionalCall', _42 => _42({error:u,retry:M})]), () => ("Remote request failed. Please retry.")):void 0,overlayNoRowsTemplate:r.emptyOverlay,pagination:{mode:"server",page:w,pageSize:f,pageSizeOptions:le,total:C,showTotal:!0,showPageSizeSelector:!0},onGridReady:({api:e})=>{I.current=e,queueMicrotask(G)},onPaginationChanged:te,onSortChanged:ne,onFilterChanged:ae,onSelectionChanged:oe}),[u,M,v,ae,te,oe,ne,r.emptyOverlay,w,f,le,y,d,p,G,C]),ce=q.current?[]:[...E.current],Re=[...b.current.entries()].filter(([e])=>!k.current.has(e)).map(([,e])=>e),De=q.current?{mode:"allMatching",excludedKeys:[...k.current]}:{mode:"explicit",selectedKeys:ce};return{rows:p,loading:v,error:u,page:w,pageSize:f,total:C,sortModel:A,filterModel:o,quickFilterText:y,setQuickFilterText(e){l.current.quickFilterText=e,m(e),_optionalChain([I, 'access', _43 => _43.current, 'optionalAccess', _44 => _44.setQuickFilter, 'call', _45 => _45(e)])},selectedKeys:ce,selectedRows:Re,selectionState:De,gridProps:se,bindings:se,reload:be,retry:M,reset:Me,abort:Z,clearSelection:F,selectAllMatching:Se,applySelectionState:ve}}function Ve(r={}){let n=de(),p=ge(n,r.editing),[T,v]=_react.useState.call(void 0, _nullishCoalesce(r.initialSearch, () => (""))),[h,u]=_react.useState.call(void 0, []),a=_nullishCoalesce(r.query, () => (null));_react.useEffect.call(void 0, ()=>{let C=n.api;if(!C||C.isDestroyed()||a)return;let U=()=>u(C.getSelectedRows());return U(),C.addEventListener("selectionChanged",U)},[a,n.api]),_react.useEffect.call(void 0, ()=>{a?a.setQuickFilterText(T||null):_optionalChain([n, 'access', _46 => _46.apiRef, 'access', _47 => _47.current, 'optionalAccess', _48 => _48.setQuickFilter, 'call', _49 => _49(T||null)])},[a,T,n.apiRef]);let w=_react.useMemo.call(void 0, ()=>async()=>{a?await a.reload():_optionalChain([n, 'access', _50 => _50.apiRef, 'access', _51 => _51.current, 'optionalAccess', _52 => _52.isInfinite, 'call', _53 => _53()])?await n.apiRef.current.reload():_optionalChain([n, 'access', _54 => _54.apiRef, 'access', _55 => _55.current, 'optionalAccess', _56 => _56.refreshCells, 'call', _57 => _57()])},[a,n.apiRef]),R=_react.useMemo.call(void 0, ()=>_machtable.createMachTableCommands.call(void 0, {getApi:()=>n.apiRef.current,reload:w}),[w,n.apiRef]),f=_nullishCoalesce(_optionalChain([a, 'optionalAccess', _58 => _58.selectedRows]), () => (h)),g=a?a.selectionState.mode==="allMatching"?Math.max(0,a.total-a.selectionState.excludedKeys.length):a.selectionState.selectedKeys.length:f.length;return{table:n,query:a,editing:p,bindings:_nullishCoalesce(_optionalChain([a, 'optionalAccess', _59 => _59.bindings]), () => ({})),search:T,setSearch:v,selectedRows:f,selectedCount:g,busy:_optionalChain([a, 'optionalAccess', _60 => _60.loading])===!0||p.saving,error:_nullishCoalesce(_nullishCoalesce(_optionalChain([a, 'optionalAccess', _61 => _61.error]), () => (p.saveError)), () => (null)),commands:R,reload:w}}exports.a = de; exports.b = ge; exports.c = Ke; exports.d = Ve;
|
|
2
|
+
//# sourceMappingURL=chunk-Z5XSUQ5O.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["d:\\office-project\\wl\\MachTable\\packages\\react\\dist\\chunk-Z5XSUQ5O.cjs"],"names":[],"mappings":"AAAA,+sBAA+C,SAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAE,IAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAE,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,4BAAE,CAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAsG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,IAAK,CAAC,CAAC,CAAC,CAAC,2BAAE,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,8BAAE,CAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gCAAC,KAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAC,CAAC,qBAAC,aAAa,0BAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAC,CAAC,qBAAC,WAAW,0BAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,EAAE,CAAC,IAAI,CAAC,kCAAC,CAAC,qBAAC,MAAM,qBAAC,OAAO,6BAAE,eAAe,mBAAC,CAAC,GAAC,SAAE,CAAC,GAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,EAAE,iBAAC,CAAC,uBAAC,MAAM,uBAAC,OAAO,+BAAE,gBAAgB,qBAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,iBAAC,CAAC,+BAAE,WAAW,qBAAC,CAAC,GAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,8BAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAC,CAAC,CAAC,mBAAmB,SAAE,sEAAoE,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,4BAAE,CAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mDAAgK,SAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,YAAY,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,2BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,IAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAC,iBAAC,CAAC,CAAC,sBAAsB,SAAE,MAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAAE,CAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,2BAAC,CAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,2BAAC,IAAK,CAAC,CAAC,CAAC,CAAC,2BAAC,IAAK,CAAC,CAAC,CAAC,CAAC,2BAAC,IAAK,CAAC,CAAC,CAAC,CAAC,2BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,2BAAC,IAAK,GAAG,CAAC,CAAC,CAAC,CAAC,2BAAC,IAAK,GAAG,CAAC,CAAC,CAAC,CAAC,2BAAC,IAAK,GAAG,CAAC,CAAC,CAAC,CAAC,2BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,2BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,2BAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAE,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,sCAAsC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,iBAAC,CAAC,uBAAC,OAAO,+BAAE,KAAK,qBAAC,GAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,2FAA2F,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAC,CAAC,uBAAC,OAAO,uBAAC,SAAS,4BAAE,CAAC,CAAC,GAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAC,CAAC,SAAE,IAAI,KAAK,CAAC,uBAAuB,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAC,CAAC,uBAAC,OAAO,uBAAC,OAAO,4BAAE,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,KAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,iBAAC,CAAC,uBAAC,OAAO,+BAAE,KAAK,qBAAC,GAAC,CAAC,IAAI,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAC,CAAC,uBAAC,OAAO,+BAAE,KAAK,qBAAC,GAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAC,CAAC,CAAC,OAAO,CAAC,UAAU,SAAE,GAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,CAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAC,CAAC,uBAAC,OAAO,+BAAE,WAAW,qBAAC,GAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,CAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,CAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,CAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,CAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAC,CAAC,CAAC,OAAO,CAAC,cAAc,SAAE,YAAU,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,KAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,KAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAC,CAAC,uBAAC,OAAO,+BAAE,YAAY,qBAAC,IAAI,GAAC,iBAAC,CAAC,uBAAC,OAAO,+BAAE,cAAc,qBAAC,IAAI,GAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gCAAC,CAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,2BAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAAE,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8BAAE,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,4BAAE,CAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,kBAAC,CAAC,CAAC,eAAe,SAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,4BAAE,CAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAE,CAAC,uBAAC,OAAO,uBAAC,YAAY,4BAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAC,SAAE,wCAAsC,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAC,CAAC,uBAAC,OAAO,+BAAE,cAAc,qBAAC,CAAC,GAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,SAA2I,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAE,iBAAC,CAAC,CAAC,aAAa,SAAE,IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,6BAAE,CAAE,CAAC,CAAC,CAAC,CAAC,kBAAC,CAAC,CAAC,KAAK,SAAE,MAAI,CAAC,8BAAE,CAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,8BAAE,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAC,CAAC,uBAAC,MAAM,uBAAC,OAAO,+BAAE,cAAc,qBAAC,CAAC,EAAE,IAAI,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,4BAAE,CAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,iBAAC,CAAC,uBAAC,MAAM,uBAAC,OAAO,+BAAE,UAAU,qBAAC,GAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,iBAAC,CAAC,uBAAC,MAAM,uBAAC,OAAO,+BAAE,YAAY,qBAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,4BAAE,CAAE,CAAC,EAAE,gDAAE,CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kCAAC,CAAC,+BAAE,cAAY,SAAE,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,kCAAC,CAAC,+BAAE,UAAQ,SAAE,CAAC,GAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,iBAAC,CAAC,+BAAE,SAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,mDAAC,CAAC,+BAAE,OAAK,SAAE,CAAC,CAAC,WAAS,SAAE,MAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,+DAAuC","file":"D:\\office-project\\wl\\MachTable\\packages\\react\\dist\\chunk-Z5XSUQ5O.cjs","sourcesContent":[null]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkZ5XSUQ5Ocjs = require('./chunk-Z5XSUQ5O.cjs');var _react = require('react');var _machtable = require('@agile-team/mach-table'); _createStarExport(_machtable);var I=_machtable.normalizeMachTableConfig.call(void 0, ),T=_react.createContext.call(void 0, I);function Q({config:e,defaults:a,children:r}){let t=_react.useContext.call(void 0, T),n=_react.useMemo.call(void 0, ()=>_machtable.mergeMachTableConfig.call(void 0, t,{..._nullishCoalesce(e, () => ({})),...a?{defaults:a}:{}}),[t,e,a]);return _react.createElement.call(void 0, T.Provider,{value:n},r)}function j(){return _react.useContext.call(void 0, T).defaults}function P(){return _react.useContext.call(void 0, T)}function W(e,a){let r={};for(let t of _machtable.GRID_OPTION_KEYS){if(t==="className")continue;let n=t==="ariaLabel"?e.gridAriaLabel:t==="ariaLabelledBy"?e.gridAriaLabelledBy:t==="ariaDescribedBy"?e.gridAriaDescribedBy:e[t];n!==void 0&&(r[t]=n)}return e.gridClassName!==void 0&&(r.className=e.gridClassName),_machtable.resolveMachTableGridOptions.call(void 0, a,e.preset,r).options}function N(e){let{className:a,style:r,apiRef:t}=e,n=_react.useRef.call(void 0, null),b=_react.useRef.call(void 0, null),G=_react.useRef.call(void 0, e);G.current=e;let O=P(),y=[O,e.preset,..._machtable.GRID_OPTION_KEYS.map(o=>o==="className"?e.gridClassName:o==="ariaLabel"?e.gridAriaLabel:o==="ariaLabelledBy"?e.gridAriaLabelledBy:o==="ariaDescribedBy"?e.gridAriaDescribedBy:e[o])],u=_react.useRef.call(void 0, null);(!u.current||u.current.inputs.length!==y.length||y.some((o,i)=>!Object.is(o,_optionalChain([u, 'access', _2 => _2.current, 'optionalAccess', _3 => _3.inputs, 'access', _4 => _4[i]]))))&&(u.current={inputs:y,options:W(e,O)});let R=u.current.options,g=_react.useRef.call(void 0, R);g.current=R,_react.useEffect.call(void 0, ()=>{let o=n.current;if(!o)return;let i={...g.current};for(let f of _machtable.EVENT_TYPES){let p=`on${f.charAt(0).toUpperCase()}${f.slice(1)}`;i[p]=A=>{let D=g.current[p];typeof D=="function"&&D(A);let C=G.current[p];typeof C=="function"&&C!==D&&C(A)}}let m=_machtable.createGrid.call(void 0, o,i);return b.current=m,()=>{m.destroy(),b.current=null}},[]),_react.useEffect.call(void 0, ()=>{if(!t)return;let o=b.current;return t.current=o,()=>{t.current===o&&(t.current=null)}},[t]);let M=_machtable.GRID_OPTION_KEYS.map(o=>R[o]),E=_react.useRef.call(void 0, null);return _react.useEffect.call(void 0, ()=>{let o=E.current;if(E.current=M,!o)return;let i={};M.forEach((m,f)=>{Object.is(m,o[f])||(i[_machtable.GRID_OPTION_KEYS[f]]=m)}),Object.keys(i).length>0&&_optionalChain([b, 'access', _5 => _5.current, 'optionalAccess', _6 => _6.updateOptions, 'call', _7 => _7(i)])},M),_react.createElement.call(void 0, "div",{ref:n,className:`mach-react-host ${_nullishCoalesce(a, () => (""))}`.trim()||void 0,style:r,"aria-label":e["aria-label"],"aria-labelledby":e["aria-labelledby"],"aria-describedby":e["aria-describedby"]})}var J=N;var X={search:!0,refresh:!0,columns:!0,density:!0,export:!0,undoRedo:!1,fullscreen:!1};function c(e,a){return _nullishCoalesce(_optionalChain([e, 'optionalAccess', _8 => _8[a]]), () => (X[a]))}function d(e,a,r,t=!1){return _react.createElement.call(void 0, "button",{key:e,type:"button",className:"mach-toolbar__button",title:e,"aria-label":e,disabled:t,onClick:r},a)}function Z(e){let a=[e.start],r=_nullishCoalesce(e.searchPlaceholder, () => ("\u641C\u7D22\u5F53\u524D\u7ED3\u679C"));return c(e.features,"search")&&a.push(_react.createElement.call(void 0, "label",{className:"mach-toolbar__search",key:"search"},_react.createElement.call(void 0, "span",{className:"mach-sr-only"},r),_react.createElement.call(void 0, "span",{"aria-hidden":!0},"\u2315"),_react.createElement.call(void 0, "input",{type:"search",value:_nullishCoalesce(e.search, () => ("")),placeholder:r,onChange:t=>{let n=t.currentTarget.value;_optionalChain([e, 'access', _9 => _9.onSearchChange, 'optionalCall', _10 => _10(n)]),e.onSearchChange||(e.commands?e.commands.search(n||null):_optionalChain([e, 'access', _11 => _11.api, 'optionalAccess', _12 => _12.setQuickFilter, 'call', _13 => _13(n||null)]))}}))),c(e.features,"refresh")&&a.push(d("\u5237\u65B0",e.loading?"\u2026":"\u21BB",()=>{_optionalChain([e, 'access', _14 => _14.onRefresh, 'optionalCall', _15 => _15()]),e.onRefresh||(e.commands?e.commands.refresh():_optionalChain([e, 'access', _16 => _16.api, 'optionalAccess', _17 => _17.isInfinite, 'call', _18 => _18()])?e.api.reload():_optionalChain([e, 'access', _19 => _19.api, 'optionalAccess', _20 => _20.refreshCells, 'call', _21 => _21()]))},e.loading)),c(e.features,"columns")&&a.push(d("\u5217\u8BBE\u7F6E","\u2637",t=>{e.commands?e.commands.openColumns(t.currentTarget):_optionalChain([e, 'access', _22 => _22.api, 'optionalAccess', _23 => _23.openColumnWorkbench, 'call', _24 => _24(t.currentTarget)])})),c(e.features,"density")&&a.push(_react.createElement.call(void 0, "select",{key:"density",className:"mach-toolbar__select",value:_nullishCoalesce(_optionalChain([e, 'access', _25 => _25.api, 'optionalAccess', _26 => _26.getGridOption, 'call', _27 => _27("size")]), () => ("normal")),"aria-label":"\u8868\u683C\u5BC6\u5EA6",onChange:t=>{let n=t.currentTarget.value;e.commands?e.commands.setDensity(n):_optionalChain([e, 'access', _28 => _28.api, 'optionalAccess', _29 => _29.setGridOption, 'call', _30 => _30("size",n)])}},_react.createElement.call(void 0, "option",{value:"compact"},"\u7D27\u51D1"),_react.createElement.call(void 0, "option",{value:"normal"},"\u6807\u51C6"),_react.createElement.call(void 0, "option",{value:"large"},"\u5BBD\u677E"))),a.push(e.children),a}function ee(e){e.commands?e.commands.undo():_optionalChain([e, 'access', _31 => _31.api, 'optionalAccess', _32 => _32.undo, 'call', _33 => _33()])}function ae(e){e.commands?e.commands.redo():_optionalChain([e, 'access', _34 => _34.api, 'optionalAccess', _35 => _35.redo, 'call', _36 => _36()])}function te(e){let a=[];return(_nullishCoalesce(e.selectedCount, () => (0)))>0&&a.push(_react.createElement.call(void 0, "button",{type:"button",className:"mach-toolbar__selection",onClick:()=>_optionalChain([e, 'access', _37 => _37.onClearSelection, 'optionalCall', _38 => _38()])},`\u5DF2\u9009 ${e.selectedCount} \u9879 \xD7`)),c(e.features,"undoRedo")&&(a.push(d("\u64A4\u9500","\u21B6",()=>ee(e),e.commands?!e.commands.canUndo():!_optionalChain([e, 'access', _39 => _39.api, 'optionalAccess', _40 => _40.canUndo, 'call', _41 => _41()]))),a.push(d("\u91CD\u505A","\u21B7",()=>ae(e),e.commands?!e.commands.canRedo():!_optionalChain([e, 'access', _42 => _42.api, 'optionalAccess', _43 => _43.canRedo, 'call', _44 => _44()])))),c(e.features,"export")&&a.push(d("\u5BFC\u51FA CSV","\u21E9",()=>{_optionalChain([e, 'access', _45 => _45.commands, 'optionalAccess', _46 => _46.exportCsv, 'call', _47 => _47(e.exportFilename)])},!e.commands)),c(e.features,"fullscreen")&&a.push(d("\u5168\u5C4F","\u26F6",()=>{_optionalChain([e, 'access', _48 => _48.commands, 'optionalAccess', _49 => _49.toggleFullscreen, 'call', _50 => _50()])},!e.commands)),a.push(e.end),a}function re(e){return _react.createElement.call(void 0, "div",{className:"mach-toolbar",role:"toolbar","aria-label":"\u8868\u683C\u5DE5\u5177\u680F"},_react.createElement.call(void 0, "div",{className:"mach-toolbar__main"},...Z(e)),_react.createElement.call(void 0, "div",{className:"mach-toolbar__aside"},...te(e)))}var _client = require('react-dom/client');function ne(e){return a=>{let r=document.createElement("div");r.className="mach-cell-react",r.style.width="100%";let t=_client.createRoot.call(void 0, r);t.render(_react.createElement.call(void 0, e,a));let n=!1;return{el:r,destroy:()=>{n||(n=!0,window.setTimeout(()=>{t.unmount()},0))}}}}function oe(e){return a=>{let r=document.createElement("div");r.style.height="100%";let t=_client.createRoot.call(void 0, r);t.render(_react.createElement.call(void 0, e,a));let n=!1;return{el:r,destroy:()=>{n||(n=!0,window.setTimeout(()=>{t.unmount()},0))}}}}var pe=N;exports.MachTable = N; exports.MachTableProvider = Q; exports.MachTableToolbar = re; exports.RobotGrid = J; exports.default = pe; exports.reactCellRenderer = ne; exports.reactDetailRenderer = oe; exports.useMachGrid = _chunkZ5XSUQ5Ocjs.a; exports.useMachTableConfig = P; exports.useMachTableController = _chunkZ5XSUQ5Ocjs.d; exports.useMachTableDefaults = j; exports.useMachTableEditing = _chunkZ5XSUQ5Ocjs.b; exports.useMachTableQuery = _chunkZ5XSUQ5Ocjs.c;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/MachTable.tsx","../src/defaults.tsx","../src/useMachGrid.ts","../src/adapters.ts"],"sourcesContent":["import { MachTable, RobotGrid } from \"./MachTable\";\n\nexport { MachTable, RobotGrid };\nexport type { MachTableReactProps, RobotGridReactProps } from \"./MachTable\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { MachTableProvider, useMachTableDefaults } from \"./defaults\";\nexport type { MachTableProviderProps } from \"./defaults\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n\n/** Enables `React.lazy(() => import(\"@agile-team/mach-table-react\"))`. */\nexport default MachTable;\n","import {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, createMachTablePreset, GRID_OPTION_KEYS, EVENT_TYPES } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions } from \"@agile-team/mach-table\";\nimport { useMachTableDefaults } from \"./defaults\";\n\ntype AdapterOnlyGridOption = \"className\" | \"ariaLabel\" | \"ariaLabelledBy\" | \"ariaDescribedBy\";\n\nexport type MachTableReactProps<TData = any> = Omit<GridOptions<TData>, AdapterOnlyGridOption> & {\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n gridAriaLabel?: string;\n gridAriaLabelledBy?: string;\n gridAriaDescribedBy?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nfunction collectGridOptions<TData>(\n props: MachTableReactProps<TData>,\n defaults: Partial<GridOptions<TData>>\n): GridOptions<TData> {\n const explicit: Record<string, unknown> = {};\n for (const key of GRID_OPTION_KEYS) {\n if (key === \"className\") continue;\n const value = key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key];\n if (value !== undefined) explicit[key] = value;\n }\n if (props.gridClassName !== undefined) explicit.className = props.gridClassName;\n return createMachTablePreset(defaults, explicit as Partial<GridOptions<TData>>);\n}\n\nexport function MachTable<TData = any>(props: MachTableReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n const defaults = useMachTableDefaults<TData>();\n const effectiveInputs = [\n defaults,\n ...GRID_OPTION_KEYS.map((key) => key === \"className\"\n ? props.gridClassName\n : key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key])\n ];\n const effectiveCache = useRef<{ inputs: readonly unknown[]; options: GridOptions<TData> } | null>(null);\n if (\n !effectiveCache.current ||\n effectiveCache.current.inputs.length !== effectiveInputs.length ||\n effectiveInputs.some((value, index) => !Object.is(value, effectiveCache.current?.inputs[index]))\n ) {\n effectiveCache.current = { inputs: effectiveInputs, options: collectGridOptions(props, defaults) };\n }\n const effectiveOptions = effectiveCache.current.options;\n const effectiveRef = useRef(effectiveOptions);\n effectiveRef.current = effectiveOptions;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const options = { ...effectiveRef.current } as Record<string, unknown>;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const defaultHandler = (effectiveRef.current as Record<string, unknown>)[handlerKey];\n if (typeof defaultHandler === \"function\") (defaultHandler as (value: unknown) => void)(event);\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\" && handler !== defaultHandler) {\n (handler as (value: unknown) => void)(event);\n }\n };\n }\n\n const api = createGrid<TData>(host, options);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const optionValues = GRID_OPTION_KEYS.map((key) => effectiveOptions[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (Object.is(value, previous[index])) return;\n changed[GRID_OPTION_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style,\n \"aria-label\": props[\"aria-label\"],\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"]\n });\n}\n\n/** @deprecated Use MachTable. Kept as a source-compatible alias through 0.x. */\nexport const RobotGrid = MachTable;\n/** @deprecated Use MachTableReactProps. */\nexport type RobotGridReactProps<TData = any> = MachTableReactProps<TData>;\n","import { createContext, createElement, useContext, useMemo, type ReactNode } from \"react\";\nimport { createMachTablePreset, type GridOptions } from \"@agile-team/mach-table\";\n\nconst MachTableDefaultsContext = createContext<Partial<GridOptions<any>>>({});\n\nexport interface MachTableProviderProps<TData = any> {\n defaults: Partial<GridOptions<TData>>;\n children?: ReactNode;\n}\n\n/** Supplies app-, route- or layout-scoped defaults without making tables eager. */\nexport function MachTableProvider<TData = any>({ defaults, children }: MachTableProviderProps<TData>) {\n const parent = useContext(MachTableDefaultsContext);\n const value = useMemo(() => createMachTablePreset(parent, defaults), [parent, defaults]);\n return createElement(MachTableDefaultsContext.Provider, { value }, children);\n}\n\nexport function useMachTableDefaults<TData = any>(): Partial<GridOptions<TData>> {\n return useContext(MachTableDefaultsContext) as Partial<GridOptions<TData>>;\n}\n","import { useMemo, useState, type MutableRefObject } from \"react\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachGridReturn<TData = any> {\n apiRef: MutableRefObject<GridApi<TData> | null>;\n api: GridApi<TData> | null;\n ready: boolean;\n}\n\nexport function useMachGrid<TData = any>(): UseMachGridReturn<TData> {\n const [api, setApi] = useState<GridApi<TData> | null>(null);\n const [ready, setReady] = useState(false);\n const apiRef = useMemo(() => {\n let current: GridApi<TData> | null = null;\n return Object.defineProperty({}, \"current\", {\n enumerable: true,\n get: () => current,\n set: (next: GridApi<TData> | null) => {\n if (next === current) return;\n current = next;\n setApi(next);\n setReady(false);\n if (next) {\n void next.whenReady().then(() => {\n if (current === next && !next.isDestroyed()) setReady(true);\n });\n }\n }\n }) as MutableRefObject<GridApi<TData> | null>;\n }, []);\n\n return { apiRef, api, ready };\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n"],"mappings":"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","names":["index_exports","__export","MachTable","MachTableProvider","RobotGrid","index_default","reactCellRenderer","reactDetailRenderer","useMachGrid","useMachTableDefaults","__toCommonJS","import_react","import_mach_table","import_react","import_mach_table","MachTableDefaultsContext","MachTableProvider","defaults","children","parent","value","useMachTableDefaults","collectGridOptions","props","defaults","explicit","key","value","MachTable","className","style","apiRef","hostRef","gridApiRef","propsRef","useMachTableDefaults","effectiveInputs","effectiveCache","index","effectiveOptions","effectiveRef","host","options","eventType","handlerKey","event","defaultHandler","handler","api","assigned","optionValues","previousOptionValues","previous","changed","RobotGrid","import_react","useMachGrid","api","setApi","ready","setReady","current","next","import_react","import_client","reactCellRenderer","Component","params","host","root","destroyed","reactDetailRenderer","__reExport","index_exports","index_default","MachTable"]}
|
|
1
|
+
{"version":3,"sources":["d:\\office-project\\wl\\MachTable\\packages\\react\\dist\\index.cjs"],"names":[],"mappings":"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","file":"D:\\office-project\\wl\\MachTable\\packages\\react\\dist\\index.cjs","sourcesContent":[null]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { CSSProperties, MutableRefObject, ReactNode, ComponentType } from 'react';
|
|
3
|
-
import { GridOptions, GridApi, CellRendererParams, RowNode, CellRendererFn, DetailRowRendererParams } from '@agile-team/mach-table';
|
|
3
|
+
import { GridOptions, MachTablePresetSelection, GridApi, MachTableCommands, MachTableRuntimeConfig, ResolvedMachTableConfig, CellRendererParams, RowNode, CellRendererFn, DetailRowRendererParams } from '@agile-team/mach-table';
|
|
4
4
|
export * from '@agile-team/mach-table';
|
|
5
|
+
export { M as MachTablePageRequest, a as MachTablePageResult, b as MachTableQuerySource, c as MachTableRemoteSelectionState, U as UseMachGridReturn, d as UseMachTableControllerOptions, e as UseMachTableControllerReturn, f as UseMachTableEditingOptions, g as UseMachTableEditingReturn, h as UseMachTableQueryOptions, i as UseMachTableQueryReturn, u as useMachGrid, j as useMachTableController, k as useMachTableEditing, l as useMachTableQuery } from './workflows-BhNumPcR.cjs';
|
|
5
6
|
|
|
6
7
|
type AdapterOnlyGridOption = "className" | "ariaLabel" | "ariaLabelledBy" | "ariaDescribedBy";
|
|
7
8
|
type MachTableReactProps<TData = any> = Omit<GridOptions<TData>, AdapterOnlyGridOption> & {
|
|
9
|
+
/** Named application preset(s). Explicit component props still win. */
|
|
10
|
+
preset?: MachTablePresetSelection;
|
|
8
11
|
/** CSS class applied to the React host element. */
|
|
9
12
|
className?: string;
|
|
10
13
|
/** CSS class forwarded to MachTable's inner grid root. */
|
|
@@ -31,20 +34,48 @@ declare const RobotGrid: typeof MachTable;
|
|
|
31
34
|
/** @deprecated Use MachTableReactProps. */
|
|
32
35
|
type RobotGridReactProps<TData = any> = MachTableReactProps<TData>;
|
|
33
36
|
|
|
34
|
-
interface
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
interface MachTableToolbarFeatures {
|
|
38
|
+
search?: boolean;
|
|
39
|
+
refresh?: boolean;
|
|
40
|
+
columns?: boolean;
|
|
41
|
+
density?: boolean;
|
|
42
|
+
export?: boolean;
|
|
43
|
+
undoRedo?: boolean;
|
|
44
|
+
fullscreen?: boolean;
|
|
38
45
|
}
|
|
39
|
-
|
|
46
|
+
interface MachTableToolbarProps<TData = any> {
|
|
47
|
+
api?: GridApi<TData> | null;
|
|
48
|
+
commands?: MachTableCommands | null;
|
|
49
|
+
search?: string;
|
|
50
|
+
onSearchChange?(value: string): void;
|
|
51
|
+
onRefresh?(): void;
|
|
52
|
+
onClearSelection?(): void;
|
|
53
|
+
loading?: boolean;
|
|
54
|
+
selectedCount?: number;
|
|
55
|
+
searchPlaceholder?: string;
|
|
56
|
+
exportFilename?: string;
|
|
57
|
+
features?: MachTableToolbarFeatures;
|
|
58
|
+
start?: ReactNode;
|
|
59
|
+
children?: ReactNode;
|
|
60
|
+
end?: ReactNode;
|
|
61
|
+
}
|
|
62
|
+
declare function MachTableToolbar<TData = any>(props: MachTableToolbarProps<TData>): react.DetailedReactHTMLElement<{
|
|
63
|
+
className: string;
|
|
64
|
+
role: "toolbar";
|
|
65
|
+
"aria-label": string;
|
|
66
|
+
}, HTMLElement>;
|
|
40
67
|
|
|
41
68
|
interface MachTableProviderProps<TData = any> {
|
|
42
|
-
|
|
69
|
+
/** Full app/route configuration. Prefer importing this from mach-table.config.ts. */
|
|
70
|
+
config?: MachTableRuntimeConfig;
|
|
71
|
+
/** Backwards-compatible shorthand for config.defaults. */
|
|
72
|
+
defaults?: Partial<GridOptions<TData>>;
|
|
43
73
|
children?: ReactNode;
|
|
44
74
|
}
|
|
45
75
|
/** Supplies app-, route- or layout-scoped defaults without making tables eager. */
|
|
46
|
-
declare function MachTableProvider<TData = any>({ defaults, children }: MachTableProviderProps<TData>): react.FunctionComponentElement<react.ProviderProps<
|
|
76
|
+
declare function MachTableProvider<TData = any>({ config, defaults, children }: MachTableProviderProps<TData>): react.FunctionComponentElement<react.ProviderProps<ResolvedMachTableConfig>>;
|
|
47
77
|
declare function useMachTableDefaults<TData = any>(): Partial<GridOptions<TData>>;
|
|
78
|
+
declare function useMachTableConfig(): ResolvedMachTableConfig;
|
|
48
79
|
|
|
49
80
|
interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {
|
|
50
81
|
children?: ReactNode;
|
|
@@ -60,4 +91,4 @@ declare function reactDetailRenderer<TData = any>(Component: ComponentType<React
|
|
|
60
91
|
destroy?: () => void;
|
|
61
92
|
};
|
|
62
93
|
|
|
63
|
-
export { MachTable, MachTableProvider, type MachTableProviderProps, type MachTableReactProps, type ReactCellRendererProps, type ReactDetailProps, RobotGrid, type RobotGridReactProps,
|
|
94
|
+
export { MachTable, MachTableProvider, type MachTableProviderProps, type MachTableReactProps, MachTableToolbar, type MachTableToolbarFeatures, type MachTableToolbarProps, type ReactCellRendererProps, type ReactDetailProps, RobotGrid, type RobotGridReactProps, MachTable as default, reactCellRenderer, reactDetailRenderer, useMachTableConfig, useMachTableDefaults };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { CSSProperties, MutableRefObject, ReactNode, ComponentType } from 'react';
|
|
3
|
-
import { GridOptions, GridApi, CellRendererParams, RowNode, CellRendererFn, DetailRowRendererParams } from '@agile-team/mach-table';
|
|
3
|
+
import { GridOptions, MachTablePresetSelection, GridApi, MachTableCommands, MachTableRuntimeConfig, ResolvedMachTableConfig, CellRendererParams, RowNode, CellRendererFn, DetailRowRendererParams } from '@agile-team/mach-table';
|
|
4
4
|
export * from '@agile-team/mach-table';
|
|
5
|
+
export { M as MachTablePageRequest, a as MachTablePageResult, b as MachTableQuerySource, c as MachTableRemoteSelectionState, U as UseMachGridReturn, d as UseMachTableControllerOptions, e as UseMachTableControllerReturn, f as UseMachTableEditingOptions, g as UseMachTableEditingReturn, h as UseMachTableQueryOptions, i as UseMachTableQueryReturn, u as useMachGrid, j as useMachTableController, k as useMachTableEditing, l as useMachTableQuery } from './workflows-BhNumPcR.js';
|
|
5
6
|
|
|
6
7
|
type AdapterOnlyGridOption = "className" | "ariaLabel" | "ariaLabelledBy" | "ariaDescribedBy";
|
|
7
8
|
type MachTableReactProps<TData = any> = Omit<GridOptions<TData>, AdapterOnlyGridOption> & {
|
|
9
|
+
/** Named application preset(s). Explicit component props still win. */
|
|
10
|
+
preset?: MachTablePresetSelection;
|
|
8
11
|
/** CSS class applied to the React host element. */
|
|
9
12
|
className?: string;
|
|
10
13
|
/** CSS class forwarded to MachTable's inner grid root. */
|
|
@@ -31,20 +34,48 @@ declare const RobotGrid: typeof MachTable;
|
|
|
31
34
|
/** @deprecated Use MachTableReactProps. */
|
|
32
35
|
type RobotGridReactProps<TData = any> = MachTableReactProps<TData>;
|
|
33
36
|
|
|
34
|
-
interface
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
interface MachTableToolbarFeatures {
|
|
38
|
+
search?: boolean;
|
|
39
|
+
refresh?: boolean;
|
|
40
|
+
columns?: boolean;
|
|
41
|
+
density?: boolean;
|
|
42
|
+
export?: boolean;
|
|
43
|
+
undoRedo?: boolean;
|
|
44
|
+
fullscreen?: boolean;
|
|
38
45
|
}
|
|
39
|
-
|
|
46
|
+
interface MachTableToolbarProps<TData = any> {
|
|
47
|
+
api?: GridApi<TData> | null;
|
|
48
|
+
commands?: MachTableCommands | null;
|
|
49
|
+
search?: string;
|
|
50
|
+
onSearchChange?(value: string): void;
|
|
51
|
+
onRefresh?(): void;
|
|
52
|
+
onClearSelection?(): void;
|
|
53
|
+
loading?: boolean;
|
|
54
|
+
selectedCount?: number;
|
|
55
|
+
searchPlaceholder?: string;
|
|
56
|
+
exportFilename?: string;
|
|
57
|
+
features?: MachTableToolbarFeatures;
|
|
58
|
+
start?: ReactNode;
|
|
59
|
+
children?: ReactNode;
|
|
60
|
+
end?: ReactNode;
|
|
61
|
+
}
|
|
62
|
+
declare function MachTableToolbar<TData = any>(props: MachTableToolbarProps<TData>): react.DetailedReactHTMLElement<{
|
|
63
|
+
className: string;
|
|
64
|
+
role: "toolbar";
|
|
65
|
+
"aria-label": string;
|
|
66
|
+
}, HTMLElement>;
|
|
40
67
|
|
|
41
68
|
interface MachTableProviderProps<TData = any> {
|
|
42
|
-
|
|
69
|
+
/** Full app/route configuration. Prefer importing this from mach-table.config.ts. */
|
|
70
|
+
config?: MachTableRuntimeConfig;
|
|
71
|
+
/** Backwards-compatible shorthand for config.defaults. */
|
|
72
|
+
defaults?: Partial<GridOptions<TData>>;
|
|
43
73
|
children?: ReactNode;
|
|
44
74
|
}
|
|
45
75
|
/** Supplies app-, route- or layout-scoped defaults without making tables eager. */
|
|
46
|
-
declare function MachTableProvider<TData = any>({ defaults, children }: MachTableProviderProps<TData>): react.FunctionComponentElement<react.ProviderProps<
|
|
76
|
+
declare function MachTableProvider<TData = any>({ config, defaults, children }: MachTableProviderProps<TData>): react.FunctionComponentElement<react.ProviderProps<ResolvedMachTableConfig>>;
|
|
47
77
|
declare function useMachTableDefaults<TData = any>(): Partial<GridOptions<TData>>;
|
|
78
|
+
declare function useMachTableConfig(): ResolvedMachTableConfig;
|
|
48
79
|
|
|
49
80
|
interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {
|
|
50
81
|
children?: ReactNode;
|
|
@@ -60,4 +91,4 @@ declare function reactDetailRenderer<TData = any>(Component: ComponentType<React
|
|
|
60
91
|
destroy?: () => void;
|
|
61
92
|
};
|
|
62
93
|
|
|
63
|
-
export { MachTable, MachTableProvider, type MachTableProviderProps, type MachTableReactProps, type ReactCellRendererProps, type ReactDetailProps, RobotGrid, type RobotGridReactProps,
|
|
94
|
+
export { MachTable, MachTableProvider, type MachTableProviderProps, type MachTableReactProps, MachTableToolbar, type MachTableToolbarFeatures, type MachTableToolbarProps, type ReactCellRendererProps, type ReactDetailProps, RobotGrid, type RobotGridReactProps, MachTable as default, reactCellRenderer, reactDetailRenderer, useMachTableConfig, useMachTableDefaults };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as
|
|
1
|
+
import{a as L,b as _,c as k,d as F}from"./chunk-VVQCWQ2C.js";import{createElement as $,useEffect as x,useRef as s}from"react";import{createGrid as q,GRID_OPTION_KEYS as h,EVENT_TYPES as K,resolveMachTableGridOptions as Y}from"@agile-team/mach-table";import{createContext as B,createElement as U,useContext as v,useMemo as V}from"react";import{mergeMachTableConfig as z,normalizeMachTableConfig as H}from"@agile-team/mach-table";var I=H(),T=B(I);function Q({config:e,defaults:a,children:r}){let t=v(T),n=V(()=>z(t,{...e??{},...a?{defaults:a}:{}}),[t,e,a]);return U(T.Provider,{value:n},r)}function j(){return v(T).defaults}function P(){return v(T)}function W(e,a){let r={};for(let t of h){if(t==="className")continue;let n=t==="ariaLabel"?e.gridAriaLabel:t==="ariaLabelledBy"?e.gridAriaLabelledBy:t==="ariaDescribedBy"?e.gridAriaDescribedBy:e[t];n!==void 0&&(r[t]=n)}return e.gridClassName!==void 0&&(r.className=e.gridClassName),Y(a,e.preset,r).options}function N(e){let{className:a,style:r,apiRef:t}=e,n=s(null),b=s(null),G=s(e);G.current=e;let O=P(),y=[O,e.preset,...h.map(o=>o==="className"?e.gridClassName:o==="ariaLabel"?e.gridAriaLabel:o==="ariaLabelledBy"?e.gridAriaLabelledBy:o==="ariaDescribedBy"?e.gridAriaDescribedBy:e[o])],u=s(null);(!u.current||u.current.inputs.length!==y.length||y.some((o,i)=>!Object.is(o,u.current?.inputs[i])))&&(u.current={inputs:y,options:W(e,O)});let R=u.current.options,g=s(R);g.current=R,x(()=>{let o=n.current;if(!o)return;let i={...g.current};for(let f of K){let p=`on${f.charAt(0).toUpperCase()}${f.slice(1)}`;i[p]=A=>{let D=g.current[p];typeof D=="function"&&D(A);let C=G.current[p];typeof C=="function"&&C!==D&&C(A)}}let m=q(o,i);return b.current=m,()=>{m.destroy(),b.current=null}},[]),x(()=>{if(!t)return;let o=b.current;return t.current=o,()=>{t.current===o&&(t.current=null)}},[t]);let M=h.map(o=>R[o]),E=s(null);return x(()=>{let o=E.current;if(E.current=M,!o)return;let i={};M.forEach((m,f)=>{Object.is(m,o[f])||(i[h[f]]=m)}),Object.keys(i).length>0&&b.current?.updateOptions(i)},M),$("div",{ref:n,className:`mach-react-host ${a??""}`.trim()||void 0,style:r,"aria-label":e["aria-label"],"aria-labelledby":e["aria-labelledby"],"aria-describedby":e["aria-describedby"]})}var J=N;import{createElement as l}from"react";var X={search:!0,refresh:!0,columns:!0,density:!0,export:!0,undoRedo:!1,fullscreen:!1};function c(e,a){return e?.[a]??X[a]}function d(e,a,r,t=!1){return l("button",{key:e,type:"button",className:"mach-toolbar__button",title:e,"aria-label":e,disabled:t,onClick:r},a)}function Z(e){let a=[e.start],r=e.searchPlaceholder??"\u641C\u7D22\u5F53\u524D\u7ED3\u679C";return c(e.features,"search")&&a.push(l("label",{className:"mach-toolbar__search",key:"search"},l("span",{className:"mach-sr-only"},r),l("span",{"aria-hidden":!0},"\u2315"),l("input",{type:"search",value:e.search??"",placeholder:r,onChange:t=>{let n=t.currentTarget.value;e.onSearchChange?.(n),e.onSearchChange||(e.commands?e.commands.search(n||null):e.api?.setQuickFilter(n||null))}}))),c(e.features,"refresh")&&a.push(d("\u5237\u65B0",e.loading?"\u2026":"\u21BB",()=>{e.onRefresh?.(),e.onRefresh||(e.commands?e.commands.refresh():e.api?.isInfinite()?e.api.reload():e.api?.refreshCells())},e.loading)),c(e.features,"columns")&&a.push(d("\u5217\u8BBE\u7F6E","\u2637",t=>{e.commands?e.commands.openColumns(t.currentTarget):e.api?.openColumnWorkbench(t.currentTarget)})),c(e.features,"density")&&a.push(l("select",{key:"density",className:"mach-toolbar__select",value:e.api?.getGridOption("size")??"normal","aria-label":"\u8868\u683C\u5BC6\u5EA6",onChange:t=>{let n=t.currentTarget.value;e.commands?e.commands.setDensity(n):e.api?.setGridOption("size",n)}},l("option",{value:"compact"},"\u7D27\u51D1"),l("option",{value:"normal"},"\u6807\u51C6"),l("option",{value:"large"},"\u5BBD\u677E"))),a.push(e.children),a}function ee(e){e.commands?e.commands.undo():e.api?.undo()}function ae(e){e.commands?e.commands.redo():e.api?.redo()}function te(e){let a=[];return(e.selectedCount??0)>0&&a.push(l("button",{type:"button",className:"mach-toolbar__selection",onClick:()=>e.onClearSelection?.()},`\u5DF2\u9009 ${e.selectedCount} \u9879 \xD7`)),c(e.features,"undoRedo")&&(a.push(d("\u64A4\u9500","\u21B6",()=>ee(e),e.commands?!e.commands.canUndo():!e.api?.canUndo())),a.push(d("\u91CD\u505A","\u21B7",()=>ae(e),e.commands?!e.commands.canRedo():!e.api?.canRedo()))),c(e.features,"export")&&a.push(d("\u5BFC\u51FA CSV","\u21E9",()=>{e.commands?.exportCsv(e.exportFilename)},!e.commands)),c(e.features,"fullscreen")&&a.push(d("\u5168\u5C4F","\u26F6",()=>{e.commands?.toggleFullscreen()},!e.commands)),a.push(e.end),a}function re(e){return l("div",{className:"mach-toolbar",role:"toolbar","aria-label":"\u8868\u683C\u5DE5\u5177\u680F"},l("div",{className:"mach-toolbar__main"},...Z(e)),l("div",{className:"mach-toolbar__aside"},...te(e)))}import{createElement as S,isValidElement as ye}from"react";import{createRoot as w}from"react-dom/client";function ne(e){return a=>{let r=document.createElement("div");r.className="mach-cell-react",r.style.width="100%";let t=w(r);t.render(S(e,a));let n=!1;return{el:r,destroy:()=>{n||(n=!0,window.setTimeout(()=>{t.unmount()},0))}}}}function oe(e){return a=>{let r=document.createElement("div");r.style.height="100%";let t=w(r);t.render(S(e,a));let n=!1;return{el:r,destroy:()=>{n||(n=!0,window.setTimeout(()=>{t.unmount()},0))}}}}export*from"@agile-team/mach-table";var pe=N;export{N as MachTable,Q as MachTableProvider,re as MachTableToolbar,J as RobotGrid,pe as default,ne as reactCellRenderer,oe as reactDetailRenderer,L as useMachGrid,P as useMachTableConfig,F as useMachTableController,j as useMachTableDefaults,_ as useMachTableEditing,k as useMachTableQuery};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MachTable.tsx","../src/defaults.tsx","../src/useMachGrid.ts","../src/adapters.ts","../src/index.ts"],"sourcesContent":["import {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, createMachTablePreset, GRID_OPTION_KEYS, EVENT_TYPES } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions } from \"@agile-team/mach-table\";\nimport { useMachTableDefaults } from \"./defaults\";\n\ntype AdapterOnlyGridOption = \"className\" | \"ariaLabel\" | \"ariaLabelledBy\" | \"ariaDescribedBy\";\n\nexport type MachTableReactProps<TData = any> = Omit<GridOptions<TData>, AdapterOnlyGridOption> & {\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n gridAriaLabel?: string;\n gridAriaLabelledBy?: string;\n gridAriaDescribedBy?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nfunction collectGridOptions<TData>(\n props: MachTableReactProps<TData>,\n defaults: Partial<GridOptions<TData>>\n): GridOptions<TData> {\n const explicit: Record<string, unknown> = {};\n for (const key of GRID_OPTION_KEYS) {\n if (key === \"className\") continue;\n const value = key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key];\n if (value !== undefined) explicit[key] = value;\n }\n if (props.gridClassName !== undefined) explicit.className = props.gridClassName;\n return createMachTablePreset(defaults, explicit as Partial<GridOptions<TData>>);\n}\n\nexport function MachTable<TData = any>(props: MachTableReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n const defaults = useMachTableDefaults<TData>();\n const effectiveInputs = [\n defaults,\n ...GRID_OPTION_KEYS.map((key) => key === \"className\"\n ? props.gridClassName\n : key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key])\n ];\n const effectiveCache = useRef<{ inputs: readonly unknown[]; options: GridOptions<TData> } | null>(null);\n if (\n !effectiveCache.current ||\n effectiveCache.current.inputs.length !== effectiveInputs.length ||\n effectiveInputs.some((value, index) => !Object.is(value, effectiveCache.current?.inputs[index]))\n ) {\n effectiveCache.current = { inputs: effectiveInputs, options: collectGridOptions(props, defaults) };\n }\n const effectiveOptions = effectiveCache.current.options;\n const effectiveRef = useRef(effectiveOptions);\n effectiveRef.current = effectiveOptions;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const options = { ...effectiveRef.current } as Record<string, unknown>;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const defaultHandler = (effectiveRef.current as Record<string, unknown>)[handlerKey];\n if (typeof defaultHandler === \"function\") (defaultHandler as (value: unknown) => void)(event);\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\" && handler !== defaultHandler) {\n (handler as (value: unknown) => void)(event);\n }\n };\n }\n\n const api = createGrid<TData>(host, options);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const optionValues = GRID_OPTION_KEYS.map((key) => effectiveOptions[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (Object.is(value, previous[index])) return;\n changed[GRID_OPTION_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style,\n \"aria-label\": props[\"aria-label\"],\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"]\n });\n}\n\n/** @deprecated Use MachTable. Kept as a source-compatible alias through 0.x. */\nexport const RobotGrid = MachTable;\n/** @deprecated Use MachTableReactProps. */\nexport type RobotGridReactProps<TData = any> = MachTableReactProps<TData>;\n","import { createContext, createElement, useContext, useMemo, type ReactNode } from \"react\";\nimport { createMachTablePreset, type GridOptions } from \"@agile-team/mach-table\";\n\nconst MachTableDefaultsContext = createContext<Partial<GridOptions<any>>>({});\n\nexport interface MachTableProviderProps<TData = any> {\n defaults: Partial<GridOptions<TData>>;\n children?: ReactNode;\n}\n\n/** Supplies app-, route- or layout-scoped defaults without making tables eager. */\nexport function MachTableProvider<TData = any>({ defaults, children }: MachTableProviderProps<TData>) {\n const parent = useContext(MachTableDefaultsContext);\n const value = useMemo(() => createMachTablePreset(parent, defaults), [parent, defaults]);\n return createElement(MachTableDefaultsContext.Provider, { value }, children);\n}\n\nexport function useMachTableDefaults<TData = any>(): Partial<GridOptions<TData>> {\n return useContext(MachTableDefaultsContext) as Partial<GridOptions<TData>>;\n}\n","import { useMemo, useState, type MutableRefObject } from \"react\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachGridReturn<TData = any> {\n apiRef: MutableRefObject<GridApi<TData> | null>;\n api: GridApi<TData> | null;\n ready: boolean;\n}\n\nexport function useMachGrid<TData = any>(): UseMachGridReturn<TData> {\n const [api, setApi] = useState<GridApi<TData> | null>(null);\n const [ready, setReady] = useState(false);\n const apiRef = useMemo(() => {\n let current: GridApi<TData> | null = null;\n return Object.defineProperty({}, \"current\", {\n enumerable: true,\n get: () => current,\n set: (next: GridApi<TData> | null) => {\n if (next === current) return;\n current = next;\n setApi(next);\n setReady(false);\n if (next) {\n void next.whenReady().then(() => {\n if (current === next && !next.isDestroyed()) setReady(true);\n });\n }\n }\n }) as MutableRefObject<GridApi<TData> | null>;\n }, []);\n\n return { apiRef, api, ready };\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n","import { MachTable, RobotGrid } from \"./MachTable\";\n\nexport { MachTable, RobotGrid };\nexport type { MachTableReactProps, RobotGridReactProps } from \"./MachTable\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { MachTableProvider, useMachTableDefaults } from \"./defaults\";\nexport type { MachTableProviderProps } from \"./defaults\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n\n/** Enables `React.lazy(() => import(\"@agile-team/mach-table-react\"))`. */\nexport default MachTable;\n"],"mappings":"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","names":["createElement","useEffect","useRef","createGrid","createMachTablePreset","GRID_OPTION_KEYS","EVENT_TYPES","createContext","createElement","useContext","useMemo","createMachTablePreset","MachTableDefaultsContext","MachTableProvider","defaults","children","parent","value","useMachTableDefaults","collectGridOptions","props","defaults","explicit","key","GRID_OPTION_KEYS","value","createMachTablePreset","MachTable","className","style","apiRef","hostRef","useRef","gridApiRef","propsRef","useMachTableDefaults","effectiveInputs","effectiveCache","index","effectiveOptions","effectiveRef","useEffect","host","options","eventType","EVENT_TYPES","handlerKey","event","defaultHandler","handler","api","createGrid","assigned","optionValues","previousOptionValues","previous","changed","createElement","RobotGrid","useMemo","useState","useMachGrid","api","setApi","ready","setReady","current","next","createElement","isValidElement","createRoot","reactCellRenderer","Component","params","host","root","destroyed","reactDetailRenderer","index_default","MachTable"]}
|
|
1
|
+
{"version":3,"sources":["../src/MachTable.tsx","../src/defaults.tsx","../src/MachTableToolbar.tsx","../src/adapters.ts","../src/index.ts"],"sourcesContent":["import {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, GRID_OPTION_KEYS, EVENT_TYPES, resolveMachTableGridOptions } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions, MachTablePresetSelection } from \"@agile-team/mach-table\";\nimport { useMachTableConfig } from \"./defaults\";\n\ntype AdapterOnlyGridOption = \"className\" | \"ariaLabel\" | \"ariaLabelledBy\" | \"ariaDescribedBy\";\n\nexport type MachTableReactProps<TData = any> = Omit<GridOptions<TData>, AdapterOnlyGridOption> & {\n /** Named application preset(s). Explicit component props still win. */\n preset?: MachTablePresetSelection;\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n gridAriaLabel?: string;\n gridAriaLabelledBy?: string;\n gridAriaDescribedBy?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nfunction collectGridOptions<TData>(\n props: MachTableReactProps<TData>,\n config: ReturnType<typeof useMachTableConfig>\n): GridOptions<TData> {\n const explicit: Record<string, unknown> = {};\n for (const key of GRID_OPTION_KEYS) {\n if (key === \"className\") continue;\n const value = key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key];\n if (value !== undefined) explicit[key] = value;\n }\n if (props.gridClassName !== undefined) explicit.className = props.gridClassName;\n return resolveMachTableGridOptions(config, props.preset, explicit as Partial<GridOptions<TData>>).options;\n}\n\nexport function MachTable<TData = any>(props: MachTableReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n const config = useMachTableConfig();\n const effectiveInputs = [\n config,\n props.preset,\n ...GRID_OPTION_KEYS.map((key) => key === \"className\"\n ? props.gridClassName\n : key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key])\n ];\n const effectiveCache = useRef<{ inputs: readonly unknown[]; options: GridOptions<TData> } | null>(null);\n if (\n !effectiveCache.current ||\n effectiveCache.current.inputs.length !== effectiveInputs.length ||\n effectiveInputs.some((value, index) => !Object.is(value, effectiveCache.current?.inputs[index]))\n ) {\n effectiveCache.current = { inputs: effectiveInputs, options: collectGridOptions(props, config) };\n }\n const effectiveOptions = effectiveCache.current.options;\n const effectiveRef = useRef(effectiveOptions);\n effectiveRef.current = effectiveOptions;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const options = { ...effectiveRef.current } as Record<string, unknown>;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const defaultHandler = (effectiveRef.current as Record<string, unknown>)[handlerKey];\n if (typeof defaultHandler === \"function\") (defaultHandler as (value: unknown) => void)(event);\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\" && handler !== defaultHandler) {\n (handler as (value: unknown) => void)(event);\n }\n };\n }\n\n const api = createGrid<TData>(host, options);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const optionValues = GRID_OPTION_KEYS.map((key) => effectiveOptions[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (Object.is(value, previous[index])) return;\n changed[GRID_OPTION_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style,\n \"aria-label\": props[\"aria-label\"],\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"]\n });\n}\n\n/** @deprecated Use MachTable. Kept as a source-compatible alias through 0.x. */\nexport const RobotGrid = MachTable;\n/** @deprecated Use MachTableReactProps. */\nexport type RobotGridReactProps<TData = any> = MachTableReactProps<TData>;\n","import { createContext, createElement, useContext, useMemo, type ReactNode } from \"react\";\nimport {\n mergeMachTableConfig,\n normalizeMachTableConfig,\n type GridOptions,\n type MachTableRuntimeConfig,\n type ResolvedMachTableConfig\n} from \"@agile-team/mach-table\";\n\nconst ROOT_CONFIG = normalizeMachTableConfig();\nconst MachTableConfigContext = createContext<ResolvedMachTableConfig>(ROOT_CONFIG);\n\nexport interface MachTableProviderProps<TData = any> {\n /** Full app/route configuration. Prefer importing this from mach-table.config.ts. */\n config?: MachTableRuntimeConfig;\n /** Backwards-compatible shorthand for config.defaults. */\n defaults?: Partial<GridOptions<TData>>;\n children?: ReactNode;\n}\n\n/** Supplies app-, route- or layout-scoped defaults without making tables eager. */\nexport function MachTableProvider<TData = any>({ config, defaults, children }: MachTableProviderProps<TData>) {\n const parent = useContext(MachTableConfigContext);\n const value = useMemo(\n () => mergeMachTableConfig(parent, { ...(config ?? {}), ...(defaults ? { defaults } : {}) }),\n [parent, config, defaults]\n );\n return createElement(MachTableConfigContext.Provider, { value }, children);\n}\n\nexport function useMachTableDefaults<TData = any>(): Partial<GridOptions<TData>> {\n return useContext(MachTableConfigContext).defaults as Partial<GridOptions<TData>>;\n}\n\nexport function useMachTableConfig(): ResolvedMachTableConfig {\n return useContext(MachTableConfigContext);\n}\n","import { createElement, type ChangeEvent, type MouseEvent as ReactMouseEvent, type ReactNode } from \"react\";\nimport type { GridApi, GridSize, MachTableCommands } from \"@agile-team/mach-table\";\n\nexport interface MachTableToolbarFeatures {\n search?: boolean;\n refresh?: boolean;\n columns?: boolean;\n density?: boolean;\n export?: boolean;\n undoRedo?: boolean;\n fullscreen?: boolean;\n}\n\nexport interface MachTableToolbarProps<TData = any> {\n api?: GridApi<TData> | null;\n commands?: MachTableCommands | null;\n search?: string;\n onSearchChange?(value: string): void;\n onRefresh?(): void;\n onClearSelection?(): void;\n loading?: boolean;\n selectedCount?: number;\n searchPlaceholder?: string;\n exportFilename?: string;\n features?: MachTableToolbarFeatures;\n start?: ReactNode;\n children?: ReactNode;\n end?: ReactNode;\n}\n\nconst DEFAULT_FEATURES: Required<MachTableToolbarFeatures> = {\n search: true, refresh: true, columns: true, density: true,\n export: true, undoRedo: false, fullscreen: false\n};\n\nfunction enabled(features: MachTableToolbarFeatures | undefined, key: keyof MachTableToolbarFeatures): boolean {\n return features?.[key] ?? DEFAULT_FEATURES[key];\n}\n\nfunction button(label: string, icon: string, onClick: (event: ReactMouseEvent<HTMLButtonElement>) => void, disabled = false) {\n return createElement(\"button\", {\n key: label, type: \"button\", className: \"mach-toolbar__button\", title: label, \"aria-label\": label, disabled, onClick\n }, icon);\n}\n\nfunction renderMain<TData>(props: MachTableToolbarProps<TData>): ReactNode[] {\n const main: ReactNode[] = [props.start];\n const placeholder = props.searchPlaceholder ?? \"搜索当前结果\";\n if (enabled(props.features, \"search\")) main.push(createElement(\"label\", { className: \"mach-toolbar__search\", key: \"search\" },\n createElement(\"span\", { className: \"mach-sr-only\" }, placeholder),\n createElement(\"span\", { \"aria-hidden\": true }, \"⌕\"),\n createElement(\"input\", {\n type: \"search\",\n value: props.search ?? \"\",\n placeholder,\n onChange: (event: ChangeEvent<HTMLInputElement>) => {\n const value = event.currentTarget.value;\n props.onSearchChange?.(value);\n if (!props.onSearchChange) {\n if (props.commands) props.commands.search(value || null);\n else props.api?.setQuickFilter(value || null);\n }\n }\n })\n ));\n if (enabled(props.features, \"refresh\")) main.push(button(\"刷新\", props.loading ? \"…\" : \"↻\", () => {\n props.onRefresh?.();\n if (!props.onRefresh) {\n if (props.commands) void props.commands.refresh();\n else if (props.api?.isInfinite()) void props.api.reload();\n else props.api?.refreshCells();\n }\n }, props.loading));\n if (enabled(props.features, \"columns\")) main.push(button(\"列设置\", \"☷\", (event) => {\n if (props.commands) props.commands.openColumns(event.currentTarget);\n else props.api?.openColumnWorkbench(event.currentTarget);\n }));\n if (enabled(props.features, \"density\")) main.push(createElement(\"select\", {\n key: \"density\",\n className: \"mach-toolbar__select\",\n value: props.api?.getGridOption(\"size\") ?? \"normal\",\n \"aria-label\": \"表格密度\",\n onChange: (event: ChangeEvent<HTMLSelectElement>) => {\n const size = event.currentTarget.value as GridSize;\n if (props.commands) props.commands.setDensity(size);\n else props.api?.setGridOption(\"size\", size);\n }\n }, createElement(\"option\", { value: \"compact\" }, \"紧凑\"), createElement(\"option\", { value: \"normal\" }, \"标准\"), createElement(\"option\", { value: \"large\" }, \"宽松\")));\n main.push(props.children);\n return main;\n}\n\nfunction runUndo<TData>(props: MachTableToolbarProps<TData>): void {\n if (props.commands) props.commands.undo();\n else props.api?.undo();\n}\n\nfunction runRedo<TData>(props: MachTableToolbarProps<TData>): void {\n if (props.commands) props.commands.redo();\n else props.api?.redo();\n}\n\nfunction renderAside<TData>(props: MachTableToolbarProps<TData>): ReactNode[] {\n const aside: ReactNode[] = [];\n if ((props.selectedCount ?? 0) > 0) aside.push(createElement(\"button\", {\n type: \"button\", className: \"mach-toolbar__selection\", onClick: () => props.onClearSelection?.()\n }, `已选 ${props.selectedCount} 项 ×`));\n if (enabled(props.features, \"undoRedo\")) {\n aside.push(button(\"撤销\", \"↶\", () => runUndo(props), props.commands ? !props.commands.canUndo() : !props.api?.canUndo()));\n aside.push(button(\"重做\", \"↷\", () => runRedo(props), props.commands ? !props.commands.canRedo() : !props.api?.canRedo()));\n }\n if (enabled(props.features, \"export\")) aside.push(button(\"导出 CSV\", \"⇩\", () => { props.commands?.exportCsv(props.exportFilename); }, !props.commands));\n if (enabled(props.features, \"fullscreen\")) aside.push(button(\"全屏\", \"⛶\", () => { void props.commands?.toggleFullscreen(); }, !props.commands));\n aside.push(props.end);\n return aside;\n}\n\nexport function MachTableToolbar<TData = any>(props: MachTableToolbarProps<TData>) {\n return createElement(\"div\", { className: \"mach-toolbar\", role: \"toolbar\", \"aria-label\": \"表格工具栏\" },\n createElement(\"div\", { className: \"mach-toolbar__main\" }, ...renderMain(props)),\n createElement(\"div\", { className: \"mach-toolbar__aside\" }, ...renderAside(props))\n );\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n","import { MachTable, RobotGrid } from \"./MachTable\";\n\nexport { MachTable, RobotGrid };\nexport type { MachTableReactProps, RobotGridReactProps } from \"./MachTable\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { useMachTableEditing } from \"./useMachTableEditing\";\nexport type { UseMachTableEditingOptions, UseMachTableEditingReturn } from \"./useMachTableEditing\";\nexport { useMachTableQuery } from \"./useMachTableQuery\";\nexport type {\n MachTablePageRequest,\n MachTablePageResult,\n MachTableQuerySource,\n MachTableRemoteSelectionState,\n UseMachTableQueryOptions,\n UseMachTableQueryReturn\n} from \"./useMachTableQuery\";\nexport { useMachTableController } from \"./useMachTableController\";\nexport type { UseMachTableControllerOptions, UseMachTableControllerReturn } from \"./useMachTableController\";\nexport { MachTableToolbar } from \"./MachTableToolbar\";\nexport type { MachTableToolbarFeatures, MachTableToolbarProps } from \"./MachTableToolbar\";\nexport { MachTableProvider, useMachTableConfig, useMachTableDefaults } from \"./defaults\";\nexport type { MachTableProviderProps } from \"./defaults\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n\n/** Enables `React.lazy(() => import(\"@agile-team/mach-table-react\"))`. */\nexport default MachTable;\n"],"mappings":"6DAAA,OACE,iBAAAA,EACA,aAAAC,EACA,UAAAC,MAGK,QACP,OAAS,cAAAC,EAAY,oBAAAC,EAAkB,eAAAC,EAAa,+BAAAC,MAAmC,yBCPvF,OAAS,iBAAAC,EAAe,iBAAAC,EAAe,cAAAC,EAAY,WAAAC,MAA+B,QAClF,OACE,wBAAAC,EACA,4BAAAC,MAIK,yBAEP,IAAMC,EAAcD,EAAyB,EACvCE,EAAyBP,EAAuCM,CAAW,EAW1E,SAASE,EAA+B,CAAE,OAAAC,EAAQ,SAAAC,EAAU,SAAAC,CAAS,EAAkC,CAC5G,IAAMC,EAASV,EAAWK,CAAsB,EAC1CM,EAAQV,EACZ,IAAMC,EAAqBQ,EAAQ,CAAE,GAAIH,GAAU,CAAC,EAAI,GAAIC,EAAW,CAAE,SAAAA,CAAS,EAAI,CAAC,CAAG,CAAC,EAC3F,CAACE,EAAQH,EAAQC,CAAQ,CAC3B,EACA,OAAOT,EAAcM,EAAuB,SAAU,CAAE,MAAAM,CAAM,EAAGF,CAAQ,CAC3E,CAEO,SAASG,GAAiE,CAC/E,OAAOZ,EAAWK,CAAsB,EAAE,QAC5C,CAEO,SAASQ,GAA8C,CAC5D,OAAOb,EAAWK,CAAsB,CAC1C,CDNA,SAASS,EACPC,EACAC,EACoB,CACpB,IAAMC,EAAoC,CAAC,EAC3C,QAAWC,KAAOC,EAAkB,CAClC,GAAID,IAAQ,YAAa,SACzB,IAAME,EAAQF,IAAQ,YAClBH,EAAM,cACNG,IAAQ,iBACNH,EAAM,mBACNG,IAAQ,kBACNH,EAAM,oBACNA,EAAMG,CAAG,EACbE,IAAU,SAAWH,EAASC,CAAG,EAAIE,EAC3C,CACA,OAAIL,EAAM,gBAAkB,SAAWE,EAAS,UAAYF,EAAM,eAC3DM,EAA4BL,EAAQD,EAAM,OAAQE,CAAuC,EAAE,OACpG,CAEO,SAASK,EAAuBP,EAAmC,CACxE,GAAM,CAAE,UAAAQ,EAAW,MAAAC,EAAO,OAAAC,CAAO,EAAIV,EAC/BW,EAAUC,EAA8B,IAAI,EAC5CC,EAAaD,EAA8B,IAAI,EAC/CE,EAAWF,EAAOZ,CAAK,EAC7Bc,EAAS,QAAUd,EACnB,IAAMC,EAASc,EAAmB,EAC5BC,EAAkB,CACtBf,EACAD,EAAM,OACN,GAAGI,EAAiB,IAAKD,GAAQA,IAAQ,YACrCH,EAAM,cACNG,IAAQ,YACNH,EAAM,cACNG,IAAQ,iBACNH,EAAM,mBACNG,IAAQ,kBACNH,EAAM,oBACNA,EAAMG,CAAG,CAAC,CACtB,EACMc,EAAiBL,EAA2E,IAAI,GAEpG,CAACK,EAAe,SAChBA,EAAe,QAAQ,OAAO,SAAWD,EAAgB,QACzDA,EAAgB,KAAK,CAACX,EAAOa,IAAU,CAAC,OAAO,GAAGb,EAAOY,EAAe,SAAS,OAAOC,CAAK,CAAC,CAAC,KAE/FD,EAAe,QAAU,CAAE,OAAQD,EAAiB,QAASjB,EAAmBC,EAAOC,CAAM,CAAE,GAEjG,IAAMkB,EAAmBF,EAAe,QAAQ,QAC1CG,EAAeR,EAAOO,CAAgB,EAC5CC,EAAa,QAAUD,EAEvBE,EAAU,IAAM,CACd,IAAMC,EAAOX,EAAQ,QACrB,GAAI,CAACW,EAAM,OAEX,IAAMC,EAAU,CAAE,GAAGH,EAAa,OAAQ,EAC1C,QAAWI,KAAaC,EAAa,CACnC,IAAMC,EAAa,KAAKF,EAAU,OAAO,CAAC,EAAE,YAAY,CAAC,GAAGA,EAAU,MAAM,CAAC,CAAC,GAC9ED,EAAQG,CAAU,EAAKC,GAAmB,CACxC,IAAMC,EAAkBR,EAAa,QAAoCM,CAAU,EAC/E,OAAOE,GAAmB,YAAaA,EAA4CD,CAAK,EAE5F,IAAME,EADSf,EAAS,QACDY,CAAU,EAC7B,OAAOG,GAAY,YAAcA,IAAYD,GAC9CC,EAAqCF,CAAK,CAE/C,CACF,CAEA,IAAMG,EAAMC,EAAkBT,EAAMC,CAAO,EAC3C,OAAAV,EAAW,QAAUiB,EACd,IAAM,CACXA,EAAI,QAAQ,EACZjB,EAAW,QAAU,IACvB,CACF,EAAG,CAAC,CAAC,EAELQ,EAAU,IAAM,CACd,GAAI,CAACX,EAAQ,OACb,IAAMsB,EAAWnB,EAAW,QAC5B,OAAAH,EAAO,QAAUsB,EACV,IAAM,CACPtB,EAAO,UAAYsB,IAAUtB,EAAO,QAAU,KACpD,CACF,EAAG,CAACA,CAAM,CAAC,EAEX,IAAMuB,EAAe7B,EAAiB,IAAKD,GAAQgB,EAAiBhB,CAAG,CAAC,EAClE+B,EAAuBtB,EAAkC,IAAI,EACnE,OAAAS,EAAU,IAAM,CACd,IAAMc,EAAWD,EAAqB,QAEtC,GADAA,EAAqB,QAAUD,EAC3B,CAACE,EACH,OAEF,IAAMC,EAAmC,CAAC,EAC1CH,EAAa,QAAQ,CAAC5B,EAAOa,IAAU,CACjC,OAAO,GAAGb,EAAO8B,EAASjB,CAAK,CAAC,IACpCkB,EAAQhC,EAAiBc,CAAK,CAAC,EAAIb,EACrC,CAAC,EACG,OAAO,KAAK+B,CAAO,EAAE,OAAS,GAChCvB,EAAW,SAAS,cAAcuB,CAAO,CAE7C,EAAGH,CAAY,EAERI,EAAc,MAAO,CAC1B,IAAK1B,EACL,UAAW,mBAAmBH,GAAa,EAAE,GAAG,KAAK,GAAK,OAC1D,MAAAC,EACA,aAAcT,EAAM,YAAY,EAChC,kBAAmBA,EAAM,iBAAiB,EAC1C,mBAAoBA,EAAM,kBAAkB,CAC9C,CAAC,CACH,CAGO,IAAMsC,EAAY/B,EElJzB,OAAS,iBAAAgC,MAA2F,QA8BpG,IAAMC,EAAuD,CAC3D,OAAQ,GAAM,QAAS,GAAM,QAAS,GAAM,QAAS,GACrD,OAAQ,GAAM,SAAU,GAAO,WAAY,EAC7C,EAEA,SAASC,EAAQC,EAAgDC,EAA8C,CAC7G,OAAOD,IAAWC,CAAG,GAAKH,EAAiBG,CAAG,CAChD,CAEA,SAASC,EAAOC,EAAeC,EAAcC,EAA8DC,EAAW,GAAO,CAC3H,OAAOT,EAAc,SAAU,CAC7B,IAAKM,EAAO,KAAM,SAAU,UAAW,uBAAwB,MAAOA,EAAO,aAAcA,EAAO,SAAAG,EAAU,QAAAD,CAC9G,EAAGD,CAAI,CACT,CAEA,SAASG,EAAkBC,EAAkD,CAC3E,IAAMC,EAAoB,CAACD,EAAM,KAAK,EAChCE,EAAcF,EAAM,mBAAqB,uCAC/C,OAAIT,EAAQS,EAAM,SAAU,QAAQ,GAAGC,EAAK,KAAKZ,EAAc,QAAS,CAAE,UAAW,uBAAwB,IAAK,QAAS,EACzHA,EAAc,OAAQ,CAAE,UAAW,cAAe,EAAGa,CAAW,EAChEb,EAAc,OAAQ,CAAE,cAAe,EAAK,EAAG,QAAG,EAClDA,EAAc,QAAS,CACrB,KAAM,SACN,MAAOW,EAAM,QAAU,GACvB,YAAAE,EACA,SAAWC,GAAyC,CAClD,IAAMC,EAAQD,EAAM,cAAc,MAClCH,EAAM,iBAAiBI,CAAK,EACvBJ,EAAM,iBACLA,EAAM,SAAUA,EAAM,SAAS,OAAOI,GAAS,IAAI,EAClDJ,EAAM,KAAK,eAAeI,GAAS,IAAI,EAEhD,CACF,CAAC,CACH,CAAC,EACGb,EAAQS,EAAM,SAAU,SAAS,GAAGC,EAAK,KAAKP,EAAO,eAAMM,EAAM,QAAU,SAAM,SAAK,IAAM,CAC9FA,EAAM,YAAY,EACbA,EAAM,YACLA,EAAM,SAAeA,EAAM,SAAS,QAAQ,EACvCA,EAAM,KAAK,WAAW,EAAQA,EAAM,IAAI,OAAO,EACnDA,EAAM,KAAK,aAAa,EAEjC,EAAGA,EAAM,OAAO,CAAC,EACbT,EAAQS,EAAM,SAAU,SAAS,GAAGC,EAAK,KAAKP,EAAO,qBAAO,SAAMS,GAAU,CAC1EH,EAAM,SAAUA,EAAM,SAAS,YAAYG,EAAM,aAAa,EAC7DH,EAAM,KAAK,oBAAoBG,EAAM,aAAa,CACzD,CAAC,CAAC,EACEZ,EAAQS,EAAM,SAAU,SAAS,GAAGC,EAAK,KAAKZ,EAAc,SAAU,CACxE,IAAK,UACL,UAAW,uBACX,MAAOW,EAAM,KAAK,cAAc,MAAM,GAAK,SAC3C,aAAc,2BACd,SAAWG,GAA0C,CACnD,IAAME,EAAOF,EAAM,cAAc,MAC7BH,EAAM,SAAUA,EAAM,SAAS,WAAWK,CAAI,EAC7CL,EAAM,KAAK,cAAc,OAAQK,CAAI,CAC5C,CACF,EAAGhB,EAAc,SAAU,CAAE,MAAO,SAAU,EAAG,cAAI,EAAGA,EAAc,SAAU,CAAE,MAAO,QAAS,EAAG,cAAI,EAAGA,EAAc,SAAU,CAAE,MAAO,OAAQ,EAAG,cAAI,CAAC,CAAC,EAC9JY,EAAK,KAAKD,EAAM,QAAQ,EACjBC,CACT,CAEA,SAASK,GAAeN,EAA2C,CAC7DA,EAAM,SAAUA,EAAM,SAAS,KAAK,EACnCA,EAAM,KAAK,KAAK,CACvB,CAEA,SAASO,GAAeP,EAA2C,CAC7DA,EAAM,SAAUA,EAAM,SAAS,KAAK,EACnCA,EAAM,KAAK,KAAK,CACvB,CAEA,SAASQ,GAAmBR,EAAkD,CAC5E,IAAMS,EAAqB,CAAC,EAC5B,OAAKT,EAAM,eAAiB,GAAK,GAAGS,EAAM,KAAKpB,EAAc,SAAU,CACrE,KAAM,SAAU,UAAW,0BAA2B,QAAS,IAAMW,EAAM,mBAAmB,CAChG,EAAG,gBAAMA,EAAM,aAAa,cAAM,CAAC,EAC/BT,EAAQS,EAAM,SAAU,UAAU,IACpCS,EAAM,KAAKf,EAAO,eAAM,SAAK,IAAMY,GAAQN,CAAK,EAAGA,EAAM,SAAW,CAACA,EAAM,SAAS,QAAQ,EAAI,CAACA,EAAM,KAAK,QAAQ,CAAC,CAAC,EACtHS,EAAM,KAAKf,EAAO,eAAM,SAAK,IAAMa,GAAQP,CAAK,EAAGA,EAAM,SAAW,CAACA,EAAM,SAAS,QAAQ,EAAI,CAACA,EAAM,KAAK,QAAQ,CAAC,CAAC,GAEpHT,EAAQS,EAAM,SAAU,QAAQ,GAAGS,EAAM,KAAKf,EAAO,mBAAU,SAAK,IAAM,CAAEM,EAAM,UAAU,UAAUA,EAAM,cAAc,CAAG,EAAG,CAACA,EAAM,QAAQ,CAAC,EAChJT,EAAQS,EAAM,SAAU,YAAY,GAAGS,EAAM,KAAKf,EAAO,eAAM,SAAK,IAAM,CAAOM,EAAM,UAAU,iBAAiB,CAAG,EAAG,CAACA,EAAM,QAAQ,CAAC,EAC5IS,EAAM,KAAKT,EAAM,GAAG,EACbS,CACT,CAEO,SAASC,GAA8BV,EAAqC,CACjF,OAAOX,EAAc,MAAO,CAAE,UAAW,eAAgB,KAAM,UAAW,aAAc,gCAAQ,EAC9FA,EAAc,MAAO,CAAE,UAAW,oBAAqB,EAAG,GAAGU,EAAWC,CAAK,CAAC,EAC9EX,EAAc,MAAO,CAAE,UAAW,qBAAsB,EAAG,GAAGmB,GAAYR,CAAK,CAAC,CAClF,CACF,CC1HA,OAAS,iBAAAW,EAAe,kBAAAC,OAA0D,QAClF,OAAS,cAAAC,MAAkB,mBAapB,SAASC,GACdC,EACgB,CAChB,OAAQC,GAAW,CACjB,IAAMC,EAAO,SAAS,cAAc,KAAK,EACzCA,EAAK,UAAY,kBACjBA,EAAK,MAAM,MAAQ,OACnB,IAAMC,EAAOL,EAAWI,CAAI,EAC5BC,EAAK,OAAOP,EAAcI,EAAWC,CAA+C,CAAC,EACrF,IAAIG,EAAY,GAChB,MAAO,CACL,GAAIF,EACJ,QAAS,IAAM,CACTE,IACJA,EAAY,GACZ,OAAO,WAAW,IAAM,CACtBD,EAAK,QAAQ,CACf,EAAG,CAAC,EACN,CACF,CACF,CACF,CAEO,SAASE,GACdL,EACuF,CACvF,OAAQC,GAAW,CACjB,IAAMC,EAAO,SAAS,cAAc,KAAK,EACzCA,EAAK,MAAM,OAAS,OACpB,IAAMC,EAAOL,EAAWI,CAAI,EAC5BC,EAAK,OAAOP,EAAcI,EAAWC,CAAM,CAAC,EAC5C,IAAIG,EAAY,GAChB,MAAO,CACL,GAAIF,EACJ,QAAS,IAAM,CACTE,IACJA,EAAY,GACZ,OAAO,WAAW,IAAM,CACtBD,EAAK,QAAQ,CACf,EAAG,CAAC,EACN,CACF,CACF,CACF,CChCA,WAAc,yBAGd,IAAOG,GAAQC","names":["createElement","useEffect","useRef","createGrid","GRID_OPTION_KEYS","EVENT_TYPES","resolveMachTableGridOptions","createContext","createElement","useContext","useMemo","mergeMachTableConfig","normalizeMachTableConfig","ROOT_CONFIG","MachTableConfigContext","MachTableProvider","config","defaults","children","parent","value","useMachTableDefaults","useMachTableConfig","collectGridOptions","props","config","explicit","key","GRID_OPTION_KEYS","value","resolveMachTableGridOptions","MachTable","className","style","apiRef","hostRef","useRef","gridApiRef","propsRef","useMachTableConfig","effectiveInputs","effectiveCache","index","effectiveOptions","effectiveRef","useEffect","host","options","eventType","EVENT_TYPES","handlerKey","event","defaultHandler","handler","api","createGrid","assigned","optionValues","previousOptionValues","previous","changed","createElement","RobotGrid","createElement","DEFAULT_FEATURES","enabled","features","key","button","label","icon","onClick","disabled","renderMain","props","main","placeholder","event","value","size","runUndo","runRedo","renderAside","aside","MachTableToolbar","createElement","isValidElement","createRoot","reactCellRenderer","Component","params","host","root","destroyed","reactDetailRenderer","src_default","MachTable"]}
|
package/dist/mach-table.css
CHANGED
|
@@ -67,6 +67,113 @@
|
|
|
67
67
|
font-variant-numeric: tabular-nums;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
.mach-root.mach-dom-layout--auto-height {
|
|
71
|
+
height: auto;
|
|
72
|
+
min-height: 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.mach-root.mach-dom-layout--auto-height .mach-body {
|
|
76
|
+
flex: none;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.mach-root.mach-dom-layout--auto-height .mach-body-viewport--scroll {
|
|
80
|
+
overflow-y: hidden;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.mach-toolbar {
|
|
84
|
+
display: flex;
|
|
85
|
+
align-items: center;
|
|
86
|
+
justify-content: space-between;
|
|
87
|
+
gap: 10px;
|
|
88
|
+
min-height: 44px;
|
|
89
|
+
padding: 6px 8px;
|
|
90
|
+
font: 13px/1.4 var(--mach-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);
|
|
91
|
+
color: var(--mach-body-fg, #26303f);
|
|
92
|
+
background: var(--mach-body-bg, #fff);
|
|
93
|
+
border: 1px solid var(--mach-border-color, #e6eaf0);
|
|
94
|
+
border-bottom: 0;
|
|
95
|
+
border-radius: var(--mach-radius-lg, 8px) var(--mach-radius-lg, 8px) 0 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.mach-toolbar__main,
|
|
99
|
+
.mach-toolbar__aside {
|
|
100
|
+
display: flex;
|
|
101
|
+
align-items: center;
|
|
102
|
+
gap: 6px;
|
|
103
|
+
min-width: 0;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.mach-toolbar__search {
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
gap: 6px;
|
|
110
|
+
width: min(240px, 32vw);
|
|
111
|
+
height: 32px;
|
|
112
|
+
padding: 0 9px;
|
|
113
|
+
color: #64748b;
|
|
114
|
+
background: var(--mach-header-bg, #fafbfd);
|
|
115
|
+
border: 1px solid var(--mach-border-color, #e6eaf0);
|
|
116
|
+
border-radius: 6px;
|
|
117
|
+
transition: border-color var(--mach-transition, .15s ease), box-shadow var(--mach-transition, .15s ease);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.mach-toolbar__search:focus-within {
|
|
121
|
+
border-color: var(--mach-primary, #2563eb);
|
|
122
|
+
box-shadow: 0 0 0 2px color-mix(in srgb, var(--mach-primary, #2563eb) 12%, transparent);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.mach-toolbar__search input {
|
|
126
|
+
min-width: 0;
|
|
127
|
+
width: 100%;
|
|
128
|
+
color: inherit;
|
|
129
|
+
background: transparent;
|
|
130
|
+
border: 0;
|
|
131
|
+
outline: 0;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.mach-toolbar__button,
|
|
135
|
+
.mach-toolbar__select,
|
|
136
|
+
.mach-toolbar__selection {
|
|
137
|
+
height: 32px;
|
|
138
|
+
padding: 0 10px;
|
|
139
|
+
color: inherit;
|
|
140
|
+
background: var(--mach-body-bg, #fff);
|
|
141
|
+
border: 1px solid var(--mach-border-color, #e6eaf0);
|
|
142
|
+
border-radius: 6px;
|
|
143
|
+
cursor: pointer;
|
|
144
|
+
transition: color var(--mach-transition, .15s ease), border-color var(--mach-transition, .15s ease), background var(--mach-transition, .15s ease);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.mach-toolbar__button {
|
|
148
|
+
min-width: 32px;
|
|
149
|
+
padding: 0 8px;
|
|
150
|
+
font-size: 16px;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.mach-toolbar__button:hover:not(:disabled),
|
|
154
|
+
.mach-toolbar__select:hover {
|
|
155
|
+
color: var(--mach-primary, #2563eb);
|
|
156
|
+
border-color: var(--mach-primary, #2563eb);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.mach-toolbar__button:disabled {
|
|
160
|
+
cursor: not-allowed;
|
|
161
|
+
opacity: .45;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.mach-toolbar__selection {
|
|
165
|
+
color: var(--mach-primary, #2563eb);
|
|
166
|
+
background: var(--mach-primary-weak, #dbeafe);
|
|
167
|
+
border-color: transparent;
|
|
168
|
+
font-size: 12px;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@media (max-width: 640px) {
|
|
172
|
+
.mach-toolbar { align-items: stretch; flex-direction: column; }
|
|
173
|
+
.mach-toolbar__main, .mach-toolbar__aside { flex-wrap: wrap; }
|
|
174
|
+
.mach-toolbar__search { flex: 1; width: auto; }
|
|
175
|
+
}
|
|
176
|
+
|
|
70
177
|
.mach-size--compact {
|
|
71
178
|
--mach-font-size: 12px;
|
|
72
179
|
--mach-cell-padding: 6px;
|
|
@@ -322,8 +429,8 @@
|
|
|
322
429
|
.mach-header-resize {
|
|
323
430
|
position: absolute;
|
|
324
431
|
top: 0;
|
|
325
|
-
right:
|
|
326
|
-
width:
|
|
432
|
+
right: 0;
|
|
433
|
+
width: 8px;
|
|
327
434
|
height: 100%;
|
|
328
435
|
cursor: col-resize;
|
|
329
436
|
z-index: 2;
|
|
@@ -334,7 +441,7 @@
|
|
|
334
441
|
.mach-root--resizing .mach-header-resize::after {
|
|
335
442
|
content: "";
|
|
336
443
|
position: absolute;
|
|
337
|
-
inset: 0;
|
|
444
|
+
inset: 0 3px;
|
|
338
445
|
background: var(--mach-primary);
|
|
339
446
|
opacity: 0.45;
|
|
340
447
|
border-radius: 1px;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { GridApi, GridChange, SaveChangesHandler, SortModel, FilterModel, GridOptions, OverlayContent, OverlayTemplate, MachTableCommands } from '@agile-team/mach-table';
|
|
2
|
+
import { MutableRefObject } from 'react';
|
|
3
|
+
|
|
4
|
+
interface UseMachGridReturn<TData = any> {
|
|
5
|
+
apiRef: MutableRefObject<GridApi<TData> | null>;
|
|
6
|
+
api: GridApi<TData> | null;
|
|
7
|
+
ready: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare function useMachGrid<TData = any>(): UseMachGridReturn<TData>;
|
|
10
|
+
|
|
11
|
+
interface UseMachTableEditingOptions<TData = any> {
|
|
12
|
+
guardBeforeUnload?: boolean;
|
|
13
|
+
beforeUnloadMessage?: string;
|
|
14
|
+
onSaveSuccess?(saved: readonly GridChange<TData>[]): void;
|
|
15
|
+
onSaveError?(error: unknown): void;
|
|
16
|
+
}
|
|
17
|
+
interface UseMachTableEditingReturn<TData = any> {
|
|
18
|
+
changes: GridChange<TData>[];
|
|
19
|
+
dirtyRowIds: string[];
|
|
20
|
+
dirty: boolean;
|
|
21
|
+
saving: boolean;
|
|
22
|
+
saveError: unknown | null;
|
|
23
|
+
save(handler: SaveChangesHandler<TData>, rowIds?: readonly string[]): Promise<GridChange<TData>[]>;
|
|
24
|
+
rollback(rowIds?: readonly string[]): boolean;
|
|
25
|
+
markSaved(rowIds?: readonly string[]): void;
|
|
26
|
+
reveal(rowId: string, colId?: string, edit?: boolean): boolean;
|
|
27
|
+
refresh(): void;
|
|
28
|
+
}
|
|
29
|
+
/** Reactive dirty/save workflow layered over useMachGrid(). */
|
|
30
|
+
declare function useMachTableEditing<TData = any>(table: UseMachGridReturn<TData>, options?: UseMachTableEditingOptions<TData>): UseMachTableEditingReturn<TData>;
|
|
31
|
+
|
|
32
|
+
type MachTableQuerySource<TQuery> = TQuery | (() => TQuery);
|
|
33
|
+
interface MachTablePageRequest<TQuery> {
|
|
34
|
+
page: number;
|
|
35
|
+
pageSize: number;
|
|
36
|
+
query: TQuery;
|
|
37
|
+
sortModel: SortModel;
|
|
38
|
+
filterModel: FilterModel;
|
|
39
|
+
quickFilterText: string | null;
|
|
40
|
+
signal: AbortSignal;
|
|
41
|
+
}
|
|
42
|
+
interface MachTablePageResult<TData> {
|
|
43
|
+
rows: readonly TData[];
|
|
44
|
+
total: number;
|
|
45
|
+
}
|
|
46
|
+
type MachTableRemoteSelectionState = {
|
|
47
|
+
mode: "explicit";
|
|
48
|
+
selectedKeys: string[];
|
|
49
|
+
} | {
|
|
50
|
+
mode: "allMatching";
|
|
51
|
+
excludedKeys: string[];
|
|
52
|
+
};
|
|
53
|
+
interface UseMachTableQueryOptions<TData, TQuery = Record<string, unknown>> {
|
|
54
|
+
request(params: MachTablePageRequest<TQuery>): Promise<MachTablePageResult<TData>>;
|
|
55
|
+
query: MachTableQuerySource<TQuery>;
|
|
56
|
+
/** Memoize object queries in React; queryKey can explicitly control reload dependencies. */
|
|
57
|
+
queryKey?: unknown;
|
|
58
|
+
rowKey: string | ((row: TData) => string | number);
|
|
59
|
+
initialPage?: number;
|
|
60
|
+
pageSize?: number;
|
|
61
|
+
pageSizeOptions?: readonly number[];
|
|
62
|
+
immediate?: boolean;
|
|
63
|
+
mode?: "auto" | "manual";
|
|
64
|
+
debounceMs?: number;
|
|
65
|
+
keepPreviousData?: boolean;
|
|
66
|
+
selectionScope?: "page" | "preserve" | "query";
|
|
67
|
+
clearSelectionOnQueryChange?: boolean;
|
|
68
|
+
initialQuickFilterText?: string | null;
|
|
69
|
+
errorOverlay?(context: {
|
|
70
|
+
error: unknown;
|
|
71
|
+
retry(): Promise<void>;
|
|
72
|
+
}): OverlayContent;
|
|
73
|
+
emptyOverlay?: OverlayTemplate;
|
|
74
|
+
onSuccess?(result: MachTablePageResult<TData>): void;
|
|
75
|
+
onError?(error: unknown): void;
|
|
76
|
+
}
|
|
77
|
+
interface UseMachTableQueryReturn<TData> {
|
|
78
|
+
rows: TData[];
|
|
79
|
+
loading: boolean;
|
|
80
|
+
error: unknown | null;
|
|
81
|
+
page: number;
|
|
82
|
+
pageSize: number;
|
|
83
|
+
total: number;
|
|
84
|
+
sortModel: SortModel;
|
|
85
|
+
filterModel: FilterModel;
|
|
86
|
+
quickFilterText: string | null;
|
|
87
|
+
setQuickFilterText(value: string | null): void;
|
|
88
|
+
selectedKeys: string[];
|
|
89
|
+
selectedRows: TData[];
|
|
90
|
+
selectionState: MachTableRemoteSelectionState;
|
|
91
|
+
gridProps: GridOptions<TData>;
|
|
92
|
+
bindings: GridOptions<TData>;
|
|
93
|
+
reload(options?: {
|
|
94
|
+
resetPage?: boolean;
|
|
95
|
+
}): Promise<void>;
|
|
96
|
+
retry(): Promise<void>;
|
|
97
|
+
reset(): Promise<void>;
|
|
98
|
+
abort(): void;
|
|
99
|
+
clearSelection(): void;
|
|
100
|
+
selectAllMatching(): void;
|
|
101
|
+
applySelectionState(state: MachTableRemoteSelectionState): void;
|
|
102
|
+
}
|
|
103
|
+
/** React remote-list controller with cancellation, stale guards and cross-page selection. */
|
|
104
|
+
declare function useMachTableQuery<TData, TQuery = Record<string, unknown>>(options: UseMachTableQueryOptions<TData, TQuery>): UseMachTableQueryReturn<TData>;
|
|
105
|
+
|
|
106
|
+
interface UseMachTableControllerOptions<TData> {
|
|
107
|
+
/** Pass the result of useMachTableQuery for remote workflows. */
|
|
108
|
+
query?: UseMachTableQueryReturn<TData>;
|
|
109
|
+
editing?: UseMachTableEditingOptions<TData>;
|
|
110
|
+
initialSearch?: string;
|
|
111
|
+
}
|
|
112
|
+
interface UseMachTableControllerReturn<TData> {
|
|
113
|
+
table: UseMachGridReturn<TData>;
|
|
114
|
+
query: UseMachTableQueryReturn<TData> | null;
|
|
115
|
+
editing: UseMachTableEditingReturn<TData>;
|
|
116
|
+
bindings: GridOptions<TData>;
|
|
117
|
+
search: string;
|
|
118
|
+
setSearch(value: string): void;
|
|
119
|
+
selectedRows: TData[];
|
|
120
|
+
selectedCount: number;
|
|
121
|
+
busy: boolean;
|
|
122
|
+
error: unknown | null;
|
|
123
|
+
commands: MachTableCommands;
|
|
124
|
+
reload(): Promise<void>;
|
|
125
|
+
}
|
|
126
|
+
/** Cohesive React controller for API readiness, selection, editing and toolbar commands. */
|
|
127
|
+
declare function useMachTableController<TData>(options?: UseMachTableControllerOptions<TData>): UseMachTableControllerReturn<TData>;
|
|
128
|
+
|
|
129
|
+
export { type MachTablePageRequest as M, type UseMachGridReturn as U, type MachTablePageResult as a, type MachTableQuerySource as b, type MachTableRemoteSelectionState as c, type UseMachTableControllerOptions as d, type UseMachTableControllerReturn as e, type UseMachTableEditingOptions as f, type UseMachTableEditingReturn as g, type UseMachTableQueryOptions as h, type UseMachTableQueryReturn as i, useMachTableController as j, useMachTableEditing as k, useMachTableQuery as l, useMachGrid as u };
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { GridApi, GridChange, SaveChangesHandler, SortModel, FilterModel, GridOptions, OverlayContent, OverlayTemplate, MachTableCommands } from '@agile-team/mach-table';
|
|
2
|
+
import { MutableRefObject } from 'react';
|
|
3
|
+
|
|
4
|
+
interface UseMachGridReturn<TData = any> {
|
|
5
|
+
apiRef: MutableRefObject<GridApi<TData> | null>;
|
|
6
|
+
api: GridApi<TData> | null;
|
|
7
|
+
ready: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare function useMachGrid<TData = any>(): UseMachGridReturn<TData>;
|
|
10
|
+
|
|
11
|
+
interface UseMachTableEditingOptions<TData = any> {
|
|
12
|
+
guardBeforeUnload?: boolean;
|
|
13
|
+
beforeUnloadMessage?: string;
|
|
14
|
+
onSaveSuccess?(saved: readonly GridChange<TData>[]): void;
|
|
15
|
+
onSaveError?(error: unknown): void;
|
|
16
|
+
}
|
|
17
|
+
interface UseMachTableEditingReturn<TData = any> {
|
|
18
|
+
changes: GridChange<TData>[];
|
|
19
|
+
dirtyRowIds: string[];
|
|
20
|
+
dirty: boolean;
|
|
21
|
+
saving: boolean;
|
|
22
|
+
saveError: unknown | null;
|
|
23
|
+
save(handler: SaveChangesHandler<TData>, rowIds?: readonly string[]): Promise<GridChange<TData>[]>;
|
|
24
|
+
rollback(rowIds?: readonly string[]): boolean;
|
|
25
|
+
markSaved(rowIds?: readonly string[]): void;
|
|
26
|
+
reveal(rowId: string, colId?: string, edit?: boolean): boolean;
|
|
27
|
+
refresh(): void;
|
|
28
|
+
}
|
|
29
|
+
/** Reactive dirty/save workflow layered over useMachGrid(). */
|
|
30
|
+
declare function useMachTableEditing<TData = any>(table: UseMachGridReturn<TData>, options?: UseMachTableEditingOptions<TData>): UseMachTableEditingReturn<TData>;
|
|
31
|
+
|
|
32
|
+
type MachTableQuerySource<TQuery> = TQuery | (() => TQuery);
|
|
33
|
+
interface MachTablePageRequest<TQuery> {
|
|
34
|
+
page: number;
|
|
35
|
+
pageSize: number;
|
|
36
|
+
query: TQuery;
|
|
37
|
+
sortModel: SortModel;
|
|
38
|
+
filterModel: FilterModel;
|
|
39
|
+
quickFilterText: string | null;
|
|
40
|
+
signal: AbortSignal;
|
|
41
|
+
}
|
|
42
|
+
interface MachTablePageResult<TData> {
|
|
43
|
+
rows: readonly TData[];
|
|
44
|
+
total: number;
|
|
45
|
+
}
|
|
46
|
+
type MachTableRemoteSelectionState = {
|
|
47
|
+
mode: "explicit";
|
|
48
|
+
selectedKeys: string[];
|
|
49
|
+
} | {
|
|
50
|
+
mode: "allMatching";
|
|
51
|
+
excludedKeys: string[];
|
|
52
|
+
};
|
|
53
|
+
interface UseMachTableQueryOptions<TData, TQuery = Record<string, unknown>> {
|
|
54
|
+
request(params: MachTablePageRequest<TQuery>): Promise<MachTablePageResult<TData>>;
|
|
55
|
+
query: MachTableQuerySource<TQuery>;
|
|
56
|
+
/** Memoize object queries in React; queryKey can explicitly control reload dependencies. */
|
|
57
|
+
queryKey?: unknown;
|
|
58
|
+
rowKey: string | ((row: TData) => string | number);
|
|
59
|
+
initialPage?: number;
|
|
60
|
+
pageSize?: number;
|
|
61
|
+
pageSizeOptions?: readonly number[];
|
|
62
|
+
immediate?: boolean;
|
|
63
|
+
mode?: "auto" | "manual";
|
|
64
|
+
debounceMs?: number;
|
|
65
|
+
keepPreviousData?: boolean;
|
|
66
|
+
selectionScope?: "page" | "preserve" | "query";
|
|
67
|
+
clearSelectionOnQueryChange?: boolean;
|
|
68
|
+
initialQuickFilterText?: string | null;
|
|
69
|
+
errorOverlay?(context: {
|
|
70
|
+
error: unknown;
|
|
71
|
+
retry(): Promise<void>;
|
|
72
|
+
}): OverlayContent;
|
|
73
|
+
emptyOverlay?: OverlayTemplate;
|
|
74
|
+
onSuccess?(result: MachTablePageResult<TData>): void;
|
|
75
|
+
onError?(error: unknown): void;
|
|
76
|
+
}
|
|
77
|
+
interface UseMachTableQueryReturn<TData> {
|
|
78
|
+
rows: TData[];
|
|
79
|
+
loading: boolean;
|
|
80
|
+
error: unknown | null;
|
|
81
|
+
page: number;
|
|
82
|
+
pageSize: number;
|
|
83
|
+
total: number;
|
|
84
|
+
sortModel: SortModel;
|
|
85
|
+
filterModel: FilterModel;
|
|
86
|
+
quickFilterText: string | null;
|
|
87
|
+
setQuickFilterText(value: string | null): void;
|
|
88
|
+
selectedKeys: string[];
|
|
89
|
+
selectedRows: TData[];
|
|
90
|
+
selectionState: MachTableRemoteSelectionState;
|
|
91
|
+
gridProps: GridOptions<TData>;
|
|
92
|
+
bindings: GridOptions<TData>;
|
|
93
|
+
reload(options?: {
|
|
94
|
+
resetPage?: boolean;
|
|
95
|
+
}): Promise<void>;
|
|
96
|
+
retry(): Promise<void>;
|
|
97
|
+
reset(): Promise<void>;
|
|
98
|
+
abort(): void;
|
|
99
|
+
clearSelection(): void;
|
|
100
|
+
selectAllMatching(): void;
|
|
101
|
+
applySelectionState(state: MachTableRemoteSelectionState): void;
|
|
102
|
+
}
|
|
103
|
+
/** React remote-list controller with cancellation, stale guards and cross-page selection. */
|
|
104
|
+
declare function useMachTableQuery<TData, TQuery = Record<string, unknown>>(options: UseMachTableQueryOptions<TData, TQuery>): UseMachTableQueryReturn<TData>;
|
|
105
|
+
|
|
106
|
+
interface UseMachTableControllerOptions<TData> {
|
|
107
|
+
/** Pass the result of useMachTableQuery for remote workflows. */
|
|
108
|
+
query?: UseMachTableQueryReturn<TData>;
|
|
109
|
+
editing?: UseMachTableEditingOptions<TData>;
|
|
110
|
+
initialSearch?: string;
|
|
111
|
+
}
|
|
112
|
+
interface UseMachTableControllerReturn<TData> {
|
|
113
|
+
table: UseMachGridReturn<TData>;
|
|
114
|
+
query: UseMachTableQueryReturn<TData> | null;
|
|
115
|
+
editing: UseMachTableEditingReturn<TData>;
|
|
116
|
+
bindings: GridOptions<TData>;
|
|
117
|
+
search: string;
|
|
118
|
+
setSearch(value: string): void;
|
|
119
|
+
selectedRows: TData[];
|
|
120
|
+
selectedCount: number;
|
|
121
|
+
busy: boolean;
|
|
122
|
+
error: unknown | null;
|
|
123
|
+
commands: MachTableCommands;
|
|
124
|
+
reload(): Promise<void>;
|
|
125
|
+
}
|
|
126
|
+
/** Cohesive React controller for API readiness, selection, editing and toolbar commands. */
|
|
127
|
+
declare function useMachTableController<TData>(options?: UseMachTableControllerOptions<TData>): UseMachTableControllerReturn<TData>;
|
|
128
|
+
|
|
129
|
+
export { type MachTablePageRequest as M, type UseMachGridReturn as U, type MachTablePageResult as a, type MachTableQuerySource as b, type MachTableRemoteSelectionState as c, type UseMachTableControllerOptions as d, type UseMachTableControllerReturn as e, type UseMachTableEditingOptions as f, type UseMachTableEditingReturn as g, type UseMachTableQueryOptions as h, type UseMachTableQueryReturn as i, useMachTableController as j, useMachTableEditing as k, useMachTableQuery as l, useMachGrid as u };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZ5XSUQ5Ocjs = require('./chunk-Z5XSUQ5O.cjs');exports.useMachTableController = _chunkZ5XSUQ5Ocjs.d; exports.useMachTableEditing = _chunkZ5XSUQ5Ocjs.b; exports.useMachTableQuery = _chunkZ5XSUQ5Ocjs.c;
|
|
2
|
+
//# sourceMappingURL=workflows.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["d:\\office-project\\wl\\MachTable\\packages\\react\\dist\\workflows.cjs"],"names":[],"mappings":"AAAA,iIAAsD,yJAAoF","file":"D:\\office-project\\wl\\MachTable\\packages\\react\\dist\\workflows.cjs"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { M as MachTablePageRequest, a as MachTablePageResult, b as MachTableQuerySource, c as MachTableRemoteSelectionState, d as UseMachTableControllerOptions, e as UseMachTableControllerReturn, f as UseMachTableEditingOptions, g as UseMachTableEditingReturn, h as UseMachTableQueryOptions, i as UseMachTableQueryReturn, j as useMachTableController, k as useMachTableEditing, l as useMachTableQuery } from './workflows-BhNumPcR.cjs';
|
|
2
|
+
import '@agile-team/mach-table';
|
|
3
|
+
import 'react';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { M as MachTablePageRequest, a as MachTablePageResult, b as MachTableQuerySource, c as MachTableRemoteSelectionState, d as UseMachTableControllerOptions, e as UseMachTableControllerReturn, f as UseMachTableEditingOptions, g as UseMachTableEditingReturn, h as UseMachTableQueryOptions, i as UseMachTableQueryReturn, j as useMachTableController, k as useMachTableEditing, l as useMachTableQuery } from './workflows-BhNumPcR.js';
|
|
2
|
+
import '@agile-team/mach-table';
|
|
3
|
+
import 'react';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agile-team/mach-table-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Official React 18+ adapter for the MachTable enterprise data grid",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -41,6 +41,16 @@
|
|
|
41
41
|
"default": "./dist/index.cjs"
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
|
+
"./workflows": {
|
|
45
|
+
"import": {
|
|
46
|
+
"types": "./dist/workflows.d.ts",
|
|
47
|
+
"default": "./dist/workflows.js"
|
|
48
|
+
},
|
|
49
|
+
"require": {
|
|
50
|
+
"types": "./dist/workflows.d.cts",
|
|
51
|
+
"default": "./dist/workflows.cjs"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
44
54
|
"./styles.css": {
|
|
45
55
|
"types": "./dist/mach-table.css.d.ts",
|
|
46
56
|
"default": "./dist/mach-table.css"
|
|
@@ -57,7 +67,7 @@
|
|
|
57
67
|
"**/*.css"
|
|
58
68
|
],
|
|
59
69
|
"dependencies": {
|
|
60
|
-
"@agile-team/mach-table": "0.
|
|
70
|
+
"@agile-team/mach-table": "0.15.0"
|
|
61
71
|
},
|
|
62
72
|
"peerDependencies": {
|
|
63
73
|
"react": ">=18.0.0",
|