@agile-team/mach-table-react 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.
package/dist/index.js CHANGED
@@ -1,175 +1,2 @@
1
- // src/RobotGrid.tsx
2
- import {
3
- createElement,
4
- useEffect,
5
- useRef
6
- } from "react";
7
- import { createGrid, DIRECT_GRID_OPTION_KEYS, EVENT_TYPES } from "@agile-team/mach-table";
8
- var UPDATABLE_KEYS = DIRECT_GRID_OPTION_KEYS.filter((key) => key !== "className");
9
- function RobotGrid(props) {
10
- const { className, style, apiRef } = props;
11
- const hostRef = useRef(null);
12
- const gridApiRef = useRef(null);
13
- const propsRef = useRef(props);
14
- propsRef.current = props;
15
- useEffect(() => {
16
- const host = hostRef.current;
17
- if (!host) return;
18
- const initial = propsRef.current;
19
- const options = {};
20
- for (const key of Object.keys(initial)) {
21
- if (key === "className" || key === "gridClassName" || key === "style" || key === "apiRef") continue;
22
- if (key.startsWith("on")) continue;
23
- options[key] = initial[key];
24
- }
25
- if (initial.gridClassName !== void 0) options.className = initial.gridClassName;
26
- for (const eventType of EVENT_TYPES) {
27
- const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;
28
- options[handlerKey] = (event) => {
29
- const latest = propsRef.current;
30
- const handler = latest[handlerKey];
31
- if (typeof handler === "function") handler(event);
32
- };
33
- }
34
- const api = createGrid(host, options);
35
- gridApiRef.current = api;
36
- return () => {
37
- api.destroy();
38
- gridApiRef.current = null;
39
- };
40
- }, []);
41
- useEffect(() => {
42
- if (!apiRef) return;
43
- const assigned = gridApiRef.current;
44
- apiRef.current = assigned;
45
- return () => {
46
- if (apiRef.current === assigned) apiRef.current = null;
47
- };
48
- }, [apiRef]);
49
- const rowDataReady = useRef(false);
50
- useEffect(() => {
51
- if (!rowDataReady.current) {
52
- rowDataReady.current = true;
53
- return;
54
- }
55
- gridApiRef.current?.setRowData(props.rowData);
56
- }, [props.rowData]);
57
- const columnDefsReady = useRef(false);
58
- useEffect(() => {
59
- if (!columnDefsReady.current) {
60
- columnDefsReady.current = true;
61
- return;
62
- }
63
- gridApiRef.current?.setColumnDefs(props.columnDefs);
64
- }, [props.columnDefs]);
65
- const quickFilterReady = useRef(false);
66
- useEffect(() => {
67
- if (!quickFilterReady.current) {
68
- quickFilterReady.current = true;
69
- return;
70
- }
71
- gridApiRef.current?.setQuickFilter(props.quickFilterText);
72
- }, [props.quickFilterText]);
73
- const gridClassNameReady = useRef(false);
74
- useEffect(() => {
75
- if (!gridClassNameReady.current) {
76
- gridClassNameReady.current = true;
77
- return;
78
- }
79
- gridApiRef.current?.updateOptions({ className: props.gridClassName });
80
- }, [props.gridClassName]);
81
- const optionValues = UPDATABLE_KEYS.map((key) => props[key]);
82
- const previousOptionValues = useRef(null);
83
- useEffect(() => {
84
- const previous = previousOptionValues.current;
85
- previousOptionValues.current = optionValues;
86
- if (!previous) {
87
- return;
88
- }
89
- const changed = {};
90
- optionValues.forEach((value, index) => {
91
- if (!Object.is(value, previous[index])) changed[UPDATABLE_KEYS[index]] = value;
92
- });
93
- if (Object.keys(changed).length > 0) {
94
- gridApiRef.current?.updateOptions(changed);
95
- }
96
- }, optionValues);
97
- return createElement("div", {
98
- ref: hostRef,
99
- className: `mach-react-host ${className ?? ""}`.trim() || void 0,
100
- style
101
- });
102
- }
103
-
104
- // src/useMachGrid.ts
105
- import { useMemo, useState } from "react";
106
- function useMachGrid() {
107
- const [api, setApi] = useState(null);
108
- const apiRef = useMemo(() => {
109
- let current = null;
110
- return Object.defineProperty({}, "current", {
111
- enumerable: true,
112
- get: () => current,
113
- set: (next) => {
114
- if (next === current) return;
115
- current = next;
116
- setApi(next);
117
- }
118
- });
119
- }, []);
120
- return { apiRef, api };
121
- }
122
-
123
- // src/adapters.ts
124
- import { createElement as createElement2, isValidElement } from "react";
125
- import { createRoot } from "react-dom/client";
126
- function reactCellRenderer(Component) {
127
- return (params) => {
128
- const host = document.createElement("div");
129
- host.className = "mach-cell-react";
130
- host.style.width = "100%";
131
- const root = createRoot(host);
132
- root.render(createElement2(Component, params));
133
- let destroyed = false;
134
- return {
135
- el: host,
136
- destroy: () => {
137
- if (destroyed) return;
138
- destroyed = true;
139
- window.setTimeout(() => {
140
- root.unmount();
141
- }, 0);
142
- }
143
- };
144
- };
145
- }
146
- function reactDetailRenderer(Component) {
147
- return (params) => {
148
- const host = document.createElement("div");
149
- host.style.height = "100%";
150
- const root = createRoot(host);
151
- root.render(createElement2(Component, params));
152
- let destroyed = false;
153
- return {
154
- el: host,
155
- destroy: () => {
156
- if (destroyed) return;
157
- destroyed = true;
158
- window.setTimeout(() => {
159
- root.unmount();
160
- }, 0);
161
- }
162
- };
163
- };
164
- }
165
-
166
- // src/index.ts
167
- export * from "@agile-team/mach-table";
168
- export {
169
- RobotGrid as MachTable,
170
- RobotGrid,
171
- reactCellRenderer,
172
- reactDetailRenderer,
173
- useMachGrid
174
- };
1
+ import{createElement as V,useEffect as g,useRef as c}from"react";import{createGrid as S,createMachTablePreset as U,GRID_OPTION_KEYS as f,EVENT_TYPES as H}from"@agile-team/mach-table";import{createContext as E,createElement as L,useContext as v,useMemo as B}from"react";import{createMachTablePreset as j}from"@agile-team/mach-table";var P=E({});function k({defaults:e,children:i}){let a=v(P),t=B(()=>j(a,e),[a,e]);return L(P.Provider,{value:t},i)}function G(){return v(P)}function I(e,i){let a={};for(let t of f){if(t==="className")continue;let n=t==="ariaLabel"?e.gridAriaLabel:t==="ariaLabelledBy"?e.gridAriaLabelledBy:t==="ariaDescribedBy"?e.gridAriaDescribedBy:e[t];n!==void 0&&(a[t]=n)}return e.gridClassName!==void 0&&(a.className=e.gridClassName),U(i,a)}function M(e){let{className:i,style:a,apiRef:t}=e,n=c(null),l=c(null),o=c(e);o.current=e;let O=G(),m=[O,...f.map(r=>r==="className"?e.gridClassName:r==="ariaLabel"?e.gridAriaLabel:r==="ariaLabelledBy"?e.gridAriaLabelledBy:r==="ariaDescribedBy"?e.gridAriaDescribedBy:e[r])],d=c(null);(!d.current||d.current.inputs.length!==m.length||m.some((r,s)=>!Object.is(r,d.current?.inputs[s])))&&(d.current={inputs:m,options:I(e,O)});let T=d.current.options,b=c(T);b.current=T,g(()=>{let r=n.current;if(!r)return;let s={...b.current};for(let p of H){let R=`on${p.charAt(0).toUpperCase()}${p.slice(1)}`;s[R]=C=>{let D=b.current[R];typeof D=="function"&&D(C);let h=o.current[R];typeof h=="function"&&h!==D&&h(C)}}let u=S(r,s);return l.current=u,()=>{u.destroy(),l.current=null}},[]),g(()=>{if(!t)return;let r=l.current;return t.current=r,()=>{t.current===r&&(t.current=null)}},[t]);let y=f.map(r=>T[r]),A=c(null);return g(()=>{let r=A.current;if(A.current=y,!r)return;let s={};y.forEach((u,p)=>{Object.is(u,r[p])||(s[f[p]]=u)}),Object.keys(s).length>0&&l.current?.updateOptions(s)},y),V("div",{ref:n,className:`mach-react-host ${i??""}`.trim()||void 0,style:a,"aria-label":e["aria-label"],"aria-labelledby":e["aria-labelledby"],"aria-describedby":e["aria-describedby"]})}var _=M;import{useMemo as $,useState as x}from"react";function F(){let[e,i]=x(null),[a,t]=x(!1);return{apiRef:$(()=>{let l=null;return Object.defineProperty({},"current",{enumerable:!0,get:()=>l,set:o=>{o!==l&&(l=o,i(o),t(!1),o&&o.whenReady().then(()=>{l===o&&!o.isDestroyed()&&t(!0)}))}})},[]),api:e,ready:a}}import{createElement as w,isValidElement as ne}from"react";import{createRoot as N}from"react-dom/client";function K(e){return i=>{let a=document.createElement("div");a.className="mach-cell-react",a.style.width="100%";let t=N(a);t.render(w(e,i));let n=!1;return{el:a,destroy:()=>{n||(n=!0,window.setTimeout(()=>{t.unmount()},0))}}}}function Y(e){return i=>{let a=document.createElement("div");a.style.height="100%";let t=N(a);t.render(w(e,i));let n=!1;return{el:a,destroy:()=>{n||(n=!0,window.setTimeout(()=>{t.unmount()},0))}}}}export*from"@agile-team/mach-table";var se=M;export{M as MachTable,k as MachTableProvider,_ as RobotGrid,se as default,K as reactCellRenderer,Y as reactDetailRenderer,F as useMachGrid,G as useMachTableDefaults};
175
2
  //# sourceMappingURL=index.js.map
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\";\nexport * from \"@agile-team/mach-table\";\n"],"mappings":"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","names":["createElement"]}
1
+ {"version":3,"sources":["../src/MachTable.tsx","../src/defaults.tsx","../src/useMachGrid.ts","../src/adapters.ts","../src/index.ts"],"sourcesContent":["import {\n createElement,\n useEffect,\n useRef,\n type CSSProperties,\n type MutableRefObject\n} from \"react\";\nimport { createGrid, createMachTablePreset, GRID_OPTION_KEYS, EVENT_TYPES } from \"@agile-team/mach-table\";\nimport type { GridApi, GridOptions } from \"@agile-team/mach-table\";\nimport { useMachTableDefaults } from \"./defaults\";\n\ntype AdapterOnlyGridOption = \"className\" | \"ariaLabel\" | \"ariaLabelledBy\" | \"ariaDescribedBy\";\n\nexport type MachTableReactProps<TData = any> = Omit<GridOptions<TData>, AdapterOnlyGridOption> & {\n /** CSS class applied to the React host element. */\n className?: string;\n /** CSS class forwarded to MachTable's inner grid root. */\n gridClassName?: string;\n gridAriaLabel?: string;\n gridAriaLabelledBy?: string;\n gridAriaDescribedBy?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n \"aria-describedby\"?: string;\n style?: CSSProperties;\n apiRef?: MutableRefObject<GridApi<TData> | null>;\n};\n\nfunction collectGridOptions<TData>(\n props: MachTableReactProps<TData>,\n defaults: Partial<GridOptions<TData>>\n): GridOptions<TData> {\n const explicit: Record<string, unknown> = {};\n for (const key of GRID_OPTION_KEYS) {\n if (key === \"className\") continue;\n const value = key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key];\n if (value !== undefined) explicit[key] = value;\n }\n if (props.gridClassName !== undefined) explicit.className = props.gridClassName;\n return createMachTablePreset(defaults, explicit as Partial<GridOptions<TData>>);\n}\n\nexport function MachTable<TData = any>(props: MachTableReactProps<TData>) {\n const { className, style, apiRef } = props;\n const hostRef = useRef<HTMLDivElement | null>(null);\n const gridApiRef = useRef<GridApi<TData> | null>(null);\n const propsRef = useRef(props);\n propsRef.current = props;\n const defaults = useMachTableDefaults<TData>();\n const effectiveInputs = [\n defaults,\n ...GRID_OPTION_KEYS.map((key) => key === \"className\"\n ? props.gridClassName\n : key === \"ariaLabel\"\n ? props.gridAriaLabel\n : key === \"ariaLabelledBy\"\n ? props.gridAriaLabelledBy\n : key === \"ariaDescribedBy\"\n ? props.gridAriaDescribedBy\n : props[key])\n ];\n const effectiveCache = useRef<{ inputs: readonly unknown[]; options: GridOptions<TData> } | null>(null);\n if (\n !effectiveCache.current ||\n effectiveCache.current.inputs.length !== effectiveInputs.length ||\n effectiveInputs.some((value, index) => !Object.is(value, effectiveCache.current?.inputs[index]))\n ) {\n effectiveCache.current = { inputs: effectiveInputs, options: collectGridOptions(props, defaults) };\n }\n const effectiveOptions = effectiveCache.current.options;\n const effectiveRef = useRef(effectiveOptions);\n effectiveRef.current = effectiveOptions;\n\n useEffect(() => {\n const host = hostRef.current;\n if (!host) return;\n\n const options = { ...effectiveRef.current } as Record<string, unknown>;\n for (const eventType of EVENT_TYPES) {\n const handlerKey = `on${eventType.charAt(0).toUpperCase()}${eventType.slice(1)}`;\n options[handlerKey] = (event: unknown) => {\n const defaultHandler = (effectiveRef.current as Record<string, unknown>)[handlerKey];\n if (typeof defaultHandler === \"function\") (defaultHandler as (value: unknown) => void)(event);\n const latest = propsRef.current as Record<string, unknown>;\n const handler = latest[handlerKey];\n if (typeof handler === \"function\" && handler !== defaultHandler) {\n (handler as (value: unknown) => void)(event);\n }\n };\n }\n\n const api = createGrid<TData>(host, options);\n gridApiRef.current = api;\n return () => {\n api.destroy();\n gridApiRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!apiRef) return;\n const assigned = gridApiRef.current;\n apiRef.current = assigned;\n return () => {\n if (apiRef.current === assigned) apiRef.current = null;\n };\n }, [apiRef]);\n\n const optionValues = GRID_OPTION_KEYS.map((key) => effectiveOptions[key]);\n const previousOptionValues = useRef<readonly unknown[] | null>(null);\n useEffect(() => {\n const previous = previousOptionValues.current;\n previousOptionValues.current = optionValues;\n if (!previous) {\n return;\n }\n const changed: Record<string, unknown> = {};\n optionValues.forEach((value, index) => {\n if (Object.is(value, previous[index])) return;\n changed[GRID_OPTION_KEYS[index]] = value;\n });\n if (Object.keys(changed).length > 0) {\n gridApiRef.current?.updateOptions(changed);\n }\n }, optionValues);\n\n return createElement(\"div\", {\n ref: hostRef,\n className: `mach-react-host ${className ?? \"\"}`.trim() || undefined,\n style,\n \"aria-label\": props[\"aria-label\"],\n \"aria-labelledby\": props[\"aria-labelledby\"],\n \"aria-describedby\": props[\"aria-describedby\"]\n });\n}\n\n/** @deprecated Use MachTable. Kept as a source-compatible alias through 0.x. */\nexport const RobotGrid = MachTable;\n/** @deprecated Use MachTableReactProps. */\nexport type RobotGridReactProps<TData = any> = MachTableReactProps<TData>;\n","import { createContext, createElement, useContext, useMemo, type ReactNode } from \"react\";\nimport { createMachTablePreset, type GridOptions } from \"@agile-team/mach-table\";\n\nconst MachTableDefaultsContext = createContext<Partial<GridOptions<any>>>({});\n\nexport interface MachTableProviderProps<TData = any> {\n defaults: Partial<GridOptions<TData>>;\n children?: ReactNode;\n}\n\n/** Supplies app-, route- or layout-scoped defaults without making tables eager. */\nexport function MachTableProvider<TData = any>({ defaults, children }: MachTableProviderProps<TData>) {\n const parent = useContext(MachTableDefaultsContext);\n const value = useMemo(() => createMachTablePreset(parent, defaults), [parent, defaults]);\n return createElement(MachTableDefaultsContext.Provider, { value }, children);\n}\n\nexport function useMachTableDefaults<TData = any>(): Partial<GridOptions<TData>> {\n return useContext(MachTableDefaultsContext) as Partial<GridOptions<TData>>;\n}\n","import { useMemo, useState, type MutableRefObject } from \"react\";\nimport type { GridApi } from \"@agile-team/mach-table\";\n\nexport interface UseMachGridReturn<TData = any> {\n apiRef: MutableRefObject<GridApi<TData> | null>;\n api: GridApi<TData> | null;\n ready: boolean;\n}\n\nexport function useMachGrid<TData = any>(): UseMachGridReturn<TData> {\n const [api, setApi] = useState<GridApi<TData> | null>(null);\n const [ready, setReady] = useState(false);\n const apiRef = useMemo(() => {\n let current: GridApi<TData> | null = null;\n return Object.defineProperty({}, \"current\", {\n enumerable: true,\n get: () => current,\n set: (next: GridApi<TData> | null) => {\n if (next === current) return;\n current = next;\n setApi(next);\n setReady(false);\n if (next) {\n void next.whenReady().then(() => {\n if (current === next && !next.isDestroyed()) setReady(true);\n });\n }\n }\n }) as MutableRefObject<GridApi<TData> | null>;\n }, []);\n\n return { apiRef, api, ready };\n}\n","import { createElement, isValidElement, type ComponentType, type ReactNode } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport type { CellRendererParams, CellRendererFn, DetailRowRendererParams, GridApi, RowNode } from \"@agile-team/mach-table\";\n\nexport interface ReactCellRendererProps<TData = any, TValue = any> extends CellRendererParams<TData, TValue> {\n children?: ReactNode;\n}\n\nexport interface ReactDetailProps<TData = any> {\n data: TData | null;\n node: RowNode<TData>;\n api: GridApi<TData>;\n}\n\nexport function reactCellRenderer<TData = any, TValue = any>(\n Component: ComponentType<ReactCellRendererProps<TData, TValue>>\n): CellRendererFn {\n return (params) => {\n const host = document.createElement(\"div\");\n host.className = \"mach-cell-react\";\n host.style.width = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params as ReactCellRendererProps<TData, TValue>));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function reactDetailRenderer<TData = any>(\n Component: ComponentType<ReactDetailProps<TData>>\n): (params: DetailRowRendererParams<TData>) => { el: HTMLElement; destroy?: () => void } {\n return (params) => {\n const host = document.createElement(\"div\");\n host.style.height = \"100%\";\n const root = createRoot(host);\n root.render(createElement(Component, params));\n let destroyed = false;\n return {\n el: host,\n destroy: () => {\n if (destroyed) return;\n destroyed = true;\n window.setTimeout(() => {\n root.unmount();\n }, 0);\n }\n };\n };\n}\n\nexport function isReactElement(value: unknown): boolean {\n return isValidElement(value);\n}\n","import { MachTable, RobotGrid } from \"./MachTable\";\n\nexport { MachTable, RobotGrid };\nexport type { MachTableReactProps, RobotGridReactProps } from \"./MachTable\";\nexport { useMachGrid } from \"./useMachGrid\";\nexport type { UseMachGridReturn } from \"./useMachGrid\";\nexport { MachTableProvider, useMachTableDefaults } from \"./defaults\";\nexport type { MachTableProviderProps } from \"./defaults\";\nexport { reactCellRenderer, reactDetailRenderer } from \"./adapters\";\nexport type { ReactCellRendererProps, ReactDetailProps } from \"./adapters\";\nexport * from \"@agile-team/mach-table\";\n\n/** Enables `React.lazy(() => import(\"@agile-team/mach-table-react\"))`. */\nexport default MachTable;\n"],"mappings":"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","names":["createElement","useEffect","useRef","createGrid","createMachTablePreset","GRID_OPTION_KEYS","EVENT_TYPES","createContext","createElement","useContext","useMemo","createMachTablePreset","MachTableDefaultsContext","MachTableProvider","defaults","children","parent","value","useMachTableDefaults","collectGridOptions","props","defaults","explicit","key","GRID_OPTION_KEYS","value","createMachTablePreset","MachTable","className","style","apiRef","hostRef","useRef","gridApiRef","propsRef","useMachTableDefaults","effectiveInputs","effectiveCache","index","effectiveOptions","effectiveRef","useEffect","host","options","eventType","EVENT_TYPES","handlerKey","event","defaultHandler","handler","api","createGrid","assigned","optionValues","previousOptionValues","previous","changed","createElement","RobotGrid","useMemo","useState","useMachGrid","api","setApi","ready","setReady","current","next","createElement","isValidElement","createRoot","reactCellRenderer","Component","params","host","root","destroyed","reactDetailRenderer","index_default","MachTable"]}