@agile-team/mach-table-vue 0.4.1 → 0.13.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 (52) hide show
  1. package/LICENSE +110 -21
  2. package/README.md +112 -4
  3. package/dist/MachTable-ESOIV4CZ.cjs +2 -0
  4. package/dist/MachTable-ESOIV4CZ.cjs.map +1 -0
  5. package/dist/MachTable-USYTNQV5.js +2 -0
  6. package/dist/MachTable-USYTNQV5.js.map +1 -0
  7. package/dist/async.cjs +2 -0
  8. package/dist/async.cjs.map +1 -0
  9. package/dist/async.d.cts +34 -0
  10. package/dist/async.d.ts +34 -0
  11. package/dist/async.js +2 -0
  12. package/dist/async.js.map +1 -0
  13. package/dist/chunk-7U5IML5K.js +2 -0
  14. package/dist/chunk-7U5IML5K.js.map +1 -0
  15. package/dist/chunk-BE4RGLUC.cjs +2 -0
  16. package/dist/chunk-BE4RGLUC.cjs.map +1 -0
  17. package/dist/chunk-E7KTBMM6.js +2 -0
  18. package/dist/chunk-E7KTBMM6.js.map +1 -0
  19. package/dist/chunk-ICHFPO5U.js +2 -0
  20. package/dist/chunk-ICHFPO5U.js.map +1 -0
  21. package/dist/chunk-MVK2O7FM.cjs +2 -0
  22. package/dist/chunk-MVK2O7FM.cjs.map +1 -0
  23. package/dist/chunk-Y6OAV3U4.cjs +2 -0
  24. package/dist/chunk-Y6OAV3U4.cjs.map +1 -0
  25. package/dist/chunk-Z6YS22CL.cjs +2 -0
  26. package/dist/chunk-Z6YS22CL.cjs.map +1 -0
  27. package/dist/chunk-ZUOKB5ID.js +2 -0
  28. package/dist/chunk-ZUOKB5ID.js.map +1 -0
  29. package/dist/editors.cjs +2 -0
  30. package/dist/editors.cjs.map +1 -0
  31. package/dist/editors.d.cts +34 -0
  32. package/dist/editors.d.ts +34 -0
  33. package/dist/editors.js +2 -0
  34. package/dist/editors.js.map +1 -0
  35. package/dist/globalRegistration-ySQgs7aA.d.cts +86 -0
  36. package/dist/globalRegistration-ySQgs7aA.d.ts +86 -0
  37. package/dist/index.cjs +1 -194
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.cts +54 -14
  40. package/dist/index.d.ts +54 -14
  41. package/dist/index.js +1 -167
  42. package/dist/index.js.map +1 -1
  43. package/dist/mach-table.css +410 -3
  44. package/dist/workflows-Dg6KsN85.d.cts +111 -0
  45. package/dist/workflows-Dg6KsN85.d.ts +111 -0
  46. package/dist/workflows.cjs +2 -0
  47. package/dist/workflows.cjs.map +1 -0
  48. package/dist/workflows.d.cts +3 -0
  49. package/dist/workflows.d.ts +3 -0
  50. package/dist/workflows.js +2 -0
  51. package/dist/workflows.js.map +1 -0
  52. package/package.json +34 -4
package/LICENSE CHANGED
@@ -1,21 +1,110 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 MachTable Contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MachTable Source-Available License 1.0
2
+
3
+ Copyright (c) 2026 ChenyCHENYU (Agile Team). All rights reserved.
4
+
5
+ IMPORTANT: The source code is publicly visible for review, but it is not
6
+ open-source software as defined by the Open Source Initiative. Except for the
7
+ limited inspection permission below, no permission is granted unless the
8
+ copyright holder gives you prior written authorization.
9
+
10
+ 1. Definitions
11
+
12
+ "Software" means MachTable and all source code, object code, packages,
13
+ documentation, examples, designs, assets, and other materials distributed with
14
+ this license.
15
+
16
+ "Licensor" means ChenyCHENYU (Agile Team), the copyright holder of the
17
+ Software.
18
+
19
+ "Written Authorization" means a durable written permission issued directly by
20
+ the Licensor that identifies the licensee and the permitted scope, purpose,
21
+ environment, term, and any other applicable conditions.
22
+
23
+ 2. Limited Inspection Permission
24
+
25
+ You may view the Software on the repository hosting service solely to inspect
26
+ and evaluate it, to link to its public repository, to discuss it, and to submit
27
+ good-faith issue reports. This limited permission does not include permission
28
+ to use, run, build, compile, copy, download for reuse, install, integrate,
29
+ modify, create derivative works from, deploy, distribute, sublicense, sell,
30
+ lease, provide as a service, or otherwise exploit the Software.
31
+
32
+ 3. Authorization Required
33
+
34
+ Any use beyond Section 2 requires the Licensor's prior Written Authorization.
35
+ This requirement applies to personal, educational, research, governmental,
36
+ non-profit, internal, evaluation, testing, development, staging, production,
37
+ and commercial use. Possession of a copy, cloning the repository, downloading
38
+ an npm package, receiving the Software from another person, or submitting a
39
+ contribution does not grant any additional rights.
40
+
41
+ The Licensor may grant separate commercial or non-commercial terms in a
42
+ written agreement. If such an agreement conflicts with this license, that
43
+ agreement controls only for the licensee and scope identified in it.
44
+
45
+ 4. Restrictions
46
+
47
+ Without prior Written Authorization, you must not, directly or indirectly:
48
+
49
+ a. use, execute, build, compile, install, test, or integrate the Software;
50
+ b. copy, reproduce, modify, adapt, translate, or create derivative works;
51
+ c. publish, distribute, sublicense, sell, rent, lease, transfer, host, or make
52
+ the Software available to any third party;
53
+ d. use the Software to provide a hosted, managed, consulting, outsourcing,
54
+ software-as-a-service, or other service;
55
+ e. remove or alter copyright, authorization, trademark, attribution, or other
56
+ proprietary notices; or
57
+ f. represent the Software as open source or represent that you have received
58
+ authorization when you have not.
59
+
60
+ 5. Contributions
61
+
62
+ Submitting a patch, pull request, code, documentation, design, or other
63
+ material to the project does not authorize you to use the Software. Unless a
64
+ separate written contributor agreement applies, by intentionally submitting a
65
+ contribution you represent that you have the right to submit it and grant the
66
+ Licensor a perpetual, worldwide, irrevocable, transferable, sublicensable,
67
+ royalty-free license to use, reproduce, modify, create derivative works from,
68
+ distribute, license, and relicense that contribution as part of the Software.
69
+
70
+ 6. Ownership and Trademarks
71
+
72
+ The Software is licensed, not sold. The Licensor and applicable contributors
73
+ retain all right, title, and interest in the Software. No trademark, service
74
+ mark, trade name, logo, or branding rights are granted by this license.
75
+
76
+ 7. Termination
77
+
78
+ Any permission granted under this license terminates automatically upon breach.
79
+ On termination, you must immediately stop all use and destroy all copies in
80
+ your possession or control, except where retention is required by law. Sections
81
+ 4 through 9 survive termination.
82
+
83
+ 8. Disclaimer
84
+
85
+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" AND
86
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND
88
+ NON-INFRINGEMENT.
89
+
90
+ 9. Limitation of Liability
91
+
92
+ TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE LICENSOR AND CONTRIBUTORS WILL NOT
93
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
94
+ CONSEQUENTIAL, OR OTHER DAMAGES, OR FOR LOSS OF DATA, PROFITS, REVENUE,
95
+ GOODWILL, OR BUSINESS INTERRUPTION, ARISING FROM OR RELATED TO THE SOFTWARE OR
96
+ THIS LICENSE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
97
+
98
+ 10. Contact and Authorization
99
+
100
+ See LICENSING.md in the repository for the authorization request process. No
101
+ request, discussion, issue, payment, or contribution constitutes authorization
102
+ unless and until the Licensor issues explicit Written Authorization.
103
+
104
+ 中文说明(仅为阅读便利;如有冲突,以英文条款为准)
105
+
106
+ 本项目源代码公开可查看,但不是 OSI 定义下的开源软件。除查看、链接、
107
+ 讨论和善意提交问题外,任何个人、教育、研究、公益、政府、内部、测试、
108
+ 开发、生产或商业用途,均须事先取得作者明确的书面授权。未经授权,不得
109
+ 运行、构建、复制、修改、集成、部署、分发、转授权、销售、出租、托管或
110
+ 以服务形式提供本软件。公开仓库、克隆代码或下载 npm 包不代表获得授权。
package/README.md CHANGED
@@ -4,17 +4,30 @@
4
4
 
5
5
  # @agile-team/mach-table-vue
6
6
 
7
- Official Vue 3 adapter for MachTable. It provides `<MachTable>` / `<RobotGrid>`, `useMachTable`, Vue cell/detail renderer factories, reactive option updates and automatic lifecycle cleanup.
7
+ Official Vue 3 adapter for MachTable 0.13. It provides `<MachTable>`, native typed slots, dedicated app/route configuration, remote query and editing composables, optional Element Plus editors, workbench/lazy-tree Core APIs, async boundaries, atomic reactive updates and automatic lifecycle cleanup. `RobotGrid` remains a deprecated 0.x alias.
8
+
9
+ ## Install
8
10
 
9
11
  ```bash
10
12
  pnpm add @agile-team/mach-table-vue
11
13
  ```
12
14
 
15
+ Import the stylesheet once from your application entry:
16
+
17
+ ```ts
18
+ import "@agile-team/mach-table-vue/styles.css";
19
+ ```
20
+
21
+ ## Integration modes
22
+
23
+ ### Local, route-level import
24
+
25
+ Best when only a few routes use a grid. A lazy-loaded route naturally keeps MachTable in that route's chunk.
26
+
13
27
  ```vue
14
28
  <script setup lang="ts">
15
29
  import { ref } from "vue";
16
30
  import { MachTable, useMachTable, type ColDef } from "@agile-team/mach-table-vue";
17
- import "@agile-team/mach-table-vue/styles.css";
18
31
 
19
32
  interface Row { id: string; name: string }
20
33
  const grid = useMachTable<Row>();
@@ -35,8 +48,103 @@ const columns: ColDef<Row>[] = [{ field: "name", headerName: "Name", flex: 1 }];
35
48
  </template>
36
49
  ```
37
50
 
