@agile-team/mach-table-vue 0.23.0 → 0.24.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.
Files changed (56) hide show
  1. package/README.md +37 -111
  2. package/dist/MachTable-AXAVVKW5.cjs +1 -0
  3. package/dist/MachTable-PX2BHIPK.js +1 -0
  4. package/dist/{MachTable-DH0offab.d.cts → MachTable-jS92BIXm.d.cts} +3 -6
  5. package/dist/{MachTable-DH0offab.d.ts → MachTable-jS92BIXm.d.ts} +3 -6
  6. package/dist/adapters.cjs +1 -0
  7. package/dist/adapters.d.cts +53 -0
  8. package/dist/adapters.d.ts +53 -0
  9. package/dist/adapters.js +1 -0
  10. package/dist/async.cjs +1 -1
  11. package/dist/async.d.cts +4 -3
  12. package/dist/async.d.ts +4 -3
  13. package/dist/async.js +1 -1
  14. package/dist/chunk-3LIWCBSP.cjs +1 -0
  15. package/dist/chunk-7LXDVLDD.cjs +1 -0
  16. package/dist/chunk-7MRR4IDI.js +1 -0
  17. package/dist/chunk-CVSAWAOZ.js +1 -0
  18. package/dist/chunk-EGEQGM3D.cjs +1 -0
  19. package/dist/chunk-IS6G3WLH.js +1 -0
  20. package/dist/chunk-OFITMI6J.cjs +1 -0
  21. package/dist/chunk-SQVY5G55.js +1 -0
  22. package/dist/chunk-XECIDGIZ.cjs +1 -0
  23. package/dist/chunk-YTEW56VQ.js +1 -0
  24. package/dist/globalRegistration-bUvkfBzA.d.ts +13 -0
  25. package/dist/globalRegistration-oxdZVSgD.d.cts +13 -0
  26. package/dist/index.cjs +1 -1
  27. package/dist/index.d.cts +8 -60
  28. package/dist/index.d.ts +8 -60
  29. package/dist/index.js +1 -1
  30. package/dist/ui.cjs +1 -1
  31. package/dist/ui.d.cts +1 -1
  32. package/dist/ui.d.ts +1 -1
  33. package/dist/ui.js +1 -1
  34. package/dist/useMachTable-DXGZxgIJ.d.ts +12 -0
  35. package/dist/useMachTable-YH4Xj6dS.d.cts +12 -0
  36. package/dist/workflows.cjs +1 -1
  37. package/dist/workflows.d.cts +139 -4
  38. package/dist/workflows.d.ts +139 -4
  39. package/dist/workflows.js +1 -1
  40. package/package.json +13 -3
  41. package/dist/MachTable-A3J2IU6F.cjs +0 -1
  42. package/dist/MachTable-JB3IUGBZ.js +0 -1
  43. package/dist/chunk-2YPTQYP3.js +0 -1
  44. package/dist/chunk-AVPWFS7M.js +0 -1
  45. package/dist/chunk-D3AAW636.cjs +0 -1
  46. package/dist/chunk-FZLCBKUV.js +0 -1
  47. package/dist/chunk-H37MDBNW.js +0 -1
  48. package/dist/chunk-QHFBQ37M.cjs +0 -1
  49. package/dist/chunk-Z24LHO3W.cjs +0 -1
  50. package/dist/chunk-ZIBU265Z.cjs +0 -1
  51. package/dist/globalRegistration-BhAR-B5k.d.cts +0 -19
  52. package/dist/globalRegistration-DTWLNxPI.d.ts +0 -19
  53. package/dist/workflows-CyXKgNRx.d.ts +0 -145
  54. package/dist/workflows-DEOJrSuj.d.cts +0 -145
  55. package/dist/{MachTableToolbar-CDkTtitl.d.cts → MachTableToolbar-BUFcnsF4.d.cts} +1 -1
  56. package/dist/{MachTableToolbar-CDkTtitl.d.ts → MachTableToolbar-BUFcnsF4.d.ts} +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/mach-table-vue",
3
- "version": "0.23.0",
3
+ "version": "0.24.0",
4
4
  "description": "Official Vue 3 adapter for the MachTable enterprise data grid",
5
5
  "keywords": [
6
6
  "vue",
@@ -62,6 +62,16 @@
62
62
  "default": "./dist/workflows.cjs"
63
63
  }
64
64
  },
