@agile-team/mach-table-vue 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,15 +7,14 @@
7
7
  Official Vue 3 adapter for MachTable. It provides `<MachTable>` / `<RobotGrid>`, `useMachTable`, Vue cell/detail renderer factories, reactive option updates and automatic lifecycle cleanup.
8
8
 
9
9
  ```bash
10
- pnpm add @agile-team/mach-table @agile-team/mach-table-vue
10
+ pnpm add @agile-team/mach-table-vue
11
11
  ```
12
12
 
13
13
  ```vue
14
14
  <script setup lang="ts">
15
15
  import { ref } from "vue";
16
- import { MachTable, useMachTable } from "@agile-team/mach-table-vue";
17
- import type { ColDef } from "@agile-team/mach-table";
18
- import "@agile-team/mach-table/styles/mach-table.css";
16
+ import { MachTable, useMachTable, type ColDef } from "@agile-team/mach-table-vue";
17
+ import "@agile-team/mach-table-vue/styles.css";
19
18
 
20
19
  interface Row { id: string; name: string }
21
20
  const grid = useMachTable<Row>();
@@ -36,7 +35,7 @@ const columns: ColDef<Row>[] = [{ field: "name", headerName: "Name", flex: 1 }];
36
35
  </template>
37
36
  ```
38
37
 
39
- `@agile-team/mach-table` and `vue` are peer dependencies and are not bundled into this adapter.
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.
40
39
 
41
40
  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)
42
41
 
package/dist/index.cjs CHANGED
@@ -15,15 +15,14 @@ var __copyProps = (to, from, except, desc) => {
15
15
  }
16
16
  return to;
17
17
  };
18
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
18
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
20
 
20
21
  // src/index.ts
21
22
  var index_exports = {};
