@object-ui/plugin-aggrid 0.4.1 → 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/dist/index.js CHANGED
@@ -1,8 +1,9 @@
1
- import { A as p, a as t } from "./index-B6NPAFZx.js";
1
+ import { A as a, O as d, a as m } from "./index-CLKYMco3.js";
2
2
  import "react";
3
3
  import "@object-ui/core";
4
4
  import "@object-ui/components";
5
5
  export {
6
- p as AgGridRenderer,
7
- t as aggridComponents
6
+ a as AgGridRenderer,
7
+ d as ObjectAgGridRenderer,
8
+ m as aggridComponents
8
9
  };
@@ -1,6 +1,9 @@
1
- (function(d,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("react"),require("@object-ui/core"),require("@object-ui/components"),require("ag-grid-react")):typeof define=="function"&&define.amd?define(["exports","react","@object-ui/core","@object-ui/components","ag-grid-react"],l):(d=typeof globalThis<"u"?globalThis:d||self,l(d.ObjectUIPluginAgGrid={},d.React,d.ObjectUICore,d.ObjectUIComponents,d.AgGridReact))})(this,(function(d,l,ae,re,ne){"use strict";var F={exports:{}},P={};var $;function le(){if($)return P;$=1;var t=Symbol.for("react.transitional.element"),v=Symbol.for("react.fragment");function E(C,u,c){var R=null;if(c!==void 0&&(R=""+c),u.key!==void 0&&(R=""+u.key),"key"in u){c={};for(var y in u)y!=="key"&&(c[y]=u[y])}else c=u;return u=c.ref,{$$typeof:t,type:C,key:R,ref:u!==void 0?u:null,props:c}}return P.Fragment=v,P.jsx=E,P.jsxs=E,P}var O={};var ee;function oe(){return ee||(ee=1,process.env.NODE_ENV!=="production"&&(function(){function t(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===L?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case _:return"Fragment";case m:return"Profiler";case s:return"StrictMode";case f:return"Suspense";case N:return"SuspenseList";case Y:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case p:return"Portal";case I:return e.displayName||"Context";case D:return(e._context.displayName||"Context")+".Consumer";case b:var a=e.render;return e=e.displayName,e||(e=a.displayName||a.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case V:return a=e.displayName||null,a!==null?a:t(e.type)||"Memo";case A:a=e._payload,e=e._init;try{return t(e(a))}catch{}}return null}function v(e){return""+e}function E(e){try{v(e);var a=!1}catch{a=!0}if(a){a=console;var r=a.error,o=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return r.call(a,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",o),v(e)}}function C(e){if(e===_)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===A)return"<...>";try{var a=t(e);return a?"<"+a+">":"<...>"}catch{return"<...>"}}function u(){var e=T.A;return e===null?null:e.getOwner()}function c(){return Error("react-stack-top-frame")}function R(e){if(z.call(e,"key")){var a=Object.getOwnPropertyDescriptor(e,"key").get;if(a&&a.isReactWarning)return!1}return e.key!==void 0}function y(e,a){function r(){U||(U=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",a))}r.isReactWarning=!0,Object.defineProperty(e,"key",{get:r,configurable:!0})}function q(){var e=t(this.type);return W[e]||(W[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function k(e,a,r,o,B,Z){var i=r.ref;return e={$$typeof:j,type:e,key:a,props:r,_owner:o},(i!==void 0?i:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:q}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:B}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:Z}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function G(e,a,r,o,B,Z){var i=a.children;if(i!==void 0)if(o)if(J(i)){for(o=0;o<i.length;o++)S(i[o]);Object.freeze&&Object.freeze(i)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else S(i);if(z.call(a,"key")){i=t(e);var x=Object.keys(a).filter(function(fe){return fe!=="key"});o=0<x.length?"{key: someKey, "+x.join(": ..., ")+": ...}":"{key: someKey}",n[i+o]||(x=0<x.length?"{"+x.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
1
+ (function(w,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("react"),require("@object-ui/core"),require("@object-ui/components"),require("ag-grid-react")):typeof define=="function"&&define.amd?define(["exports","react","@object-ui/core","@object-ui/components","ag-grid-react"],l):(w=typeof globalThis<"u"?globalThis:w||self,l(w.ObjectUIPluginAgGrid={},w.React,w.ObjectUICore,w.ObjectUIComponents,w.AgGridReact))})(this,(function(w,l,oe,ie,se){"use strict";var re={exports:{}},Z={};var ue;function fe(){if(ue)return Z;ue=1;var t=Symbol.for("react.transitional.element"),c=Symbol.for("react.fragment");function r(a,d,v){var k=null;if(v!==void 0&&(k=""+v),d.key!==void 0&&(k=""+d.key),"key"in d){v={};for(var P in d)P!=="key"&&(v[P]=d[P])}else v=d;return d=v.ref,{$$typeof:t,type:a,key:k,ref:d!==void 0?d:null,props:v}}return Z.Fragment=c,Z.jsx=r,Z.jsxs=r,Z}var K={};var ce;function me(){return ce||(ce=1,process.env.NODE_ENV!=="production"&&(function(){function t(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===O?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case R:return"Fragment";case h:return"Profiler";case C:return"StrictMode";case x:return"Suspense";case D:return"SuspenseList";case H:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case T:return"Portal";case f:return e.displayName||"Context";case I:return(e._context.displayName||"Context")+".Consumer";case y:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case A:return n=e.displayName||null,n!==null?n:t(e.type)||"Memo";case S:n=e._payload,e=e._init;try{return t(e(n))}catch{}}return null}function c(e){return""+e}function r(e){try{c(e);var n=!1}catch{n=!0}if(n){n=console;var o=n.error,m=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return o.call(n,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",m),c(e)}}function a(e){if(e===R)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===S)return"<...>";try{var n=t(e);return n?"<"+n+">":"<...>"}catch{return"<...>"}}function d(){var e=M.A;return e===null?null:e.getOwner()}function v(){return Error("react-stack-top-frame")}function k(e){if(_.call(e,"key")){var n=Object.getOwnPropertyDescriptor(e,"key").get;if(n&&n.isReactWarning)return!1}return e.key!==void 0}function P(e,n){function o(){L||(L=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",n))}o.isReactWarning=!0,Object.defineProperty(e,"key",{get:o,configurable:!0})}function W(){var e=t(this.type);return B[e]||(B[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function V(e,n,o,m,U,Q){var p=o.ref;return e={$$typeof:N,type:e,key:n,props:o,_owner:m},(p!==void 0?p:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:W}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:U}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:Q}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function q(e,n,o,m,U,Q){var p=n.children;if(p!==void 0)if(m)if(F(p)){for(m=0;m<p.length;m++)z(p[m]);Object.freeze&&Object.freeze(p)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else z(p);if(_.call(n,"key")){p=t(e);var G=Object.keys(n).filter(function(te){return te!=="key"});m=0<G.length?"{key: someKey, "+G.join(": ..., ")+": ...}":"{key: someKey}",u[p+m]||(G=0<G.length?"{"+G.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
2
  let props = %s;
3
3
  <%s {...props} />
4
4
  React keys must be passed directly to JSX without using spread:
5
5
  let props = %s;
6
- <%s key={someKey} {...props} />`,o,i,x,i),n[i+o]=!0)}if(i=null,r!==void 0&&(E(r),i=""+r),R(a)&&(E(a.key),i=""+a.key),"key"in a){r={};for(var K in a)K!=="key"&&(r[K]=a[K])}else r=a;return i&&y(r,typeof e=="function"?e.displayName||e.name||"Unknown":e),k(e,i,r,u(),B,Z)}function S(e){w(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===A&&(e._payload.status==="fulfilled"?w(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function w(e){return typeof e=="object"&&e!==null&&e.$$typeof===j}var h=l,j=Symbol.for("react.transitional.element"),p=Symbol.for("react.portal"),_=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),D=Symbol.for("react.consumer"),I=Symbol.for("react.context"),b=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),N=Symbol.for("react.suspense_list"),V=Symbol.for("react.memo"),A=Symbol.for("react.lazy"),Y=Symbol.for("react.activity"),L=Symbol.for("react.client.reference"),T=h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,z=Object.prototype.hasOwnProperty,J=Array.isArray,M=console.createTask?console.createTask:function(){return null};h={react_stack_bottom_frame:function(e){return e()}};var U,W={},Q=h.react_stack_bottom_frame.bind(h,c)(),H=M(C(c)),n={};O.Fragment=_,O.jsx=function(e,a,r){var o=1e4>T.recentlyCreatedOwnerStacks++;return G(e,a,r,!1,o?Error("react-stack-top-frame"):Q,o?M(C(e)):H)},O.jsxs=function(e,a,r){var o=1e4>T.recentlyCreatedOwnerStacks++;return G(e,a,r,!0,o?Error("react-stack-top-frame"):Q,o?M(C(e)):H)}})()),O}var te;function ie(){return te||(te=1,process.env.NODE_ENV==="production"?F.exports=le():F.exports=oe()),F.exports}var g=ie();const se=l.lazy(()=>Promise.resolve().then(()=>de)),X=({schema:t})=>g.jsx(l.Suspense,{fallback:g.jsx(re.Skeleton,{className:"w-full h-[500px]"}),children:g.jsx(se,{rowData:t.rowData,columnDefs:t.columnDefs,gridOptions:t.gridOptions,pagination:t.pagination,paginationPageSize:t.paginationPageSize,domLayout:t.domLayout,animateRows:t.animateRows,rowSelection:t.rowSelection,theme:t.theme,height:t.height,className:t.className,editable:t.editable,editType:t.editType,singleClickEdit:t.singleClickEdit,stopEditingWhenCellsLoseFocus:t.stopEditingWhenCellsLoseFocus,exportConfig:t.exportConfig,statusBar:t.statusBar,callbacks:t.callbacks,columnConfig:t.columnConfig,enableRangeSelection:t.enableRangeSelection,enableCharts:t.enableCharts,contextMenu:t.contextMenu})});ae.ComponentRegistry.register("aggrid",X,{label:"AG Grid",icon:"Table",category:"plugin",inputs:[{name:"rowData",type:"array",label:"Row Data",description:"Array of objects to display in the grid",required:!0},{name:"columnDefs",type:"array",label:"Column Definitions",description:"Array of column definitions",required:!0},{name:"pagination",type:"boolean",label:"Enable Pagination",defaultValue:!1},{name:"paginationPageSize",type:"number",label:"Page Size",defaultValue:10,description:"Number of rows per page when pagination is enabled"},{name:"theme",type:"enum",label:"Theme",enum:[{label:"Quartz",value:"quartz"},{label:"Alpine",value:"alpine"},{label:"Balham",value:"balham"},{label:"Material",value:"material"}],defaultValue:"quartz"},{name:"rowSelection",type:"enum",label:"Row Selection",enum:[{label:"None",value:void 0},{label:"Single",value:"single"},{label:"Multiple",value:"multiple"}],defaultValue:void 0,advanced:!0},{name:"domLayout",type:"enum",label:"DOM Layout",enum:[{label:"Normal",value:"normal"},{label:"Auto Height",value:"autoHeight"},{label:"Print",value:"print"}],defaultValue:"normal",advanced:!0},{name:"animateRows",type:"boolean",label:"Animate Rows",defaultValue:!0,advanced:!0},{name:"height",type:"number",label:"Height (px)",defaultValue:500},{name:"editable",type:"boolean",label:"Enable Editing",defaultValue:!1,description:"Allow cells to be edited inline",advanced:!0},{name:"singleClickEdit",type:"boolean",label:"Single Click Edit",defaultValue:!1,description:"Start editing on single click instead of double click",advanced:!0},{name:"exportConfig",type:"code",label:"Export Config (JSON)",description:'Configure CSV export: { enabled: true, fileName: "data.csv" }',advanced:!0},{name:"statusBar",type:"code",label:"Status Bar Config (JSON)",description:'Configure status bar: { enabled: true, aggregations: ["count", "sum", "avg"] }',advanced:!0},{name:"callbacks",type:"code",label:"Event Callbacks (JSON)",description:"Event handlers for cell clicks, selection changes, etc.",advanced:!0},{name:"columnConfig",type:"code",label:"Column Config (JSON)",description:"Global column settings: { resizable: true, sortable: true, filterable: true }",advanced:!0},{name:"enableRangeSelection",type:"boolean",label:"Enable Range Selection",defaultValue:!1,description:"Allow selecting ranges of cells (like Excel)",advanced:!0},{name:"enableCharts",type:"boolean",label:"Enable Charts",defaultValue:!1,description:"Enable integrated charting (requires AG Grid Enterprise)",advanced:!0},{name:"contextMenu",type:"code",label:"Context Menu Config (JSON)",description:'Configure right-click menu: { enabled: true, items: ["copy", "export"] }',advanced:!0},{name:"gridOptions",type:"code",label:"Grid Options (JSON)",description:"Advanced AG Grid options",advanced:!0},{name:"className",type:"string",label:"CSS Class"}],defaultProps:{rowData:[{make:"Tesla",model:"Model Y",price:64950,electric:!0},{make:"Ford",model:"F-Series",price:33850,electric:!1},{make:"Toyota",model:"Corolla",price:29600,electric:!1},{make:"Mercedes",model:"EQA",price:48890,electric:!0},{make:"Fiat",model:"500",price:15774,electric:!1},{make:"Nissan",model:"Juke",price:20675,electric:!1},{make:"Vauxhall",model:"Corsa",price:18460,electric:!1},{make:"Volvo",model:"XC90",price:72835,electric:!1},{make:"Mercedes",model:"GLA",price:47825,electric:!1},{make:"Ford",model:"Puma",price:27420,electric:!1},{make:"Volkswagen",model:"Golf",price:28850,electric:!1},{make:"Kia",model:"Sportage",price:31095,electric:!1}],columnDefs:[{field:"make",headerName:"Make",sortable:!0,filter:!0},{field:"model",headerName:"Model",sortable:!0,filter:!0},{field:"price",headerName:"Price",sortable:!0,filter:"number",valueFormatter:t=>t.value!=null?"$"+t.value.toLocaleString():""},{field:"electric",headerName:"Electric",sortable:!0,filter:!0,cellRenderer:t=>t.value===!0?"⚡ Yes":"No"}],pagination:!0,paginationPageSize:10,theme:"quartz",height:500,animateRows:!0,domLayout:"normal"}});const ue={aggrid:X};function ce({rowData:t=[],columnDefs:v=[],gridOptions:E={},pagination:C=!1,paginationPageSize:u=10,domLayout:c="normal",animateRows:R=!0,rowSelection:y,theme:q="quartz",height:k=500,className:G="",editable:S=!1,editType:w,singleClickEdit:h=!1,stopEditingWhenCellsLoseFocus:j=!0,exportConfig:p,statusBar:_,callbacks:s,columnConfig:m,enableRangeSelection:D=!1,enableCharts:I=!1,contextMenu:b}){const f=l.useRef(null),N=l.useMemo(()=>{if(!_?.enabled)return;const n=_.aggregations||["count","sum","avg"],e=[];return n.includes("count")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["count"]}}),n.includes("sum")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["sum"]}}),n.includes("avg")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["avg"]}}),n.includes("min")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["min"]}}),n.includes("max")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["max"]}}),e},[_]),V=l.useCallback(()=>{if(!f.current?.api)return;const n={fileName:p?.fileName||"export.csv",skipColumnHeaders:p?.skipColumnHeaders||!1,allColumns:p?.allColumns||!1,onlySelected:p?.onlySelected||!1};if(f.current.api.exportDataAsCsv(n),s?.onExport){const e=p?.onlySelected?f.current.api.getSelectedRows():t;s.onExport(e||[],"csv")}},[p,s,t]),A=l.useCallback(n=>{if(!b?.enabled)return[];const e=[];return(b.items||["copy","copyWithHeaders","separator","export"]).forEach(r=>{r==="export"?e.push({name:"Export CSV",icon:"<span>📥</span>",action:()=>V()}):r==="autoSizeAll"?e.push({name:"Auto-size All Columns",action:()=>{f.current?.api&&f.current.api.autoSizeAllColumns()}}):r==="resetColumns"?e.push({name:"Reset Columns",action:()=>{f.current?.api&&f.current.api.resetColumnState()}}):e.push(r)}),b.customItems&&(e.length>0&&e.push("separator"),b.customItems.forEach(r=>{e.push({name:r.name,disabled:r.disabled,action:()=>{s?.onContextMenuAction&&s.onContextMenuAction(r.action,n.node?.data)}})})),e},[b,V,s]),Y=l.useCallback(n=>{s?.onCellClicked?.(n)},[s]),L=l.useCallback(n=>{s?.onRowClicked?.(n)},[s]),T=l.useCallback(n=>{s?.onSelectionChanged?.(n)},[s]),z=l.useCallback(n=>{s?.onCellValueChanged?.(n)},[s]),J=l.useCallback(n=>{f.current=n},[]),M=l.useMemo(()=>v?v.map(n=>{const e={...n};return S&&n.editable!==!1&&(e.editable=!0),m&&(m.resizable!==void 0&&n.resizable===void 0&&(e.resizable=m.resizable),m.sortable!==void 0&&n.sortable===void 0&&(e.sortable=m.sortable),m.filterable!==void 0&&n.filter===void 0&&(e.filter=m.filterable)),e}):[],[v,S,m]),U=l.useMemo(()=>({...E,pagination:C,paginationPageSize:u,domLayout:c,animateRows:R,rowSelection:y,editType:w,singleClickEdit:h,stopEditingWhenCellsLoseFocus:j,statusBar:N?{statusPanels:N}:void 0,enableRangeSelection:D,enableCharts:I,getContextMenuItems:b?.enabled?A:void 0,suppressCellFocus:!S,enableCellTextSelection:!0,ensureDomOrder:!0,onCellClicked:Y,onRowClicked:L,onSelectionChanged:T,onCellValueChanged:z,onGridReady:J}),[E,C,u,c,R,y,w,h,j,N,D,I,b,A,S,Y,L,T,z,J]),W=l.useMemo(()=>({height:typeof k=="number"?`${k}px`:k,width:"100%"}),[k]),H=[`ag-theme-${q}`,"rounded-xl","border","border-border","overflow-hidden","shadow-lg",G].filter(Boolean).join(" ");return g.jsxs("div",{className:"ag-grid-container",children:[p?.enabled&&g.jsx("div",{className:"mb-2 flex gap-2",children:g.jsx("button",{onClick:V,className:"px-3 py-1.5 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 rounded-md transition-colors",children:"Export CSV"})}),g.jsx("div",{className:H,style:W,children:g.jsx(ne.AgGridReact,{ref:f,rowData:t,columnDefs:M,gridOptions:U})})]})}const de=Object.freeze(Object.defineProperty({__proto__:null,default:ce},Symbol.toStringTag,{value:"Module"}));d.AgGridRenderer=X,d.aggridComponents=ue,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})}));
6
+ <%s key={someKey} {...props} />`,m,p,G,p),u[p+m]=!0)}if(p=null,o!==void 0&&(r(o),p=""+o),k(n)&&(r(n.key),p=""+n.key),"key"in n){o={};for(var ee in n)ee!=="key"&&(o[ee]=n[ee])}else o=n;return p&&P(o,typeof e=="function"?e.displayName||e.name||"Unknown":e),V(e,p,o,d(),U,Q)}function z(e){j(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===S&&(e._payload.status==="fulfilled"?j(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function j(e){return typeof e=="object"&&e!==null&&e.$$typeof===N}var $=l,N=Symbol.for("react.transitional.element"),T=Symbol.for("react.portal"),R=Symbol.for("react.fragment"),C=Symbol.for("react.strict_mode"),h=Symbol.for("react.profiler"),I=Symbol.for("react.consumer"),f=Symbol.for("react.context"),y=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),D=Symbol.for("react.suspense_list"),A=Symbol.for("react.memo"),S=Symbol.for("react.lazy"),H=Symbol.for("react.activity"),O=Symbol.for("react.client.reference"),M=$.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,_=Object.prototype.hasOwnProperty,F=Array.isArray,Y=console.createTask?console.createTask:function(){return null};$={react_stack_bottom_frame:function(e){return e()}};var L,B={},ae=$.react_stack_bottom_frame.bind($,v)(),X=Y(a(v)),u={};K.Fragment=R,K.jsx=function(e,n,o){var m=1e4>M.recentlyCreatedOwnerStacks++;return q(e,n,o,!1,m?Error("react-stack-top-frame"):ae,m?Y(a(e)):X)},K.jsxs=function(e,n,o){var m=1e4>M.recentlyCreatedOwnerStacks++;return q(e,n,o,!0,m?Error("react-stack-top-frame"):ae,m?Y(a(e)):X)}})()),K}var de;function pe(){return de||(de=1,process.env.NODE_ENV==="production"?re.exports=fe():re.exports=me()),re.exports}var g=pe();const ge=l.lazy(()=>Promise.resolve().then(()=>he)),be=l.lazy(()=>Promise.resolve().then(()=>ke)),ne=({schema:t})=>g.jsx(l.Suspense,{fallback:g.jsx(ie.Skeleton,{className:"w-full h-[500px]"}),children:g.jsx(ge,{rowData:t.rowData,columnDefs:t.columnDefs,gridOptions:t.gridOptions,pagination:t.pagination,paginationPageSize:t.paginationPageSize,domLayout:t.domLayout,animateRows:t.animateRows,rowSelection:t.rowSelection,theme:t.theme,height:t.height,className:t.className,editable:t.editable,editType:t.editType,singleClickEdit:t.singleClickEdit,stopEditingWhenCellsLoseFocus:t.stopEditingWhenCellsLoseFocus,exportConfig:t.exportConfig,statusBar:t.statusBar,callbacks:t.callbacks,columnConfig:t.columnConfig,enableRangeSelection:t.enableRangeSelection,enableCharts:t.enableCharts,contextMenu:t.contextMenu})});oe.ComponentRegistry.register("aggrid",ne,{namespace:"plugin-aggrid",label:"AG Grid",icon:"Table",category:"plugin",inputs:[{name:"rowData",type:"array",label:"Row Data",description:"Array of objects to display in the grid",required:!0},{name:"columnDefs",type:"array",label:"Column Definitions",description:"Array of column definitions",required:!0},{name:"pagination",type:"boolean",label:"Enable Pagination",defaultValue:!1},{name:"paginationPageSize",type:"number",label:"Page Size",defaultValue:10,description:"Number of rows per page when pagination is enabled"},{name:"theme",type:"enum",label:"Theme",enum:[{label:"Quartz",value:"quartz"},{label:"Alpine",value:"alpine"},{label:"Balham",value:"balham"},{label:"Material",value:"material"}],defaultValue:"quartz"},{name:"rowSelection",type:"enum",label:"Row Selection",enum:[{label:"None",value:void 0},{label:"Single",value:"single"},{label:"Multiple",value:"multiple"}],defaultValue:void 0,advanced:!0},{name:"domLayout",type:"enum",label:"DOM Layout",enum:[{label:"Normal",value:"normal"},{label:"Auto Height",value:"autoHeight"},{label:"Print",value:"print"}],defaultValue:"normal",advanced:!0},{name:"animateRows",type:"boolean",label:"Animate Rows",defaultValue:!0,advanced:!0},{name:"height",type:"number",label:"Height (px)",defaultValue:500},{name:"editable",type:"boolean",label:"Enable Editing",defaultValue:!1,description:"Allow cells to be edited inline",advanced:!0},{name:"singleClickEdit",type:"boolean",label:"Single Click Edit",defaultValue:!1,description:"Start editing on single click instead of double click",advanced:!0},{name:"exportConfig",type:"code",label:"Export Config (JSON)",description:'Configure CSV export: { enabled: true, fileName: "data.csv" }',advanced:!0},{name:"statusBar",type:"code",label:"Status Bar Config (JSON)",description:'Configure status bar: { enabled: true, aggregations: ["count", "sum", "avg"] }',advanced:!0},{name:"callbacks",type:"code",label:"Event Callbacks (JSON)",description:"Event handlers for cell clicks, selection changes, etc.",advanced:!0},{name:"columnConfig",type:"code",label:"Column Config (JSON)",description:"Global column settings: { resizable: true, sortable: true, filterable: true }",advanced:!0},{name:"enableRangeSelection",type:"boolean",label:"Enable Range Selection",defaultValue:!1,description:"Allow selecting ranges of cells (like Excel)",advanced:!0},{name:"enableCharts",type:"boolean",label:"Enable Charts",defaultValue:!1,description:"Enable integrated charting (requires AG Grid Enterprise)",advanced:!0},{name:"contextMenu",type:"code",label:"Context Menu Config (JSON)",description:'Configure right-click menu: { enabled: true, items: ["copy", "export"] }',advanced:!0},{name:"gridOptions",type:"code",label:"Grid Options (JSON)",description:"Advanced AG Grid options",advanced:!0},{name:"className",type:"string",label:"CSS Class"}],defaultProps:{rowData:[{make:"Tesla",model:"Model Y",price:64950,electric:!0},{make:"Ford",model:"F-Series",price:33850,electric:!1},{make:"Toyota",model:"Corolla",price:29600,electric:!1},{make:"Mercedes",model:"EQA",price:48890,electric:!0},{make:"Fiat",model:"500",price:15774,electric:!1},{make:"Nissan",model:"Juke",price:20675,electric:!1},{make:"Vauxhall",model:"Corsa",price:18460,electric:!1},{make:"Volvo",model:"XC90",price:72835,electric:!1},{make:"Mercedes",model:"GLA",price:47825,electric:!1},{make:"Ford",model:"Puma",price:27420,electric:!1},{make:"Volkswagen",model:"Golf",price:28850,electric:!1},{make:"Kia",model:"Sportage",price:31095,electric:!1}],columnDefs:[{field:"make",headerName:"Make",sortable:!0,filter:!0},{field:"model",headerName:"Model",sortable:!0,filter:!0},{field:"price",headerName:"Price",sortable:!0,filter:"number",valueFormatter:t=>t.value!=null?"$"+t.value.toLocaleString():""},{field:"electric",headerName:"Electric",sortable:!0,filter:!0,cellRenderer:t=>t.value===!0?"⚡ Yes":"No"}],pagination:!0,paginationPageSize:10,theme:"quartz",height:500,animateRows:!0,domLayout:"normal"}});const le=({schema:t})=>g.jsx(l.Suspense,{fallback:g.jsx(ie.Skeleton,{className:"w-full h-[500px]"}),children:g.jsx(be,{objectName:t.objectName,dataSource:t.dataSource,fields:t.fields,fieldNames:t.fieldNames,filters:t.filters,sort:t.sort,pageSize:t.pageSize,pagination:t.pagination,domLayout:t.domLayout,animateRows:t.animateRows,rowSelection:t.rowSelection,theme:t.theme,height:t.height,className:t.className,editable:t.editable,editType:t.editType,singleClickEdit:t.singleClickEdit,stopEditingWhenCellsLoseFocus:t.stopEditingWhenCellsLoseFocus,exportConfig:t.exportConfig,statusBar:t.statusBar,callbacks:t.callbacks,columnConfig:t.columnConfig,enableRangeSelection:t.enableRangeSelection,enableCharts:t.enableCharts,contextMenu:t.contextMenu})}),ve={aggrid:ne,"object-aggrid":le};oe.ComponentRegistry.register("object-aggrid",le,{namespace:"plugin-aggrid",label:"Object AG Grid",icon:"Table",category:"plugin",inputs:[{name:"objectName",type:"string",label:"Object Name",description:"Name of the object to fetch metadata and data from",required:!0},{name:"dataSource",type:"object",label:"Data Source",description:"ObjectStack data source adapter instance",required:!0},{name:"fieldNames",type:"array",label:"Field Names",description:"Optional: Specify which fields to show (defaults to all fields)"},{name:"filters",type:"object",label:"Filters",description:"Query filters to apply to the data"},{name:"sort",type:"object",label:"Sort",description:'Sorting configuration: { fieldName: "asc" | "desc" }'},{name:"pagination",type:"boolean",label:"Enable Pagination",defaultValue:!0},{name:"pageSize",type:"number",label:"Page Size",defaultValue:10,description:"Number of rows per page"},{name:"theme",type:"enum",label:"Theme",enum:[{label:"Quartz",value:"quartz"},{label:"Alpine",value:"alpine"},{label:"Balham",value:"balham"},{label:"Material",value:"material"}],defaultValue:"quartz"},{name:"height",type:"number",label:"Height (px)",defaultValue:500},{name:"editable",type:"boolean",label:"Enable Editing",defaultValue:!1,description:"Allow cells to be edited inline",advanced:!0},{name:"exportConfig",type:"code",label:"Export Config (JSON)",description:'Configure CSV export: { enabled: true, fileName: "data.csv" }',advanced:!0},{name:"columnConfig",type:"code",label:"Column Config (JSON)",description:"Global column settings: { resizable: true, sortable: true, filterable: true }",advanced:!0},{name:"className",type:"string",label:"CSS Class"}]});function Ce({rowData:t=[],columnDefs:c=[],gridOptions:r={},pagination:a=!1,paginationPageSize:d=10,domLayout:v="normal",animateRows:k=!0,rowSelection:P,theme:W="quartz",height:V=500,className:q="",editable:z=!1,editType:j,singleClickEdit:$=!1,stopEditingWhenCellsLoseFocus:N=!0,exportConfig:T,statusBar:R,callbacks:C,columnConfig:h,enableRangeSelection:I=!1,enableCharts:f=!1,contextMenu:y}){const x=l.useRef(null),D=l.useMemo(()=>{if(!R?.enabled)return;const u=R.aggregations||["count","sum","avg"],e=[];return u.includes("count")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["count"]}}),u.includes("sum")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["sum"]}}),u.includes("avg")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["avg"]}}),u.includes("min")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["min"]}}),u.includes("max")&&e.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["max"]}}),e},[R]),A=l.useCallback(()=>{if(!x.current?.api)return;const u={fileName:T?.fileName||"export.csv",skipColumnHeaders:T?.skipColumnHeaders||!1,allColumns:T?.allColumns||!1,onlySelected:T?.onlySelected||!1};if(x.current.api.exportDataAsCsv(u),C?.onExport){const e=T?.onlySelected?x.current.api.getSelectedRows():t;C.onExport(e||[],"csv")}},[T,C,t]),S=l.useCallback(u=>{if(!y?.enabled)return[];const e=[];return(y.items||["copy","copyWithHeaders","separator","export"]).forEach(o=>{o==="export"?e.push({name:"Export CSV",icon:"<span>📥</span>",action:()=>A()}):o==="autoSizeAll"?e.push({name:"Auto-size All Columns",action:()=>{x.current?.api&&x.current.api.autoSizeAllColumns()}}):o==="resetColumns"?e.push({name:"Reset Columns",action:()=>{x.current?.api&&x.current.api.resetColumnState()}}):e.push(o)}),y.customItems&&(e.length>0&&e.push("separator"),y.customItems.forEach(o=>{e.push({name:o.name,disabled:o.disabled,action:()=>{C?.onContextMenuAction&&C.onContextMenuAction(o.action,u.node?.data)}})})),e},[y,A,C]),H=l.useCallback(u=>{C?.onCellClicked?.(u)},[C]),O=l.useCallback(u=>{C?.onRowClicked?.(u)},[C]),M=l.useCallback(u=>{C?.onSelectionChanged?.(u)},[C]),_=l.useCallback(u=>{C?.onCellValueChanged?.(u)},[C]),F=l.useCallback(u=>{x.current=u},[]),Y=l.useMemo(()=>c?c.map(u=>{const e={...u};return z&&u.editable!==!1&&(e.editable=!0),h&&(h.resizable!==void 0&&u.resizable===void 0&&(e.resizable=h.resizable),h.sortable!==void 0&&u.sortable===void 0&&(e.sortable=h.sortable),h.filterable!==void 0&&u.filter===void 0&&(e.filter=h.filterable)),e}):[],[c,z,h]),L=l.useMemo(()=>({...r,pagination:a,paginationPageSize:d,domLayout:v,animateRows:k,rowSelection:P,editType:j,singleClickEdit:$,stopEditingWhenCellsLoseFocus:N,statusBar:D?{statusPanels:D}:void 0,enableRangeSelection:I,enableCharts:f,getContextMenuItems:y?.enabled?S:void 0,suppressCellFocus:!z,enableCellTextSelection:!0,ensureDomOrder:!0,rowBuffer:r.rowBuffer??10,debounceVerticalScrollbar:r.debounceVerticalScrollbar??t.length>1e3,onCellClicked:H,onRowClicked:O,onSelectionChanged:M,onCellValueChanged:_,onGridReady:F}),[r,a,d,v,k,P,j,$,N,D,I,f,y,S,z,t.length,H,O,M,_,F]),B=l.useMemo(()=>({height:typeof V=="number"?`${V}px`:V,width:"100%"}),[V]),X=[`ag-theme-${W}`,"rounded-xl","border","border-border","overflow-hidden","shadow-lg",q].filter(Boolean).join(" ");return g.jsxs("div",{className:"ag-grid-container",children:[T?.enabled&&g.jsx("div",{className:"mb-2 flex gap-2",children:g.jsx("button",{onClick:A,className:"px-3 py-1.5 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 rounded-md transition-colors",children:"Export CSV"})}),g.jsx("div",{className:X,style:B,children:g.jsx(se.AgGridReact,{ref:x,rowData:t,columnDefs:Y,gridOptions:L})})]})}const he=Object.freeze(Object.defineProperty({__proto__:null,default:Ce},Symbol.toStringTag,{value:"Module"})),ye={text:"agTextColumnFilter",textarea:"agTextColumnFilter",number:"agNumberColumnFilter",currency:"agNumberColumnFilter",percent:"agNumberColumnFilter",boolean:"agSetColumnFilter",date:"agDateColumnFilter",datetime:"agDateColumnFilter",time:"agTextColumnFilter",email:"agTextColumnFilter",phone:"agTextColumnFilter",url:"agTextColumnFilter",select:"agSetColumnFilter"};function Se({objectName:t,dataSource:c,fields:r,fieldNames:a,filters:d,sort:v,pageSize:k=10,pagination:P=!0,domLayout:W="normal",animateRows:V=!0,rowSelection:q,theme:z="quartz",height:j=500,className:$="",editable:N=!1,editType:T,singleClickEdit:R=!1,stopEditingWhenCellsLoseFocus:C=!0,exportConfig:h,statusBar:I,callbacks:f,columnConfig:y,enableRangeSelection:x=!1,enableCharts:D=!1,contextMenu:A}){const S=l.useRef(null),[H,O]=l.useState(!0),[M,_]=l.useState(null),[F,Y]=l.useState(null),[L,B]=l.useState([]),[ae,X]=l.useState(0);l.useEffect(()=>{if(!c){_(new Error("DataSource is required")),O(!1);return}(async()=>{try{O(!0),_(null);const i=await c.getObjectSchema(t);Y(i)}catch(i){const b=i instanceof Error?i:new Error(String(i));_(b),f?.onDataError?.(b)}finally{O(!1)}})()},[t,c,f]),l.useEffect(()=>{if(!c||!F)return;(async()=>{try{O(!0),_(null);const i={$top:k,$skip:0};d&&(i.$filter=d),v&&(i.$orderby=v);const b=await c.find(t,i);B(b.data||[]),X(b.total||0),f?.onDataLoaded?.(b.data||[])}catch(i){const b=i instanceof Error?i:new Error(String(i));_(b),f?.onDataError?.(b)}finally{O(!1)}})()},[t,c,F,d,v,k,f]);const u=l.useMemo(()=>{if(!F?.fields)return[];const s=r||Object.values(F.fields);return(a?s.filter(b=>a.includes(b.name)):s).map(b=>{const E={field:b.name,headerName:b.label||b.name,sortable:b.sortable!==!1,filter:xe(b),editable:N&&!b.readonly};return y&&(y.resizable!==void 0&&(E.resizable=y.resizable),y.sortable!==void 0&&E.sortable===void 0&&(E.sortable=y.sortable)),Ee(E,b),E})},[F,r,a,N,y]),e=l.useMemo(()=>{if(!I?.enabled)return;const s=I.aggregations||["count","sum","avg"],i=[];return s.includes("count")&&i.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["count"]}}),s.includes("sum")&&i.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["sum"]}}),s.includes("avg")&&i.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["avg"]}}),s.includes("min")&&i.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["min"]}}),s.includes("max")&&i.push({statusPanel:"agAggregationComponent",statusPanelParams:{aggFuncs:["max"]}}),i},[I]),n=l.useCallback(()=>{if(!S.current?.api)return;const s={fileName:h?.fileName||`${t}-export.csv`,skipColumnHeaders:h?.skipColumnHeaders||!1,allColumns:h?.allColumns||!1,onlySelected:h?.onlySelected||!1};if(S.current.api.exportDataAsCsv(s),f?.onExport){const i=h?.onlySelected?S.current.api.getSelectedRows():L;f.onExport(i||[],"csv")}},[h,f,L,t]),o=l.useCallback(s=>{if(!A?.enabled)return[];const i=[];return(A.items||["copy","copyWithHeaders","separator","export"]).forEach(E=>{E==="export"?i.push({name:"Export CSV",icon:"<span>📥</span>",action:()=>n()}):E==="autoSizeAll"?i.push({name:"Auto-size All Columns",action:()=>{S.current?.api&&S.current.api.autoSizeAllColumns()}}):E==="resetColumns"?i.push({name:"Reset Columns",action:()=>{S.current?.api&&S.current.api.resetColumnState()}}):i.push(E)}),A.customItems&&(i.length>0&&i.push("separator"),A.customItems.forEach(E=>{i.push({name:E.name,disabled:E.disabled,action:()=>{f?.onContextMenuAction&&f.onContextMenuAction(E.action,s.node?.data)}})})),i},[A,n,f]),m=l.useCallback(s=>{f?.onCellClicked?.(s)},[f]),U=l.useCallback(s=>{f?.onRowClicked?.(s)},[f]),Q=l.useCallback(s=>{f?.onSelectionChanged?.(s)},[f]),p=l.useCallback(async s=>{if(f?.onCellValueChanged?.(s),c&&s.data&&s.data.id)try{await c.update(t,s.data.id,{[s.colDef.field]:s.newValue})}catch(i){console.error("Failed to update record:",i),s.node.setDataValue(s.colDef.field,s.oldValue)}},[f,c,t]),G=l.useCallback(s=>{S.current=s},[]),ee=l.useMemo(()=>({pagination:P,paginationPageSize:k,domLayout:W,animateRows:V,rowSelection:q,editType:T,singleClickEdit:R,stopEditingWhenCellsLoseFocus:C,statusBar:e?{statusPanels:e}:void 0,enableRangeSelection:x,enableCharts:D,getContextMenuItems:A?.enabled?o:void 0,suppressCellFocus:!N,enableCellTextSelection:!0,ensureDomOrder:!0,onCellClicked:m,onRowClicked:U,onSelectionChanged:Q,onCellValueChanged:p,onGridReady:G}),[P,k,W,V,q,T,R,C,e,x,D,A,o,N,m,U,Q,p,G]),te=l.useMemo(()=>({height:typeof j=="number"?`${j}px`:j,width:"100%"}),[j]),Ae=[`ag-theme-${z}`,"rounded-xl","border","border-border","overflow-hidden","shadow-lg",$].filter(Boolean).join(" ");return H?g.jsx("div",{className:"flex items-center justify-center",style:te,children:g.jsxs("div",{className:"text-muted-foreground",children:["Loading ",t,"..."]})}):M?g.jsx("div",{className:"flex items-center justify-center",style:te,children:g.jsxs("div",{className:"text-destructive",children:["Error loading data: ",M.message]})}):g.jsxs("div",{className:"object-aggrid-container",children:[h?.enabled&&g.jsx("div",{className:"mb-2 flex gap-2",children:g.jsx("button",{onClick:n,className:"px-3 py-1.5 text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 rounded-md transition-colors",children:"Export CSV"})}),g.jsx("div",{className:Ae,style:te,children:g.jsx(se.AgGridReact,{ref:S,rowData:L,columnDefs:u,gridOptions:ee})})]})}function J(t){const c=document.createElement("div");return c.textContent=t,c.innerHTML}function xe(t){return t.filterable===!1?!1:ye[t.type]||"agTextColumnFilter"}function Ee(t,c){switch(c.type){case"boolean":t.cellRenderer=r=>r.value===!0?"✓ Yes":r.value===!1?"✗ No":"";break;case"currency":t.valueFormatter=r=>{if(r.value==null)return"";const a=c.currency||"USD",d=c.precision||2;return new Intl.NumberFormat("en-US",{style:"currency",currency:a,minimumFractionDigits:d,maximumFractionDigits:d}).format(r.value)};break;case"percent":t.valueFormatter=r=>{if(r.value==null)return"";const a=c.precision||2;return`${(r.value*100).toFixed(a)}%`};break;case"date":t.valueFormatter=r=>{if(!r.value)return"";try{const a=new Date(r.value);return isNaN(a.getTime())?"":a.toLocaleDateString()}catch{return""}};break;case"datetime":t.valueFormatter=r=>{if(!r.value)return"";try{const a=new Date(r.value);return isNaN(a.getTime())?"":a.toLocaleString()}catch{return""}};break;case"time":t.valueFormatter=r=>r.value?r.value:"";break;case"email":t.cellRenderer=r=>{if(!r.value)return"";const a=J(r.value);return`<a href="mailto:${a}" class="text-blue-600 hover:underline">${a}</a>`};break;case"url":t.cellRenderer=r=>{if(!r.value)return"";const a=J(r.value);return`<a href="${a}" target="_blank" rel="noopener noreferrer" class="text-blue-600 hover:underline">${a}</a>`};break;case"phone":t.cellRenderer=r=>{if(!r.value)return"";const a=J(r.value);return`<a href="tel:${a}" class="text-blue-600 hover:underline">${a}</a>`};break;case"select":t.valueFormatter=r=>r.value?(c.options||[]).find(v=>v.value===r.value)?.label||r.value:"";break;case"lookup":case"master_detail":t.valueFormatter=r=>r.value?typeof r.value=="object"?r.value.name||r.value.label||r.value.id||"":String(r.value):"";break;case"number":{const r=c.precision;r!==void 0&&(t.valueFormatter=a=>a.value==null?"":Number(a.value).toFixed(r));break}case"color":t.cellRenderer=r=>{if(!r.value)return"";const a=J(r.value);return`<div class="flex items-center gap-2">
7
+ <div style="width: 16px; height: 16px; background-color: ${a}; border: 1px solid #ccc; border-radius: 2px;"></div>
8
+ <span>${a}</span>
9
+ </div>`};break;case"rating":t.cellRenderer=r=>{if(r.value==null)return"";const a=c.max||5;return"⭐".repeat(Math.min(r.value,a))};break;case"image":t.cellRenderer=r=>{if(!r.value)return"";const a=typeof r.value=="string"?r.value:r.value.url;return a?`<img src="${J(a)}" alt="" style="width: 40px; height: 40px; object-fit: cover; border-radius: 4px;" />`:""};break;case"avatar":t.cellRenderer=r=>{if(!r.value)return"";const a=typeof r.value=="string"?r.value:r.value.url;return a?`<img src="${J(a)}" alt="" style="width: 32px; height: 32px; object-fit: cover; border-radius: 50%;" />`:""};break}}const ke=Object.freeze(Object.defineProperty({__proto__:null,default:Se},Symbol.toStringTag,{value:"Module"}));w.AgGridRenderer=ne,w.ObjectAgGridRenderer=le,w.aggridComponents=ve,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}));
@@ -0,0 +1,6 @@
1
+ import { ObjectAgGridImplProps } from './object-aggrid.types';
2
+ /**
3
+ * ObjectAgGridImpl - Metadata-driven AG Grid implementation
4
+ * Fetches object metadata and data from ObjectStack and renders the grid
5
+ */
6
+ export default function ObjectAgGridImpl({ objectName, dataSource, fields: providedFields, fieldNames, filters, sort, pageSize, pagination, domLayout, animateRows, rowSelection, theme, height, className, editable, editType, singleClickEdit, stopEditingWhenCellsLoseFocus, exportConfig, statusBar, callbacks, columnConfig, enableRangeSelection, enableCharts, contextMenu, }: ObjectAgGridImplProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ /**
9
+ * Virtual Scrolling in AG Grid
10
+ *
11
+ * AG Grid provides built-in virtual scrolling by default, which renders only
12
+ * the visible rows in the viewport. This is a core feature of AG Grid and
13
+ * requires no additional configuration.
14
+ *
15
+ * ## How It Works
16
+ *
17
+ * - AG Grid automatically virtualizes rows by rendering only visible rows
18
+ * - As you scroll, rows are recycled and reused for new data
19
+ * - This provides excellent performance even with datasets of 100,000+ rows
20
+ *
21
+ * ## Performance Tips
22
+ *
23
+ * 1. **Row Buffer**: Adjust `rowBuffer` to control how many extra rows are rendered
24
+ * ```ts
25
+ * gridOptions: { rowBuffer: 10 } // Render 10 extra rows above/below viewport
26
+ * ```
27
+ *
28
+ * 2. **Suppress Animations**: Disable animations for very large datasets
29
+ * ```ts
30
+ * animateRows: false
31
+ * ```
32
+ *
33
+ * 3. **Debounce Vertical Scroll**: Add delay to vertical scroll updates
34
+ * ```ts
35
+ * gridOptions: { debounceVerticalScrollbar: true }
36
+ * ```
37
+ *
38
+ * 4. **Row Height**: Use fixed row heights for better performance
39
+ * ```ts
40
+ * gridOptions: { rowHeight: 40 }
41
+ * ```
42
+ *
43
+ * ## Example Usage
44
+ *
45
+ * ```tsx
46
+ * <AgGrid
47
+ * rowData={largeDataset} // 10,000+ items
48
+ * columnDefs={columns}
49
+ * gridOptions={{
50
+ * rowBuffer: 10,
51
+ * rowHeight: 40,
52
+ * debounceVerticalScrollbar: true,
53
+ * }}
54
+ * animateRows={false}
55
+ * />
56
+ * ```
57
+ *
58
+ * ## References
59
+ *
60
+ * - [AG Grid Row Virtualisation](https://www.ag-grid.com/javascript-data-grid/dom-virtualisation/)
61
+ * - [Performance Best Practices](https://www.ag-grid.com/javascript-data-grid/performance/)
62
+ */
63
+ export declare const VIRTUAL_SCROLLING_DOCS: {
64
+ enabled: boolean;
65
+ automatic: boolean;
66
+ recommendedSettings: {
67
+ rowBuffer: number;
68
+ rowHeight: number;
69
+ debounceVerticalScrollbar: boolean;
70
+ animateRows: boolean;
71
+ };
72
+ };
@@ -1,6 +1,8 @@
1
1
  import { default as React } from 'react';
2
2
  import { AgGridCallbacks, ExportConfig, StatusBarConfig, ColumnConfig, ContextMenuConfig } from './types';
3
+ import { DataSource } from '../../types/src';
3
4
  export type { AgGridSchema, SimpleColumnDef, AgGridCallbacks, ExportConfig, StatusBarConfig, ColumnConfig, ContextMenuConfig } from './types';
5
+ export type { ObjectAgGridSchema } from './object-aggrid.types';
4
6
  export interface AgGridRendererProps {
5
7
  schema: {
6
8
  type: string;
@@ -34,6 +36,46 @@ export interface AgGridRendererProps {
34
36
  * This wrapper handles lazy loading internally using React.Suspense
35
37
  */
36
38
  export declare const AgGridRenderer: React.FC<AgGridRendererProps>;
39
+ /**
40
+ * ObjectAgGridRenderer - The public API for the metadata-driven AG Grid component
41
+ * This wrapper handles lazy loading internally using React.Suspense
42
+ */
43
+ export interface ObjectAgGridRendererProps {
44
+ schema: {
45
+ type: string;
46
+ id?: string;
47
+ className?: string;
48
+ objectName: string;
49
+ dataSource?: DataSource;
50
+ fields?: any[];
51
+ fieldNames?: string[];
52
+ filters?: Record<string, any>;
53
+ sort?: Record<string, 'asc' | 'desc'>;
54
+ pageSize?: number;
55
+ pagination?: boolean;
56
+ domLayout?: 'normal' | 'autoHeight' | 'print';
57
+ animateRows?: boolean;
58
+ rowSelection?: 'single' | 'multiple';
59
+ theme?: 'alpine' | 'balham' | 'material' | 'quartz';
60
+ height?: number | string;
61
+ editable?: boolean;
62
+ editType?: 'fullRow';
63
+ singleClickEdit?: boolean;
64
+ stopEditingWhenCellsLoseFocus?: boolean;
65
+ exportConfig?: ExportConfig;
66
+ statusBar?: StatusBarConfig;
67
+ callbacks?: AgGridCallbacks & {
68
+ onDataLoaded?: (data: any[]) => void;
69
+ onDataError?: (error: Error) => void;
70
+ };
71
+ columnConfig?: ColumnConfig;
72
+ enableRangeSelection?: boolean;
73
+ enableCharts?: boolean;
74
+ contextMenu?: ContextMenuConfig;
75
+ };
76
+ }
77
+ export declare const ObjectAgGridRenderer: React.FC<ObjectAgGridRendererProps>;
37
78
  export declare const aggridComponents: {
38
79
  aggrid: React.FC<AgGridRendererProps>;
80
+ 'object-aggrid': React.FC<ObjectAgGridRendererProps>;
39
81
  };
@@ -0,0 +1,74 @@
1
+ import { DataSource, FieldMetadata } from '../../types/src';
2
+ import { AgGridCallbacks, ExportConfig, StatusBarConfig, ColumnConfig, ContextMenuConfig } from './types';
3
+ /**
4
+ * Object AgGrid schema for metadata-driven grid
5
+ */
6
+ export interface ObjectAgGridSchema {
7
+ type: 'object-aggrid';
8
+ id?: string;
9
+ className?: string;
10
+ objectName: string;
11
+ dataSource: DataSource;
12
+ fields?: FieldMetadata[];
13
+ fieldNames?: string[];
14
+ filters?: Record<string, any>;
15
+ sort?: Record<string, 'asc' | 'desc'>;
16
+ pageSize?: number;
17
+ pagination?: boolean;
18
+ domLayout?: 'normal' | 'autoHeight' | 'print';
19
+ animateRows?: boolean;
20
+ rowSelection?: 'single' | 'multiple';
21
+ editable?: boolean;
22
+ editType?: 'fullRow';
23
+ singleClickEdit?: boolean;
24
+ stopEditingWhenCellsLoseFocus?: boolean;
25
+ exportConfig?: ExportConfig;
26
+ statusBar?: StatusBarConfig;
27
+ columnConfig?: ColumnConfig;
28
+ enableRangeSelection?: boolean;
29
+ enableCharts?: boolean;
30
+ contextMenu?: ContextMenuConfig;
31
+ callbacks?: AgGridCallbacks & {
32
+ onDataLoaded?: (data: any[]) => void;
33
+ onDataError?: (error: Error) => void;
34
+ };
35
+ theme?: 'alpine' | 'balham' | 'material' | 'quartz';
36
+ height?: number | string;
37
+ }
38
+ /**
39
+ * Props for ObjectAgGridImpl component
40
+ */
41
+ export interface ObjectAgGridImplProps {
42
+ objectName: string;
43
+ dataSource?: DataSource;
44
+ fields?: FieldMetadata[];
45
+ fieldNames?: string[];
46
+ filters?: Record<string, any>;
47
+ sort?: Record<string, 'asc' | 'desc'>;
48
+ pageSize?: number;
49
+ pagination?: boolean;
50
+ domLayout?: 'normal' | 'autoHeight' | 'print';
51
+ animateRows?: boolean;
52
+ rowSelection?: 'single' | 'multiple';
53
+ theme?: 'alpine' | 'balham' | 'material' | 'quartz';
54
+ height?: number | string;
55
+ className?: string;
56
+ editable?: boolean;
57
+ editType?: 'fullRow';
58
+ singleClickEdit?: boolean;
59
+ stopEditingWhenCellsLoseFocus?: boolean;
60
+ exportConfig?: ExportConfig;
61
+ statusBar?: StatusBarConfig;
62
+ callbacks?: AgGridCallbacks & {
63
+ onDataLoaded?: (data: any[]) => void;
64
+ onDataError?: (error: Error) => void;
65
+ };
66
+ columnConfig?: ColumnConfig;
67
+ enableRangeSelection?: boolean;
68
+ enableCharts?: boolean;
69
+ contextMenu?: ContextMenuConfig;
70
+ }
71
+ /**
72
+ * Field type to AG Grid filter type mapping
73
+ */
74
+ export declare const FIELD_TYPE_TO_FILTER_TYPE: Record<string, string | boolean>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@object-ui/plugin-aggrid",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "AG Grid data grid plugin for Object UI, powered by AG Grid Community",
@@ -25,10 +25,11 @@
25
25
  "./style.css": "./dist/index.css"
26
26
  },
27
27
  "dependencies": {
28
- "@object-ui/components": "0.3.1",
29
- "@object-ui/core": "0.3.1",
30
- "@object-ui/react": "0.3.1",
31
- "@object-ui/types": "0.3.1"
28
+ "@object-ui/components": "0.5.0",
29
+ "@object-ui/core": "0.5.0",
30
+ "@object-ui/react": "0.5.0",
31
+ "@object-ui/types": "0.5.0",
32
+ "@object-ui/data-objectstack": "0.5.0"
32
33
  },
33
34
  "peerDependencies": {
34
35
  "react": "^18.0.0 || ^19.0.0",
@@ -37,11 +38,11 @@
37
38
  "ag-grid-react": "^32.0.0"
38
39
  },
39
40
  "devDependencies": {
40
- "@types/react": "^19.2.9",
41
+ "@types/react": "^19.2.10",
41
42
  "@types/react-dom": "^19.2.3",
42
- "@vitejs/plugin-react": "^4.2.1",
43
- "ag-grid-community": "^35.0.1",
44
- "ag-grid-react": "^32.3.4",
43
+ "@vitejs/plugin-react": "^5.1.3",
44
+ "ag-grid-community": "^32.3.9",
45
+ "ag-grid-react": "^32.3.9",
45
46
  "typescript": "^5.9.3",
46
47
  "vite": "^7.3.1",
47
48
  "vite-plugin-dts": "^4.5.4"
@@ -223,7 +223,7 @@ export default function AgGridImpl({
223
223
  }, [columnDefs, editable, columnConfig]);
224
224
 
225
225
  // Merge grid options with props
226
- const mergedGridOptions: GridOptions = useMemo(() => ({
226
+ const mergedGridOptions = useMemo(() => ({
227
227
  ...gridOptions,
228
228
  pagination,
229
229
  paginationPageSize,
@@ -241,6 +241,9 @@ export default function AgGridImpl({
241
241
  suppressCellFocus: !editable,
242
242
  enableCellTextSelection: true,
243
243
  ensureDomOrder: true,
244
+ // Virtual scrolling optimizations for large datasets
245
+ rowBuffer: gridOptions.rowBuffer ?? 10,
246
+ debounceVerticalScrollbar: gridOptions.debounceVerticalScrollbar ?? (rowData.length > 1000),
244
247
  // Event handlers
245
248
  onCellClicked: handleCellClicked,
246
249
  onRowClicked: handleRowClicked,
@@ -263,6 +266,7 @@ export default function AgGridImpl({
263
266
  contextMenu,
264
267
  getContextMenuItems,
265
268
  editable,
269
+ rowData.length,
266
270
  handleCellClicked,
267
271
  handleRowClicked,
268
272
  handleSelectionChanged,