38
- The 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.
51
+ ### Global synchronous plugin
52
+
53
+ Best when most screens render tables. Components are available in every template without page-level runtime imports.
54
+
55
+ ```ts
56
+ // main.ts
57
+ import { createApp } from "vue";
58
+ import { MachTablePlugin } from "@agile-team/mach-table-vue";
59
+ import "@agile-team/mach-table-vue/styles.css";
60
+ import App from "./App.vue";
61
+
62
+ createApp(App).use(MachTablePlugin).mount("#app");
63
+ ```
64
+
65
+ ### Global async plugin
66
+
67
+ Best 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.
68
+
69
+ ```ts
70
+ // main.ts
71
+ import { createApp } from "vue";
72
+ import AsyncMachTablePlugin, { preloadMachTable } from "@agile-team/mach-table-vue/async";
73
+ import "@agile-team/mach-table-vue/styles.css";
74
+ import App from "./App.vue";
75
+
76
+ createApp(App).use(AsyncMachTablePlugin).mount("#app");
77
+
78
+ // Optional route-hover prefetch; dynamic imports are cached and idempotent.
79
+ void preloadMachTable();
80
+ ```
81
+
82
+ After 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:
83
+
84
+ ```ts
85
+ // mach-table.config.ts
86
+ import { defineMachTableConfig, defineMachTablePreset } from "@agile-team/mach-table-vue";
87
+ export default defineMachTableConfig({
88
+ defaults: {
89
+ size: "compact",
90
+ pagination: { pageSize: 20, pageSizeOptions: [20, 50, 100] },
91
+ defaultColDef: { sortable: true, resizable: true, filter: true }
92
+ },
93
+ defaultPreset: "list",
94
+ presets: { list: defineMachTablePreset({ stripedRows: true }) }
95
+ });
96
+
97
+ // main.ts
98
+ app.use(MachTablePlugin, machTableConfig);
99
+ ```
100
+
101
+ Layouts 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`.
102
+
103
+ The 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.
104
+
105
+ Remote B-side lists can bind `useMachTableQuery()` directly. For the smallest composable-only chunk, import query/editing helpers from `@agile-team/mach-table-vue/workflows`; root imports remain compatible. It owns controlled server pagination, sorting/filtering requests, AbortSignal cancellation, stale-response protection, retry state and cross-page selection without exposing `gridApi` to ordinary pages.
106
+
107
+ Million-row batch actions use `selectionScope: "query"` and compact `allMatching + excludedKeys` rules, so clients never download every matching row ID.
108
+
109
+ `useMachTableEditing()` exposes reactive dirty changes, save state, partial batch success, rollback, failed-cell reveal and an optional unsaved-page guard. Semantic business types and cached dictionaries are configured once with `createBusinessColumnTypes()` and `createCachedDictionary()`.
110
+
111
+ Element Plus editors are optional and registered once without making EP a package dependency:
112
+
113
+ ```ts
114
+ import { createElementPlusEditors } from "@agile-team/mach-table-vue/editors";
115
+
116
+ const ep = createElementPlusEditors({
117
+ input: ElInput,
118
+ inputNumber: ElInputNumber,
119
+ select: ElSelect,
120
+ datePicker: ElDatePicker
121
+ });
122
+ ```
123
+
124
+ Use `api.openColumnWorkbench()` for the built-in column settings UI. Lazy trees opt in with `isTreeRowExpandable` plus `loadTreeChildren`; ordinary tree data is unchanged.
125
+
126
+ ## Cell and full-row editing
127
+
128
+ Core helpers are re-exported, so no second package import is needed:
129
+
130
+ ```vue
131
+ <script setup lang="ts">
132
+ import { rowActionsColumn } from "@agile-team/mach-table-vue";
133
+
134
+ const columns = [
135
+ { field: "name", editable: true },
136
+ { field: "age", editable: true, cellEditor: "number" },
137
+ rowActionsColumn({ onView, onDelete, overflow: "drawer" })
138
+ ];
139
+ </script>
140
+
141
+ <template>
142
+ <MachTable edit-type="fullRow" :column-defs="columns" :row-data="rows" />
143
+ </template>
144
+ ```
145
+
146
+ Cell mode is the default and provides a pencil plus inline confirm/cancel controls. Set `editable-indicator="always"`, `"hover"` or `"none"` to control the affordance.
39
147
 
40
148
  Documentation: [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)
41
149
 
42
- MIT © Agile Team
150
+ Source-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).
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkBE4RGLUCcjs = require('./chunk-BE4RGLUC.cjs');require('./chunk-MVK2O7FM.cjs');exports.MachTable = _chunkBE4RGLUCcjs.j; exports.RobotGrid = _chunkBE4RGLUCcjs.k;
2
+ //# sourceMappingURL=MachTable-ESOIV4CZ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["d:\\office-project\\wl\\MachTable\\packages\\vue\\dist\\MachTable-ESOIV4CZ.cjs"],"names":[],"mappings":"AAAA,iIAA+C,gCAA6B,iFAAsC","file":"D:\\office-project\\wl\\MachTable\\packages\\vue\\dist\\MachTable-ESOIV4CZ.cjs"}
@@ -0,0 +1,2 @@
1
+ import{j as a,k as b}from"./chunk-7U5IML5K.js";import"./chunk-ICHFPO5U.js";export{a as MachTable,b as RobotGrid};
2
+ //# sourceMappingURL=MachTable-USYTNQV5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/async.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var _chunkZ6YS22CLcjs = require('./chunk-Z6YS22CL.cjs');require('./chunk-MVK2O7FM.cjs');var _vue = require('vue');var p=()=>Promise.resolve().then(() => _interopRequireWildcard(require("./MachTable-ESOIV4CZ.cjs"))).then(({MachTable:e})=>e);function t(e={}){return _vue.defineAsyncComponent.call(void 0, {loader:p,...e})}var c=t(),i= exports.AsyncMachTablePlugin =Object.freeze({install(e,n={}){let a=n.asyncComponentOptions?t(n.asyncComponentOptions):c;_chunkZ6YS22CLcjs.a.call(void 0, e,a,n)}}),b= exports.default =i;exports.AsyncMachTable = c; exports.AsyncMachTablePlugin = i; exports.createAsyncMachTable = t; exports.default = b; exports.preloadMachTable = p;
2
+ //# sourceMappingURL=async.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["d:\\office-project\\wl\\MachTable\\packages\\vue\\dist\\async.cjs"],"names":[],"mappings":"AAAA,mZAAwC,gCAA6B,0BAA2C,IAAK,CAAC,CAAC,CAAC,CAAC,EAAE,4DAAM,CAAC,0BAA0B,GAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,uCAAC,CAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,iCAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAC,CAAC,CAAC,kJAAkH","file":"D:\\office-project\\wl\\MachTable\\packages\\vue\\dist\\async.cjs","sourcesContent":[null]}
@@ -0,0 +1,34 @@
1
+ import * as vue from 'vue';
2
+ import { Component, App } from 'vue';
3
+ import { M as MachTableVueProps, a as MachTablePluginOptions } from './globalRegistration-ySQgs7aA.cjs';
4
+ import '@agile-team/mach-table';
5
+
6
+ /**
7
+ * Starts loading the Vue adapter ahead of first render. The browser and bundler
8
+ * cache the promise, so calling this on route hover is safe and idempotent.
9
+ */
10
+ declare const preloadMachTable: () => Promise<vue.DefineComponent<MachTableVueProps<any>>>;
11
+ interface AsyncMachTableOptions {
12
+ loadingComponent?: Component;
13
+ errorComponent?: Component;
14
+ delay?: number;
15
+ timeout?: number;
16
+ suspensible?: boolean;
17
+ onError?: (error: Error, retry: () => void, fail: () => void, attempts: number) => void;
18
+ }
19
+ /** Creates a route-friendly async component with optional loading/error boundaries. */
20
+ declare function createAsyncMachTable(options?: AsyncMachTableOptions): vue.DefineComponent<MachTableVueProps<any>>;
21
+ /** Async global component used by AsyncMachTablePlugin. */
22
+ declare const AsyncMachTable: vue.DefineComponent<MachTableVueProps<any>>;
23
+ interface AsyncMachTablePluginOptions extends MachTablePluginOptions {
24
+ asyncComponentOptions?: AsyncMachTableOptions;
25
+ }
26
+ /**
27
+ * Registers `<MachTable>` globally while keeping the component and Core in a
28
+ * separate chunk until the first table is rendered.
29
+ */
30
+ declare const AsyncMachTablePlugin: Readonly<{
31
+ install(app: App, options?: AsyncMachTablePluginOptions): void;
32
+ }>;
33
+
34
+ export { AsyncMachTable, type AsyncMachTableOptions, AsyncMachTablePlugin, type AsyncMachTablePluginOptions, MachTablePluginOptions, createAsyncMachTable, AsyncMachTablePlugin as default, preloadMachTable };
@@ -0,0 +1,34 @@
1
+ import * as vue from 'vue';
2
+ import { Component, App } from 'vue';
3
+ import { M as MachTableVueProps, a as MachTablePluginOptions } from './globalRegistration-ySQgs7aA.js';
4
+ import '@agile-team/mach-table';
5
+
6
+ /**
7
+ * Starts loading the Vue adapter ahead of first render. The browser and bundler
8
+ * cache the promise, so calling this on route hover is safe and idempotent.
9
+ */
10
+ declare const preloadMachTable: () => Promise<vue.DefineComponent<MachTableVueProps<any>>>;
11
+ interface AsyncMachTableOptions {
12
+ loadingComponent?: Component;
13
+ errorComponent?: Component;
14
+ delay?: number;
15
+ timeout?: number;
16
+ suspensible?: boolean;
17
+ onError?: (error: Error, retry: () => void, fail: () => void, attempts: number) => void;
18
+ }
19
+ /** Creates a route-friendly async component with optional loading/error boundaries. */
20
+ declare function createAsyncMachTable(options?: AsyncMachTableOptions): vue.DefineComponent<MachTableVueProps<any>>;
21
+ /** Async global component used by AsyncMachTablePlugin. */
22
+ declare const AsyncMachTable: vue.DefineComponent<MachTableVueProps<any>>;
23
+ interface AsyncMachTablePluginOptions extends MachTablePluginOptions {
24
+ asyncComponentOptions?: AsyncMachTableOptions;
25
+ }
26
+ /**
27
+ * Registers `<MachTable>` globally while keeping the component and Core in a
28
+ * separate chunk until the first table is rendered.
29
+ */
30
+ declare const AsyncMachTablePlugin: Readonly<{
31
+ install(app: App, options?: AsyncMachTablePluginOptions): void;
32
+ }>;
33
+
34
+ export { AsyncMachTable, type AsyncMachTableOptions, AsyncMachTablePlugin, type AsyncMachTablePluginOptions, MachTablePluginOptions, createAsyncMachTable, AsyncMachTablePlugin as default, preloadMachTable };
package/dist/async.js ADDED
@@ -0,0 +1,2 @@
1
+ import{a as o}from"./chunk-ZUOKB5ID.js";import"./chunk-ICHFPO5U.js";import{defineAsyncComponent as r}from"vue";var p=()=>import("./MachTable-USYTNQV5.js").then(({MachTable:e})=>e);function t(e={}){return r({loader:p,...e})}var c=t(),i=Object.freeze({install(e,n={}){let a=n.asyncComponentOptions?t(n.asyncComponentOptions):c;o(e,a,n)}}),b=i;export{c as AsyncMachTable,i as AsyncMachTablePlugin,t as createAsyncMachTable,b as default,p as preloadMachTable};
2
+ //# sourceMappingURL=async.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/async.ts"],"sourcesContent":["import { defineAsyncComponent, type App, type Component } from \"vue\";\nimport { registerGlobalMachTable, type MachTablePluginOptions } from \"./globalRegistration\";\n\n/**\n * Starts loading the Vue adapter ahead of first render. The browser and bundler\n * cache the promise, so calling this on route hover is safe and idempotent.\n */\nexport const preloadMachTable = () => import(\"./MachTable\").then(({ MachTable }) => MachTable);\n\nexport interface AsyncMachTableOptions {\n loadingComponent?: Component;\n errorComponent?: Component;\n delay?: number;\n timeout?: number;\n suspensible?: boolean;\n onError?: (error: Error, retry: () => void, fail: () => void, attempts: number) => void;\n}\n\n/** Creates a route-friendly async component with optional loading/error boundaries. */\nexport function createAsyncMachTable(options: AsyncMachTableOptions = {}) {\n return defineAsyncComponent({ loader: preloadMachTable, ...options });\n}\n\n/** Async global component used by AsyncMachTablePlugin. */\nexport const AsyncMachTable = createAsyncMachTable();\n\nexport interface AsyncMachTablePluginOptions extends MachTablePluginOptions {\n asyncComponentOptions?: AsyncMachTableOptions;\n}\n\n/**\n * Registers `<MachTable>` globally while keeping the component and Core in a\n * separate chunk until the first table is rendered.\n */\nexport const AsyncMachTablePlugin = Object.freeze({\n install(app: App, options: AsyncMachTablePluginOptions = {}): void {\n const component = options.asyncComponentOptions\n ? createAsyncMachTable(options.asyncComponentOptions)\n : AsyncMachTable;\n registerGlobalMachTable(app, component, options);\n }\n});\n\nexport type { MachTablePluginOptions } from \"./globalRegistration\";\nexport default AsyncMachTablePlugin;\n"],"mappings":"oEAAA,OAAS,wBAAAA,MAAsD,MAOxD,IAAMC,EAAmB,IAAM,OAAO,yBAAa,EAAE,KAAK,CAAC,CAAE,UAAAC,CAAU,IAAMA,CAAS,EAYtF,SAASC,EAAqBC,EAAiC,CAAC,EAAG,CACxE,OAAOC,EAAqB,CAAE,OAAQJ,EAAkB,GAAGG,CAAQ,CAAC,CACtE,CAGO,IAAME,EAAiBH,EAAqB,EAUtCI,EAAuB,OAAO,OAAO,CAChD,QAAQC,EAAUJ,EAAuC,CAAC,EAAS,CACjE,IAAMK,EAAYL,EAAQ,sBACtBD,EAAqBC,EAAQ,qBAAqB,EAClDE,EACJI,EAAwBF,EAAKC,EAAWL,CAAO,CACjD,CACF,CAAC,EAGMO,EAAQJ","names":["defineAsyncComponent","preloadMachTable","MachTable","createAsyncMachTable","options","defineAsyncComponent","AsyncMachTable","AsyncMachTablePlugin","app","component","registerGlobalMachTable","async_default"]}
@@ -0,0 +1,2 @@
1
+ import{d as h,k as E}from"./chunk-ICHFPO5U.js";import{defineComponent as _,getCurrentInstance as j,h as F,onBeforeUnmount as W,onMounted as Y,ref as q,watch as K}from"vue";import{createGrid as U,EVENT_TYPES as L,GRID_OPTION_KEYS as P,GRID_OPTION_META as z}from"@agile-team/mach-table";import{createApp as H,h as b,render as v,renderSlot as k,getCurrentInstance as I,shallowReactive as $}from"vue";function T(t){if(t)return t;try{return I()?.appContext}catch{return}}function V(t,e,n,o){if(o){let r=b(t,e);return r.appContext=o,v(r,n),()=>v(null,n)}let a=H({render:()=>b(t,e)});return a.mount(n),()=>a.unmount()}function C(t,e,n,o,a=!0){let i=b({name:"MachTableSlot",setup:()=>()=>k({default:t},"default",e())});o&&(i.appContext=o);let l=!1,u=()=>{l||v(i,n)};return a?queueMicrotask(u):u(),()=>{l=!0,v(null,n)}}function ee(t,e){let n=T(e?.appContext);return o=>{let a=document.createElement("div");a.className="mach-cell-vue",a.style.width="100%";let r=V(t,o,a,n),i=!1;return{el:a,destroy:()=>{i||(i=!0,window.setTimeout(r,0))}}}}function te(t,e){let n=T(e?.appContext);return o=>{let a=document.createElement("div");a.style.height="100%";let r=V(t,o,a,n),i=!1;return{el:a,destroy:()=>{i||(i=!0,r())}}}}function G(t,e){let n=T(e?.appContext);return o=>{let a=document.createElement("div");a.className="mach-cell-vue mach-cell-vue--slot",a.style.width="100%";let r=C(t,()=>o,a,n);return{el:a,destroy:r}}}function M(t,e){let n=T(e?.appContext);return o=>{let a=document.createElement("div");a.className="mach-header-vue-slot";let r=C(t,()=>o,a,n);return{el:a,destroy:r}}}function N(t,e){let n=T(e?.appContext);return o=>{let a=$({value:o.value}),r=document.createElement("div");r.className="mach-cell-vue mach-cell-vue--editor";let l=C(t,()=>({...o,value:a.value,setValue:u=>{a.value=u},commit:()=>o.api.stopEditing(!1),cancel:()=>o.api.stopEditing(!0)}),r,n,!1);return{el:r,getValue:()=>a.value,focus:()=>{r.querySelector("input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex='-1'])")?.focus()},destroy:l}}}function x(t,e){let n=T(e?.appContext);return o=>{let a=document.createElement("div");a.className="mach-detail-vue-slot",a.style.height="100%";let r=C(t,()=>o,a,n);return{el:a,destroy:r}}}function D(t,e){let n=T(e?.appContext);return()=>{let o=document.createElement("div");o.className="mach-overlay-vue-slot";let a=C(t,()=>({}),o,n);return{el:o,destroy:a}}}function S(t,e,n){return t[`${e}-${n}`]??t[`${e}-${n.replace(/[.\s]+/g,"-")}`]}function A(t,e,n){return t.map((o,a)=>{if(Array.isArray(o.children)){let y=o;return{...y,children:A(y.children,e,n)}}let r=o,i=r.colId??r.field??`col_${a}`,l=S(e,"cell",i)??(i==="op"?e.actions:void 0)??e.cell,u=S(e,"header",i)??e.header,g=S(e,"editor",i)??e.editor;return{...r,...l?{cellRenderer:G(l,{appContext:n})}:{},...u?{headerComponent:M(u,{appContext:n})}:{},...g?{cellEditor:N(g,{appContext:n})}:{}}})}function re(t,e,n){let o=t.columnDefs?A(t.columnDefs,e,n):t.columnDefs;return{...t,columnDefs:o,...e.detail&&!t.detailRowRenderer?{detailRowRenderer:x(e.detail,{appContext:n})}:{},...e.loading?{overlayLoadingTemplate:D(e.loading,{appContext:n})}:{},...e.empty?{overlayNoRowsTemplate:D(e.empty,{appContext:n})}:{}}}function w(t,e){let n,o,a=t.detail?x(t.detail,{appContext:e}):void 0,r=t.loading?D(t.loading,{appContext:e}):void 0,i=t.empty?D(t.empty,{appContext:e}):void 0;return l=>(l.columnDefs!==n&&(n=l.columnDefs,o=l.columnDefs?A(l.columnDefs,t,e):l.columnDefs),{...l,columnDefs:o,...a&&!l.detailRowRenderer?{detailRowRenderer:a}:{},...r?{overlayLoadingTemplate:r}:{},...i?{overlayNoRowsTemplate:i}:{}})}var B=P.filter(t=>!["className","ariaLabel","ariaLabelledBy","ariaDescribedBy"].includes(t)),f={};for(let t of B){let e=z[t].kind,n=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:n,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 J(t){return"on"+t.charAt(0).toUpperCase()+t.slice(1)}var Q=_({name:"MachTable",inheritAttrs:!1,props:f,emits:[...L],setup(t,{expose:e,attrs:n,emit:o,slots:a}){let r=t,i=q(null),l=null,u=E(),g=w(a,j()?.appContext),y=null,O=new Set,R=()=>{let d={};for(let s of B){let m=r[s];m!==void 0&&(d[s]=m)}r.gridClassName!==void 0&&(d.className=r.gridClassName),r.gridAriaLabel!==void 0&&(d.ariaLabel=r.gridAriaLabel),r.gridAriaLabelledBy!==void 0&&(d.ariaLabelledBy=r.gridAriaLabelledBy),r.gridAriaDescribedBy!==void 0&&(d.ariaDescribedBy=r.gridAriaDescribedBy);let c=h(u.value,r.preset,d,s=>{let m=`${s.code}:${s.preset??""}`;O.has(m)||(O.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 Y(()=>{if(!i.value)return;let d=R();for(let c of L){let p=J(c),s=d[p];d[p]=m=>{typeof s=="function"&&s(m),o(c,m)}}l=U(i.value,d)}),W(()=>{l?.destroy(),l=null}),K(()=>{let d=R();return[...P.map(c=>d[c])]},(d,c)=>{if(!l)return;let p={};d.forEach((s,m)=>{Object.is(s,c[m])||(p[P[m]]=s)}),Object.keys(p).length>0&&l.updateOptions(p)}),e({getApi:()=>l,getResolvedConfig:()=>y?.options??R(),explainOption:d=>(y??h(u.value,r.preset,{})).explain(d)}),()=>F("div",{...n,ref:i,class:["mach-vue-host",r.className,n.class]})}}),X=Q,ce=X;export{ee as a,te as b,G as c,M as d,N as e,x as f,D as g,re as h,w as i,X as j,ce as k};
2
+ //# sourceMappingURL=chunk-7U5IML5K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/MachTable.ts","../src/adapters.ts","../src/slots.ts"],"sourcesContent":["import { defineComponent, getCurrentInstance, h, onBeforeUnmount, onMounted, ref, watch, type DefineComponent } from \"vue\";\nimport {\n createGrid,\n EVENT_TYPES,\n GRID_OPTION_KEYS,\n GRID_OPTION_META\n} from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions } from \"@agile-team/mach-table\";\nimport { useMachTableConfig } from \"./defaults\";\nimport {\n resolveMachTableGridOptions,\n type MachTableOptionExplanation,\n type MachTablePresetSelection,\n type ResolvedMachTableGridOptions\n} from \"./configuration\";\nimport { createVueSlotEnhancer } from \"./slots\";\n\ntype AdapterOnlyGridOption = \"className\" | \"ariaLabel\" | \"ariaLabelledBy\" | \"ariaDescribedBy\";\n\nexport type MachTableVueProps<TData = any> = Omit<GridOptions<TData>, AdapterOnlyGridOption> & {\n /** Named application preset(s). Explicit table props still win. */\n preset?: MachTablePresetSelection;\n /** CSS class applied to the Vue host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n /** Accessible name forwarded to MachTable's inner role=grid element. */\n gridAriaLabel?: string;\n gridAriaLabelledBy?: string;\n gridAriaDescribedBy?: string;\n};\n\nconst ADAPTER_OPTION_KEYS = GRID_OPTION_KEYS.filter(\n (key) => ![\"className\", \"ariaLabel\", \"ariaLabelledBy\", \"ariaDescribedBy\"].includes(key)\n);\n\nconst runtimeProps: Record<string, { type?: any; default: undefined }> = {};\nfor (const key of ADAPTER_OPTION_KEYS) {\n const kind = GRID_OPTION_META[key].kind;\n const type = kind === \"boolean\"\n ? Boolean\n : kind === \"number\"\n ? Number\n : kind === \"array\"\n ? Array\n : kind === \"function\"\n ? Function\n : kind === \"boolean-object\"\n ? [Boolean, Object]\n : kind === \"object\"\n ? Object\n : kind === \"string\"\n ? String\n : undefined;\n runtimeProps[key] = { type, default: undefined };\n}\nruntimeProps.className = { type: String, default: undefined };\nruntimeProps.gridClassName = { type: String, default: undefined };\nruntimeProps.gridAriaLabel = { type: String, default: undefined };\nruntimeProps.gridAriaLabelledBy = { type: String, default: undefined };\nruntimeProps.gridAriaDescribedBy = { type: String, default: undefined };\nruntimeProps.preset = { type: [String, Array, Boolean], default: undefined };\n\nfunction handlerNameOf(eventType: string): string {\n return \"on\" + eventType.charAt(0).toUpperCase() + eventType.slice(1);\n}\n\nconst MachTableImpl = defineComponent({\n name: \"MachTable\",\n inheritAttrs: false,\n props: runtimeProps,\n emits: [...EVENT_TYPES],\n setup(rawProps, { expose, attrs, emit, slots }) {\n const props = rawProps as Readonly<Record<string, any>>;\n const host = ref<HTMLDivElement | null>(null);\n let api: GridApi | null = null;\n const config = useMachTableConfig();\n const enhanceVueSlots = createVueSlotEnhancer<any>(slots, getCurrentInstance()?.appContext);\n let lastResolution: ResolvedMachTableGridOptions<any> | null = null;\n const reportedWarnings = new Set<string>();\n\n const collectOptions = (): GridOptions<any> => {\n const explicit: Record<string, unknown> = {};\n for (const key of ADAPTER_OPTION_KEYS) {\n const value = props[key];\n if (value !== undefined) explicit[key] = value;\n }\n if (props.gridClassName !== undefined) explicit.className = props.gridClassName;\n if (props.gridAriaLabel !== undefined) explicit.ariaLabel = props.gridAriaLabel;\n if (props.gridAriaLabelledBy !== undefined) explicit.ariaLabelledBy = props.gridAriaLabelledBy;\n if (props.gridAriaDescribedBy !== undefined) explicit.ariaDescribedBy = props.gridAriaDescribedBy;\n const resolution = resolveMachTableGridOptions(\n config.value,\n props.preset as MachTablePresetSelection | undefined,\n explicit as Partial<GridOptions<any>>,\n (warning) => {\n const key = `${warning.code}:${warning.preset ?? \"\"}`;\n if (reportedWarnings.has(key)) return;\n reportedWarnings.add(key);\n if (config.value.onConfigWarning) config.value.onConfigWarning(warning);\n else console.warn(warning.message);\n }\n );\n const enhancedOptions = enhanceVueSlots(resolution.options);\n lastResolution = {\n options: enhancedOptions,\n explain: (key) => {\n if (key === \"columnDefs\" && enhancedOptions.columnDefs !== resolution.options.columnDefs) {\n return {\n key,\n value: enhancedOptions.columnDefs,\n source: \"Vue slots\",\n layers: [...resolution.explain(key).layers, { name: \"Vue slots\", value: enhancedOptions.columnDefs }]\n };\n }\n return resolution.explain(key);\n }\n };\n return lastResolution.options;\n };\n\n onMounted(() => {\n if (!host.value) return;\n const options = collectOptions() as Record<string, unknown>;\n for (const type of EVENT_TYPES) {\n const handlerName = handlerNameOf(type);\n const defaultHandler = options[handlerName];\n options[handlerName] = (event: unknown) => {\n if (typeof defaultHandler === \"function\") (defaultHandler as (value: unknown) => void)(event);\n emit(type, event);\n };\n }\n api = createGrid(host.value, options as GridOptions<any>);\n });\n\n onBeforeUnmount(() => {\n api?.destroy();\n api = null;\n });\n\n watch(\n () => {\n const options = collectOptions() as Record<string, unknown>;\n return [...GRID_OPTION_KEYS.map((key) => options[key])];\n },\n (values, previous) => {\n if (!api) return;\n const changed: Record<string, unknown> = {};\n values.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) api.updateOptions(changed as Partial<GridOptions<any>>);\n }\n );\n\n expose({\n getApi: (): GridApi | null => api,\n getResolvedConfig: (): GridOptions<any> => lastResolution?.options ?? collectOptions(),\n explainOption: (key: keyof GridOptions<any> | string): MachTableOptionExplanation =>\n (lastResolution ?? resolveMachTableGridOptions(config.value, props.preset, {})).explain(key)\n });\n\n return () => h(\"div\", {\n ...attrs,\n ref: host,\n class: [\"mach-vue-host\", props.className, attrs.class]\n });\n }\n});\n\nexport const MachTable = MachTableImpl as unknown as DefineComponent<MachTableVueProps<any>>;\n/** @deprecated Use MachTable. Kept as a source-compatible alias through 0.x. */\nexport const RobotGrid = MachTable;\n/** @deprecated Use MachTableVueProps. */\nexport type RobotGridVueProps<TData = any> = MachTableVueProps<TData>;\n","import {\n createApp,\n h,\n render,\n renderSlot,\n getCurrentInstance,\n shallowReactive,\n type AppContext,\n type Component,\n type Slot\n} from \"vue\";\nimport type {\n CellEditorFactory,\n CellEditorParams,\n CellRendererParams,\n CellRendererFn,\n DetailRowRendererParams,\n HeaderComponentParams,\n ICellRendererResult,\n OverlayTemplate\n} from \"@agile-team/mach-table\";\n\nexport type VueCellRendererProps<TData = any, TValue = any> = CellRendererParams<TData, TValue>;\n\n/**\n * 解析适配器可用的 appContext:\n * 1. 显式传入优先;\n * 2. 否则在 <script setup> 内同步调用工厂时自动捕获宿主组件上下文\n * (使单元格/明细内的 naive、EP 组件继承 ConfigProvider 的主题与国际化)。\n */\nfunction resolveAppContext(explicit?: AppContext): AppContext | undefined {\n if (explicit) return explicit;\n try {\n return getCurrentInstance()?.appContext;\n } catch {\n return undefined;\n }\n}\n\nfunction mountComponent(\n component: Component,\n props: Record<string, any>,\n host: HTMLElement,\n appContext?: AppContext\n): () => void {\n if (appContext) {\n const vnode = h(component, props);\n vnode.appContext = appContext;\n render(vnode, host);\n return () => render(null, host);\n }\n const app = createApp({ render: () => h(component, props) });\n app.mount(host);\n return () => app.unmount();\n}\n\nfunction mountSlot(\n slot: Slot,\n props: () => Record<string, any>,\n host: HTMLElement,\n appContext?: AppContext,\n defer = true\n): () => void {\n const Root = {\n name: \"MachTableSlot\",\n setup: () => () => renderSlot({ default: slot }, \"default\", props())\n };\n const vnode = h(Root);\n if (appContext) vnode.appContext = appContext;\n let disposed = false;\n const mount = () => {\n if (disposed) return;\n render(vnode, host);\n };\n if (defer) queueMicrotask(mount);\n else mount();\n return () => {\n disposed = true;\n render(null, host);\n };\n}\n\nexport function vueCellRenderer<TData = any, TValue = any>(\n component: Component,\n options?: { appContext?: AppContext }\n): CellRendererFn {\n const appContext = resolveAppContext(options?.appContext);\n return (params: CellRendererParams<TData, TValue>) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-vue\";\n host.style.width = \"100%\";\n const unmount = mountComponent(component, params as Record<string, any>, host, appContext);\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(unmount, 0);\n }\n };\n };\n}\n\nexport function vueDetailRenderer<TData = any>(\n component: Component,\n options?: { appContext?: AppContext }\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n const appContext = resolveAppContext(options?.appContext);\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const unmount = mountComponent(component, params as Record<string, any>, host, appContext);\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n unmount();\n }\n };\n };\n}\n\n/** Internal/public bridge used by automatic `#cell-*` Vue slots. */\nexport function vueCellSlotRenderer<TData = any, TValue = any>(\n slot: Slot,\n options?: { appContext?: AppContext }\n): CellRendererFn {\n const appContext = resolveAppContext(options?.appContext);\n return (params: CellRendererParams<TData, TValue>) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-vue mach-cell-vue--slot\";\n host.style.width = \"100%\";\n const unmount = mountSlot(slot, () => params, host, appContext);\n return { el: host, destroy: unmount };\n };\n}\n\nexport function vueHeaderSlotRenderer<TData = any>(\n slot: Slot,\n options?: { appContext?: AppContext }\n): (params: HeaderComponentParams<TData>) => ICellRendererResult {\n const appContext = resolveAppContext(options?.appContext);\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-header-vue-slot\";\n const unmount = mountSlot(slot, () => params, host, appContext);\n return { el: host, destroy: unmount };\n };\n}\n\nexport interface VueCellEditorSlotProps<TData = any, TValue = any>\n extends CellEditorParams<TData, TValue> {\n value: TValue;\n setValue(value: TValue): void;\n commit(): void;\n cancel(): void;\n}\n\nexport function vueCellEditorSlot<TData = any, TValue = any>(\n slot: Slot,\n options?: { appContext?: AppContext }\n): CellEditorFactory {\n const appContext = resolveAppContext(options?.appContext);\n return (params: CellEditorParams<TData, TValue>) => {\n const state = shallowReactive<{ value: TValue }>({ value: params.value });\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-vue mach-cell-vue--editor\";\n const slotProps = (): VueCellEditorSlotProps<TData, TValue> => ({\n ...params,\n value: state.value,\n setValue: (value) => { state.value = value; },\n commit: () => params.api.stopEditing(false),\n cancel: () => params.api.stopEditing(true)\n });\n const unmount = mountSlot(slot, slotProps as () => Record<string, any>, host, appContext, false);\n return {\n el: host,\n getValue: () => state.value,\n focus: () => {\n const focusable = host.querySelector<HTMLElement>(\n \"input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), [tabindex]:not([tabindex='-1'])\"\n );\n focusable?.focus();\n },\n destroy: unmount\n };\n };\n}\n\nexport function vueDetailSlotRenderer<TData = any>(\n slot: Slot,\n options?: { appContext?: AppContext }\n): (params: DetailRowRendererParams<TData>) => ICellRendererResult {\n const appContext = resolveAppContext(options?.appContext);\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-detail-vue-slot\";\n host.style.height = \"100%\";\n const unmount = mountSlot(slot, () => params, host, appContext);\n return { el: host, destroy: unmount };\n };\n}\n\nexport function vueOverlaySlot(\n slot: Slot,\n options?: { appContext?: AppContext }\n): OverlayTemplate {\n const appContext = resolveAppContext(options?.appContext);\n return () => {\n const host = document.createElement(\"div\");\n host.className = \"mach-overlay-vue-slot\";\n const unmount = mountSlot(slot, () => ({}), host, appContext);\n return { el: host, destroy: unmount };\n };\n}\n","import type { AppContext, Slot, Slots } from \"vue\";\nimport type {\n CellEditorParams,\n CellRendererParams,\n ColDef,\n ColDefGroup,\n DetailRowRendererParams,\n GridOptions,\n HeaderComponentParams\n} from \"@agile-team/mach-table\";\nimport {\n vueCellEditorSlot,\n vueCellSlotRenderer,\n vueDetailSlotRenderer,\n vueHeaderSlotRenderer,\n vueOverlaySlot,\n type VueCellEditorSlotProps\n} from \"./adapters\";\n\nexport interface MachTableVueSlots<TData = any> {\n cell?: (props: CellRendererParams<TData>) => any;\n header?: (props: HeaderComponentParams<TData>) => any;\n editor?: (props: VueCellEditorSlotProps<TData>) => any;\n detail?: (props: DetailRowRendererParams<TData>) => any;\n loading?: () => any;\n empty?: () => any;\n actions?: (props: CellRendererParams<TData>) => any;\n [name: `cell-${string}`]: ((props: CellRendererParams<TData>) => any) | undefined;\n [name: `header-${string}`]: ((props: HeaderComponentParams<TData>) => any) | undefined;\n [name: `editor-${string}`]: ((props: CellEditorParams<TData>) => any) | undefined;\n}\n\nfunction namedSlot(slots: Slots, prefix: string, id: string): Slot | undefined {\n return slots[`${prefix}-${id}`] ?? slots[`${prefix}-${id.replace(/[.\\s]+/g, \"-\")}`];\n}\n\nfunction enhanceColumns<TData>(\n definitions: readonly (ColDef<TData> | ColDefGroup<TData>)[],\n slots: Slots,\n appContext?: AppContext\n): (ColDef<TData> | ColDefGroup<TData>)[] {\n return definitions.map((definition, index) => {\n if (Array.isArray((definition as ColDefGroup<TData>).children)) {\n const group = definition as ColDefGroup<TData>;\n return { ...group, children: enhanceColumns(group.children, slots, appContext) };\n }\n const column = definition as ColDef<TData>;\n const id = column.colId ?? column.field ?? `col_${index}`;\n const cell = namedSlot(slots, \"cell\", id) ?? (id === \"op\" ? slots.actions : undefined) ?? slots.cell;\n const header = namedSlot(slots, \"header\", id) ?? slots.header;\n const editor = namedSlot(slots, \"editor\", id) ?? slots.editor;\n return {\n ...column,\n ...(cell ? { cellRenderer: vueCellSlotRenderer(cell, { appContext }) } : {}),\n ...(header ? { headerComponent: vueHeaderSlotRenderer(header, { appContext }) } : {}),\n ...(editor ? { cellEditor: vueCellEditorSlot(editor, { appContext }) } : {})\n };\n });\n}\n\nexport function applyVueSlots<TData>(\n options: GridOptions<TData>,\n slots: Slots,\n appContext?: AppContext\n): GridOptions<TData> {\n const columnDefs = options.columnDefs\n ? enhanceColumns(options.columnDefs, slots, appContext)\n : options.columnDefs;\n return {\n ...options,\n columnDefs,\n ...(slots.detail && !options.detailRowRenderer\n ? { detailRowRenderer: vueDetailSlotRenderer(slots.detail, { appContext }) }\n : {}),\n ...(slots.loading ? { overlayLoadingTemplate: vueOverlaySlot(slots.loading, { appContext }) } : {}),\n ...(slots.empty ? { overlayNoRowsTemplate: vueOverlaySlot(slots.empty, { appContext }) } : {})\n };\n}\n\n/** Creates a stable enhancer so unrelated reactive prop updates do not rebuild columns. */\nexport function createVueSlotEnhancer<TData>(slots: Slots, appContext?: AppContext) {\n let previousDefinitions: GridOptions<TData>[\"columnDefs\"];\n let enhancedDefinitions: GridOptions<TData>[\"columnDefs\"];\n const detailRenderer = slots.detail ? vueDetailSlotRenderer<TData>(slots.detail, { appContext }) : undefined;\n const loadingTemplate = slots.loading ? vueOverlaySlot(slots.loading, { appContext }) : undefined;\n const emptyTemplate = slots.empty ? vueOverlaySlot(slots.empty, { appContext }) : undefined;\n\n return (options: GridOptions<TData>): GridOptions<TData> => {\n if (options.columnDefs !== previousDefinitions) {\n previousDefinitions = options.columnDefs;\n enhancedDefinitions = options.columnDefs\n ? enhanceColumns(options.columnDefs, slots, appContext)\n : options.columnDefs;\n }\n return {\n ...options,\n columnDefs: enhancedDefinitions,\n ...(detailRenderer && !options.detailRowRenderer ? { detailRowRenderer: detailRenderer } : {}),\n ...(loadingTemplate ? { overlayLoadingTemplate: loadingTemplate } : {}),\n ...(emptyTemplate ? { overlayNoRowsTemplate: emptyTemplate } : {})\n };\n };\n}\n"],"mappings":"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","names":["defineComponent","getCurrentInstance","h","onBeforeUnmount","onMounted","ref","watch","createGrid","EVENT_TYPES","GRID_OPTION_KEYS","GRID_OPTION_META","createApp","h","render","renderSlot","getCurrentInstance","shallowReactive","resolveAppContext","explicit","mountComponent","component","props","host","appContext","vnode","app","mountSlot","slot","defer","disposed","mount","vueCellRenderer","options","params","unmount","destroyed","vueDetailRenderer","vueCellSlotRenderer","vueHeaderSlotRenderer","vueCellEditorSlot","state","value","vueDetailSlotRenderer","vueOverlaySlot","namedSlot","slots","prefix","id","enhanceColumns","definitions","appContext","definition","index","group","column","cell","header","editor","vueCellSlotRenderer","vueHeaderSlotRenderer","vueCellEditorSlot","applyVueSlots","options","columnDefs","vueDetailSlotRenderer","vueOverlaySlot","createVueSlotEnhancer","previousDefinitions","enhancedDefinitions","detailRenderer","loadingTemplate","emptyTemplate","ADAPTER_OPTION_KEYS","GRID_OPTION_KEYS","key","runtimeProps","kind","GRID_OPTION_META","type","handlerNameOf","eventType","MachTableImpl","defineComponent","EVENT_TYPES","rawProps","expose","attrs","emit","slots","props","host","ref","api","config","useMachTableConfig","enhanceVueSlots","createVueSlotEnhancer","getCurrentInstance","lastResolution","reportedWarnings","collectOptions","explicit","value","resolution","resolveMachTableGridOptions","warning","enhancedOptions","onMounted","options","handlerName","defaultHandler","event","createGrid","onBeforeUnmount","watch","values","previous","changed","index","h","MachTable","RobotGrid"]}
@@ -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 _chunkMVK2O7FMcjs = require('./chunk-MVK2O7FM.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 V(t,e,n,o){if(o){let r=_vue.h.call(void 0, t,e);return r.appContext=o,_vue.render.call(void 0, r,n),()=>_vue.render.call(void 0, null,n)}let a=_vue.createApp.call(void 0, {render:()=>_vue.h.call(void 0, t,e)});return a.mount(n),()=>a.unmount()}function C(t,e,n,o,a=!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,n)};return a?queueMicrotask(u):u(),()=>{l=!0,_vue.render.call(void 0, null,n)}}function ee(t,e){let n=T(_optionalChain([e, 'optionalAccess', _3 => _3.appContext]));return o=>{let a=document.createElement("div");a.className="mach-cell-vue",a.style.width="100%";let r=V(t,o,a,n),i=!1;return{el:a,destroy:()=>{i||(i=!0,window.setTimeout(r,0))}}}}function te(t,e){let n=T(_optionalChain([e, 'optionalAccess', _4 => _4.appContext]));return o=>{let a=document.createElement("div");a.style.height="100%";let r=V(t,o,a,n),i=!1;return{el:a,destroy:()=>{i||(i=!0,r())}}}}function G(t,e){let n=T(_optionalChain([e, 'optionalAccess', _5 => _5.appContext]));return o=>{let a=document.createElement("div");a.className="mach-cell-vue mach-cell-vue--slot",a.style.width="100%";let r=C(t,()=>o,a,n);return{el:a,destroy:r}}}function M(t,e){let n=T(_optionalChain([e, 'optionalAccess', _6 => _6.appContext]));return o=>{let a=document.createElement("div");a.className="mach-header-vue-slot";let r=C(t,()=>o,a,n);return{el:a,destroy:r}}}function N(t,e){let n=T(_optionalChain([e, 'optionalAccess', _7 => _7.appContext]));return o=>{let a=_vue.shallowReactive.call(void 0, {value:o.value}),r=document.createElement("div");r.className="mach-cell-vue mach-cell-vue--editor";let l=C(t,()=>({...o,value:a.value,setValue:u=>{a.value=u},commit:()=>o.api.stopEditing(!1),cancel:()=>o.api.stopEditing(!0)}),r,n,!1);return{el:r,getValue:()=>a.value,focus:()=>{_optionalChain([r, '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 x(t,e){let n=T(_optionalChain([e, 'optionalAccess', _12 => _12.appContext]));return o=>{let a=document.createElement("div");a.className="mach-detail-vue-slot",a.style.height="100%";let r=C(t,()=>o,a,n);return{el:a,destroy:r}}}function D(t,e){let n=T(_optionalChain([e, 'optionalAccess', _13 => _13.appContext]));return()=>{let o=document.createElement("div");o.className="mach-overlay-vue-slot";let a=C(t,()=>({}),o,n);return{el:o,destroy:a}}}function S(t,e,n){return _nullishCoalesce(t[`${e}-${n}`], () => (t[`${e}-${n.replace(/[.\s]+/g,"-")}`]))}function A(t,e,n){return t.map((o,a)=>{if(Array.isArray(o.children)){let y=o;return{...y,children:A(y.children,e,n)}}let r=o,i=_nullishCoalesce(_nullishCoalesce(r.colId, () => (r.field)), () => (`col_${a}`)),l=_nullishCoalesce(_nullishCoalesce(S(e,"cell",i), () => ((i==="op"?e.actions:void 0))), () => (e.cell)),u=_nullishCoalesce(S(e,"header",i), () => (e.header)),g=_nullishCoalesce(S(e,"editor",i), () => (e.editor));return{...r,...l?{cellRenderer:G(l,{appContext:n})}:{},...u?{headerComponent:M(u,{appContext:n})}:{},...g?{cellEditor:N(g,{appContext:n})}:{}}})}function re(t,e,n){let o=t.columnDefs?A(t.columnDefs,e,n):t.columnDefs;return{...t,columnDefs:o,...e.detail&&!t.detailRowRenderer?{detailRowRenderer:x(e.detail,{appContext:n})}:{},...e.loading?{overlayLoadingTemplate:D(e.loading,{appContext:n})}:{},...e.empty?{overlayNoRowsTemplate:D(e.empty,{appContext:n})}:{}}}function w(t,e){let n,o,a=t.detail?x(t.detail,{appContext:e}):void 0,r=t.loading?D(t.loading,{appContext:e}):void 0,i=t.empty?D(t.empty,{appContext:e}):void 0;return l=>(l.columnDefs!==n&&(n=l.columnDefs,o=l.columnDefs?A(l.columnDefs,t,e):l.columnDefs),{...l,columnDefs:o,...a&&!l.detailRowRenderer?{detailRowRenderer:a}:{},...r?{overlayLoadingTemplate:r}:{},...i?{overlayNoRowsTemplate:i}:{}})}var B=_machtable.GRID_OPTION_KEYS.filter(t=>!["className","ariaLabel","ariaLabelledBy","ariaDescribedBy"].includes(t)),f={};for(let t of B){let e=_machtable.GRID_OPTION_META[t].kind,n=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:n,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 J(t){return"on"+t.charAt(0).toUpperCase()+t.slice(1)}var Q=_vue.defineComponent.call(void 0, {name:"MachTable",inheritAttrs:!1,props:f,emits:[..._machtable.EVENT_TYPES],setup(t,{expose:e,attrs:n,emit:o,slots:a}){let r=t,i=_vue.ref.call(void 0, null),l=null,u=_chunkMVK2O7FMcjs.k.call(void 0, ),g=w(a,_optionalChain([_vue.getCurrentInstance.call(void 0, ), 'optionalAccess', _14 => _14.appContext])),y=null,O=new Set,R=()=>{let d={};for(let s of B){let m=r[s];m!==void 0&&(d[s]=m)}r.gridClassName!==void 0&&(d.className=r.gridClassName),r.gridAriaLabel!==void 0&&(d.ariaLabel=r.gridAriaLabel),r.gridAriaLabelledBy!==void 0&&(d.ariaLabelledBy=r.gridAriaLabelledBy),r.gridAriaDescribedBy!==void 0&&(d.ariaDescribedBy=r.gridAriaDescribedBy);let c=_chunkMVK2O7FMcjs.d.call(void 0, u.value,r.preset,d,s=>{let m=`${s.code}:${_nullishCoalesce(s.preset, () => (""))}`;O.has(m)||(O.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=J(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, () => (_chunkMVK2O7FMcjs.d.call(void 0, u.value,r.preset,{})))).explain(d)}),()=>_vue.h.call(void 0, "div",{...n,ref:i,class:["mach-vue-host",r.className,n.class]})}}),X= exports.j =Q,ce= exports.k =X;exports.a = ee; exports.b = te; exports.c = G; exports.d = M; exports.e = N; exports.f = x; exports.g = D; exports.h = re; exports.i = w; exports.j = X; exports.k = ce;
2
+ //# sourceMappingURL=chunk-BE4RGLUC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["d:\\office-project\\wl\\MachTable\\packages\\vue\\dist\\chunk-BE4RGLUC.cjs"],"names":[],"mappings":"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","file":"D:\\office-project\\wl\\MachTable\\packages\\vue\\dist\\chunk-BE4RGLUC.cjs","sourcesContent":[null]}
@@ -0,0 +1,2 @@
1
+ import{computed as de,onScopeDispose as ce,ref as j,shallowRef as $,watch as fe}from"vue";function me(a,i={}){let m=$([]),v=j([]),c=j(!1),g=$(null),P=de(()=>v.value.length>0),T=null,y=()=>{let o=a.api.value;if(!o||o.isDestroyed()){v.value=[],m.value=[];return}v.value=o.getDirtyRowIds(),m.value=o.getChanges()};fe(a.api,o=>{T?.(),T=null,y(),!(!o||o.isDestroyed())&&(T=o.addEventListener("dirtyStateChanged",y))},{immediate:!0});let x=async(o,p)=>{let u=a.api.value;if(!u||u.isDestroyed())throw new Error("[MachTable] Cannot save before the grid is ready.");if(c.value)throw new Error("[MachTable] A save operation is already in progress.");c.value=!0,g.value=null;try{let d=await u.saveChanges(o,p);return y(),i.onSaveSuccess?.(d),d}catch(d){throw g.value=d,i.onSaveError?.(d),d}finally{c.value=!1}},F=o=>{let p=a.api.value?.rollbackChanges(o)??!1;return y(),p},s=o=>{a.api.value?.markChangesSaved(o),y()},f=(o,p,u=!1)=>{let d=a.api.value,w=d?.getNodeById(o);return!d||!w||w.rowIndex<0?!1:(d.scrollToIndex(w.rowIndex,"middle"),p&&u?d.startEditingCell({rowIndex:w.rowIndex,colId:p}):!0)},l=o=>{if(!P.value)return;let p=i.beforeUnloadMessage??"\u5B58\u5728\u672A\u4FDD\u5B58\u7684\u8868\u683C\u4FEE\u6539\u3002";return o.preventDefault(),o.returnValue=p,p};return i.guardBeforeUnload&&typeof window<"u"&&window.addEventListener("beforeunload",l),ce(()=>{T?.(),T=null,i.guardBeforeUnload&&typeof window<"u"&&window.removeEventListener("beforeunload",l)}),{changes:m,dirtyRowIds:v,dirty:P,saving:c,saveError:g,save:x,rollback:F,markSaved:s,reveal:f,refresh:y}}import{computed as J,isRef as ve,nextTick as W,onScopeDispose as ge,ref as M,shallowRef as A,watch as B}from"vue";import{getByPath as ye}from"@agile-team/mach-table";function X(a){return typeof a=="function"?a():ve(a)?a.value:a}function L(a,i){return typeof a=="number"&&Number.isFinite(a)&&a>0?Math.floor(a):i}function pe(a){return(a instanceof DOMException||typeof a=="object"&&a!=null&&"name"in a)&&a.name==="AbortError"}function be(a){let i=A([]),m=M(!1),v=A(null),c=M(L(a.initialPage,1)),g=M(L(a.pageSize,20)),P=M(0),T=A([]),y=A({}),x=M([]),F=A([]),s=new Set,f=new Set,l=new Map,o=a.quickFilterText??M(null),p=a.selectionScope??"preserve",u=M(!1),d=M(0),w=[...new Set((a.pageSizeOptions??[10,20,50,100]).map(e=>L(e,0)).filter(Boolean))];w.includes(g.value)||w.push(g.value),w.sort((e,t)=>e-t);let R=null,S=null,k=0,b=null,O=!1,Q=!1,G=!1,h=e=>{let t=typeof a.rowKey=="function"?a.rowKey(e):ye(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)},D=()=>{G=!0,x.value=u.value?[]:[...s],G=!1;let e=u.value?[...l.keys()]:[...s];F.value=e.flatMap(t=>{let r=l.get(t);return r===void 0||f.has(t)?[]:[r]}),d.value++},z=e=>u.value?!f.has(e):s.has(e),q=()=>{if(!R||R.isDestroyed())return;let e=i.value.filter(t=>z(h(t)));Q=!0;try{R.setSelection(e,!0)}finally{Q=!1}},N=()=>{k++,S?.abort(),S=null,b!=null&&clearTimeout(b),b=null,m.value=!1},H=(e,t)=>e.signal.aborted||t!==k,Y=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 }.")},Z=async(e,t,r)=>{if(H(t,r))return;Y(e);let n=[...e.rows];for(let E of n)h(E);i.value=n,P.value=Math.floor(e.total);for(let E of i.value){let K=h(E);z(K)?l.set(K,E):l.delete(K)}D(),a.onSuccess?.(e),await W(),q()},_=(e,t,r)=>{H(t,r)||pe(e)||(v.value=e??new Error,a.onError?.(v.value))},C=async()=>{b!=null&&clearTimeout(b),b=null,S?.abort();let e=new AbortController;S=e;let t=++k;m.value=!0,v.value=null,a.keepPreviousData===!1&&(i.value=[]);try{let r=await a.request({page:c.value,pageSize:g.value,query:X(a.query),sortModel:T.value.map(n=>({...n})),filterModel:{...y.value},quickFilterText:o.value,signal:e.signal});await Z(r,e,t)}catch(r){_(r,e,t)}finally{t===k&&(m.value=!1,S===e&&(S=null))}},U=e=>{e&&(c.value=1),b!=null&&clearTimeout(b),S&&(k++,S.abort(),S=null,m.value=!1);let t=Math.max(0,a.debounceMs??0);if(t===0){C();return}b=setTimeout(()=>{C()},t)},ee=e=>{R=e.api,W(q)},ae=e=>{O||e.page===c.value&&e.pageSize===g.value||(c.value=e.page,g.value=e.pageSize,C())},te=e=>{O||(T.value=e.sortModel.map(t=>({...t})),U(!0))},re=e=>{O||(y.value={...e.filterModel},a.clearSelectionOnQueryChange!==!1&&I(),U(!0))},ne=e=>{if(Q)return;let t=new Set(i.value.map(h)),r=new Set(e.selectedRows.map(h));if(u.value){for(let n of t)r.has(n)?f.delete(n):(f.add(n),l.delete(n));for(let n of e.selectedRows)l.set(h(n),n);D();return}if(p==="page")s.clear(),l.clear();else for(let n of t)s.delete(n),l.delete(n);for(let n of e.selectedRows){let E=h(n);s.add(E),l.set(E,n)}D()},V=J(()=>({rowData:i.value,loading:m.value,getRowId:({data:e})=>h(e),manualSorting:!0,manualFiltering:!0,quickFilterText:o.value,overlayNoRowsTemplate:v.value?()=>a.errorOverlay?.({error:v.value,retry:C})??"Remote request failed. Please retry.":a.emptyOverlay,pagination:{mode:"server",page:c.value,pageSize:g.value,pageSizeOptions:w,total:P.value,showTotal:!0,showPageSizeSelector:!0},onGridReady:ee,onPaginationChanged:ae,onSortChanged:te,onFilterChanged:re,onSelectionChanged:ne})),oe=async(e={})=>{e.resetPage&&(c.value=1),await C()},le=async()=>{c.value=1,T.value=[],y.value={},I(),O=!0;try{R?.setSortModel(null),R?.setFilterModel(null)}finally{O=!1}await C()},I=()=>{u.value=!1,s.clear(),f.clear(),l.clear(),D(),Q=!0;try{R?.deselectAll()}finally{Q=!1}},ie=()=>{u.value=!0,s.clear(),f.clear(),l.clear();for(let e of i.value)l.set(h(e),e);D(),q()},se=e=>{s.clear(),f.clear(),l.clear(),u.value=e.mode==="allMatching";let t=e.mode==="allMatching"?e.excludedKeys:e.selectedKeys;for(let r of t.map(String))e.mode==="allMatching"?f.add(r):s.add(r);for(let r of i.value){let n=h(r);z(n)&&l.set(n,r)}D(),q()},ue=J(()=>(d.value,u.value?{mode:"allMatching",excludedKeys:[...f]}:{mode:"explicit",selectedKeys:[...s]}));return B(()=>X(a.query),()=>{a.clearSelectionOnQueryChange!==!1&&I(),U(!0)},{deep:!0,immediate:a.immediate!==!1}),B(o,()=>{a.clearSelectionOnQueryChange!==!1&&I(),U(!0)}),B(x,e=>{if(G)return;u.value=!1,f.clear();let t=new Set(e.map(String));s.clear();for(let r of t)s.add(r);for(let r of[...l.keys()])t.has(r)||l.delete(r);for(let r of i.value){let n=h(r);t.has(n)&&l.set(n,r)}q(),D()},{deep:!0,flush:"sync"}),ge(()=>{N(),R=null}),{rows:i,loading:m,error:v,page:c,pageSize:g,total:P,sortModel:T,filterModel:y,selectedKeys:x,selectedRows:F,selectionState:ue,gridProps:V,bindings:V,reload:oe,retry:C,reset:le,abort:N,clearSelection:I,selectAllMatching:ie,applySelectionState:se}}export{me as a,be as b};
2
+ //# sourceMappingURL=chunk-E7KTBMM6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/useMachTableEditing.ts","../src/useMachTableQuery.ts"],"sourcesContent":["import {\n computed,\n onScopeDispose,\n ref,\n shallowRef,\n watch,\n type ComputedRef,\n type Ref,\n type ShallowRef\n} from \"vue\";\nimport type {\n GridChange,\n SaveChangesHandler\n} from \"@agile-team/mach-table\";\nimport type { UseMachTableReturn } from \"./useMachTable\";\n\nexport interface UseMachTableEditingOptions<TData = any> {\n /** Warn before closing/reloading a browser tab with unsaved changes. */\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: ShallowRef<GridChange<TData>[]>;\n dirtyRowIds: Ref<string[]>;\n dirty: ComputedRef<boolean>;\n saving: Ref<boolean>;\n saveError: ShallowRef<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 /** Scrolls to a loaded changed row and optionally opens the failed cell editor. */\n reveal(rowId: string, colId?: string, edit?: boolean): boolean;\n refresh(): void;\n}\n\n/** Reactive dirty/save workflow layered over useMachTable(). */\nexport function useMachTableEditing<TData = any>(\n table: UseMachTableReturn<TData>,\n options: UseMachTableEditingOptions<TData> = {}\n): UseMachTableEditingReturn<TData> {\n const changes = shallowRef<GridChange<TData>[]>([]);\n const dirtyRowIds = ref<string[]>([]);\n const saving = ref(false);\n const saveError = shallowRef<unknown | null>(null);\n const dirty = computed(() => dirtyRowIds.value.length > 0);\n let removeDirtyListener: (() => void) | null = null;\n\n const refresh = (): void => {\n const api = table.api.value;\n if (!api || api.isDestroyed()) {\n dirtyRowIds.value = [];\n changes.value = [];\n return;\n }\n dirtyRowIds.value = api.getDirtyRowIds();\n changes.value = api.getChanges();\n };\n\n watch(table.api, (api) => {\n removeDirtyListener?.();\n removeDirtyListener = null;\n refresh();\n if (!api || api.isDestroyed()) return;\n removeDirtyListener = api.addEventListener(\"dirtyStateChanged\", refresh);\n }, { immediate: true });\n\n const save = async (\n handler: SaveChangesHandler<TData>,\n rowIds?: readonly string[]\n ): Promise<GridChange<TData>[]> => {\n const api = table.api.value;\n if (!api || api.isDestroyed()) throw new Error(\"[MachTable] Cannot save before the grid is ready.\");\n if (saving.value) throw new Error(\"[MachTable] A save operation is already in progress.\");\n saving.value = true;\n saveError.value = null;\n try {\n const saved = await api.saveChanges(handler, rowIds);\n refresh();\n options.onSaveSuccess?.(saved);\n return saved;\n } catch (error) {\n saveError.value = error;\n options.onSaveError?.(error);\n throw error;\n } finally {\n saving.value = false;\n }\n };\n\n const rollback = (rowIds?: readonly string[]): boolean => {\n const changed = table.api.value?.rollbackChanges(rowIds) ?? false;\n refresh();\n return changed;\n };\n const markSaved = (rowIds?: readonly string[]): void => {\n table.api.value?.markChangesSaved(rowIds);\n refresh();\n };\n const reveal = (rowId: string, colId?: string, edit = false): boolean => {\n const api = table.api.value;\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 };\n\n const onBeforeUnload = (event: BeforeUnloadEvent): string | undefined => {\n if (!dirty.value) return undefined;\n const message = options.beforeUnloadMessage ?? \"存在未保存的表格修改。\";\n event.preventDefault();\n event.returnValue = message;\n return message;\n };\n if (options.guardBeforeUnload && typeof window !== \"undefined\") {\n window.addEventListener(\"beforeunload\", onBeforeUnload);\n }\n\n onScopeDispose(() => {\n removeDirtyListener?.();\n removeDirtyListener = null;\n if (options.guardBeforeUnload && typeof window !== \"undefined\") {\n window.removeEventListener(\"beforeunload\", onBeforeUnload);\n }\n });\n\n return {\n changes,\n dirtyRowIds,\n dirty,\n saving,\n saveError,\n save,\n rollback,\n markSaved,\n reveal,\n refresh\n };\n}\n","import {\n computed,\n isRef,\n nextTick,\n onScopeDispose,\n ref,\n shallowRef,\n watch,\n type ComputedRef,\n type Ref,\n type ShallowRef\n} from \"vue\";\nimport {\n getByPath,\n type FilterChangedEvent,\n type FilterModel,\n type GridApi,\n type GridOptions,\n type OverlayContent,\n type OverlayTemplate,\n type PaginationChangedEvent,\n type SelectionChangedEvent,\n type SortChangedEvent,\n type SortModel\n} from \"@agile-team/mach-table\";\n\nexport type MachTableQuerySource<TQuery> =\n | TQuery\n | Readonly<Ref<TQuery>>\n | (() => 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 /** Stable row key used for updates and cross-page selection. */\n rowKey: string | ((row: TData) => string | number);\n initialPage?: number;\n pageSize?: number;\n pageSizeOptions?: readonly number[];\n immediate?: boolean;\n debounceMs?: number;\n keepPreviousData?: boolean;\n /** `query` additionally enables compact select-all-matching rules. */\n selectionScope?: \"page\" | \"preserve\" | \"query\";\n /** Defaults true: a different business/filter query cannot inherit stale selections. */\n clearSelectionOnQueryChange?: boolean;\n quickFilterText?: Ref<string | null>;\n /** Replaces the no-rows layer while the latest request is in an error state. */\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: ShallowRef<TData[]>;\n loading: Ref<boolean>;\n error: ShallowRef<unknown | null>;\n page: Ref<number>;\n pageSize: Ref<number>;\n total: Ref<number>;\n sortModel: ShallowRef<SortModel>;\n filterModel: ShallowRef<FilterModel>;\n selectedKeys: Ref<string[]>;\n selectedRows: ShallowRef<TData[]>;\n selectionState: ComputedRef<MachTableRemoteSelectionState>;\n gridProps: ComputedRef<GridOptions<TData>>;\n bindings: ComputedRef<GridOptions<TData>>;\n reload(options?: { resetPage?: boolean }): Promise<void>;\n retry(): Promise<void>;\n reset(): Promise<void>;\n abort(): void;\n clearSelection(): void;\n /** Selects the complete server query without downloading every row ID. */\n selectAllMatching(): void;\n applySelectionState(state: MachTableRemoteSelectionState): void;\n}\n\nfunction readSource<T>(source: MachTableQuerySource<T>): T {\n if (typeof source === \"function\") return (source as () => T)();\n return isRef(source) ? source.value : source;\n}\n\nfunction normalizePositive(value: number | undefined, fallback: number): number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0\n ? Math.floor(value)\n : 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\n/**\n * B-side remote-list controller: paging, sorting, filtering, cancellation,\n * stale-response protection and cross-page selection in one typed binding.\n */\nexport function useMachTableQuery<TData, TQuery = Record<string, unknown>>(\n options: UseMachTableQueryOptions<TData, TQuery>\n): UseMachTableQueryReturn<TData> {\n const rows = shallowRef<TData[]>([]);\n const loading = ref(false);\n const error = shallowRef<unknown | null>(null);\n const page = ref(normalizePositive(options.initialPage, 1));\n const pageSize = ref(normalizePositive(options.pageSize, 20));\n const total = ref(0);\n const sortModel = shallowRef<SortModel>([]);\n const filterModel = shallowRef<FilterModel>({});\n const selectedKeys = ref<string[]>([]);\n const selectedRows = shallowRef<TData[]>([]);\n const selectedIds = new Set<string>();\n const excludedIds = new Set<string>();\n const selectedById = new Map<string, TData>();\n const quickFilterText = options.quickFilterText ?? ref<string | null>(null);\n const selectionScope = options.selectionScope ?? \"preserve\";\n const allMatching = ref(false);\n const selectionRevision = ref(0);\n const pageSizes = [...new Set((options.pageSizeOptions ?? [10, 20, 50, 100]).map((value) => normalizePositive(value, 0)).filter(Boolean))];\n if (!pageSizes.includes(pageSize.value)) pageSizes.push(pageSize.value);\n pageSizes.sort((a, b) => a - b);\n\n let api: GridApi<TData> | null = null;\n let controller: AbortController | null = null;\n let generation = 0;\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let suppressGridEvents = false;\n let suppressSelectionEvents = false;\n let updatingSelectedRefs = false;\n\n const rowId = (row: TData): string => {\n const value = typeof options.rowKey === \"function\"\n ? options.rowKey(row)\n : getByPath(row, options.rowKey);\n if (value == null || String(value).length === 0) {\n throw new Error(`[MachTable] useMachTableQuery rowKey \\\"${String(options.rowKey)}\\\" returned an empty value.`);\n }\n return String(value);\n };\n\n const updateSelectedRefs = (): void => {\n updatingSelectedRefs = true;\n selectedKeys.value = allMatching.value ? [] : [...selectedIds];\n updatingSelectedRefs = false;\n const ids = allMatching.value ? [...selectedById.keys()] : [...selectedIds];\n selectedRows.value = ids.flatMap((id) => {\n const row = selectedById.get(id);\n return row === undefined || excludedIds.has(id) ? [] : [row];\n });\n selectionRevision.value++;\n };\n\n const isSelectedId = (id: string): boolean => allMatching.value\n ? !excludedIds.has(id)\n : selectedIds.has(id);\n\n const syncVisibleSelection = (): void => {\n if (!api || api.isDestroyed()) return;\n const selected = rows.value.filter((row) => isSelectedId(rowId(row)));\n suppressSelectionEvents = true;\n try {\n api.setSelection(selected, true);\n } finally {\n suppressSelectionEvents = false;\n }\n };\n\n const abort = (): void => {\n generation++;\n controller?.abort();\n controller = null;\n if (debounceTimer != null) clearTimeout(debounceTimer);\n debounceTimer = null;\n loading.value = false;\n };\n\n const isStaleRequest = (activeController: AbortController, requestGeneration: number): boolean =>\n activeController.signal.aborted || requestGeneration !== generation;\n\n const validatePageResult = (result: MachTablePageResult<TData>): void => {\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 };\n\n const applyPageResult = async (\n result: MachTablePageResult<TData>,\n activeController: AbortController,\n requestGeneration: number\n ): Promise<void> => {\n if (isStaleRequest(activeController, requestGeneration)) return;\n validatePageResult(result);\n const nextRows = [...result.rows];\n for (const row of nextRows) rowId(row);\n rows.value = nextRows;\n total.value = Math.floor(result.total);\n for (const row of rows.value) {\n const id = rowId(row);\n if (isSelectedId(id)) selectedById.set(id, row);\n else selectedById.delete(id);\n }\n updateSelectedRefs();\n options.onSuccess?.(result);\n await nextTick();\n syncVisibleSelection();\n };\n\n const handleRequestError = (\n requestError: unknown,\n activeController: AbortController,\n requestGeneration: number\n ): void => {\n if (isStaleRequest(activeController, requestGeneration) || isAbortError(requestError)) return;\n error.value = requestError ?? new Error();\n options.onError?.(error.value);\n };\n\n const load = async (): Promise<void> => {\n if (debounceTimer != null) clearTimeout(debounceTimer);\n debounceTimer = null;\n controller?.abort();\n const activeController = new AbortController();\n controller = activeController;\n const requestGeneration = ++generation;\n loading.value = true;\n error.value = null;\n if (options.keepPreviousData === false) rows.value = [];\n\n try {\n const result = await options.request({\n page: page.value,\n pageSize: pageSize.value,\n query: readSource(options.query),\n sortModel: sortModel.value.map((item) => ({ ...item })),\n filterModel: { ...filterModel.value },\n quickFilterText: quickFilterText.value,\n signal: activeController.signal\n });\n await applyPageResult(result, activeController, requestGeneration);\n } catch (requestError) {\n handleRequestError(requestError, activeController, requestGeneration);\n } finally {\n if (requestGeneration === generation) {\n loading.value = false;\n if (controller === activeController) controller = null;\n }\n }\n };\n\n const scheduleLoad = (resetPage: boolean): void => {\n if (resetPage) page.value = 1;\n if (debounceTimer != null) clearTimeout(debounceTimer);\n if (controller) {\n generation++;\n controller.abort();\n controller = null;\n loading.value = false;\n }\n const delay = Math.max(0, options.debounceMs ?? 0);\n if (delay === 0) {\n void load();\n return;\n }\n debounceTimer = setTimeout(() => { void load(); }, delay);\n };\n\n const onGridReady = (event: { api: GridApi<TData> }): void => {\n api = event.api;\n void nextTick(syncVisibleSelection);\n };\n const onPaginationChanged = (event: PaginationChangedEvent<TData>): void => {\n if (suppressGridEvents) return;\n if (event.page === page.value && event.pageSize === pageSize.value) return;\n page.value = event.page;\n pageSize.value = event.pageSize;\n void load();\n };\n const onSortChanged = (event: SortChangedEvent<TData>): void => {\n if (suppressGridEvents) return;\n sortModel.value = event.sortModel.map((item) => ({ ...item }));\n scheduleLoad(true);\n };\n const onFilterChanged = (event: FilterChangedEvent<TData>): void => {\n if (suppressGridEvents) return;\n filterModel.value = { ...event.filterModel };\n if (options.clearSelectionOnQueryChange !== false) clearSelection();\n scheduleLoad(true);\n };\n const onSelectionChanged = (event: SelectionChangedEvent<TData>): void => {\n if (suppressSelectionEvents) return;\n const visibleIds = new Set(rows.value.map(rowId));\n const nextVisibleIds = new Set(event.selectedRows.map(rowId));\n if (allMatching.value) {\n for (const id of visibleIds) {\n if (nextVisibleIds.has(id)) excludedIds.delete(id);\n else {\n excludedIds.add(id);\n selectedById.delete(id);\n }\n }\n for (const row of event.selectedRows) selectedById.set(rowId(row), row);\n updateSelectedRefs();\n return;\n }\n if (selectionScope === \"page\") {\n selectedIds.clear();\n selectedById.clear();\n } else {\n for (const id of visibleIds) {\n selectedIds.delete(id);\n selectedById.delete(id);\n }\n }\n for (const row of event.selectedRows) {\n const id = rowId(row);\n selectedIds.add(id);\n selectedById.set(id, row);\n }\n updateSelectedRefs();\n };\n\n const gridProps = computed<GridOptions<TData>>(() => ({\n rowData: rows.value,\n loading: loading.value,\n getRowId: ({ data }) => rowId(data),\n manualSorting: true,\n manualFiltering: true,\n quickFilterText: quickFilterText.value,\n overlayNoRowsTemplate: error.value\n ? () => options.errorOverlay?.({ error: error.value, retry: load }) ?? \"Remote request failed. Please retry.\"\n : options.emptyOverlay,\n pagination: {\n mode: \"server\",\n page: page.value,\n pageSize: pageSize.value,\n pageSizeOptions: pageSizes,\n total: total.value,\n showTotal: true,\n showPageSizeSelector: true\n },\n onGridReady,\n onPaginationChanged,\n onSortChanged,\n onFilterChanged,\n onSelectionChanged\n }));\n\n const reload = async (reloadOptions: { resetPage?: boolean } = {}): Promise<void> => {\n if (reloadOptions.resetPage) page.value = 1;\n await load();\n };\n const reset = async (): Promise<void> => {\n page.value = 1;\n sortModel.value = [];\n filterModel.value = {};\n clearSelection();\n suppressGridEvents = true;\n try {\n api?.setSortModel(null);\n api?.setFilterModel(null);\n } finally {\n suppressGridEvents = false;\n }\n await load();\n };\n const clearSelection = (): void => {\n allMatching.value = false;\n selectedIds.clear();\n excludedIds.clear();\n selectedById.clear();\n updateSelectedRefs();\n suppressSelectionEvents = true;\n try { api?.deselectAll(); } finally { suppressSelectionEvents = false; }\n };\n const selectAllMatching = (): void => {\n allMatching.value = true;\n selectedIds.clear();\n excludedIds.clear();\n selectedById.clear();\n for (const row of rows.value) selectedById.set(rowId(row), row);\n updateSelectedRefs();\n syncVisibleSelection();\n };\n const applySelectionState = (state: MachTableRemoteSelectionState): void => {\n selectedIds.clear();\n excludedIds.clear();\n selectedById.clear();\n allMatching.value = state.mode === \"allMatching\";\n const ids = state.mode === \"allMatching\" ? state.excludedKeys : state.selectedKeys;\n for (const id of ids.map(String)) {\n if (state.mode === \"allMatching\") excludedIds.add(id);\n else selectedIds.add(id);\n }\n for (const row of rows.value) {\n const id = rowId(row);\n if (isSelectedId(id)) selectedById.set(id, row);\n }\n updateSelectedRefs();\n syncVisibleSelection();\n };\n\n const selectionState = computed<MachTableRemoteSelectionState>(() => {\n void selectionRevision.value;\n return allMatching.value\n ? { mode: \"allMatching\", excludedKeys: [...excludedIds] }\n : { mode: \"explicit\", selectedKeys: [...selectedIds] };\n });\n\n watch(\n () => readSource(options.query),\n () => {\n if (options.clearSelectionOnQueryChange !== false) clearSelection();\n scheduleLoad(true);\n },\n { deep: true, immediate: options.immediate !== false }\n );\n watch(quickFilterText, () => {\n if (options.clearSelectionOnQueryChange !== false) clearSelection();\n scheduleLoad(true);\n });\n watch(selectedKeys, (keys) => {\n if (updatingSelectedRefs) return;\n allMatching.value = false;\n excludedIds.clear();\n const wanted = new Set(keys.map(String));\n selectedIds.clear();\n for (const id of wanted) selectedIds.add(id);\n for (const id of [...selectedById.keys()]) {\n if (!wanted.has(id)) selectedById.delete(id);\n }\n for (const row of rows.value) {\n const id = rowId(row);\n if (wanted.has(id)) selectedById.set(id, row);\n }\n syncVisibleSelection();\n updateSelectedRefs();\n }, { deep: true, flush: \"sync\" });\n\n onScopeDispose(() => {\n abort();\n api = null;\n });\n\n return {\n rows,\n loading,\n error,\n page,\n pageSize,\n total,\n sortModel,\n filterModel,\n selectedKeys,\n selectedRows,\n selectionState,\n gridProps,\n bindings: gridProps,\n reload,\n retry: load,\n reset,\n abort,\n clearSelection,\n selectAllMatching,\n applySelectionState\n };\n}\n"],"mappings":"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","names":["computed","onScopeDispose","ref","shallowRef","watch","useMachTableEditing","table","options","changes","dirtyRowIds","saving","saveError","dirty","removeDirtyListener","refresh","api","save","handler","rowIds","saved","error","rollback","changed","markSaved","reveal","rowId","colId","edit","node","onBeforeUnload","event","message","computed","isRef","nextTick","onScopeDispose","ref","shallowRef","watch","getByPath","readSource","source","normalizePositive","value","fallback","isAbortError","error","useMachTableQuery","options","rows","loading","page","pageSize","total","sortModel","filterModel","selectedKeys","selectedRows","selectedIds","excludedIds","selectedById","quickFilterText","selectionScope","allMatching","selectionRevision","pageSizes","a","b","api","controller","generation","debounceTimer","suppressGridEvents","suppressSelectionEvents","updatingSelectedRefs","rowId","row","updateSelectedRefs","ids","id","isSelectedId","syncVisibleSelection","selected","abort","isStaleRequest","activeController","requestGeneration","validatePageResult","result","applyPageResult","nextRows","handleRequestError","requestError","load","item","scheduleLoad","resetPage","delay","onGridReady","event","onPaginationChanged","onSortChanged","onFilterChanged","clearSelection","onSelectionChanged","visibleIds","nextVisibleIds","gridProps","data","reload","reloadOptions","reset","selectAllMatching","applySelectionState","state","selectionState","keys","wanted"]}