65
+ "./adapters": {
66
+ "import": {
67
+ "types": "./dist/adapters.d.ts",
68
+ "default": "./dist/adapters.js"
69
+ },
70
+ "require": {
71
+ "types": "./dist/adapters.d.cts",
72
+ "default": "./dist/adapters.cjs"
73
+ }
74
+ },
65
75
  "./worker": {
66
76
  "import": {
67
77
  "types": "./dist/worker.d.ts",
@@ -108,7 +118,7 @@
108
118
  "**/*.css"
109
119
  ],
110
120
  "dependencies": {
111
- "@agile-team/mach-table": "0.23.0"
121
+ "@agile-team/mach-table": "0.24.0"
112
122
  },
113
123
  "peerDependencies": {
114
124
  "vue": ">=3.2.0"
@@ -122,5 +132,5 @@
122
132
  "test": "vitest run",
123
133
  "test:coverage": "vitest run --coverage"
124
134
  },
125
- "readme": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/ChenyCHENYU/MachTable/main/assets/mach-table-logo.svg\" alt=\"MachTable\" width=\"760\" />\n</p>\n\n# @agile-team/mach-table-vue\n\nOfficial Vue 3 adapter for MachTable 0.23. It provides a generic `<MachTable>`, native typed slots, dedicated app/route configuration, cohesive controllers, advanced-filter aware remote query, conflict-aware editing composables, persistent named views, optional and persistent column resizing, bounded random-access remote blocks, governed domain APIs, optional Worker processing, an optional standard toolbar, optional Element Plus editors, async boundaries, in-place renderer refresh and automatic lifecycle cleanup. `RobotGrid` remains a deprecated 0.x alias.\n\n## Install\n\n```bash\npnpm add @agile-team/mach-table-vue\n```\n\nImport the stylesheet once from your application entry:\n\n```ts\nimport \"@agile-team/mach-table-vue/styles.css\";\n```\n\nOptional large local-data Worker helpers use the same installed package but a separate chunk:\n\n```ts\nimport { createWorkerDataProcessor } from \"@agile-team/mach-table-vue/worker\";\n```\n\n## Integration modes\n\n### Local, route-level import\n\nBest when only a few routes use a grid. A lazy-loaded route naturally keeps MachTable in that route's chunk.\n\n```vue\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { MachTable, useMachTable, type ColDef } from \"@agile-team/mach-table-vue\";\n\ninterface Row { id: string; name: string }\nconst grid = useMachTable<Row>();\nconst rows = ref<Row[]>([{ id: \"1\", name: \"MachTable\" }]);\nconst columns: ColDef<Row>[] = [{ field: \"name\", headerName: \"Name\", flex: 1 }];\n</script>\n\n<template>\n <div style=\"height: 520px\">\n <MachTable\n :ref=\"grid.ref\"\n :row-data=\"rows\"\n :column-defs=\"columns\"\n row-key=\"id\"\n state-key=\"customer-list\"\n enable-column-resize\n striped-rows\n />\n </div>\n</template>\n```\n\n### Global synchronous plugin\n\nBest when most screens render tables. Components are available in every template without page-level runtime imports.\n\n```ts\n// main.ts\nimport { createApp } from \"vue\";\nimport { MachTablePlugin } from \"@agile-team/mach-table-vue\";\nimport \"@agile-team/mach-table-vue/styles.css\";\nimport App from \"./App.vue\";\n\ncreateApp(App).use(MachTablePlugin).mount(\"#app\");\n```\n\n### Global async plugin\n\nBest for large admin or low-code applications. The plugin is registered at startup, while the component and Core stay in a separate chunk until the first `<MachTable>` is rendered.\n\n```ts\n// main.ts\nimport { createApp } from \"vue\";\nimport AsyncMachTablePlugin, { preloadMachTable } from \"@agile-team/mach-table-vue/async\";\nimport \"@agile-team/mach-table-vue/styles.css\";\nimport App from \"./App.vue\";\n\ncreateApp(App).use(AsyncMachTablePlugin).mount(\"#app\");\n\n// Optional route-hover prefetch; dynamic imports are cached and idempotent.\nvoid preloadMachTable();\n```\n\nThe standard toolbar is a separate, tree-shakeable entry. Register it globally only when needed:\n\n```ts\nimport MachTableUiPlugin from \"@agile-team/mach-table-vue/ui\";\napp.use(MachTableUiPlugin);\n```\n\nAfter either global plugin is installed, pages can use `<MachTable>` directly. Keep conventions in a dedicated `mach-table.config.ts`, then install it with one clean line:\n\n```ts\n// mach-table.config.ts\nimport { defineMachTableConfig, defineMachTablePreset } from \"@agile-team/mach-table-vue\";\nexport default defineMachTableConfig({\n defaults: {\n size: \"compact\",\n enableColumnResize: true,\n pagination: { pageSize: 20, pageSizeOptions: [20, 50, 100] },\n defaultColDef: { sortable: true, resizable: true, filter: true }\n },\n defaultPreset: \"list\",\n presets: { list: defineMachTablePreset({ stripedRows: true }) }\n});\n\n// main.ts\napp.use(MachTablePlugin, machTableConfig);\n```\n\nLayouts can reactively refine defaults and presets with `provideMachTableConfig(...)`; direct table props always win. `provideMachTableDefaults(...)` remains as a smaller compatibility API. The async plugin also accepts `asyncComponentOptions` with `loadingComponent`, `errorComponent`, `delay`, `timeout` and `onError`.\n\nThe adapter installs the matching `@agile-team/mach-table` core automatically and re-exports its complete API and types. Only `vue >= 3.2` remains a peer dependency supplied by the host application. Existing local imports remain fully supported.\n\nRemote B-side lists can bind `useMachTableQuery()` directly. Use `mode: \"auto\"` for live filters or `mode: \"manual\"` for a submit-to-search form. For the smallest composable-only chunk, import query/editing/controller helpers from `@agile-team/mach-table-vue/workflows`. They own controlled server pagination, AbortSignal cancellation, stale-response protection, retry state and cross-page selection without exposing `gridApi` to ordinary pages.\n\n`useMachTableController()` composes table readiness, query, editing, selection, errors and standard commands. Pair it with `MachTableToolbar` from `/ui`, or bind `controller.commands` to your own design-system toolbar.\n\nMillion-row batch actions use `selectionScope: \"query\"` and compact `allMatching + excludedKeys` rules, so clients never download every matching row ID.\n\n`useMachTableEditing()` exposes reactive dirty changes, detailed partial-save results, validation failures, version conflicts, failed-row reveal, rollback and an optional unsaved-page guard. `lastSaveResult`, `saveIssues`, `failedRowIds` and `resolveConflict()` keep page code small while preserving explicit business decisions. Semantic business types and cached dictionaries are configured once with `createBusinessColumnTypes()` and `createCachedDictionary()`.\n\n```ts\nconst editing = useMachTableEditing(grid, { guardBeforeUnload: true });\nconst result = await editing.saveDetailed(orderApi.saveChanges);\nif (result.conflicts.length) editing.reveal(result.conflicts[0].rowId);\n\nasync function saveCurrentView() {\n if (!grid.api.value) return;\n const views = createGridViewManager(grid.api.value, {\n scope: `${tenantId}:${userId}:orders`\n });\n await views.save(\"My pending orders\");\n}\n```\n\nRemote query requests include both `filterModel` and the serializable nested `advancedFilterModel`. See the [advanced filter](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/recipes/advanced-filter.md), [named views](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/recipes/saved-views.md), and [batch save](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/recipes/batch-save.md) guides.\n\nElement Plus editors are optional and registered once without making EP a package dependency:\n\n```ts\nimport { createElementPlusEditors } from \"@agile-team/mach-table-vue/editors\";\n\nconst ep = createElementPlusEditors({\n input: ElInput,\n inputNumber: ElInputNumber,\n select: ElSelect,\n datePicker: ElDatePicker\n});\n```\n\nUse `api.openColumnWorkbench()` for the built-in column settings UI. Lazy trees opt in with `isTreeRowExpandable` plus `loadTreeChildren`; ordinary tree data is unchanged.\n\n## Cell and full-row editing\n\nCore helpers are re-exported, so no second package import is needed:\n\n```vue\n<script setup lang=\"ts\">\nimport { rowActionsColumn } from \"@agile-team/mach-table-vue\";\n\nconst columns = [\n { field: \"name\", editable: true },\n { field: \"age\", editable: true, cellEditor: \"number\" },\n rowActionsColumn({ onView, onDelete, overflow: \"drawer\" })\n];\n</script>\n\n<template>\n <MachTable edit-type=\"fullRow\" :column-defs=\"columns\" :row-data=\"rows\" />\n</template>\n```\n\nCell mode is the default and provides a pencil plus inline confirm/cancel controls. Set `editable-indicator=\"always\"`, `\"hover\"` or `\"none\"` to control the affordance.\n\nDocumentation: [Vue guide](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/vue.md) · [Enterprise integration](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md) · [Element Plus](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/element-plus.md) · [Naive UI](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/naive-ui.md)\n\nSource-available © ChenyCHENYU (Agile Team). Any use requires prior written authorization. See the [license](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) and [authorization process](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md).\n"
135
+ "readme": "<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/ChenyCHENYU/MachTable/main/assets/mach-table-logo.svg\" alt=\"MachTable\" width=\"760\" />\n</p>\n\n# @agile-team/mach-table-vue\n\nMachTable 0.24 的官方 Vue 3 适配包。一个依赖即可获得 Core、泛型 `<MachTable>`、原生 slots、应用/路由配置、按需工作流、异步组件边界和自动生命周期清理。\n\n```bash\npnpm add @agile-team/mach-table-vue\n```\n\n应用入口只引入一次样式:\n\n```ts\nimport \"@agile-team/mach-table-vue/styles.css\";\n```\n\n## 局部接入\n\n```vue\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { MachTable, useMachTable, type ColDef } from \"@agile-team/mach-table-vue\";\n\ninterface Row { id: string; name: string }\nconst table = useMachTable<Row>();\nconst rows = ref<Row[]>([{ id: \"1\", name: \"MachTable\" }]);\nconst columns: ColDef<Row>[] = [{ field: \"name\", flex: 1, editable: true }];\n</script>\n\n<template>\n <div style=\"height: 520px\">\n <MachTable\n :ref=\"table.ref\"\n :row-data=\"rows\"\n :column-defs=\"columns\"\n row-key=\"id\"\n enable-column-resize\n :persistence=\"{ key: 'customers:list', sections: ['columns'] }\"\n />\n </div>\n</template>\n```\n\n## 全局接入\n\n表格页面较多时,全局注册一次,页面模板直接使用 `<MachTable>`:\n\n```ts\nimport { createApp } from \"vue\";\nimport { MachTablePlugin } from \"@agile-team/mach-table-vue\";\nimport machTableConfig from \"@/config/mach-table.config\";\n\ncreateApp(App).use(MachTablePlugin, machTableConfig).mount(\"#app\");\n```\n\n需要减少首屏代码时改用异步全局插件:\n\n```ts\nimport AsyncMachTablePlugin, { preloadMachTable } from \"@agile-team/mach-table-vue/async\";\n\napp.use(AsyncMachTablePlugin, machTableConfig);\nvoid preloadMachTable(); // 可选:路由 hover 时预取\n```\n\n推荐把约定集中到独立文件:\n\n```ts\n// src/config/mach-table.config.ts\nimport { defineMachTableConfig, defineMachTablePreset } from \"@agile-team/mach-table-vue\";\n\nexport default defineMachTableConfig({\n defaults: {\n size: \"compact\",\n columnLayout: \"fit\",\n enableColumnResize: true,\n defaultColDef: { sortable: true, filter: true, resizable: true }\n },\n defaultPreset: \"list\",\n presets: {\n list: defineMachTablePreset({ stripedRows: true }),\n crud: defineMachTablePreset({ rowSelection: \"multiple\", editType: \"fullRow\" })\n }\n});\n```\n\n布局或路由可用响应式 `provideMachTableConfig()` 叠加配置,表格 props 始终拥有最高优先级。\n\n## 按需子入口\n\n```ts\nimport { useMachTableQuery, useMachTableEditing } from \"@agile-team/mach-table-vue/workflows\";\nimport { MachTableToolbar } from \"@agile-team/mach-table-vue/ui\";\nimport { vueCellRenderer } from \"@agile-team/mach-table-vue/adapters\";\nimport { createElementPlusEditors } from \"@agile-team/mach-table-vue/editors\";\nimport { createWorkerDataProcessor } from \"@agile-team/mach-table-vue/worker\";\n```\n\n- `/workflows`:请求取消、防过期覆盖、服务端分页、跨页选择、脏数据和冲突保存。\n- `/ui`:可选标准工具栏;需要全局组件时另行 `app.use(MachTableUiPlugin)`。\n- `/adapters`:自定义 Vue renderer/editor/detail/overlay 桥接。\n- `/editors`:可选 Element Plus 编辑器,Element Plus 由宿主注入。\n- `/worker`:大型本地过滤/排序的独立 Worker 能力。\n\n该包自动依赖 `@agile-team/mach-table` 并重导出 Core 类型;宿主只需提供 `vue >= 3.2`。\n\n文档:[Vue 指南](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/vue.md) · [企业接入](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md) · [配置中心](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/configuration.md)\n\nSource-available © ChenyCHENYU (Agile Team). 任何使用均须事先取得书面授权。详见 [LICENSE](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSE) 与[授权流程](https://github.com/ChenyCHENYU/MachTable/blob/main/LICENSING.md)。\n"
126
136
  }
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZIBU265Zcjs = require('./chunk-ZIBU265Z.cjs');require('./chunk-QHFBQ37M.cjs');exports.MachTable = _chunkZIBU265Zcjs.j; exports.RobotGrid = _chunkZIBU265Zcjs.k;
@@ -1 +0,0 @@
1
- import{j as a,k as b}from"./chunk-AVPWFS7M.js";import"./chunk-2YPTQYP3.js";export{a as MachTable,b as RobotGrid};
@@ -1 +0,0 @@
1
- import{defineMachTableConfig as d,mergeMachTableConfig as l,normalizeMachTableConfig as t,resolveMachTableGridOptions as s}from"@agile-team/mach-table";import{computed as b,inject as a,isRef as c,provide as r,shallowRef as i}from"vue";var f=Symbol("mach-table-defaults"),o=Symbol("mach-table-config"),T=t();function h(e){return typeof e=="function"?e():c(e)?e.value:e}function m(e){return i(t(e))}function M(e){let p=a(o,i(T)),n=b(()=>l(p.value,h(e)));return r(o,n),r(f,n.value.defaults),n}function y(e){M(()=>({defaults:typeof e=="function"?e():c(e)?e.value:e}))}function v(){let e=a(o,null);return e?e.value.defaults:a(f,{})}function O(){return a(o,i(T))}export{s as a,f as b,o as c,m as d,M as e,y as f,v as g,O as h};
@@ -1 +0,0 @@
1
- import{a as v,h as V}from"./chunk-2YPTQYP3.js";import{defineComponent as $,getCurrentInstance as j,h as _,onBeforeUnmount as F,onMounted as W,ref as Y,watch as q}from"vue";import{createGrid as K,EVENT_TYPES as B,GRID_OPTION_KEYS as A,GRID_OPTION_META as U}from"@agile-team/mach-table";import{h as b,render as h,renderSlot as H,getCurrentInstance as I,shallowReactive as x}from"vue";function T(t){if(t)return t;try{return I()?.appContext}catch{return}}function G(t,e,a,o){let n=b({setup:()=>()=>b(t,{...e})});return o&&(n.appContext=o),h(n,a),()=>h(null,a)}function D(t,e,a,o,r=!0){let i=b({name:"MachTableSlot",setup:()=>()=>H({default:t},"default",e())});o&&(i.appContext=o);let l=!1,u=()=>{l||h(i,a)};return r?queueMicrotask(u):u(),()=>{l=!0,h(null,a)}}function Z(t,e){let a=T(e?.appContext);return o=>{let r=document.createElement("div");r.className="mach-cell-vue",r.style.width="100%";let n=x({...o}),i=G(t,n,r,a),l=!1;return{el:r,refresh:u=>(Object.assign(n,u),!0),destroy:()=>{l||(l=!0,window.setTimeout(i,0))}}}}function ee(t,e){let a=T(e?.appContext);return o=>{let r=document.createElement("div");r.style.height="100%";let n=G(t,o,r,a),i=!1;return{el:r,destroy:()=>{i||(i=!0,n())}}}}function M(t,e){let a=T(e?.appContext);return o=>{let r=document.createElement("div");r.className="mach-cell-vue mach-cell-vue--slot",r.style.width="100%";let n=x({...o}),i=D(t,()=>n,r,a);return{el:r,refresh:l=>(Object.assign(n,l),!0),destroy:i}}}function N(t,e){let a=T(e?.appContext);return o=>{let r=document.createElement("div");r.className="mach-header-vue-slot";let n=D(t,()=>o,r,a);return{el:r,destroy:n}}}function w(t,e){let a=T(e?.appContext);return o=>{let r=x({value:o.value}),n=document.createElement("div");n.className="mach-cell-vue mach-cell-vue--editor";let l=D(t,()=>({...o,value:r.value,setValue:u=>{r.value=u},commit:()=>o.api.stopEditing(!1),cancel:()=>o.api.stopEditing(!0)}),n,a,!1);return{el:n,getValue:()=>r.value,focus:()=>{n.querySelector("input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex='-1'])")?.focus()},destroy:l}}}function S(t,e){let a=T(e?.appContext);return o=>{let r=document.createElement("div");r.className="mach-detail-vue-slot",r.style.height="100%";let n=D(t,()=>o,r,a);return{el:r,destroy:n}}}function C(t,e){let a=T(e?.appContext);return()=>{let o=document.createElement("div");o.className="mach-overlay-vue-slot";let r=D(t,()=>({}),o,a);return{el:o,destroy:r}}}function O(t,e,a){return t[`${e}-${a}`]??t[`${e}-${a.replace(/[.\s]+/g,"-")}`]}function P(t,e,a){return t.map((o,r)=>{if(Array.isArray(o.children)){let y=o;return{...y,children:P(y.children,e,a)}}let n=o,i=n.colId??n.field??`col_${r}`,l=O(e,"cell",i)??(i==="op"?e.actions:void 0)??e.cell,u=O(e,"header",i)??e.header,g=O(e,"editor",i)??e.editor;return{...n,...l?{cellRenderer:M(l,{appContext:a})}:{},...u?{headerComponent:N(u,{appContext:a})}:{},...g?{cellEditor:w(g,{appContext:a})}:{}}})}function ne(t,e,a){let o=t.columnDefs?P(t.columnDefs,e,a):t.columnDefs;return{...t,columnDefs:o,...e.detail&&!t.detailRowRenderer?{detailRowRenderer:S(e.detail,{appContext:a})}:{},...e.loading?{overlayLoadingTemplate:C(e.loading,{appContext:a})}:{},...e.empty?{overlayNoRowsTemplate:C(e.empty,{appContext:a})}:{}}}function L(t,e){let a,o,r=t.detail?S(t.detail,{appContext:e}):void 0,n=t.loading?C(t.loading,{appContext:e}):void 0,i=t.empty?C(t.empty,{appContext:e}):void 0;return l=>(l.columnDefs!==a&&(a=l.columnDefs,o=l.columnDefs?P(l.columnDefs,t,e):l.columnDefs),{...l,columnDefs:o,...r&&!l.detailRowRenderer?{detailRowRenderer:r}:{},...n?{overlayLoadingTemplate:n}:{},...i?{overlayNoRowsTemplate:i}:{}})}var k=A.filter(t=>!["className","ariaLabel","ariaLabelledBy","ariaDescribedBy"].includes(t)),f={};for(let t of k){let e=U[t].kind,a=e==="boolean"?Boolean:e==="number"?Number:e==="array"?Array:e==="function"?Function:e==="boolean-object"?[Boolean,Object]:e==="object"?Object:e==="string"?String:void 0;f[t]={type:a,default:void 0}}f.className={type:String,default:void 0};f.gridClassName={type:String,default:void 0};f.gridAriaLabel={type:String,default:void 0};f.gridAriaLabelledBy={type:String,default:void 0};f.gridAriaDescribedBy={type:String,default:void 0};f.preset={type:[String,Array,Boolean],default:void 0};function z(t){return"on"+t.charAt(0).toUpperCase()+t.slice(1)}var J=$({name:"MachTable",inheritAttrs:!1,props:f,emits:[...B],setup(t,{expose:e,attrs:a,emit:o,slots:r}){let n=t,i=Y(null),l=null,u=V(),g=L(r,j()?.appContext),y=null,E=new Set,R=()=>{let d={};for(let s of k){let m=n[s];m!==void 0&&(d[s]=m)}n.gridClassName!==void 0&&(d.className=n.gridClassName),n.gridAriaLabel!==void 0&&(d.ariaLabel=n.gridAriaLabel),n.gridAriaLabelledBy!==void 0&&(d.ariaLabelledBy=n.gridAriaLabelledBy),n.gridAriaDescribedBy!==void 0&&(d.ariaDescribedBy=n.gridAriaDescribedBy);let c=v(u.value,n.preset,d,s=>{let m=`${s.code}:${s.preset??""}`;E.has(m)||(E.add(m),u.value.onConfigWarning?u.value.onConfigWarning(s):console.warn(s.message))}),p=g(c.options);return y={options:p,explain:s=>s==="columnDefs"&&p.columnDefs!==c.options.columnDefs?{key:s,value:p.columnDefs,source:"Vue slots",layers:[...c.explain(s).layers,{name:"Vue slots",value:p.columnDefs}]}:c.explain(s)},y.options};return W(()=>{if(!i.value)return;let d=R();for(let c of B){let p=z(c),s=d[p];d[p]=m=>{typeof s=="function"&&s(m),o(c,m)}}l=K(i.value,d)}),F(()=>{l?.destroy(),l=null}),q(()=>{let d=R();return[...A.map(c=>d[c])]},(d,c)=>{if(!l)return;let p={};d.forEach((s,m)=>{Object.is(s,c[m])||(p[A[m]]=s)}),Object.keys(p).length>0&&l.updateOptions(p)}),e({getApi:()=>l,getResolvedConfig:()=>y?.options??R(),explainOption:d=>(y??v(u.value,n.preset,{})).explain(d)}),()=>_("div",{...a,ref:i,class:["mach-vue-host",n.className,a.class]})}}),Q=J,ue=Q;export{Z as a,ee as b,M as c,N as d,w as e,S as f,C as g,ne as h,L as i,Q as j,ue as k};
@@ -1 +0,0 @@
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 _vue = require('vue');function _(){let a=_vue.ref.call(void 0, null),l=_vue.shallowRef.call(void 0, null),g=_vue.shallowRef.call(void 0, !1),o=0;return _vue.watch.call(void 0, a,s=>{let p=++o;if(s&&typeof s.getApi=="function"){l.value=s.getApi(),g.value=!1;let d=l.value;d&&d.whenReady().then(()=>{o===p&&l.value===d&&!d.isDestroyed()&&(g.value=!0)})}else l.value=null,g.value=!1},{flush:"post"}),_vue.onScopeDispose.call(void 0, ()=>{o++,a.value=null,l.value=null,g.value=!1}),{ref:a,api:l,ready:g}}var _machtable = require('@agile-team/mach-table');function ae(a,l={}){let g=_vue.shallowRef.call(void 0, []),o=_vue.ref.call(void 0, []),s=_vue.ref.call(void 0, !1),p=_vue.shallowRef.call(void 0, null),d=_vue.shallowRef.call(void 0, null),b=_vue.computed.call(void 0, ()=>o.value.length>0),M=_vue.computed.call(void 0, ()=>[..._nullishCoalesce(_optionalChain([d, 'access', _2 => _2.value, 'optionalAccess', _3 => _3.failures]), () => ([])),..._nullishCoalesce(_optionalChain([d, 'access', _4 => _4.value, 'optionalAccess', _5 => _5.conflicts]), () => ([]))]),D=_vue.computed.call(void 0, ()=>[...new Set(M.value.map(r=>r.rowId))]),S=null,m=()=>{let r=a.api.value;if(!r||r.isDestroyed()){o.value=[],g.value=[];return}o.value=r.getDirtyRowIds(),g.value=r.getChanges()};_vue.watch.call(void 0, a.api,r=>{_optionalChain([S, 'optionalCall', _6 => _6()]),S=null,m(),!(!r||r.isDestroyed())&&(S=r.addEventListener("dirtyStateChanged",m))},{immediate:!0});let y=async(r,c)=>{let v=a.api.value;if(!v||v.isDestroyed())throw new Error("[MachTable] Cannot save before the grid is ready.");if(s.value)throw new Error("[MachTable] A save operation is already in progress.");s.value=!0,p.value=null,d.value=null;try{let f=await v.saveChangesDetailed(r,c);return d.value=f,m(),_optionalChain([l, 'access', _7 => _7.onSaveSuccess, 'optionalCall', _8 => _8(f.saved)]),_optionalChain([l, 'access', _9 => _9.onSaveResult, 'optionalCall', _10 => _10(f)]),f}catch(f){throw p.value=f,_optionalChain([l, 'access', _11 => _11.onSaveError, 'optionalCall', _12 => _12(f)]),f}finally{s.value=!1}},T=async(r,c)=>(await y(r,c)).saved,n=()=>{d.value=null},Q=(r,c)=>{let v=d.value,f=_optionalChain([v, 'optionalAccess', _13 => _13.conflicts, 'access', _14 => _14.find, 'call', _15 => _15(C=>C.rowId===r)]),h=a.api.value;return!v||!f||!h||!_machtable.resolveSaveConflict.call(void 0, h,f,c)?!1:(d.value={...v,failures:v.failures,conflicts:v.conflicts.filter(C=>C.rowId!==r)},m(),!0)},z=r=>{let c=_nullishCoalesce(_optionalChain([a, 'access', _16 => _16.api, 'access', _17 => _17.value, 'optionalAccess', _18 => _18.rollbackChanges, 'call', _19 => _19(r)]), () => (!1));return m(),c},E=r=>{_optionalChain([a, 'access', _20 => _20.api, 'access', _21 => _21.value, 'optionalAccess', _22 => _22.markChangesSaved, 'call', _23 => _23(r)]),m()},w=(r,c,v=!1)=>{let f=a.api.value,h=_optionalChain([f, 'optionalAccess', _24 => _24.getNodeById, 'call', _25 => _25(r)]);return!f||!h||h.rowIndex<0?!1:(f.scrollToIndex(h.rowIndex,"middle"),c&&v?f.startEditingCell({rowIndex:h.rowIndex,colId:c}):!0)},U=r=>{if(!b.value)return;let c=_nullishCoalesce(l.beforeUnloadMessage, () => ("\u5B58\u5728\u672A\u4FDD\u5B58\u7684\u8868\u683C\u4FEE\u6539\u3002"));return r.preventDefault(),r.returnValue=c,c};return l.guardBeforeUnload&&typeof window<"u"&&window.addEventListener("beforeunload",U),_vue.onScopeDispose.call(void 0, ()=>{_optionalChain([S, 'optionalCall', _26 => _26()]),S=null,l.guardBeforeUnload&&typeof window<"u"&&window.removeEventListener("beforeunload",U)}),{changes:g,dirtyRowIds:o,dirty:b,saving:s,saveError:p,lastSaveResult:d,saveIssues:M,failedRowIds:D,save:T,saveDetailed:y,clearSaveIssues:n,resolveConflict:Q,rollback:z,markSaved:E,reveal:w,refresh:m}}function re(a){return typeof a=="function"?a():_vue.isRef.call(void 0, a)?a.value:a}function $(a,l){return typeof a=="number"&&Number.isFinite(a)&&a>0?Math.floor(a):l}function Pe(a){return(a instanceof DOMException||typeof a=="object"&&a!=null&&"name"in a)&&a.name==="AbortError"}function oe(a){let l=_vue.shallowRef.call(void 0, []),g=_vue.ref.call(void 0, !1),o=_vue.shallowRef.call(void 0, null),s=_vue.ref.call(void 0, $(a.initialPage,1)),p=_vue.ref.call(void 0, $(a.pageSize,20)),d=_vue.ref.call(void 0, 0),b=_vue.shallowRef.call(void 0, []),M=_vue.shallowRef.call(void 0, {}),D=_vue.shallowRef.call(void 0, null),S=_vue.ref.call(void 0, []),m=_vue.shallowRef.call(void 0, []),y=new Set,T=new Set,n=new Map,Q=_nullishCoalesce(a.quickFilterText, () => (_vue.ref.call(void 0, null))),z=_nullishCoalesce(a.selectionScope, () => ("preserve")),E=a.mode!=="manual",w=_vue.ref.call(void 0, !1),U=_vue.ref.call(void 0, 0),r=[...new Set((_nullishCoalesce(a.pageSizeOptions, () => ([10,20,50,100]))).map(e=>$(e,0)).filter(Boolean))];r.includes(p.value)||r.push(p.value),r.sort((e,t)=>e-t);let c=null,v=null,f=0,h=null,C=!1,A=!1,B=!1,R=e=>{let t=typeof a.rowKey=="function"?a.rowKey(e):_machtable.getByPath.call(void 0, e,a.rowKey);if(t==null||String(t).length===0)throw new Error(`[MachTable] useMachTableQuery rowKey "${String(a.rowKey)}" returned an empty value.`);return String(t)},P=()=>{B=!0,S.value=w.value?[]:[...y],B=!1;let e=w.value?[...n.keys()]:[...y];m.value=e.flatMap(t=>{let i=n.get(t);return i===void 0||T.has(t)?[]:[i]}),U.value++},L=e=>w.value?!T.has(e):y.has(e),F=()=>{if(!c||c.isDestroyed())return;let e=l.value.filter(t=>L(R(t)));A=!0;try{c.setSelection(e,!0)}finally{A=!1}},W=()=>{f++,_optionalChain([v, 'optionalAccess', _27 => _27.abort, 'call', _28 => _28()]),v=null,h!=null&&clearTimeout(h),h=null,g.value=!1},X=(e,t)=>e.signal.aborted||t!==f,ie=e=>{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 }.")},se=async(e,t,i)=>{if(X(t,i))return;ie(e);let u=[...e.rows];for(let I of u)R(I);l.value=u,d.value=Math.floor(e.total);for(let I of l.value){let V=R(I);L(V)?n.set(V,I):n.delete(V)}P(),_optionalChain([a, 'access', _29 => _29.onSuccess, 'optionalCall', _30 => _30(e)]),await _vue.nextTick.call(void 0, ),F()},ue=(e,t,i)=>{X(t,i)||Pe(e)||(o.value=_nullishCoalesce(e, () => (new Error)),_optionalChain([a, 'access', _31 => _31.onError, 'optionalCall', _32 => _32(o.value)]))},k=async()=>{h!=null&&clearTimeout(h),h=null,_optionalChain([v, 'optionalAccess', _33 => _33.abort, 'call', _34 => _34()]);let e=new AbortController;v=e;let t=++f;g.value=!0,o.value=null,a.keepPreviousData===!1&&(l.value=[]);try{let i=await a.request({page:s.value,pageSize:p.value,query:re(a.query),sortModel:b.value.map(u=>({...u})),filterModel:{...M.value},advancedFilterModel:_machtable.normalizeAdvancedFilterModel.call(void 0, D.value),quickFilterText:Q.value,signal:e.signal});await se(i,e,t)}catch(i){ue(i,e,t)}finally{t===f&&(g.value=!1,v===e&&(v=null))}},K=e=>{e&&(s.value=1),h!=null&&clearTimeout(h),v&&(f++,v.abort(),v=null,g.value=!1);let t=Math.max(0,_nullishCoalesce(a.debounceMs, () => (0)));if(t===0){k();return}h=setTimeout(()=>{k()},t)},de=e=>{c=e.api,_vue.nextTick.call(void 0, F)},ce=e=>{C||e.page===s.value&&e.pageSize===p.value||(s.value=e.page,p.value=e.pageSize,E&&k())},fe=e=>{C||(b.value=e.sortModel.map(t=>({...t})),E?K(!0):s.value=1)},ve=e=>{C||(M.value={...e.filterModel},D.value=_machtable.normalizeAdvancedFilterModel.call(void 0, e.advancedFilterModel),a.clearSelectionOnQueryChange!==!1&&q(),E?K(!0):s.value=1)},ge=e=>{if(A)return;let t=new Set(l.value.map(R)),i=new Set(e.selectedRows.map(R));if(w.value){for(let u of t)i.has(u)?T.delete(u):(T.add(u),n.delete(u));for(let u of e.selectedRows)n.set(R(u),u);P();return}if(z==="page")y.clear(),n.clear();else for(let u of t)y.delete(u),n.delete(u);for(let u of e.selectedRows){let I=R(u);y.add(I),n.set(I,u)}P()},Y=_vue.computed.call(void 0, ()=>({rowData:l.value,loading:g.value,rowKey:R,manualSorting:!0,manualFiltering:!0,advancedFilterModel:D.value,quickFilterText:Q.value,error:o.value,overlayErrorTemplate:o.value?()=>_nullishCoalesce(_optionalChain([a, 'access', _35 => _35.errorOverlay, 'optionalCall', _36 => _36({error:o.value,retry:k})]), () => ("Remote request failed. Please retry.")):void 0,overlayNoRowsTemplate:a.emptyOverlay,pagination:{mode:"server",page:s.value,pageSize:p.value,pageSizeOptions:r,total:d.value,showTotal:!0,showPageSizeSelector:!0},onGridReady:de,onPaginationChanged:ce,onSortChanged:fe,onFilterChanged:ve,onSelectionChanged:ge})),ye=async(e={})=>{e.resetPage&&(s.value=1),await k()},pe=async()=>{s.value=1,b.value=[],M.value={},D.value=null,q(),C=!0;try{_optionalChain([c, 'optionalAccess', _37 => _37.setSortModel, 'call', _38 => _38(null)]),_optionalChain([c, 'optionalAccess', _39 => _39.setFilterModel, 'call', _40 => _40(null)]),_optionalChain([c, 'optionalAccess', _41 => _41.setAdvancedFilterModel, 'call', _42 => _42(null)])}finally{C=!1}await k()},q=()=>{w.value=!1,y.clear(),T.clear(),n.clear(),P(),A=!0;try{_optionalChain([c, 'optionalAccess', _43 => _43.deselectAll, 'call', _44 => _44()])}finally{A=!1}},he=()=>{w.value=!0,y.clear(),T.clear(),n.clear();for(let e of l.value)n.set(R(e),e);P(),F()},Te=e=>{y.clear(),T.clear(),n.clear(),w.value=e.mode==="allMatching";let t=e.mode==="allMatching"?e.excludedKeys:e.selectedKeys;for(let i of t.map(String))e.mode==="allMatching"?T.add(i):y.add(i);for(let i of l.value){let u=R(i);L(u)&&n.set(u,i)}P(),F()},me=_vue.computed.call(void 0, ()=>(U.value,w.value?{mode:"allMatching",excludedKeys:[...T]}:{mode:"explicit",selectedKeys:[...y]}));return _vue.watch.call(void 0, ()=>re(a.query),()=>{a.clearSelectionOnQueryChange!==!1&&q(),E?K(!0):s.value=1},{deep:!0,immediate:E&&a.immediate!==!1}),_vue.watch.call(void 0, Q,()=>{a.clearSelectionOnQueryChange!==!1&&q(),E?K(!0):s.value=1}),_vue.watch.call(void 0, S,e=>{if(B)return;w.value=!1,T.clear();let t=new Set(e.map(String));y.clear();for(let i of t)y.add(i);for(let i of[...n.keys()])t.has(i)||n.delete(i);for(let i of l.value){let u=R(i);t.has(u)&&n.set(u,i)}F(),P()},{deep:!0,flush:"sync"}),_vue.onScopeDispose.call(void 0, ()=>{W(),c=null}),{rows:l,loading:g,error:o,page:s,pageSize:p,total:d,sortModel:b,filterModel:M,advancedFilterModel:D,selectedKeys:S,selectedRows:m,selectionState:me,gridProps:Y,bindings:Y,reload:ye,retry:k,reset:pe,abort:W,clearSelection:q,selectAllMatching:he,applySelectionState:Te}}function $e(a={}){let l=_(),g=_vue.ref.call(void 0, _nullishCoalesce(a.initialSearch, () => (""))),o=a.query?oe({...a.query,quickFilterText:_nullishCoalesce(a.query.quickFilterText, () => (_vue.computed.call(void 0, ()=>g.value||null)))}):null,s=ae(l,a.editing),p=_vue.shallowRef.call(void 0, []),d=null,b=()=>{p.value=_nullishCoalesce(_nullishCoalesce(_optionalChain([o, 'optionalAccess', _45 => _45.selectedRows, 'access', _46 => _46.value]), () => (_optionalChain([l, 'access', _47 => _47.api, 'access', _48 => _48.value, 'optionalAccess', _49 => _49.getSelectedRows, 'call', _50 => _50()]))), () => ([]))};_vue.watch.call(void 0, l.api,n=>{_optionalChain([d, 'optionalCall', _51 => _51()]),d=null,n&&!n.isDestroyed()&&(d=n.addEventListener("selectionChanged",b)),b()},{immediate:!0}),o&&_vue.watch.call(void 0, o.selectedRows,b,{deep:!1});let M=async()=>{if(o)await o.reload();else{let n=l.api.value;_optionalChain([n, 'optionalAccess', _52 => _52.isInfinite, 'call', _53 => _53()])?await n.reload():_optionalChain([n, 'optionalAccess', _54 => _54.refreshCells, 'call', _55 => _55()])}},D=_machtable.createMachTableCommands.call(void 0, {getApi:()=>l.api.value,reload:M}),S=_vue.computed.call(void 0, ()=>_nullishCoalesce(_optionalChain([o, 'optionalAccess', _56 => _56.bindings, 'access', _57 => _57.value]), () => ({}))),m=_vue.computed.call(void 0, ()=>{if(!o)return p.value.length;let n=o.selectionState.value;return n.mode==="allMatching"?Math.max(0,o.total.value-n.excludedKeys.length):n.selectedKeys.length}),y=_vue.computed.call(void 0, ()=>_optionalChain([o, 'optionalAccess', _58 => _58.loading, 'access', _59 => _59.value])===!0||s.saving.value),T=_vue.computed.call(void 0, ()=>_nullishCoalesce(_nullishCoalesce(_optionalChain([o, 'optionalAccess', _60 => _60.error, 'access', _61 => _61.value]), () => (s.saveError.value)), () => (null)));return _vue.watch.call(void 0, g,n=>{o||D.search(n||null)}),_vue.onScopeDispose.call(void 0, ()=>{_optionalChain([d, 'optionalCall', _62 => _62()]),d=null}),{table:l,query:o,editing:s,bindings:S,search:g,selectedRows:p,selectedCount:m,busy:y,error:T,commands:D,reload:M}}exports.a = _; exports.b = ae; exports.c = oe; exports.d = $e;
@@ -1 +0,0 @@
1
- import{onScopeDispose as be,ref as Se,shallowRef as Z,watch as we}from"vue";function _(){let a=Se(null),l=Z(null),g=Z(!1),o=0;return we(a,s=>{let p=++o;if(s&&typeof s.getApi=="function"){l.value=s.getApi(),g.value=!1;let d=l.value;d&&d.whenReady().then(()=>{o===p&&l.value===d&&!d.isDestroyed()&&(g.value=!0)})}else l.value=null,g.value=!1},{flush:"post"}),be(()=>{o++,a.value=null,l.value=null,g.value=!1}),{ref:a,api:l,ready:g}}import{computed as H,onScopeDispose as Re,ref as ee,shallowRef as N,watch as Me}from"vue";import{resolveSaveConflict as De}from"@agile-team/mach-table";function ae(a,l={}){let g=N([]),o=ee([]),s=ee(!1),p=N(null),d=N(null),b=H(()=>o.value.length>0),M=H(()=>[...d.value?.failures??[],...d.value?.conflicts??[]]),D=H(()=>[...new Set(M.value.map(r=>r.rowId))]),S=null,m=()=>{let r=a.api.value;if(!r||r.isDestroyed()){o.value=[],g.value=[];return}o.value=r.getDirtyRowIds(),g.value=r.getChanges()};Me(a.api,r=>{S?.(),S=null,m(),!(!r||r.isDestroyed())&&(S=r.addEventListener("dirtyStateChanged",m))},{immediate:!0});let y=async(r,c)=>{let v=a.api.value;if(!v||v.isDestroyed())throw new Error("[MachTable] Cannot save before the grid is ready.");if(s.value)throw new Error("[MachTable] A save operation is already in progress.");s.value=!0,p.value=null,d.value=null;try{let f=await v.saveChangesDetailed(r,c);return d.value=f,m(),l.onSaveSuccess?.(f.saved),l.onSaveResult?.(f),f}catch(f){throw p.value=f,l.onSaveError?.(f),f}finally{s.value=!1}},T=async(r,c)=>(await y(r,c)).saved,n=()=>{d.value=null},Q=(r,c)=>{let v=d.value,f=v?.conflicts.find(C=>C.rowId===r),h=a.api.value;return!v||!f||!h||!De(h,f,c)?!1:(d.value={...v,failures:v.failures,conflicts:v.conflicts.filter(C=>C.rowId!==r)},m(),!0)},z=r=>{let c=a.api.value?.rollbackChanges(r)??!1;return m(),c},E=r=>{a.api.value?.markChangesSaved(r),m()},w=(r,c,v=!1)=>{let f=a.api.value,h=f?.getNodeById(r);return!f||!h||h.rowIndex<0?!1:(f.scrollToIndex(h.rowIndex,"middle"),c&&v?f.startEditingCell({rowIndex:h.rowIndex,colId:c}):!0)},U=r=>{if(!b.value)return;let c=l.beforeUnloadMessage??"\u5B58\u5728\u672A\u4FDD\u5B58\u7684\u8868\u683C\u4FEE\u6539\u3002";return r.preventDefault(),r.returnValue=c,c};return l.guardBeforeUnload&&typeof window<"u"&&window.addEventListener("beforeunload",U),Re(()=>{S?.(),S=null,l.guardBeforeUnload&&typeof window<"u"&&window.removeEventListener("beforeunload",U)}),{changes:g,dirtyRowIds:o,dirty:b,saving:s,saveError:p,lastSaveResult:d,saveIssues:M,failedRowIds:D,save:T,saveDetailed:y,clearSaveIssues:n,resolveConflict:Q,rollback:z,markSaved:E,reveal:w,refresh:m}}import{computed as te,isRef as Ce,nextTick as le,onScopeDispose as Ee,ref as x,shallowRef as O,watch as j}from"vue";import{getByPath as xe,normalizeAdvancedFilterModel as ne}from"@agile-team/mach-table";function re(a){return typeof a=="function"?a():Ce(a)?a.value:a}function $(a,l){return typeof a=="number"&&Number.isFinite(a)&&a>0?Math.floor(a):l}function Pe(a){return(a instanceof DOMException||typeof a=="object"&&a!=null&&"name"in a)&&a.name==="AbortError"}function oe(a){let l=O([]),g=x(!1),o=O(null),s=x($(a.initialPage,1)),p=x($(a.pageSize,20)),d=x(0),b=O([]),M=O({}),D=O(null),S=x([]),m=O([]),y=new Set,T=new Set,n=new Map,Q=a.quickFilterText??x(null),z=a.selectionScope??"preserve",E=a.mode!=="manual",w=x(!1),U=x(0),r=[...new Set((a.pageSizeOptions??[10,20,50,100]).map(e=>$(e,0)).filter(Boolean))];r.includes(p.value)||r.push(p.value),r.sort((e,t)=>e-t);let c=null,v=null,f=0,h=null,C=!1,A=!1,B=!1,R=e=>{let t=typeof a.rowKey=="function"?a.rowKey(e):xe(e,a.rowKey);if(t==null||String(t).length===0)throw new Error(`[MachTable] useMachTableQuery rowKey "${String(a.rowKey)}" returned an empty value.`);return String(t)},P=()=>{B=!0,S.value=w.value?[]:[...y],B=!1;let e=w.value?[...n.keys()]:[...y];m.value=e.flatMap(t=>{let i=n.get(t);return i===void 0||T.has(t)?[]:[i]}),U.value++},L=e=>w.value?!T.has(e):y.has(e),F=()=>{if(!c||c.isDestroyed())return;let e=l.value.filter(t=>L(R(t)));A=!0;try{c.setSelection(e,!0)}finally{A=!1}},W=()=>{f++,v?.abort(),v=null,h!=null&&clearTimeout(h),h=null,g.value=!1},X=(e,t)=>e.signal.aborted||t!==f,ie=e=>{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 }.")},se=async(e,t,i)=>{if(X(t,i))return;ie(e);let u=[...e.rows];for(let I of u)R(I);l.value=u,d.value=Math.floor(e.total);for(let I of l.value){let V=R(I);L(V)?n.set(V,I):n.delete(V)}P(),a.onSuccess?.(e),await le(),F()},ue=(e,t,i)=>{X(t,i)||Pe(e)||(o.value=e??new Error,a.onError?.(o.value))},k=async()=>{h!=null&&clearTimeout(h),h=null,v?.abort();let e=new AbortController;v=e;let t=++f;g.value=!0,o.value=null,a.keepPreviousData===!1&&(l.value=[]);try{let i=await a.request({page:s.value,pageSize:p.value,query:re(a.query),sortModel:b.value.map(u=>({...u})),filterModel:{...M.value},advancedFilterModel:ne(D.value),quickFilterText:Q.value,signal:e.signal});await se(i,e,t)}catch(i){ue(i,e,t)}finally{t===f&&(g.value=!1,v===e&&(v=null))}},K=e=>{e&&(s.value=1),h!=null&&clearTimeout(h),v&&(f++,v.abort(),v=null,g.value=!1);let t=Math.max(0,a.debounceMs??0);if(t===0){k();return}h=setTimeout(()=>{k()},t)},de=e=>{c=e.api,le(F)},ce=e=>{C||e.page===s.value&&e.pageSize===p.value||(s.value=e.page,p.value=e.pageSize,E&&k())},fe=e=>{C||(b.value=e.sortModel.map(t=>({...t})),E?K(!0):s.value=1)},ve=e=>{C||(M.value={...e.filterModel},D.value=ne(e.advancedFilterModel),a.clearSelectionOnQueryChange!==!1&&q(),E?K(!0):s.value=1)},ge=e=>{if(A)return;let t=new Set(l.value.map(R)),i=new Set(e.selectedRows.map(R));if(w.value){for(let u of t)i.has(u)?T.delete(u):(T.add(u),n.delete(u));for(let u of e.selectedRows)n.set(R(u),u);P();return}if(z==="page")y.clear(),n.clear();else for(let u of t)y.delete(u),n.delete(u);for(let u of e.selectedRows){let I=R(u);y.add(I),n.set(I,u)}P()},Y=te(()=>({rowData:l.value,loading:g.value,rowKey:R,manualSorting:!0,manualFiltering:!0,advancedFilterModel:D.value,quickFilterText:Q.value,error:o.value,overlayErrorTemplate:o.value?()=>a.errorOverlay?.({error:o.value,retry:k})??"Remote request failed. Please retry.":void 0,overlayNoRowsTemplate:a.emptyOverlay,pagination:{mode:"server",page:s.value,pageSize:p.value,pageSizeOptions:r,total:d.value,showTotal:!0,showPageSizeSelector:!0},onGridReady:de,onPaginationChanged:ce,onSortChanged:fe,onFilterChanged:ve,onSelectionChanged:ge})),ye=async(e={})=>{e.resetPage&&(s.value=1),await k()},pe=async()=>{s.value=1,b.value=[],M.value={},D.value=null,q(),C=!0;try{c?.setSortModel(null),c?.setFilterModel(null),c?.setAdvancedFilterModel(null)}finally{C=!1}await k()},q=()=>{w.value=!1,y.clear(),T.clear(),n.clear(),P(),A=!0;try{c?.deselectAll()}finally{A=!1}},he=()=>{w.value=!0,y.clear(),T.clear(),n.clear();for(let e of l.value)n.set(R(e),e);P(),F()},Te=e=>{y.clear(),T.clear(),n.clear(),w.value=e.mode==="allMatching";let t=e.mode==="allMatching"?e.excludedKeys:e.selectedKeys;for(let i of t.map(String))e.mode==="allMatching"?T.add(i):y.add(i);for(let i of l.value){let u=R(i);L(u)&&n.set(u,i)}P(),F()},me=te(()=>(U.value,w.value?{mode:"allMatching",excludedKeys:[...T]}:{mode:"explicit",selectedKeys:[...y]}));return j(()=>re(a.query),()=>{a.clearSelectionOnQueryChange!==!1&&q(),E?K(!0):s.value=1},{deep:!0,immediate:E&&a.immediate!==!1}),j(Q,()=>{a.clearSelectionOnQueryChange!==!1&&q(),E?K(!0):s.value=1}),j(S,e=>{if(B)return;w.value=!1,T.clear();let t=new Set(e.map(String));y.clear();for(let i of t)y.add(i);for(let i of[...n.keys()])t.has(i)||n.delete(i);for(let i of l.value){let u=R(i);t.has(u)&&n.set(u,i)}F(),P()},{deep:!0,flush:"sync"}),Ee(()=>{W(),c=null}),{rows:l,loading:g,error:o,page:s,pageSize:p,total:d,sortModel:b,filterModel:M,advancedFilterModel:D,selectedKeys:S,selectedRows:m,selectionState:me,gridProps:Y,bindings:Y,reload:ye,retry:k,reset:pe,abort:W,clearSelection:q,selectAllMatching:he,applySelectionState:Te}}import{computed as G,onScopeDispose as ke,ref as Ie,shallowRef as Oe,watch as J}from"vue";import{createMachTableCommands as Qe}from"@agile-team/mach-table";function $e(a={}){let l=_(),g=Ie(a.initialSearch??""),o=a.query?oe({...a.query,quickFilterText:a.query.quickFilterText??G(()=>g.value||null)}):null,s=ae(l,a.editing),p=Oe([]),d=null,b=()=>{p.value=o?.selectedRows.value??l.api.value?.getSelectedRows()??[]};J(l.api,n=>{d?.(),d=null,n&&!n.isDestroyed()&&(d=n.addEventListener("selectionChanged",b)),b()},{immediate:!0}),o&&J(o.selectedRows,b,{deep:!1});let M=async()=>{if(o)await o.reload();else{let n=l.api.value;n?.isInfinite()?await n.reload():n?.refreshCells()}},D=Qe({getApi:()=>l.api.value,reload:M}),S=G(()=>o?.bindings.value??{}),m=G(()=>{if(!o)return p.value.length;let n=o.selectionState.value;return n.mode==="allMatching"?Math.max(0,o.total.value-n.excludedKeys.length):n.selectedKeys.length}),y=G(()=>o?.loading.value===!0||s.saving.value),T=G(()=>o?.error.value??s.saveError.value??null);return J(g,n=>{o||D.search(n||null)}),ke(()=>{d?.(),d=null}),{table:l,query:o,editing:s,bindings:S,search:g,selectedRows:p,selectedCount:m,busy:y,error:T,commands:D,reload:M}}export{_ as a,ae as b,oe as c,$e as d};
@@ -1 +0,0 @@
1
- import{b as c,c as b,d as m}from"./chunk-2YPTQYP3.js";function p(e,n,o={}){let r=o.componentName??"MachTable";if(!r.trim())throw new Error("[MachTable] Global componentName must not be empty.");let i=new Set([r]),l=m(o);e.provide(b,l),e.provide(c,l.value.defaults??{}),o.registerRobotGridAlias!==!1&&i.add("RobotGrid");for(let a of i){let t=e.component(a);if(t&&t!==n)throw new Error(`[MachTable] Cannot register global component "${a}" because that name is already in use.`);t||e.component(a,n)}}export{p as a};
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _machtable = require('@agile-team/mach-table');var _vue = require('vue');var f=Symbol("mach-table-defaults"),o= exports.c =Symbol("mach-table-config"),T=_machtable.normalizeMachTableConfig.call(void 0, );function h(e){return typeof e=="function"?e():_vue.isRef.call(void 0, e)?e.value:e}function m(e){return _vue.shallowRef.call(void 0, _machtable.normalizeMachTableConfig.call(void 0, e))}function M(e){let p=_vue.inject.call(void 0, o,_vue.shallowRef.call(void 0, T)),n=_vue.computed.call(void 0, ()=>_machtable.mergeMachTableConfig.call(void 0, p.value,h(e)));return _vue.provide.call(void 0, o,n),_vue.provide.call(void 0, f,n.value.defaults),n}function y(e){M(()=>({defaults:typeof e=="function"?e():_vue.isRef.call(void 0, e)?e.value:e}))}function v(){let e=_vue.inject.call(void 0, o,null);return e?e.value.defaults:_vue.inject.call(void 0, f,{})}function O(){return _vue.inject.call(void 0, o,_vue.shallowRef.call(void 0, T))}exports.a = _machtable.resolveMachTableGridOptions; exports.b = f; exports.c = o; exports.d = m; exports.e = M; exports.f = y; exports.g = v; exports.h = O;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _chunkQHFBQ37Mcjs = require('./chunk-QHFBQ37M.cjs');function p(e,n,o={}){let r=_nullishCoalesce(o.componentName, () => ("MachTable"));if(!r.trim())throw new Error("[MachTable] Global componentName must not be empty.");let i=new Set([r]),l=_chunkQHFBQ37Mcjs.d.call(void 0, o);e.provide(_chunkQHFBQ37Mcjs.c,l),e.provide(_chunkQHFBQ37Mcjs.b,_nullishCoalesce(l.value.defaults, () => ({}))),o.registerRobotGridAlias!==!1&&i.add("RobotGrid");for(let a of i){let t=e.component(a);if(t&&t!==n)throw new Error(`[MachTable] Cannot register global component "${a}" because that name is already in use.`);t||e.component(a,n)}}exports.a = p;
@@ -1 +0,0 @@
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 _chunkQHFBQ37Mcjs = require('./chunk-QHFBQ37M.cjs');var _vue = require('vue');var _machtable = require('@agile-team/mach-table');function T(t){if(t)return t;try{return _optionalChain([_vue.getCurrentInstance.call(void 0, ), 'optionalAccess', _2 => _2.appContext])}catch (e2){return}}function G(t,e,a,o){let n=_vue.h.call(void 0, {setup:()=>()=>_vue.h.call(void 0, t,{...e})});return o&&(n.appContext=o),_vue.render.call(void 0, n,a),()=>_vue.render.call(void 0, null,a)}function D(t,e,a,o,r=!0){let i=_vue.h.call(void 0, {name:"MachTableSlot",setup:()=>()=>_vue.renderSlot.call(void 0, {default:t},"default",e())});o&&(i.appContext=o);let l=!1,u=()=>{l||_vue.render.call(void 0, i,a)};return r?queueMicrotask(u):u(),()=>{l=!0,_vue.render.call(void 0, null,a)}}function Z(t,e){let a=T(_optionalChain([e, 'optionalAccess', _3 => _3.appContext]));return o=>{let r=document.createElement("div");r.className="mach-cell-vue",r.style.width="100%";let n=_vue.shallowReactive.call(void 0, {...o}),i=G(t,n,r,a),l=!1;return{el:r,refresh:u=>(Object.assign(n,u),!0),destroy:()=>{l||(l=!0,window.setTimeout(i,0))}}}}function ee(t,e){let a=T(_optionalChain([e, 'optionalAccess', _4 => _4.appContext]));return o=>{let r=document.createElement("div");r.style.height="100%";let n=G(t,o,r,a),i=!1;return{el:r,destroy:()=>{i||(i=!0,n())}}}}function M(t,e){let a=T(_optionalChain([e, 'optionalAccess', _5 => _5.appContext]));return o=>{let r=document.createElement("div");r.className="mach-cell-vue mach-cell-vue--slot",r.style.width="100%";let n=_vue.shallowReactive.call(void 0, {...o}),i=D(t,()=>n,r,a);return{el:r,refresh:l=>(Object.assign(n,l),!0),destroy:i}}}function N(t,e){let a=T(_optionalChain([e, 'optionalAccess', _6 => _6.appContext]));return o=>{let r=document.createElement("div");r.className="mach-header-vue-slot";let n=D(t,()=>o,r,a);return{el:r,destroy:n}}}function w(t,e){let a=T(_optionalChain([e, 'optionalAccess', _7 => _7.appContext]));return o=>{let r=_vue.shallowReactive.call(void 0, {value:o.value}),n=document.createElement("div");n.className="mach-cell-vue mach-cell-vue--editor";let l=D(t,()=>({...o,value:r.value,setValue:u=>{r.value=u},commit:()=>o.api.stopEditing(!1),cancel:()=>o.api.stopEditing(!0)}),n,a,!1);return{el:n,getValue:()=>r.value,focus:()=>{_optionalChain([n, 'access', _8 => _8.querySelector, 'call', _9 => _9("input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex='-1'])"), 'optionalAccess', _10 => _10.focus, 'call', _11 => _11()])},destroy:l}}}function S(t,e){let a=T(_optionalChain([e, 'optionalAccess', _12 => _12.appContext]));return o=>{let r=document.createElement("div");r.className="mach-detail-vue-slot",r.style.height="100%";let n=D(t,()=>o,r,a);return{el:r,destroy:n}}}function C(t,e){let a=T(_optionalChain([e, 'optionalAccess', _13 => _13.appContext]));return()=>{let o=document.createElement("div");o.className="mach-overlay-vue-slot";let r=D(t,()=>({}),o,a);return{el:o,destroy:r}}}function O(t,e,a){return _nullishCoalesce(t[`${e}-${a}`], () => (t[`${e}-${a.replace(/[.\s]+/g,"-")}`]))}function P(t,e,a){return t.map((o,r)=>{if(Array.isArray(o.children)){let y=o;return{...y,children:P(y.children,e,a)}}let n=o,i=_nullishCoalesce(_nullishCoalesce(n.colId, () => (n.field)), () => (`col_${r}`)),l=_nullishCoalesce(_nullishCoalesce(O(e,"cell",i), () => ((i==="op"?e.actions:void 0))), () => (e.cell)),u=_nullishCoalesce(O(e,"header",i), () => (e.header)),g=_nullishCoalesce(O(e,"editor",i), () => (e.editor));return{...n,...l?{cellRenderer:M(l,{appContext:a})}:{},...u?{headerComponent:N(u,{appContext:a})}:{},...g?{cellEditor:w(g,{appContext:a})}:{}}})}function ne(t,e,a){let o=t.columnDefs?P(t.columnDefs,e,a):t.columnDefs;return{...t,columnDefs:o,...e.detail&&!t.detailRowRenderer?{detailRowRenderer:S(e.detail,{appContext:a})}:{},...e.loading?{overlayLoadingTemplate:C(e.loading,{appContext:a})}:{},...e.empty?{overlayNoRowsTemplate:C(e.empty,{appContext:a})}:{}}}function L(t,e){let a,o,r=t.detail?S(t.detail,{appContext:e}):void 0,n=t.loading?C(t.loading,{appContext:e}):void 0,i=t.empty?C(t.empty,{appContext:e}):void 0;return l=>(l.columnDefs!==a&&(a=l.columnDefs,o=l.columnDefs?P(l.columnDefs,t,e):l.columnDefs),{...l,columnDefs:o,...r&&!l.detailRowRenderer?{detailRowRenderer:r}:{},...n?{overlayLoadingTemplate:n}:{},...i?{overlayNoRowsTemplate:i}:{}})}var k=_machtable.GRID_OPTION_KEYS.filter(t=>!["className","ariaLabel","ariaLabelledBy","ariaDescribedBy"].includes(t)),f={};for(let t of k){let e=_machtable.GRID_OPTION_META[t].kind,a=e==="boolean"?Boolean:e==="number"?Number:e==="array"?Array:e==="function"?Function:e==="boolean-object"?[Boolean,Object]:e==="object"?Object:e==="string"?String:void 0;f[t]={type:a,default:void 0}}f.className={type:String,default:void 0};f.gridClassName={type:String,default:void 0};f.gridAriaLabel={type:String,default:void 0};f.gridAriaLabelledBy={type:String,default:void 0};f.gridAriaDescribedBy={type:String,default:void 0};f.preset={type:[String,Array,Boolean],default:void 0};function z(t){return"on"+t.charAt(0).toUpperCase()+t.slice(1)}var J=_vue.defineComponent.call(void 0, {name:"MachTable",inheritAttrs:!1,props:f,emits:[..._machtable.EVENT_TYPES],setup(t,{expose:e,attrs:a,emit:o,slots:r}){let n=t,i=_vue.ref.call(void 0, null),l=null,u=_chunkQHFBQ37Mcjs.h.call(void 0, ),g=L(r,_optionalChain([_vue.getCurrentInstance.call(void 0, ), 'optionalAccess', _14 => _14.appContext])),y=null,E=new Set,R=()=>{let d={};for(let s of k){let m=n[s];m!==void 0&&(d[s]=m)}n.gridClassName!==void 0&&(d.className=n.gridClassName),n.gridAriaLabel!==void 0&&(d.ariaLabel=n.gridAriaLabel),n.gridAriaLabelledBy!==void 0&&(d.ariaLabelledBy=n.gridAriaLabelledBy),n.gridAriaDescribedBy!==void 0&&(d.ariaDescribedBy=n.gridAriaDescribedBy);let c=_chunkQHFBQ37Mcjs.a.call(void 0, u.value,n.preset,d,s=>{let m=`${s.code}:${_nullishCoalesce(s.preset, () => (""))}`;E.has(m)||(E.add(m),u.value.onConfigWarning?u.value.onConfigWarning(s):console.warn(s.message))}),p=g(c.options);return y={options:p,explain:s=>s==="columnDefs"&&p.columnDefs!==c.options.columnDefs?{key:s,value:p.columnDefs,source:"Vue slots",layers:[...c.explain(s).layers,{name:"Vue slots",value:p.columnDefs}]}:c.explain(s)},y.options};return _vue.onMounted.call(void 0, ()=>{if(!i.value)return;let d=R();for(let c of _machtable.EVENT_TYPES){let p=z(c),s=d[p];d[p]=m=>{typeof s=="function"&&s(m),o(c,m)}}l=_machtable.createGrid.call(void 0, i.value,d)}),_vue.onBeforeUnmount.call(void 0, ()=>{_optionalChain([l, 'optionalAccess', _15 => _15.destroy, 'call', _16 => _16()]),l=null}),_vue.watch.call(void 0, ()=>{let d=R();return[..._machtable.GRID_OPTION_KEYS.map(c=>d[c])]},(d,c)=>{if(!l)return;let p={};d.forEach((s,m)=>{Object.is(s,c[m])||(p[_machtable.GRID_OPTION_KEYS[m]]=s)}),Object.keys(p).length>0&&l.updateOptions(p)}),e({getApi:()=>l,getResolvedConfig:()=>_nullishCoalesce(_optionalChain([y, 'optionalAccess', _17 => _17.options]), () => (R())),explainOption:d=>(_nullishCoalesce(y, () => (_chunkQHFBQ37Mcjs.a.call(void 0, u.value,n.preset,{})))).explain(d)}),()=>_vue.h.call(void 0, "div",{...a,ref:i,class:["mach-vue-host",n.className,a.class]})}}),Q= exports.j =J,ue= exports.k =Q;exports.a = Z; exports.b = ee; exports.c = M; exports.d = N; exports.e = w; exports.f = S; exports.g = C; exports.h = ne; exports.i = L; exports.j = Q; exports.k = ue;
@@ -1,19 +0,0 @@
1
- import { a as MachTable } from './MachTable-DH0offab.cjs';
2
- import { M as MachTableToolbar } from './MachTableToolbar-CDkTtitl.cjs';
3
- import { MachTableRuntimeConfig } from '@agile-team/mach-table';
4
-
5
- declare module "vue" {
6
- interface GlobalComponents {
7
- MachTable: typeof MachTable;
8
- RobotGrid: typeof MachTable;
9
- MachTableToolbar: typeof MachTableToolbar;
10
- }
11
- }
12
- interface MachTablePluginOptions extends MachTableRuntimeConfig {
13
- /** Global component name. Defaults to `MachTable`. */
14
- componentName?: string;
15
- /** Also register the backwards-compatible `RobotGrid` name. Defaults to true. */
16
- registerRobotGridAlias?: boolean;
17
- }
18
-
19
- export type { MachTablePluginOptions as M };
@@ -1,19 +0,0 @@
1
- import { a as MachTable } from './MachTable-DH0offab.js';
2
- import { M as MachTableToolbar } from './MachTableToolbar-CDkTtitl.js';
3
- import { MachTableRuntimeConfig } from '@agile-team/mach-table';
4
-
5
- declare module "vue" {
6
- interface GlobalComponents {
7
- MachTable: typeof MachTable;
8
- RobotGrid: typeof MachTable;
9
- MachTableToolbar: typeof MachTableToolbar;
10
- }
11
- }
12
- interface MachTablePluginOptions extends MachTableRuntimeConfig {
13
- /** Global component name. Defaults to `MachTable`. */
14
- componentName?: string;
15
- /** Also register the backwards-compatible `RobotGrid` name. Defaults to true. */
16
- registerRobotGridAlias?: boolean;
17
- }
18
-
19
- export type { MachTablePluginOptions as M };
@@ -1,145 +0,0 @@
1
- import { Ref, ShallowRef, ComputedRef } from 'vue';
2
- import { GridApi, GridChange, GridBatchSaveResult, SaveChangeIssue, SaveChangeConflict, SaveChangesHandler, SortModel, FilterModel, AdvancedFilterModel, OverlayContent, OverlayTemplate, GridOptions, MachTableCommands } from '@agile-team/mach-table';
3
- import { b as MachTableVueExposed } from './MachTable-DH0offab.js';
4
-
5
- interface UseMachTableReturn<TData = any> {
6
- ref: Ref<MachTableVueExposed<TData> | null>;
7
- api: ShallowRef<GridApi<TData> | null>;
8
- ready: ShallowRef<boolean>;
9
- }
10
- declare function useMachTable<TData = any>(): UseMachTableReturn<TData>;
11
-
12
- interface UseMachTableEditingOptions<TData = any> {
13
- /** Warn before closing/reloading a browser tab with unsaved changes. */
14
- guardBeforeUnload?: boolean;
15
- beforeUnloadMessage?: string;
16
- onSaveSuccess?(saved: readonly GridChange<TData>[]): void;
17
- onSaveResult?(result: GridBatchSaveResult<TData>): void;
18
- onSaveError?(error: unknown): void;
19
- }
20
- interface UseMachTableEditingReturn<TData = any> {
21
- changes: ShallowRef<GridChange<TData>[]>;
22
- dirtyRowIds: Ref<string[]>;
23
- dirty: ComputedRef<boolean>;
24
- saving: Ref<boolean>;
25
- saveError: ShallowRef<unknown | null>;
26
- lastSaveResult: ShallowRef<GridBatchSaveResult<TData> | null>;
27
- saveIssues: ComputedRef<Array<SaveChangeIssue | SaveChangeConflict<TData>>>;
28
- failedRowIds: ComputedRef<string[]>;
29
- save(handler: SaveChangesHandler<TData>, rowIds?: readonly string[]): Promise<GridChange<TData>[]>;
30
- saveDetailed(handler: SaveChangesHandler<TData>, rowIds?: readonly string[]): Promise<GridBatchSaveResult<TData>>;
31
- clearSaveIssues(): void;
32
- resolveConflict(rowId: string, strategy: "acceptServer" | "keepLocal"): boolean;
33
- rollback(rowIds?: readonly string[]): boolean;
34
- markSaved(rowIds?: readonly string[]): void;
35
- /** Scrolls to a loaded changed row and optionally opens the failed cell editor. */
36
- reveal(rowId: string, colId?: string, edit?: boolean): boolean;
37
- refresh(): void;
38
- }
39
- /** Reactive dirty/save workflow layered over useMachTable(). */
40
- declare function useMachTableEditing<TData = any>(table: UseMachTableReturn<TData>, options?: UseMachTableEditingOptions<TData>): UseMachTableEditingReturn<TData>;
41
-
42
- type MachTableQuerySource<TQuery> = TQuery | Readonly<Ref<TQuery>> | (() => TQuery);
43
- interface MachTablePageRequest<TQuery> {
44
- page: number;
45
- pageSize: number;
46
- query: TQuery;
47
- sortModel: SortModel;
48
- filterModel: FilterModel;
49
- advancedFilterModel: AdvancedFilterModel | null;
50
- quickFilterText: string | null;
51
- signal: AbortSignal;
52
- }
53
- interface MachTablePageResult<TData> {
54
- rows: readonly TData[];
55
- total: number;
56
- }
57
- type MachTableRemoteSelectionState = {
58
- mode: "explicit";
59
- selectedKeys: string[];
60
- } | {
61
- mode: "allMatching";
62
- excludedKeys: string[];
63
- };
64
- interface UseMachTableQueryOptions<TData, TQuery = Record<string, unknown>> {
65
- request(params: MachTablePageRequest<TQuery>): Promise<MachTablePageResult<TData>>;
66
- query: MachTableQuerySource<TQuery>;
67
- /** Stable row key used for updates and cross-page selection. */
68
- rowKey: string | ((row: TData) => string | number);
69
- initialPage?: number;
70
- pageSize?: number;
71
- pageSizeOptions?: readonly number[];
72
- immediate?: boolean;
73
- /** auto reloads when query/grid criteria change; manual waits for reload/reset. */
74
- mode?: "auto" | "manual";
75
- debounceMs?: number;
76
- keepPreviousData?: boolean;
77
- /** `query` additionally enables compact select-all-matching rules. */
78
- selectionScope?: "page" | "preserve" | "query";
79
- /** Defaults true: a different business/filter query cannot inherit stale selections. */
80
- clearSelectionOnQueryChange?: boolean;
81
- quickFilterText?: Ref<string | null>;
82
- /** Renders inside the first-class error overlay for the latest failed request. */
83
- errorOverlay?(context: {
84
- error: unknown;
85
- retry(): Promise<void>;
86
- }): OverlayContent;
87
- emptyOverlay?: OverlayTemplate;
88
- onSuccess?(result: MachTablePageResult<TData>): void;
89
- onError?(error: unknown): void;
90
- }
91
- interface UseMachTableQueryReturn<TData> {
92
- rows: ShallowRef<TData[]>;
93
- loading: Ref<boolean>;
94
- error: ShallowRef<unknown | null>;
95
- page: Ref<number>;
96
- pageSize: Ref<number>;
97
- total: Ref<number>;
98
- sortModel: ShallowRef<SortModel>;
99
- filterModel: ShallowRef<FilterModel>;
100
- advancedFilterModel: ShallowRef<AdvancedFilterModel | null>;
101
- selectedKeys: Ref<string[]>;
102
- selectedRows: ShallowRef<TData[]>;
103
- selectionState: ComputedRef<MachTableRemoteSelectionState>;
104
- gridProps: ComputedRef<GridOptions<TData>>;
105
- bindings: ComputedRef<GridOptions<TData>>;
106
- reload(options?: {
107
- resetPage?: boolean;
108
- }): Promise<void>;
109
- retry(): Promise<void>;
110
- reset(): Promise<void>;
111
- abort(): void;
112
- clearSelection(): void;
113
- /** Selects the complete server query without downloading every row ID. */
114
- selectAllMatching(): void;
115
- applySelectionState(state: MachTableRemoteSelectionState): void;
116
- }
117
- /**
118
- * B-side remote-list controller: paging, sorting, filtering, cancellation,
119
- * stale-response protection and cross-page selection in one typed binding.
120
- */
121
- declare function useMachTableQuery<TData, TQuery = Record<string, unknown>>(options: UseMachTableQueryOptions<TData, TQuery>): UseMachTableQueryReturn<TData>;
122
-
123
- interface UseMachTableControllerOptions<TData, TQuery = Record<string, unknown>> {
124
- /** Omit for local rowData; provide for a complete remote table workflow. */
125
- query?: UseMachTableQueryOptions<TData, TQuery>;
126
- editing?: UseMachTableEditingOptions<TData>;
127
- initialSearch?: string;
128
- }
129
- interface UseMachTableControllerReturn<TData> {
130
- table: UseMachTableReturn<TData>;
131
- query: UseMachTableQueryReturn<TData> | null;
132
- editing: UseMachTableEditingReturn<TData>;
133
- bindings: ComputedRef<GridOptions<TData>>;
134
- search: Ref<string>;
135
- selectedRows: ShallowRef<TData[]>;
136
- selectedCount: ComputedRef<number>;
137
- busy: ComputedRef<boolean>;
138
- error: ComputedRef<unknown | null>;
139
- commands: MachTableCommands;
140
- reload(): Promise<void>;
141
- }
142
- /** One cohesive controller for API readiness, query, selection, editing and toolbar commands. */
143
- declare function useMachTableController<TData, TQuery = Record<string, unknown>>(options?: UseMachTableControllerOptions<TData, TQuery>): UseMachTableControllerReturn<TData>;
144
-
145
- export { type MachTablePageRequest as M, type UseMachTableControllerOptions as U, type MachTablePageResult as a, type MachTableQuerySource as b, type MachTableRemoteSelectionState as c, type UseMachTableControllerReturn as d, type UseMachTableEditingOptions as e, type UseMachTableEditingReturn as f, type UseMachTableQueryOptions as g, type UseMachTableQueryReturn as h, type UseMachTableReturn as i, useMachTableController as j, useMachTableEditing as k, useMachTableQuery as l, useMachTable as u };
@@ -1,145 +0,0 @@
1
- import { Ref, ShallowRef, ComputedRef } from 'vue';
2
- import { GridApi, GridChange, GridBatchSaveResult, SaveChangeIssue, SaveChangeConflict, SaveChangesHandler, SortModel, FilterModel, AdvancedFilterModel, OverlayContent, OverlayTemplate, GridOptions, MachTableCommands } from '@agile-team/mach-table';
3
- import { b as MachTableVueExposed } from './MachTable-DH0offab.cjs';
4
-
5
- interface UseMachTableReturn<TData = any> {
6
- ref: Ref<MachTableVueExposed<TData> | null>;
7
- api: ShallowRef<GridApi<TData> | null>;
8
- ready: ShallowRef<boolean>;
9
- }
10
- declare function useMachTable<TData = any>(): UseMachTableReturn<TData>;
11
-
12
- interface UseMachTableEditingOptions<TData = any> {
13
- /** Warn before closing/reloading a browser tab with unsaved changes. */
14
- guardBeforeUnload?: boolean;
15
- beforeUnloadMessage?: string;
16
- onSaveSuccess?(saved: readonly GridChange<TData>[]): void;
17
- onSaveResult?(result: GridBatchSaveResult<TData>): void;
18
- onSaveError?(error: unknown): void;
19
- }
20
- interface UseMachTableEditingReturn<TData = any> {
21
- changes: ShallowRef<GridChange<TData>[]>;
22
- dirtyRowIds: Ref<string[]>;
23
- dirty: ComputedRef<boolean>;
24
- saving: Ref<boolean>;
25
- saveError: ShallowRef<unknown | null>;
26
- lastSaveResult: ShallowRef<GridBatchSaveResult<TData> | null>;
27
- saveIssues: ComputedRef<Array<SaveChangeIssue | SaveChangeConflict<TData>>>;
28
- failedRowIds: ComputedRef<string[]>;
29
- save(handler: SaveChangesHandler<TData>, rowIds?: readonly string[]): Promise<GridChange<TData>[]>;
30
- saveDetailed(handler: SaveChangesHandler<TData>, rowIds?: readonly string[]): Promise<GridBatchSaveResult<TData>>;
31
- clearSaveIssues(): void;
32
- resolveConflict(rowId: string, strategy: "acceptServer" | "keepLocal"): boolean;
33
- rollback(rowIds?: readonly string[]): boolean;
34
- markSaved(rowIds?: readonly string[]): void;
35
- /** Scrolls to a loaded changed row and optionally opens the failed cell editor. */
36
- reveal(rowId: string, colId?: string, edit?: boolean): boolean;
37
- refresh(): void;
38
- }
39
- /** Reactive dirty/save workflow layered over useMachTable(). */
40
- declare function useMachTableEditing<TData = any>(table: UseMachTableReturn<TData>, options?: UseMachTableEditingOptions<TData>): UseMachTableEditingReturn<TData>;
41
-
42
- type MachTableQuerySource<TQuery> = TQuery | Readonly<Ref<TQuery>> | (() => TQuery);
43
- interface MachTablePageRequest<TQuery> {
44
- page: number;
45
- pageSize: number;
46
- query: TQuery;
47
- sortModel: SortModel;
48
- filterModel: FilterModel;
49
- advancedFilterModel: AdvancedFilterModel | null;
50
- quickFilterText: string | null;
51
- signal: AbortSignal;
52
- }
53
- interface MachTablePageResult<TData> {
54
- rows: readonly TData[];
55
- total: number;
56
- }
57
- type MachTableRemoteSelectionState = {
58
- mode: "explicit";
59
- selectedKeys: string[];
60
- } | {
61
- mode: "allMatching";
62
- excludedKeys: string[];
63
- };
64
- interface UseMachTableQueryOptions<TData, TQuery = Record<string, unknown>> {
65
- request(params: MachTablePageRequest<TQuery>): Promise<MachTablePageResult<TData>>;
66
- query: MachTableQuerySource<TQuery>;
67
- /** Stable row key used for updates and cross-page selection. */
68
- rowKey: string | ((row: TData) => string | number);
69
- initialPage?: number;
70
- pageSize?: number;
71
- pageSizeOptions?: readonly number[];
72
- immediate?: boolean;
73
- /** auto reloads when query/grid criteria change; manual waits for reload/reset. */
74
- mode?: "auto" | "manual";
75
- debounceMs?: number;
76
- keepPreviousData?: boolean;
77
- /** `query` additionally enables compact select-all-matching rules. */
78
- selectionScope?: "page" | "preserve" | "query";
79
- /** Defaults true: a different business/filter query cannot inherit stale selections. */
80
- clearSelectionOnQueryChange?: boolean;
81
- quickFilterText?: Ref<string | null>;
82
- /** Renders inside the first-class error overlay for the latest failed request. */
83
- errorOverlay?(context: {
84
- error: unknown;
85
- retry(): Promise<void>;
86
- }): OverlayContent;
87
- emptyOverlay?: OverlayTemplate;
88
- onSuccess?(result: MachTablePageResult<TData>): void;
89
- onError?(error: unknown): void;
90
- }
91
- interface UseMachTableQueryReturn<TData> {
92
- rows: ShallowRef<TData[]>;
93
- loading: Ref<boolean>;
94
- error: ShallowRef<unknown | null>;
95
- page: Ref<number>;
96
- pageSize: Ref<number>;
97
- total: Ref<number>;
98
- sortModel: ShallowRef<SortModel>;
99
- filterModel: ShallowRef<FilterModel>;
100
- advancedFilterModel: ShallowRef<AdvancedFilterModel | null>;
101
- selectedKeys: Ref<string[]>;
102
- selectedRows: ShallowRef<TData[]>;
103
- selectionState: ComputedRef<MachTableRemoteSelectionState>;
104
- gridProps: ComputedRef<GridOptions<TData>>;
105
- bindings: ComputedRef<GridOptions<TData>>;
106
- reload(options?: {
107
- resetPage?: boolean;
108
- }): Promise<void>;
109
- retry(): Promise<void>;
110
- reset(): Promise<void>;
111
- abort(): void;
112
- clearSelection(): void;
113
- /** Selects the complete server query without downloading every row ID. */
114
- selectAllMatching(): void;
115
- applySelectionState(state: MachTableRemoteSelectionState): void;
116
- }
117
- /**
118
- * B-side remote-list controller: paging, sorting, filtering, cancellation,
119
- * stale-response protection and cross-page selection in one typed binding.
120
- */
121
- declare function useMachTableQuery<TData, TQuery = Record<string, unknown>>(options: UseMachTableQueryOptions<TData, TQuery>): UseMachTableQueryReturn<TData>;
122
-
123
- interface UseMachTableControllerOptions<TData, TQuery = Record<string, unknown>> {
124
- /** Omit for local rowData; provide for a complete remote table workflow. */
125
- query?: UseMachTableQueryOptions<TData, TQuery>;
126
- editing?: UseMachTableEditingOptions<TData>;
127
- initialSearch?: string;
128
- }
129
- interface UseMachTableControllerReturn<TData> {
130
- table: UseMachTableReturn<TData>;
131
- query: UseMachTableQueryReturn<TData> | null;
132
- editing: UseMachTableEditingReturn<TData>;
133
- bindings: ComputedRef<GridOptions<TData>>;
134
- search: Ref<string>;
135
- selectedRows: ShallowRef<TData[]>;
136
- selectedCount: ComputedRef<number>;
137
- busy: ComputedRef<boolean>;
138
- error: ComputedRef<unknown | null>;
139
- commands: MachTableCommands;
140
- reload(): Promise<void>;
141
- }
142
- /** One cohesive controller for API readiness, query, selection, editing and toolbar commands. */
143
- declare function useMachTableController<TData, TQuery = Record<string, unknown>>(options?: UseMachTableControllerOptions<TData, TQuery>): UseMachTableControllerReturn<TData>;
144
-
145
- export { type MachTablePageRequest as M, type UseMachTableControllerOptions as U, type MachTablePageResult as a, type MachTableQuerySource as b, type MachTableRemoteSelectionState as c, type UseMachTableControllerReturn as d, type UseMachTableEditingOptions as e, type UseMachTableEditingReturn as f, type UseMachTableQueryOptions as g, type UseMachTableQueryReturn as h, type UseMachTableReturn as i, useMachTableController as j, useMachTableEditing as k, useMachTableQuery as l, useMachTable as u };
@@ -84,8 +84,8 @@ declare const MachTableToolbar: vue.DefineComponent<vue.ExtractPropTypes<{
84
84
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
85
85
  onClearSelection?: ((...args: any[]) => any) | undefined;
86
86
  }>, {
87
- features: MachTableToolbarFeatures;
88
87
  loading: boolean;
88
+ features: MachTableToolbarFeatures;
89
89
  selectedCount: number;
90
90
  api: GridApi<any> | null;
91
91
  commands: MachTableCommands | null;
@@ -84,8 +84,8 @@ declare const MachTableToolbar: vue.DefineComponent<vue.ExtractPropTypes<{
84
84
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
85
85
  onClearSelection?: ((...args: any[]) => any) | undefined;
86
86
  }>, {
87
- features: MachTableToolbarFeatures;
88
87
  loading: boolean;
88
+ features: MachTableToolbarFeatures;
89
89
  selectedCount: number;
90
90
  api: GridApi<any> | null;
91
91
  commands: MachTableCommands | null;