22
23
  __export(index_exports, {
23
- EVENT_TYPES: () => import_mach_table2.EVENT_TYPES,
24
24
  MachTable: () => RobotGrid,
25
25
  RobotGrid: () => RobotGrid,
26
- createGrid: () => import_mach_table2.createGrid,
27
26
  useMachTable: () => useMachTable,
28
27
  vueCellRenderer: () => vueCellRenderer,
29
28
  vueDetailRenderer: () => vueDetailRenderer
@@ -183,15 +182,14 @@ function useMachTable() {
183
182
  }
184
183
 
185
184
  // src/index.ts
186
- var import_mach_table2 = require("@agile-team/mach-table");
185
+ __reExport(index_exports, require("@agile-team/mach-table"), module.exports);
187
186
  // Annotate the CommonJS export names for ESM import in node:
188
187
  0 && (module.exports = {
189
- EVENT_TYPES,
190
188
  MachTable,
191
189
  RobotGrid,
192
- createGrid,
193
190
  useMachTable,
194
191
  vueCellRenderer,
195
- vueDetailRenderer
192
+ vueDetailRenderer,
193
+ ...require("@agile-team/mach-table")
196
194
  });
197
195
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/RobotGrid.ts","../src/adapters.ts","../src/useMachTable.ts"],"sourcesContent":["export { RobotGrid } from \"./RobotGrid\";\nexport { RobotGrid as MachTable } from \"./RobotGrid\";\nexport type { RobotGridVueProps } from \"./RobotGrid\";\nexport { vueCellRenderer, vueDetailRenderer } from \"./adapters\";\nexport { useMachTable } from \"./useMachTable\";\nexport type { UseMachTableReturn } from \"./useMachTable\";\nexport type { VueCellRendererProps } from \"./adapters\";\n\nexport type {\n GridApi,\n GridOptions,\n ColDef,\n RowNode,\n CellRendererParams,\n CellClickEvent,\n SelectionChangedEvent,\n CellValueChangedEvent,\n SortChangedEvent,\n FilterChangedEvent\n} from \"@agile-team/mach-table\";\n\nexport { createGrid, EVENT_TYPES } from \"@agile-team/mach-table\";\n","import { defineComponent, h, onBeforeUnmount, onMounted, ref, watch, type DefineComponent } from \"vue\";\nimport {\n createGrid,\n DIRECT_GRID_OPTION_KEYS,\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\";\n\nexport type RobotGridVueProps<TData = any> = Omit<GridOptions<TData>, \"className\"> & {\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};\n\nconst ADAPTER_OPTION_KEYS = GRID_OPTION_KEYS.filter((key) => key !== \"className\");\nconst DIRECT_OPTION_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== \"className\");\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 ? { type } : {}), default: undefined };\n}\nruntimeProps.className = { type: String, default: undefined };\nruntimeProps.gridClassName = { type: String, default: undefined };\n\nfunction handlerNameOf(eventType: string): string {\n return \"on\" + eventType.charAt(0).toUpperCase() + eventType.slice(1);\n}\n\nconst RobotGridImpl = defineComponent({\n name: \"RobotGrid\",\n inheritAttrs: false,\n props: runtimeProps,\n emits: [...EVENT_TYPES] as unknown as string[],\n setup(rawProps, { expose, attrs, emit }) {\n const props = rawProps as Readonly<Record<string, any>>;\n const host = ref<HTMLDivElement | null>(null);\n let api: GridApi | null = null;\n\n onMounted(() => {\n if (!host.value) return;\n const options: Record<string, unknown> = {};\n for (const key of ADAPTER_OPTION_KEYS) {\n const value = props[key];\n if (value !== undefined) options[key] = value;\n }\n if (props.gridClassName !== undefined) options.className = props.gridClassName;\n for (const type of EVENT_TYPES) {\n options[handlerNameOf(type)] = (event: unknown) => emit(type, event);\n }\n api = createGrid(host.value, options as GridOptions<any>);\n });\n\n onBeforeUnmount(() => {\n api?.destroy();\n api = null;\n });\n\n watch(() => props.rowData, (value) => api?.setRowData(value));\n watch(() => props.columnDefs, (value) => api?.setColumnDefs(value));\n watch(() => props.quickFilterText, (value) => api?.setQuickFilter(value));\n watch(() => props.gridClassName, (value) => api?.updateOptions({ className: value }));\n\n watch(\n () => DIRECT_OPTION_KEYS.map((key) => props[key]),\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])) changed[DIRECT_OPTION_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) api.updateOptions(changed as Partial<GridOptions<any>>);\n }\n );\n\n expose({ getApi: (): GridApi | null => api });\n\n return () => h(\"div\", {\n ...attrs,\n ref: host,\n class: [\"mach-vue-host\", props.className, attrs.class].filter(Boolean),\n style: attrs.style\n });\n }\n});\n\nexport const RobotGrid = RobotGridImpl as unknown as DefineComponent<RobotGridVueProps<any>>;\n","import { createApp, h, render, getCurrentInstance, type AppContext, type Component } from \"vue\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams } 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\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","import { onScopeDispose, ref, shallowRef, watch, type Ref, type ShallowRef } from \"vue\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachTableReturn<TData = any> {\n ref: Ref<any>;\n api: ShallowRef<GridApi<TData> | null>;\n ready: ShallowRef<boolean>;\n}\n\nexport function useMachTable<TData = any>(): UseMachTableReturn<TData> {\n const componentRef = ref<any>(null);\n const api = shallowRef<GridApi<TData> | null>(null);\n const ready = shallowRef(false);\n\n watch(\n componentRef,\n (comp) => {\n if (comp && typeof comp.getApi === \"function\") {\n api.value = comp.getApi();\n ready.value = api.value != null;\n } else {\n api.value = null;\n ready.value = false;\n }\n },\n { flush: \"post\" }\n );\n\n onScopeDispose(() => {\n componentRef.value = null;\n api.value = null;\n ready.value = false;\n });\n\n return { ref: componentRef, api, ready };\n}\n"],"mappings":"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","names":["import_vue","import_vue","import_mach_table"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/RobotGrid.ts","../src/adapters.ts","../src/useMachTable.ts"],"sourcesContent":["export { RobotGrid } from \"./RobotGrid\";\nexport { RobotGrid as MachTable } from \"./RobotGrid\";\nexport type { RobotGridVueProps } from \"./RobotGrid\";\nexport { vueCellRenderer, vueDetailRenderer } from \"./adapters\";\nexport { useMachTable } from \"./useMachTable\";\nexport type { UseMachTableReturn } from \"./useMachTable\";\nexport type { VueCellRendererProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n","import { defineComponent, h, onBeforeUnmount, onMounted, ref, watch, type DefineComponent } from \"vue\";\nimport {\n createGrid,\n DIRECT_GRID_OPTION_KEYS,\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\";\n\nexport type RobotGridVueProps<TData = any> = Omit<GridOptions<TData>, \"className\"> & {\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};\n\nconst ADAPTER_OPTION_KEYS = GRID_OPTION_KEYS.filter((key) => key !== \"className\");\nconst DIRECT_OPTION_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== \"className\");\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 ? { type } : {}), default: undefined };\n}\nruntimeProps.className = { type: String, default: undefined };\nruntimeProps.gridClassName = { type: String, default: undefined };\n\nfunction handlerNameOf(eventType: string): string {\n return \"on\" + eventType.charAt(0).toUpperCase() + eventType.slice(1);\n}\n\nconst RobotGridImpl = defineComponent({\n name: \"RobotGrid\",\n inheritAttrs: false,\n props: runtimeProps,\n emits: [...EVENT_TYPES] as unknown as string[],\n setup(rawProps, { expose, attrs, emit }) {\n const props = rawProps as Readonly<Record<string, any>>;\n const host = ref<HTMLDivElement | null>(null);\n let api: GridApi | null = null;\n\n onMounted(() => {\n if (!host.value) return;\n const options: Record<string, unknown> = {};\n for (const key of ADAPTER_OPTION_KEYS) {\n const value = props[key];\n if (value !== undefined) options[key] = value;\n }\n if (props.gridClassName !== undefined) options.className = props.gridClassName;\n for (const type of EVENT_TYPES) {\n options[handlerNameOf(type)] = (event: unknown) => emit(type, event);\n }\n api = createGrid(host.value, options as GridOptions<any>);\n });\n\n onBeforeUnmount(() => {\n api?.destroy();\n api = null;\n });\n\n watch(() => props.rowData, (value) => api?.setRowData(value));\n watch(() => props.columnDefs, (value) => api?.setColumnDefs(value));\n watch(() => props.quickFilterText, (value) => api?.setQuickFilter(value));\n watch(() => props.gridClassName, (value) => api?.updateOptions({ className: value }));\n\n watch(\n () => DIRECT_OPTION_KEYS.map((key) => props[key]),\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])) changed[DIRECT_OPTION_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) api.updateOptions(changed as Partial<GridOptions<any>>);\n }\n );\n\n expose({ getApi: (): GridApi | null => api });\n\n return () => h(\"div\", {\n ...attrs,\n ref: host,\n class: [\"mach-vue-host\", props.className, attrs.class].filter(Boolean),\n style: attrs.style\n });\n }\n});\n\nexport const RobotGrid = RobotGridImpl as unknown as DefineComponent<RobotGridVueProps<any>>;\n","import { createApp, h, render, getCurrentInstance, type AppContext, type Component } from \"vue\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams } 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\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","import { onScopeDispose, ref, shallowRef, watch, type Ref, type ShallowRef } from \"vue\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachTableReturn<TData = any> {\n ref: Ref<any>;\n api: ShallowRef<GridApi<TData> | null>;\n ready: ShallowRef<boolean>;\n}\n\nexport function useMachTable<TData = any>(): UseMachTableReturn<TData> {\n const componentRef = ref<any>(null);\n const api = shallowRef<GridApi<TData> | null>(null);\n const ready = shallowRef(false);\n\n watch(\n componentRef,\n (comp) => {\n if (comp && typeof comp.getApi === \"function\") {\n api.value = comp.getApi();\n ready.value = api.value != null;\n } else {\n api.value = null;\n ready.value = false;\n }\n },\n { flush: \"post\" }\n );\n\n onScopeDispose(() => {\n componentRef.value = null;\n api.value = null;\n ready.value = false;\n });\n\n return { ref: componentRef, api, ready };\n}\n"],"mappings":"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","names":["import_vue","import_vue"]}
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { DefineComponent, Component, AppContext, Ref, ShallowRef } from 'vue';
2
2
  import { GridOptions, CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi } from '@agile-team/mach-table';
