@agile-team/mach-table-react 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -5
- package/dist/index.cjs +6 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/mach-table.css +1384 -0
- package/dist/mach-table.css.d.ts +2 -0
- package/package.json +18 -7
package/README.md
CHANGED
|
@@ -6,15 +6,23 @@
|
|
|
6
6
|
|
|
7
7
|
Official React 18+ adapter for MachTable. It provides `<MachTable>` / `<RobotGrid>`, `useMachGrid`, React cell/detail renderer factories, latest-closure event handling and StrictMode-safe cleanup.
|
|
8
8
|
|
|
9
|
+
## Install
|
|
10
|
+
|
|
9
11
|
```bash
|
|
10
|
-
pnpm add @agile-team/mach-table
|
|
12
|
+
pnpm add @agile-team/mach-table-react
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Import the stylesheet once from your application entry:
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import "@agile-team/mach-table-react/styles.css";
|
|
11
19
|
```
|
|
12
20
|
|
|
21
|
+
## Direct import
|
|
22
|
+
|
|
13
23
|
```tsx
|
|
14
24
|
import { useMemo } from "react";
|
|
15
|
-
import { MachTable, useMachGrid } from "@agile-team/mach-table-react";
|
|
16
|
-
import type { ColDef } from "@agile-team/mach-table";
|
|
17
|
-
import "@agile-team/mach-table/styles/mach-table.css";
|
|
25
|
+
import { MachTable, useMachGrid, type ColDef } from "@agile-team/mach-table-react";
|
|
18
26
|
|
|
19
27
|
interface Row { id: string; name: string }
|
|
20
28
|
|
|
@@ -38,7 +46,27 @@ export function App({ rows }: { rows: Row[] }) {
|
|
|
38
46
|
}
|
|
39
47
|
```
|
|
40
48
|
|
|
41
|
-
|
|
49
|
+
## Route-level lazy loading
|
|
50
|
+
|
|
51
|
+
React intentionally has no global component registry. MachTable provides a default component export so the standard `React.lazy` API works without a mapping wrapper:
|
|
52
|
+
|
|
53
|
+
```tsx
|
|
54
|
+
import { lazy, Suspense } from "react";
|
|
55
|
+
|
|
56
|
+
const MachTable = lazy(() => import("@agile-team/mach-table-react"));
|
|
57
|
+
|
|
58
|
+
export function OrdersPage() {
|
|
59
|
+
return (
|
|
60
|
+
<Suspense fallback={<div>Loading table...</div>}>
|
|
61
|
+
<MachTable columnDefs={columns} rowData={rows} />
|
|
62
|
+
</Suspense>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
When the page itself is route-lazy, a normal named import inside that page already produces the same route-level split. Use `React.lazy` when the grid should be split independently from the page.
|
|
68
|
+
|
|
69
|
+
The adapter installs the matching `@agile-team/mach-table` core automatically and re-exports its complete API and types. Only `react >= 18` and `react-dom >= 18` remain peer dependencies supplied by the host application.
|
|
42
70
|
|
|
43
71
|
Documentation: [React guide](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/react.md) · [Enterprise integration](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/enterprise-integration.md) · [Next.js / SSR](https://github.com/ChenyCHENYU/MachTable/blob/main/docs/guide/ssr.md)
|
|
44
72
|
|
package/dist/index.cjs
CHANGED
|
@@ -15,15 +15,15 @@ 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
|
-
|
|
26
|
+
default: () => index_default,
|
|
27
27
|
reactCellRenderer: () => reactCellRenderer,
|
|
28
28
|
reactDetailRenderer: () => reactDetailRenderer,
|
|
29
29
|
useMachGrid: () => useMachGrid
|
|
@@ -192,15 +192,15 @@ function reactDetailRenderer(Component) {
|
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
// src/index.ts
|
|
195
|
-
|
|
195
|
+
__reExport(index_exports, require("@agile-team/mach-table"), module.exports);
|
|
196
|
+
var index_default = RobotGrid;
|
|
196
197
|
// Annotate the CommonJS export names for ESM import in node:
|
|
197
198
|
0 && (module.exports = {
|
|
198
|
-
EVENT_TYPES,
|
|
199
199
|
MachTable,
|
|
200
200
|
RobotGrid,
|
|
201
|
-
createGrid,
|
|
202
201
|
reactCellRenderer,
|
|
203
202
|
reactDetailRenderer,
|
|
204
|
-
useMachGrid
|
|
203
|
+
useMachGrid,
|
|
204
|
+
...require("@agile-team/mach-table")
|
|
205
205
|
});
|
|
206
206
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/RobotGrid.tsx","../src/useMachGrid.ts","../src/adapters.ts"],"sourcesContent":["export { RobotGrid } from \"./RobotGrid\";\nexport { RobotGrid as MachTable } from \"./RobotGrid\";\nexport type { RobotGridReactProps } from \"./RobotGrid\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } 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 {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, DIRECT_GRID_OPTION_KEYS, EVENT_TYPES } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions } from \"@agile-team/mach-table\";\n\nexport type RobotGridReactProps<TData = any> = Omit<GridOptions<TData>, \"className\"> & {\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nconst UPDATABLE_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== \"className\");\n\nexport function RobotGrid<TData = any>(props: RobotGridReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const initial = propsRef.current;\n const options: Record<string, unknown> = {};\n for (const key of Object.keys(initial) as string[]) {\n if (key === \"className\" || key === \"gridClassName\" || key === \"style\" || key === \"apiRef\") continue;\n if (key.startsWith(\"on\")) continue;\n options[key] = (initial as Record<string, unknown>)[key];\n }\n if (initial.gridClassName !== undefined) options.className = initial.gridClassName;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\") (handler as (event: unknown) => void)(event);\n };\n }\n\n const api = createGrid<TData>(host, options as GridOptions<TData>);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const rowDataReady = useRef(false);\n useEffect(() => {\n if (!rowDataReady.current) {\n rowDataReady.current = true;\n return;\n }\n gridApiRef.current?.setRowData(props.rowData);\n }, [props.rowData]);\n\n const columnDefsReady = useRef(false);\n useEffect(() => {\n if (!columnDefsReady.current) {\n columnDefsReady.current = true;\n return;\n }\n gridApiRef.current?.setColumnDefs(props.columnDefs);\n }, [props.columnDefs]);\n\n const quickFilterReady = useRef(false);\n useEffect(() => {\n if (!quickFilterReady.current) {\n quickFilterReady.current = true;\n return;\n }\n gridApiRef.current?.setQuickFilter(props.quickFilterText);\n }, [props.quickFilterText]);\n\n const gridClassNameReady = useRef(false);\n useEffect(() => {\n if (!gridClassNameReady.current) {\n gridClassNameReady.current = true;\n return;\n }\n gridApiRef.current?.updateOptions({ className: props.gridClassName });\n }, [props.gridClassName]);\n\n const optionValues = UPDATABLE_KEYS.map((key) => props[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (!Object.is(value, previous[index])) changed[UPDATABLE_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed as Partial<GridOptions<TData>>);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style\n });\n}\n","import { useMemo, useState, type MutableRefObject } from \"react\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachGridReturn<TData = any> {\n apiRef: MutableRefObject<GridApi<TData> | null>;\n api: GridApi<TData> | null;\n}\n\nexport function useMachGrid<TData = any>(): UseMachGridReturn<TData> {\n const [api, setApi] = useState<GridApi<TData> | null>(null);\n const apiRef = useMemo(() => {\n let current: GridApi<TData> | null = null;\n return Object.defineProperty({}, \"current\", {\n enumerable: true,\n get: () => current,\n set: (next: GridApi<TData> | null) => {\n if (next === current) return;\n current = next;\n setApi(next);\n }\n }) as MutableRefObject<GridApi<TData> | null>;\n }, []);\n\n return { apiRef, api };\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n"],"mappings":"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","names":["import_react","import_react","import_mach_table"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/RobotGrid.tsx","../src/useMachGrid.ts","../src/adapters.ts"],"sourcesContent":["import { RobotGrid } from \"./RobotGrid\";\n\nexport { RobotGrid };\nexport { RobotGrid as MachTable };\nexport type { RobotGridReactProps } from \"./RobotGrid\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n\n/** Enables `React.lazy(() => import(\"@agile-team/mach-table-react\"))`. */\nexport default RobotGrid;\n","import {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, DIRECT_GRID_OPTION_KEYS, EVENT_TYPES } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions } from \"@agile-team/mach-table\";\n\nexport type RobotGridReactProps<TData = any> = Omit<GridOptions<TData>, \"className\"> & {\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nconst UPDATABLE_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== \"className\");\n\nexport function RobotGrid<TData = any>(props: RobotGridReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const initial = propsRef.current;\n const options: Record<string, unknown> = {};\n for (const key of Object.keys(initial) as string[]) {\n if (key === \"className\" || key === \"gridClassName\" || key === \"style\" || key === \"apiRef\") continue;\n if (key.startsWith(\"on\")) continue;\n options[key] = (initial as Record<string, unknown>)[key];\n }\n if (initial.gridClassName !== undefined) options.className = initial.gridClassName;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\") (handler as (event: unknown) => void)(event);\n };\n }\n\n const api = createGrid<TData>(host, options as GridOptions<TData>);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const rowDataReady = useRef(false);\n useEffect(() => {\n if (!rowDataReady.current) {\n rowDataReady.current = true;\n return;\n }\n gridApiRef.current?.setRowData(props.rowData);\n }, [props.rowData]);\n\n const columnDefsReady = useRef(false);\n useEffect(() => {\n if (!columnDefsReady.current) {\n columnDefsReady.current = true;\n return;\n }\n gridApiRef.current?.setColumnDefs(props.columnDefs);\n }, [props.columnDefs]);\n\n const quickFilterReady = useRef(false);\n useEffect(() => {\n if (!quickFilterReady.current) {\n quickFilterReady.current = true;\n return;\n }\n gridApiRef.current?.setQuickFilter(props.quickFilterText);\n }, [props.quickFilterText]);\n\n const gridClassNameReady = useRef(false);\n useEffect(() => {\n if (!gridClassNameReady.current) {\n gridClassNameReady.current = true;\n return;\n }\n gridApiRef.current?.updateOptions({ className: props.gridClassName });\n }, [props.gridClassName]);\n\n const optionValues = UPDATABLE_KEYS.map((key) => props[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (!Object.is(value, previous[index])) changed[UPDATABLE_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed as Partial<GridOptions<TData>>);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style\n });\n}\n","import { useMemo, useState, type MutableRefObject } from \"react\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachGridReturn<TData = any> {\n apiRef: MutableRefObject<GridApi<TData> | null>;\n api: GridApi<TData> | null;\n}\n\nexport function useMachGrid<TData = any>(): UseMachGridReturn<TData> {\n const [api, setApi] = useState<GridApi<TData> | null>(null);\n const apiRef = useMemo(() => {\n let current: GridApi<TData> | null = null;\n return Object.defineProperty({}, \"current\", {\n enumerable: true,\n get: () => current,\n set: (next: GridApi<TData> | null) => {\n if (next === current) return;\n current = next;\n setApi(next);\n }\n }) as MutableRefObject<GridApi<TData> | null>;\n }, []);\n\n return { apiRef, api };\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAMO;AACP,wBAAiE;AAYjE,IAAM,iBAAiB,0CAAwB,OAAO,CAAC,QAAQ,QAAQ,WAAW;AAE3E,SAAS,UAAuB,OAAmC;AACxE,QAAM,EAAE,WAAW,OAAO,OAAO,IAAI;AACrC,QAAM,cAAU,qBAA8B,IAAI;AAClD,QAAM,iBAAa,qBAA8B,IAAI;AACrD,QAAM,eAAW,qBAAO,KAAK;AAC7B,WAAS,UAAU;AAEnB,8BAAU,MAAM;AACd,UAAM,OAAO,QAAQ;AACrB,QAAI,CAAC,KAAM;AAEX,UAAM,UAAU,SAAS;AACzB,UAAM,UAAmC,CAAC;AAC1C,eAAW,OAAO,OAAO,KAAK,OAAO,GAAe;AAClD,UAAI,QAAQ,eAAe,QAAQ,mBAAmB,QAAQ,WAAW,QAAQ,SAAU;AAC3F,UAAI,IAAI,WAAW,IAAI,EAAG;AAC1B,cAAQ,GAAG,IAAK,QAAoC,GAAG;AAAA,IACzD;AACA,QAAI,QAAQ,kBAAkB,OAAW,SAAQ,YAAY,QAAQ;AACrE,eAAW,aAAa,+BAAa;AACnC,YAAM,aAAa,KAAK,UAAU,OAAO,CAAC,EAAE,YAAY,CAAC,GAAG,UAAU,MAAM,CAAC,CAAC;AAC9E,cAAQ,UAAU,IAAI,CAAC,UAAmB;AACxC,cAAM,SAAS,SAAS;AACxB,cAAM,UAAU,OAAO,UAAU;AACjC,YAAI,OAAO,YAAY,WAAY,CAAC,QAAqC,KAAK;AAAA,MAChF;AAAA,IACF;AAEA,UAAM,UAAM,8BAAkB,MAAM,OAA6B;AACjE,eAAW,UAAU;AACrB,WAAO,MAAM;AACX,UAAI,QAAQ;AACZ,iBAAW,UAAU;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,UAAM,WAAW,WAAW;AAC5B,WAAO,UAAU;AACjB,WAAO,MAAM;AACX,UAAI,OAAO,YAAY,SAAU,QAAO,UAAU;AAAA,IACpD;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,mBAAe,qBAAO,KAAK;AACjC,8BAAU,MAAM;AACd,QAAI,CAAC,aAAa,SAAS;AACzB,mBAAa,UAAU;AACvB;AAAA,IACF;AACA,eAAW,SAAS,WAAW,MAAM,OAAO;AAAA,EAC9C,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,QAAM,sBAAkB,qBAAO,KAAK;AACpC,8BAAU,MAAM;AACd,QAAI,CAAC,gBAAgB,SAAS;AAC5B,sBAAgB,UAAU;AAC1B;AAAA,IACF;AACA,eAAW,SAAS,cAAc,MAAM,UAAU;AAAA,EACpD,GAAG,CAAC,MAAM,UAAU,CAAC;AAErB,QAAM,uBAAmB,qBAAO,KAAK;AACrC,8BAAU,MAAM;AACd,QAAI,CAAC,iBAAiB,SAAS;AAC7B,uBAAiB,UAAU;AAC3B;AAAA,IACF;AACA,eAAW,SAAS,eAAe,MAAM,eAAe;AAAA,EAC1D,GAAG,CAAC,MAAM,eAAe,CAAC;AAE1B,QAAM,yBAAqB,qBAAO,KAAK;AACvC,8BAAU,MAAM;AACd,QAAI,CAAC,mBAAmB,SAAS;AAC/B,yBAAmB,UAAU;AAC7B;AAAA,IACF;AACA,eAAW,SAAS,cAAc,EAAE,WAAW,MAAM,cAAc,CAAC;AAAA,EACtE,GAAG,CAAC,MAAM,aAAa,CAAC;AAExB,QAAM,eAAe,eAAe,IAAI,CAAC,QAAQ,MAAM,GAAG,CAAC;AAC3D,QAAM,2BAAuB,qBAAkC,IAAI;AACnE,8BAAU,MAAM;AACd,UAAM,WAAW,qBAAqB;AACtC,yBAAqB,UAAU;AAC/B,QAAI,CAAC,UAAU;AACb;AAAA,IACF;AACA,UAAM,UAAmC,CAAC;AAC1C,iBAAa,QAAQ,CAAC,OAAO,UAAU;AACrC,UAAI,CAAC,OAAO,GAAG,OAAO,SAAS,KAAK,CAAC,EAAG,SAAQ,eAAe,KAAK,CAAC,IAAI;AAAA,IAC3E,CAAC;AACD,QAAI,OAAO,KAAK,OAAO,EAAE,SAAS,GAAG;AACnC,iBAAW,SAAS,cAAc,OAAsC;AAAA,IAC1E;AAAA,EACF,GAAG,YAAY;AAEf,aAAO,4BAAc,OAAO;AAAA,IAC1B,KAAK;AAAA,IACL,WAAW,mBAAmB,aAAa,EAAE,GAAG,KAAK,KAAK;AAAA,IAC1D;AAAA,EACF,CAAC;AACH;;;AC5HA,IAAAA,gBAAyD;AAQlD,SAAS,cAAqD;AACnE,QAAM,CAAC,KAAK,MAAM,QAAI,wBAAgC,IAAI;AAC1D,QAAM,aAAS,uBAAQ,MAAM;AAC3B,QAAI,UAAiC;AACrC,WAAO,OAAO,eAAe,CAAC,GAAG,WAAW;AAAA,MAC1C,YAAY;AAAA,MACZ,KAAK,MAAM;AAAA,MACX,KAAK,CAAC,SAAgC;AACpC,YAAI,SAAS,QAAS;AACtB,kBAAU;AACV,eAAO,IAAI;AAAA,MACb;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,QAAQ,IAAI;AACvB;;;ACxBA,IAAAC,gBAAkF;AAClF,oBAA2B;AAapB,SAAS,kBACd,WACgB;AAChB,SAAO,CAAC,WAAW;AACjB,UAAM,OAAO,SAAS,cAAc,KAAK;AACzC,SAAK,YAAY;AACjB,SAAK,MAAM,QAAQ;AACnB,UAAM,WAAO,0BAAW,IAAI;AAC5B,SAAK,WAAO,6BAAc,WAAW,MAA+C,CAAC;AACrF,QAAI,YAAY;AAChB,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS,MAAM;AACb,YAAI,UAAW;AACf,oBAAY;AACZ,eAAO,WAAW,MAAM;AACtB,eAAK,QAAQ;AAAA,QACf,GAAG,CAAC;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,oBACd,WACuF;AACvF,SAAO,CAAC,WAAW;AACjB,UAAM,OAAO,SAAS,cAAc,KAAK;AACzC,SAAK,MAAM,SAAS;AACpB,UAAM,WAAO,0BAAW,IAAI;AAC5B,SAAK,WAAO,6BAAc,WAAW,MAAM,CAAC;AAC5C,QAAI,YAAY;AAChB,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,SAAS,MAAM;AACb,YAAI,UAAW;AACf,oBAAY;AACZ,eAAO,WAAW,MAAM;AACtB,eAAK,QAAQ;AAAA,QACf,GAAG,CAAC;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACF;;;AHhDA,0BAAc,mCATd;AAYA,IAAO,gBAAQ;","names":["import_react","import_react"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { CSSProperties, MutableRefObject, ReactNode, ComponentType } from 'react';
|
|
3
3
|
import { GridOptions, GridApi, CellRendererParams, RowNode, CellRendererFn, DetailRowRendererParams } from '@agile-team/mach-table';
|
|
4
|
-
export
|
|
4
|
+
export * from '@agile-team/mach-table';
|
|
5
5
|
|
|
6
6
|
type RobotGridReactProps<TData = any> = Omit<GridOptions<TData>, "className"> & {
|
|
7
7
|
/** CSS class applied to the React host element. */
|
|
@@ -37,4 +37,4 @@ declare function reactDetailRenderer<TData = any>(Component: ComponentType<React
|
|
|
37
37
|
destroy?: () => void;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
export { RobotGrid as MachTable, type ReactCellRendererProps, type ReactDetailProps, RobotGrid, type RobotGridReactProps, type UseMachGridReturn, reactCellRenderer, reactDetailRenderer, useMachGrid };
|
|
40
|
+
export { RobotGrid as MachTable, type ReactCellRendererProps, type ReactDetailProps, RobotGrid, type RobotGridReactProps, type UseMachGridReturn, RobotGrid as default, reactCellRenderer, reactDetailRenderer, useMachGrid };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { CSSProperties, MutableRefObject, ReactNode, ComponentType } from 'react';
|
|
3
3
|
import { GridOptions, GridApi, CellRendererParams, RowNode, CellRendererFn, DetailRowRendererParams } from '@agile-team/mach-table';
|
|
4
|
-
export
|
|
4
|
+
export * from '@agile-team/mach-table';
|
|
5
5
|
|
|
6
6
|
type RobotGridReactProps<TData = any> = Omit<GridOptions<TData>, "className"> & {
|
|
7
7
|
/** CSS class applied to the React host element. */
|
|
@@ -37,4 +37,4 @@ declare function reactDetailRenderer<TData = any>(Component: ComponentType<React
|
|
|
37
37
|
destroy?: () => void;
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
export { RobotGrid as MachTable, type ReactCellRendererProps, type ReactDetailProps, RobotGrid, type RobotGridReactProps, type UseMachGridReturn, reactCellRenderer, reactDetailRenderer, useMachGrid };
|
|
40
|
+
export { RobotGrid as MachTable, type ReactCellRendererProps, type ReactDetailProps, RobotGrid, type RobotGridReactProps, type UseMachGridReturn, RobotGrid as default, reactCellRenderer, reactDetailRenderer, useMachGrid };
|
package/dist/index.js
CHANGED
|
@@ -164,12 +164,12 @@ function reactDetailRenderer(Component) {
|
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
// src/index.ts
|
|
167
|
-
|
|
167
|
+
export * from "@agile-team/mach-table";
|
|
168
|
+
var index_default = RobotGrid;
|
|
168
169
|
export {
|
|
169
|
-
EVENT_TYPES2 as EVENT_TYPES,
|
|
170
170
|
RobotGrid as MachTable,
|
|
171
171
|
RobotGrid,
|
|
172
|
-
|
|
172
|
+
index_default as default,
|
|
173
173
|
reactCellRenderer,
|
|
174
174
|
reactDetailRenderer,
|
|
175
175
|
useMachGrid
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/RobotGrid.tsx","../src/useMachGrid.ts","../src/adapters.ts","../src/index.ts"],"sourcesContent":["import {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, DIRECT_GRID_OPTION_KEYS, EVENT_TYPES } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions } from \"@agile-team/mach-table\";\n\nexport type RobotGridReactProps<TData = any> = Omit<GridOptions<TData>, \"className\"> & {\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nconst UPDATABLE_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== \"className\");\n\nexport function RobotGrid<TData = any>(props: RobotGridReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const initial = propsRef.current;\n const options: Record<string, unknown> = {};\n for (const key of Object.keys(initial) as string[]) {\n if (key === \"className\" || key === \"gridClassName\" || key === \"style\" || key === \"apiRef\") continue;\n if (key.startsWith(\"on\")) continue;\n options[key] = (initial as Record<string, unknown>)[key];\n }\n if (initial.gridClassName !== undefined) options.className = initial.gridClassName;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\") (handler as (event: unknown) => void)(event);\n };\n }\n\n const api = createGrid<TData>(host, options as GridOptions<TData>);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const rowDataReady = useRef(false);\n useEffect(() => {\n if (!rowDataReady.current) {\n rowDataReady.current = true;\n return;\n }\n gridApiRef.current?.setRowData(props.rowData);\n }, [props.rowData]);\n\n const columnDefsReady = useRef(false);\n useEffect(() => {\n if (!columnDefsReady.current) {\n columnDefsReady.current = true;\n return;\n }\n gridApiRef.current?.setColumnDefs(props.columnDefs);\n }, [props.columnDefs]);\n\n const quickFilterReady = useRef(false);\n useEffect(() => {\n if (!quickFilterReady.current) {\n quickFilterReady.current = true;\n return;\n }\n gridApiRef.current?.setQuickFilter(props.quickFilterText);\n }, [props.quickFilterText]);\n\n const gridClassNameReady = useRef(false);\n useEffect(() => {\n if (!gridClassNameReady.current) {\n gridClassNameReady.current = true;\n return;\n }\n gridApiRef.current?.updateOptions({ className: props.gridClassName });\n }, [props.gridClassName]);\n\n const optionValues = UPDATABLE_KEYS.map((key) => props[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (!Object.is(value, previous[index])) changed[UPDATABLE_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed as Partial<GridOptions<TData>>);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style\n });\n}\n","import { useMemo, useState, type MutableRefObject } from \"react\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachGridReturn<TData = any> {\n apiRef: MutableRefObject<GridApi<TData> | null>;\n api: GridApi<TData> | null;\n}\n\nexport function useMachGrid<TData = any>(): UseMachGridReturn<TData> {\n const [api, setApi] = useState<GridApi<TData> | null>(null);\n const apiRef = useMemo(() => {\n let current: GridApi<TData> | null = null;\n return Object.defineProperty({}, \"current\", {\n enumerable: true,\n get: () => current,\n set: (next: GridApi<TData> | null) => {\n if (next === current) return;\n current = next;\n setApi(next);\n }\n }) as MutableRefObject<GridApi<TData> | null>;\n }, []);\n\n return { apiRef, api };\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n","export { RobotGrid } from \"./RobotGrid\";\nexport { RobotGrid as MachTable } from \"./RobotGrid\";\nexport type { RobotGridReactProps } from \"./RobotGrid\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } 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":["createElement","createGrid","EVENT_TYPES"]}
|
|
1
|
+
{"version":3,"sources":["../src/RobotGrid.tsx","../src/useMachGrid.ts","../src/adapters.ts","../src/index.ts"],"sourcesContent":["import {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, DIRECT_GRID_OPTION_KEYS, EVENT_TYPES } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions } from \"@agile-team/mach-table\";\n\nexport type RobotGridReactProps<TData = any> = Omit<GridOptions<TData>, \"className\"> & {\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nconst UPDATABLE_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== \"className\");\n\nexport function RobotGrid<TData = any>(props: RobotGridReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const initial = propsRef.current;\n const options: Record<string, unknown> = {};\n for (const key of Object.keys(initial) as string[]) {\n if (key === \"className\" || key === \"gridClassName\" || key === \"style\" || key === \"apiRef\") continue;\n if (key.startsWith(\"on\")) continue;\n options[key] = (initial as Record<string, unknown>)[key];\n }\n if (initial.gridClassName !== undefined) options.className = initial.gridClassName;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\") (handler as (event: unknown) => void)(event);\n };\n }\n\n const api = createGrid<TData>(host, options as GridOptions<TData>);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const rowDataReady = useRef(false);\n useEffect(() => {\n if (!rowDataReady.current) {\n rowDataReady.current = true;\n return;\n }\n gridApiRef.current?.setRowData(props.rowData);\n }, [props.rowData]);\n\n const columnDefsReady = useRef(false);\n useEffect(() => {\n if (!columnDefsReady.current) {\n columnDefsReady.current = true;\n return;\n }\n gridApiRef.current?.setColumnDefs(props.columnDefs);\n }, [props.columnDefs]);\n\n const quickFilterReady = useRef(false);\n useEffect(() => {\n if (!quickFilterReady.current) {\n quickFilterReady.current = true;\n return;\n }\n gridApiRef.current?.setQuickFilter(props.quickFilterText);\n }, [props.quickFilterText]);\n\n const gridClassNameReady = useRef(false);\n useEffect(() => {\n if (!gridClassNameReady.current) {\n gridClassNameReady.current = true;\n return;\n }\n gridApiRef.current?.updateOptions({ className: props.gridClassName });\n }, [props.gridClassName]);\n\n const optionValues = UPDATABLE_KEYS.map((key) => props[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (!Object.is(value, previous[index])) changed[UPDATABLE_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed as Partial<GridOptions<TData>>);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style\n });\n}\n","import { useMemo, useState, type MutableRefObject } from \"react\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachGridReturn<TData = any> {\n apiRef: MutableRefObject<GridApi<TData> | null>;\n api: GridApi<TData> | null;\n}\n\nexport function useMachGrid<TData = any>(): UseMachGridReturn<TData> {\n const [api, setApi] = useState<GridApi<TData> | null>(null);\n const apiRef = useMemo(() => {\n let current: GridApi<TData> | null = null;\n return Object.defineProperty({}, \"current\", {\n enumerable: true,\n get: () => current,\n set: (next: GridApi<TData> | null) => {\n if (next === current) return;\n current = next;\n setApi(next);\n }\n }) as MutableRefObject<GridApi<TData> | null>;\n }, []);\n\n return { apiRef, api };\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n","import { RobotGrid } from \"./RobotGrid\";\n\nexport { RobotGrid };\nexport { RobotGrid as MachTable };\nexport type { RobotGridReactProps } from \"./RobotGrid\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n\n/** Enables `React.lazy(() => import(\"@agile-team/mach-table-react\"))`. */\nexport default RobotGrid;\n"],"mappings":"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","names":["createElement"]}
|