3
- export { CellClickEvent, CellRendererParams, CellValueChangedEvent, ColDef, EVENT_TYPES, FilterChangedEvent, GridApi, GridOptions, RowNode, SelectionChangedEvent, SortChangedEvent, createGrid } from '@agile-team/mach-table';
3
+ export * from '@agile-team/mach-table';
4
4
 
5
5
  type RobotGridVueProps<TData = any> = Omit<GridOptions<TData>, "className"> & {
6
6
  /** CSS class applied to the Vue host element. */
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { DefineComponent, Component, AppContext, Ref, ShallowRef } from 'vue';
2
2
  import { GridOptions, CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi } from '@agile-team/mach-table';
3
- export { CellClickEvent, CellRendererParams, CellValueChangedEvent, ColDef, EVENT_TYPES, FilterChangedEvent, GridApi, GridOptions, RowNode, SelectionChangedEvent, SortChangedEvent, createGrid } from '@agile-team/mach-table';
3
+ export * from '@agile-team/mach-table';
4
4
 
5
5
  type RobotGridVueProps<TData = any> = Omit<GridOptions<TData>, "className"> & {
6
6
  /** CSS class applied to the Vue host element. */
package/dist/index.js CHANGED
@@ -157,12 +157,10 @@ function useMachTable() {
157
157
  }
158
158
 
159
159
  // src/index.ts
160
- import { createGrid as createGrid2, EVENT_TYPES as EVENT_TYPES2 } from "@agile-team/mach-table";
160
+ export * from "@agile-team/mach-table";
161
161
  export {
162
- EVENT_TYPES2 as EVENT_TYPES,
163
162
  RobotGrid as MachTable,
164
163
  RobotGrid,
165
- createGrid2 as createGrid,
166
164
  useMachTable,
167
165
  vueCellRenderer,
168
166
  vueDetailRenderer
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/RobotGrid.ts","../src/adapters.ts","../src/useMachTable.ts","../src/index.ts"],"sourcesContent":["import { defineComponent, h, onBeforeUnmount, onMounted, ref, watch, type DefineComponent } from \"vue\";\nimport {\n createGrid,\n DIRECT_GRID_OPTION_KEYS,\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\";\n\nexport type RobotGridVueProps<TData = any> = Omit<GridOptions<TData>, \"className\"> & {\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};\n\nconst ADAPTER_OPTION_KEYS = GRID_OPTION_KEYS.filter((key) => key !== \"className\");\nconst DIRECT_OPTION_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== \"className\");\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 ? { type } : {}), default: undefined };\n}\nruntimeProps.className = { type: String, default: undefined };\nruntimeProps.gridClassName = { type: String, default: undefined };\n\nfunction handlerNameOf(eventType: string): string {\n return \"on\" + eventType.charAt(0).toUpperCase() + eventType.slice(1);\n}\n\nconst RobotGridImpl = defineComponent({\n name: \"RobotGrid\",\n inheritAttrs: false,\n props: runtimeProps,\n emits: [...EVENT_TYPES] as unknown as string[],\n setup(rawProps, { expose, attrs, emit }) {\n const props = rawProps as Readonly<Record<string, any>>;\n const host = ref<HTMLDivElement | null>(null);\n let api: GridApi | null = null;\n\n onMounted(() => {\n if (!host.value) return;\n const options: Record<string, unknown> = {};\n for (const key of ADAPTER_OPTION_KEYS) {\n const value = props[key];\n if (value !== undefined) options[key] = value;\n }\n if (props.gridClassName !== undefined) options.className = props.gridClassName;\n for (const type of EVENT_TYPES) {\n options[handlerNameOf(type)] = (event: unknown) => emit(type, event);\n }\n api = createGrid(host.value, options as GridOptions<any>);\n });\n\n onBeforeUnmount(() => {\n api?.destroy();\n api = null;\n });\n\n watch(() => props.rowData, (value) => api?.setRowData(value));\n watch(() => props.columnDefs, (value) => api?.setColumnDefs(value));\n watch(() => props.quickFilterText, (value) => api?.setQuickFilter(value));\n watch(() => props.gridClassName, (value) => api?.updateOptions({ className: value }));\n\n watch(\n () => DIRECT_OPTION_KEYS.map((key) => props[key]),\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])) changed[DIRECT_OPTION_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) api.updateOptions(changed as Partial<GridOptions<any>>);\n }\n );\n\n expose({ getApi: (): GridApi | null => api });\n\n return () => h(\"div\", {\n ...attrs,\n ref: host,\n class: [\"mach-vue-host\", props.className, attrs.class].filter(Boolean),\n style: attrs.style\n });\n }\n});\n\nexport const RobotGrid = RobotGridImpl as unknown as DefineComponent<RobotGridVueProps<any>>;\n","import { createApp, h, render, getCurrentInstance, type AppContext, type Component } from \"vue\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams } 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\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","import { onScopeDispose, ref, shallowRef, watch, type Ref, type ShallowRef } from \"vue\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachTableReturn<TData = any> {\n ref: Ref<any>;\n api: ShallowRef<GridApi<TData> | null>;\n ready: ShallowRef<boolean>;\n}\n\nexport function useMachTable<TData = any>(): UseMachTableReturn<TData> {\n const componentRef = ref<any>(null);\n const api = shallowRef<GridApi<TData> | null>(null);\n const ready = shallowRef(false);\n\n watch(\n componentRef,\n (comp) => {\n if (comp && typeof comp.getApi === \"function\") {\n api.value = comp.getApi();\n ready.value = api.value != null;\n } else {\n api.value = null;\n ready.value = false;\n }\n },\n { flush: \"post\" }\n );\n\n onScopeDispose(() => {\n componentRef.value = null;\n api.value = null;\n ready.value = false;\n });\n\n return { ref: componentRef, api, ready };\n}\n","export { RobotGrid } from \"./RobotGrid\";\nexport { RobotGrid as MachTable } from \"./RobotGrid\";\nexport type { RobotGridVueProps } from \"./RobotGrid\";\nexport { vueCellRenderer, vueDetailRenderer } from \"./adapters\";\nexport { useMachTable } from \"./useMachTable\";\nexport type { UseMachTableReturn } from \"./useMachTable\";\nexport type { VueCellRendererProps } from \"./adapters\";\n\nexport type {\n GridApi,\n GridOptions,\n ColDef,\n RowNode,\n CellRendererParams,\n CellClickEvent,\n SelectionChangedEvent,\n CellValueChangedEvent,\n SortChangedEvent,\n FilterChangedEvent\n} from \"@agile-team/mach-table\";\n\nexport { createGrid, EVENT_TYPES } from \"@agile-team/mach-table\";\n"],"mappings":"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","names":["h","ref","watch","createGrid","EVENT_TYPES"]}
1
+ {"version":3,"sources":["../src/RobotGrid.ts","../src/adapters.ts","../src/useMachTable.ts","../src/index.ts"],"sourcesContent":["import { defineComponent, h, onBeforeUnmount, onMounted, ref, watch, type DefineComponent } from \"vue\";\nimport {\n createGrid,\n DIRECT_GRID_OPTION_KEYS,\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\";\n\nexport type RobotGridVueProps<TData = any> = Omit<GridOptions<TData>, \"className\"> & {\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};\n\nconst ADAPTER_OPTION_KEYS = GRID_OPTION_KEYS.filter((key) => key !== \"className\");\nconst DIRECT_OPTION_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== \"className\");\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 ? { type } : {}), default: undefined };\n}\nruntimeProps.className = { type: String, default: undefined };\nruntimeProps.gridClassName = { type: String, default: undefined };\n\nfunction handlerNameOf(eventType: string): string {\n return \"on\" + eventType.charAt(0).toUpperCase() + eventType.slice(1);\n}\n\nconst RobotGridImpl = defineComponent({\n name: \"RobotGrid\",\n inheritAttrs: false,\n props: runtimeProps,\n emits: [...EVENT_TYPES] as unknown as string[],\n setup(rawProps, { expose, attrs, emit }) {\n const props = rawProps as Readonly<Record<string, any>>;\n const host = ref<HTMLDivElement | null>(null);\n let api: GridApi | null = null;\n\n onMounted(() => {\n if (!host.value) return;\n const options: Record<string, unknown> = {};\n for (const key of ADAPTER_OPTION_KEYS) {\n const value = props[key];\n if (value !== undefined) options[key] = value;\n }\n if (props.gridClassName !== undefined) options.className = props.gridClassName;\n for (const type of EVENT_TYPES) {\n options[handlerNameOf(type)] = (event: unknown) => emit(type, event);\n }\n api = createGrid(host.value, options as GridOptions<any>);\n });\n\n onBeforeUnmount(() => {\n api?.destroy();\n api = null;\n });\n\n watch(() => props.rowData, (value) => api?.setRowData(value));\n watch(() => props.columnDefs, (value) => api?.setColumnDefs(value));\n watch(() => props.quickFilterText, (value) => api?.setQuickFilter(value));\n watch(() => props.gridClassName, (value) => api?.updateOptions({ className: value }));\n\n watch(\n () => DIRECT_OPTION_KEYS.map((key) => props[key]),\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])) changed[DIRECT_OPTION_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) api.updateOptions(changed as Partial<GridOptions<any>>);\n }\n );\n\n expose({ getApi: (): GridApi | null => api });\n\n return () => h(\"div\", {\n ...attrs,\n ref: host,\n class: [\"mach-vue-host\", props.className, attrs.class].filter(Boolean),\n style: attrs.style\n });\n }\n});\n\nexport const RobotGrid = RobotGridImpl as unknown as DefineComponent<RobotGridVueProps<any>>;\n","import { createApp, h, render, getCurrentInstance, type AppContext, type Component } from \"vue\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams } 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\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","import { onScopeDispose, ref, shallowRef, watch, type Ref, type ShallowRef } from \"vue\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachTableReturn<TData = any> {\n ref: Ref<any>;\n api: ShallowRef<GridApi<TData> | null>;\n ready: ShallowRef<boolean>;\n}\n\nexport function useMachTable<TData = any>(): UseMachTableReturn<TData> {\n const componentRef = ref<any>(null);\n const api = shallowRef<GridApi<TData> | null>(null);\n const ready = shallowRef(false);\n\n watch(\n componentRef,\n (comp) => {\n if (comp && typeof comp.getApi === \"function\") {\n api.value = comp.getApi();\n ready.value = api.value != null;\n } else {\n api.value = null;\n ready.value = false;\n }\n },\n { flush: \"post\" }\n );\n\n onScopeDispose(() => {\n componentRef.value = null;\n api.value = null;\n ready.value = false;\n });\n\n return { ref: componentRef, api, ready };\n}\n","export { RobotGrid } from \"./RobotGrid\";\nexport { RobotGrid as MachTable } from \"./RobotGrid\";\nexport type { RobotGridVueProps } from \"./RobotGrid\";\nexport { vueCellRenderer, vueDetailRenderer } from \"./adapters\";\nexport { useMachTable } from \"./useMachTable\";\nexport type { UseMachTableReturn } from \"./useMachTable\";\nexport type { VueCellRendererProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n"],"mappings":"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","names":["h","ref","watch"]}