@object-ui/plugin-charts 3.3.1 → 3.4.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.
@@ -58,4 +58,4 @@ ${n.map(([e,n])=>{let r=n.theme?.[t]||n.color;return r?` --color-${e}: ${r};`:n
58
58
  `)}
59
59
  }
60
60
  `).join(`
61
- `)}}):null},$Y=Mj,eX=jf})),nX=m({default:()=>rX});function rX({chartType:e=`bar`,data:t=[],config:n={},xAxisKey:r=`name`,series:i=[],className:a=``}){let o=Array.isArray(t)?t:[],[s,c]=_.useState(!1);_.useEffect(()=>{let e=()=>c(window.innerWidth<640);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let l={bar:ZJ,line:JJ,area:IY,pie:xY,donut:xY,radar:AY,scatter:NY,combo:ZJ}[e]||ZJ,u=_.useMemo(()=>o.some(e=>String(e[r]||``).length>5),[o,r]),d=()=>[`hsl(var(--chart-1))`,`hsl(var(--chart-2))`,`hsl(var(--chart-3))`,`hsl(var(--chart-4))`,`hsl(var(--chart-5))`];if(e===`pie`||e===`donut`){let t=e===`donut`?60:0;return(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(xY,{children:[(0,$.jsx)($Y,{cursor:!1,content:(0,$.jsx)(GY,{hideLabel:!0})}),(0,$.jsx)(uR,{data:o,dataKey:i[0]?.dataKey||`value`,nameKey:r||`name`,innerRadius:t,strokeWidth:5,paddingAngle:2,outerRadius:80,children:o.map((e,t)=>{let i=n[e[r]]?.color;if(!i){let e=d();i=e[t%e.length]}return(0,$.jsx)(Ij,{fill:oX(i)},`cell-${t}`)})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{nameKey:r}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}})]})})}return e===`radar`?(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(AY,{data:o,children:[(0,$.jsx)(HP,{}),(0,$.jsx)(RF,{dataKey:r}),(0,$.jsx)(mF,{}),(0,$.jsx)($Y,{content:(0,$.jsx)(GY,{})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}}),i.map(e=>{let t=oX(n[e.dataKey]?.color||iX);return(0,$.jsx)(Wz,{dataKey:e.dataKey,stroke:t,fill:t,fillOpacity:.6},e.dataKey)})]})}):e===`scatter`?(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(NY,{children:[(0,$.jsx)(GV,{vertical:!1}),(0,$.jsx)(yK,{type:`number`,dataKey:r,name:String(n[r]?.label||r),tickLine:!1,axisLine:!1,interval:s?Math.ceil(o.length/5):0}),(0,$.jsx)(IK,{type:`number`,dataKey:i[0]?.dataKey||`value`,name:String(n[i[0]?.dataKey]?.label||i[0]?.dataKey),tickLine:!1,axisLine:!1}),(0,$.jsx)(zK,{type:`number`,range:[60,400]}),(0,$.jsx)($Y,{content:(0,$.jsx)(GY,{})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}}),i.map((e,t)=>{let r=d(),i=oX(n[e.dataKey]?.color||r[t%r.length]);return(0,$.jsx)(YG,{name:n[e.dataKey]?.label||e.dataKey,data:o,fill:i},e.dataKey)})]})}):e===`combo`?(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(ZJ,{data:o,children:[(0,$.jsx)(GV,{vertical:!1}),(0,$.jsx)(yK,{dataKey:r,tickLine:!1,tickMargin:10,axisLine:!1,interval:s?Math.ceil(o.length/5):0,tickFormatter:e=>!e||typeof e!=`string`?e:s&&e.length>8?e.slice(0,8)+`…`:e,...!s&&u&&{angle:-35,textAnchor:`end`,height:60}}),(0,$.jsx)(IK,{yAxisId:`left`,tickLine:!1,axisLine:!1}),(0,$.jsx)(IK,{yAxisId:`right`,orientation:`right`,tickLine:!1,axisLine:!1}),(0,$.jsx)($Y,{content:(0,$.jsx)(GY,{})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}}),i.map((e,t)=>{let r=oX(n[e.dataKey]?.color||iX),i=e.chartType||(t===0?`bar`:`line`),a=i===`bar`?`left`:`right`;return i===`line`?(0,$.jsx)(nU,{yAxisId:a,type:`monotone`,dataKey:e.dataKey,stroke:r,strokeWidth:2,dot:!1},e.dataKey):i===`area`?(0,$.jsx)(qU,{yAxisId:a,type:`monotone`,dataKey:e.dataKey,fill:r,stroke:r,fillOpacity:.4},e.dataKey):(0,$.jsx)(sG,{yAxisId:a,dataKey:e.dataKey,fill:r,radius:4},e.dataKey)})]})}):(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(l,{data:o,children:[(0,$.jsx)(GV,{vertical:!1}),(0,$.jsx)(yK,{dataKey:r,tickLine:!1,tickMargin:10,axisLine:!1,interval:s?Math.ceil(o.length/5):0,tickFormatter:e=>!e||typeof e!=`string`?e:s&&e.length>8?e.slice(0,8)+`…`:e,...!s&&u&&{angle:-35,textAnchor:`end`,height:60}}),(0,$.jsx)($Y,{content:(0,$.jsx)(GY,{})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}}),i.map((t,r)=>{let a=d(),s=oX(n[t.dataKey]?.color||a[r%a.length]||iX);if(e===`bar`){let e=i.length===1&&o.length>1;return(0,$.jsx)(sG,{dataKey:t.dataKey,fill:s,radius:4,children:e&&o.map((e,t)=>(0,$.jsx)(Ij,{fill:oX(a[t%a.length])},`cell-${t}`))},t.dataKey)}return e===`line`?(0,$.jsx)(nU,{type:`monotone`,dataKey:t.dataKey,stroke:s,strokeWidth:2,dot:!1},t.dataKey):e===`area`?(0,$.jsx)(qU,{type:`monotone`,dataKey:t.dataKey,fill:s,stroke:s,fillOpacity:.4},t.dataKey):null})]})})}var $,iX,aX,oX,sX=f((()=>{RY(),tX(),$=b(),iX=`hsl(var(--primary))`,aX={slate:`#64748b`,gray:`#6b7280`,zinc:`#71717a`,neutral:`#737373`,stone:`#78716c`,red:`#ef4444`,orange:`#f97316`,amber:`#f59e0b`,yellow:`#eab308`,lime:`#84cc16`,green:`#22c55e`,emerald:`#10b981`,teal:`#14b8a6`,cyan:`#06b6d4`,sky:`#0ea5e9`,blue:`#3b82f6`,indigo:`#6366f1`,violet:`#8b5cf6`,purple:`#a855f7`,fuchsia:`#d946ef`,pink:`#ec4899`,rose:`#f43f5e`},oX=e=>aX[e]||e})),cX=b(),lX=_.default.lazy(()=>Promise.resolve().then(()=>(HY(),zY))),uX=_.default.lazy(()=>Promise.resolve().then(()=>(sX(),nX))),dX=({schema:e})=>(0,cX.jsx)(_.Suspense,{fallback:(0,cX.jsx)(r.Skeleton,{className:`w-full h-48 sm:h-64 md:h-80 lg:h-[400px]`}),children:(0,cX.jsx)(lX,{data:e.data,dataKey:e.dataKey,xAxisKey:e.xAxisKey,height:e.height,className:e.className,color:e.color})}),fX=({schema:e})=>{let t=_.default.useMemo(()=>{let t=e.series,n=e.xAxisKey,r=e.config;if(n||(e.index?n=e.index:e.category&&(n=e.category)),t||(e.categories?t=e.categories.map(e=>({dataKey:e})):e.value&&(t=[{dataKey:e.value}])),!r&&t){let n=e.colors||[`hsl(var(--chart-1))`,`hsl(var(--chart-2))`,`hsl(var(--chart-3))`],i={};t.forEach((e,t)=>{i[e.dataKey]={label:e.dataKey,color:n[t%n.length]}}),r=i}return{chartType:e.chartType,data:Array.isArray(e.data)?e.data:[],config:r,xAxisKey:n,series:t,className:e.className}},[e]);return(0,cX.jsx)(_.Suspense,{fallback:(0,cX.jsx)(r.Skeleton,{className:`w-full h-48 sm:h-64 md:h-80 lg:h-[400px]`}),children:(0,cX.jsx)(uX,{chartType:t.chartType,data:t.data,config:t.config,xAxisKey:t.xAxisKey,series:t.series,className:t.className})})},pX=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),mX=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),hX=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),gX=e=>{let t=hX(e);return t.charAt(0).toUpperCase()+t.slice(1)},_X={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},vX=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},yX=(0,n.createContext)({}),bX=()=>(0,n.useContext)(yX),xX=(0,n.forwardRef)(({color:e,size:t,strokeWidth:r,absoluteStrokeWidth:i,className:a=``,children:o,iconNode:s,...c},l)=>{let{size:u=24,strokeWidth:d=2,absoluteStrokeWidth:f=!1,color:p=`currentColor`,className:m=``}=bX()??{},h=i??f?Number(r??d)*24/Number(t??u):r??d;return(0,n.createElement)(`svg`,{ref:l,..._X,width:t??u??_X.width,height:t??u??_X.height,stroke:e??p,strokeWidth:h,className:pX(`lucide`,m,a),...!o&&!vX(c)&&{"aria-hidden":`true`},...c},[...s.map(([e,t])=>(0,n.createElement)(e,t)),...Array.isArray(o)?o:[o]])}),SX=((e,t)=>{let r=(0,n.forwardRef)(({className:r,...i},a)=>(0,n.createElement)(xX,{ref:a,iconNode:t,className:pX(`lucide-${mX(gX(e))}`,`lucide-${e}`,r),...i}));return r.displayName=gX(e),r})(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]);function CX(e){return e.replace(/[_-]/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function wX(e,t){let{field:n,function:r,groupBy:i}=t,a={};for(let t of e){let e=String(t[i]??`Unknown`);a[e]||(a[e]=[]),a[e].push(t)}return Object.entries(a).map(([e,t])=>{let a=t.map(e=>Number(e[n])||0),o;switch(r){case`count`:o=t.length;break;case`avg`:o=a.length>0?a.reduce((e,t)=>e+t,0)/a.length:0;break;case`min`:o=a.length>0?Math.min(...a):0;break;case`max`:o=a.length>0?Math.max(...a):0;break;default:o=a.reduce((e,t)=>e+t,0);break}return{[i]:e,[n]:o}})}async function TX(e,n,r,i){if(!e.length||!n)return e;let a=r?.fields?.[n];if(!a)return e.map(e=>({...e,[n]:CX(String(e[n]??``))}));let o=a.type;if(o===`select`||o===`picklist`||o===`dropdown`){let t=a.options||[];if(t.length===0)return e.map(e=>({...e,[n]:CX(String(e[n]??``))}));let r={};for(let e of t)typeof e==`string`?r[e]=e:e&&typeof e==`object`&&(r[String(e.value)]=e.label||String(e.value));return e.map(e=>{let t=String(e[n]??``);return{...e,[n]:r[t]||CX(t)}})}if(o===`lookup`||o===`master_detail`){let r=a.reference_to||a.reference;if(!r||!i||typeof i.find!=`function`)return e;let o=[...new Set(e.map(e=>e[n]).filter(e=>e!=null))];if(o.length===0)return e;let s=a.id_field||`id`;try{let c=(0,t.extractRecords)(await i.find(r,{$filter:{[s]:{$in:o}},$top:o.length})),l=a.reference_field||a.display_field||`name`,u={};for(let e of c){let t=String(e[s]??e.id??e._id??``),n=e[l]||e.name||e.label||e.title||t;t&&(u[t]=String(n))}return e.map(e=>{let t=String(e[n]??``);return{...e,[n]:u[t]||t}})}catch(t){return console.warn(`[ObjectChart] Failed to resolve lookup labels:`,t),e}}return e.map(e=>({...e,[n]:CX(String(e[n]??``))}))}var EX=e=>{let{schema:n}=e,r=(0,_.useContext)(a.SchemaRendererContext),i=e.dataSource||r?.dataSource,o=(0,a.useDataScope)(n.bind),[s,c]=(0,_.useState)([]),[l,u]=(0,_.useState)(!1),[d,f]=(0,_.useState)(null),p=(0,_.useCallback)(async(e,r)=>{if(!(!e||!n.objectName)){r.current&&(u(!0),f(null));try{let i;if(n.aggregate&&typeof e.aggregate==`function`){let t=await e.aggregate(n.objectName,{field:n.aggregate.field,function:n.aggregate.function,groupBy:n.aggregate.groupBy,filter:n.filter});i=Array.isArray(t)?t:[]}else if(typeof e.find==`function`)i=(0,t.extractRecords)(await e.find(n.objectName,{$filter:n.filter})),n.aggregate&&i.length>0&&(i=wX(i,n.aggregate));else return;let a=n.aggregate?.groupBy||n.xAxisKey;if(a&&typeof e.getObjectSchema==`function`)try{let t=await e.getObjectSchema(n.objectName);i=await TX(i,a,t,e)}catch{}r.current&&c(i)}catch(e){console.error(`[ObjectChart] Fetch error:`,e),r.current&&f(e instanceof Error?e.message:`Failed to load chart data`)}finally{r.current&&u(!1)}}},[n.objectName,n.aggregate,n.filter,n.xAxisKey]);(0,_.useEffect)(()=>{let e={current:!0};return n.objectName&&!o&&!n.data&&p(i,e),()=>{e.current=!1}},[n.objectName,i,o,n.data,n.filter,n.aggregate,p]);let m=o||n.data||s,h=Array.isArray(m)?m:[],g={...n,data:h};return l&&h.length===0?(0,cX.jsx)(`div`,{className:`flex items-center justify-center text-muted-foreground text-sm p-4 `+(n.className||``),"data-testid":`chart-loading`,children:`Loading chart data…`}):d?(0,cX.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-2 p-4 `+(n.className||``),"data-testid":`chart-error`,role:`alert`,children:[(0,cX.jsx)(SX,{className:`h-6 w-6 text-destructive opacity-60`}),(0,cX.jsx)(`p`,{className:`text-xs text-destructive font-medium`,children:`Failed to load chart data`}),(0,cX.jsx)(`p`,{className:`text-xs text-muted-foreground max-w-xs text-center`,children:d})]}):!i&&n.objectName&&h.length===0?(0,cX.jsxs)(`div`,{className:`flex items-center justify-center text-muted-foreground text-sm p-4 `+(n.className||``),"data-testid":`chart-no-datasource`,children:[`No data source available for “`,n.objectName,`”`]}):(0,cX.jsx)(fX,{...e,schema:g})};t.ComponentRegistry.register(`object-chart`,EX,{namespace:`plugin-charts`,label:`Object Chart`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`data`,type:`array`,label:`Data`,description:`Optional static data`},{name:`filter`,type:`array`,label:`Filter`},{name:`aggregate`,type:`object`,label:`Aggregate`,description:`Aggregation config: { field, function, groupBy }`}]});var DX={"bar-chart":dX,chart:fX};t.ComponentRegistry.register(`bar-chart`,dX,{namespace:`plugin-charts`,label:`Bar Chart`,category:`plugin`,inputs:[{name:`data`,type:`array`,label:`Data`,required:!0},{name:`dataKey`,type:`string`,label:`Data Key`,defaultValue:`value`},{name:`xAxisKey`,type:`string`,label:`X-Axis Key`,defaultValue:`name`},{name:`height`,type:`number`,label:`Height`,defaultValue:400},{name:`color`,type:`color`,label:`Color`,defaultValue:`#8884d8`}],defaultProps:{data:[{name:`Jan`,value:400},{name:`Feb`,value:300},{name:`Mar`,value:600},{name:`Apr`,value:800},{name:`May`,value:500}],dataKey:`value`,xAxisKey:`name`,height:400,color:`#8884d8`}}),t.ComponentRegistry.register(`chart`,EX,{namespace:`view`,category:`view`,label:`Chart`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`type`,type:`string`,label:`Chart Type`},{name:`categoryField`,type:`string`,label:`Category Field`},{name:`valueField`,type:`string`,label:`Value Field`}]}),t.ComponentRegistry.register(`chart`,fX,{namespace:`plugin-charts`,label:`Chart`,category:`plugin`,inputs:[{name:`chartType`,type:`enum`,label:`Chart Type`,enum:[{label:`Bar`,value:`bar`},{label:`Line`,value:`line`},{label:`Area`,value:`area`},{label:`Pie`,value:`pie`},{label:`Donut`,value:`donut`},{label:`Radar`,value:`radar`},{label:`Scatter`,value:`scatter`}],defaultValue:`bar`},{name:`data`,type:`code`,label:`Data (JSON)`,required:!0},{name:`config`,type:`code`,label:`Config (JSON)`},{name:`xAxisKey`,type:`string`,label:`X Axis Key`,defaultValue:`name`},{name:`series`,type:`code`,label:`Series (JSON Array)`,required:!0},{name:`className`,type:`string`,label:`CSS Class`}],defaultProps:{chartType:`bar`,data:[{name:`Jan`,sales:400,revenue:240},{name:`Feb`,sales:300,revenue:139},{name:`Mar`,sales:600,revenue:380},{name:`Apr`,sales:800,revenue:430},{name:`May`,sales:500,revenue:220}],config:{sales:{label:`Sales`,color:`#8884d8`},revenue:{label:`Revenue`,color:`#82ca9d`}},xAxisKey:`name`,series:[{dataKey:`sales`},{dataKey:`revenue`}]}}),t.ComponentRegistry.register(`chart:bar`,fX,{namespace:`plugin-charts`,label:`Bar Chart (Alias)`,category:`plugin`,defaultProps:{chartType:`bar`}}),t.ComponentRegistry.register(`pie-chart`,fX,{namespace:`plugin-charts`,label:`Pie Chart`,category:`plugin`,defaultProps:{chartType:`pie`}}),t.ComponentRegistry.register(`donut-chart`,fX,{namespace:`plugin-charts`,label:`Donut Chart`,category:`plugin`,defaultProps:{chartType:`donut`}}),t.ComponentRegistry.register(`radar-chart`,fX,{namespace:`plugin-charts`,label:`Radar Chart`,category:`plugin`,defaultProps:{chartType:`radar`}}),t.ComponentRegistry.register(`scatter-chart`,fX,{namespace:`plugin-charts`,label:`Scatter Chart`,category:`plugin`,defaultProps:{chartType:`scatter`}}),e.ChartBarRenderer=dX,e.ChartRenderer=fX,e.ObjectChart=EX,e.chartComponents=DX});
61
+ `)}}):null},$Y=Mj,eX=jf})),nX=m({default:()=>rX});function rX({chartType:e=`bar`,data:t=[],config:n={},xAxisKey:r=`name`,series:i=[],className:a=``}){let o=Array.isArray(t)?t:[],[s,c]=_.useState(!1);_.useEffect(()=>{let e=()=>c(window.innerWidth<640);return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let l={bar:ZJ,line:JJ,area:IY,pie:xY,donut:xY,radar:AY,scatter:NY,combo:ZJ}[e]||ZJ,u=_.useMemo(()=>o.some(e=>String(e[r]||``).length>5),[o,r]),d=()=>[`hsl(var(--chart-1))`,`hsl(var(--chart-2))`,`hsl(var(--chart-3))`,`hsl(var(--chart-4))`,`hsl(var(--chart-5))`];if(e===`pie`||e===`donut`){let t=e===`donut`?60:0;return(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(xY,{children:[(0,$.jsx)($Y,{cursor:!1,content:(0,$.jsx)(GY,{hideLabel:!0})}),(0,$.jsx)(uR,{data:o,dataKey:i[0]?.dataKey||`value`,nameKey:r||`name`,innerRadius:t,strokeWidth:5,paddingAngle:2,outerRadius:80,children:o.map((e,t)=>{let i=n[e[r]]?.color;if(!i){let e=d();i=e[t%e.length]}return(0,$.jsx)(Ij,{fill:oX(i)},`cell-${t}`)})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{nameKey:r}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}})]})})}return e===`radar`?(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(AY,{data:o,children:[(0,$.jsx)(HP,{}),(0,$.jsx)(RF,{dataKey:r}),(0,$.jsx)(mF,{}),(0,$.jsx)($Y,{content:(0,$.jsx)(GY,{})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}}),i.map(e=>{let t=oX(n[e.dataKey]?.color||iX);return(0,$.jsx)(Wz,{dataKey:e.dataKey,stroke:t,fill:t,fillOpacity:.6},e.dataKey)})]})}):e===`scatter`?(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(NY,{children:[(0,$.jsx)(GV,{vertical:!1}),(0,$.jsx)(yK,{type:`number`,dataKey:r,name:String(n[r]?.label||r),tickLine:!1,axisLine:!1,interval:s?Math.ceil(o.length/5):0}),(0,$.jsx)(IK,{type:`number`,dataKey:i[0]?.dataKey||`value`,name:String(n[i[0]?.dataKey]?.label||i[0]?.dataKey),tickLine:!1,axisLine:!1}),(0,$.jsx)(zK,{type:`number`,range:[60,400]}),(0,$.jsx)($Y,{content:(0,$.jsx)(GY,{})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}}),i.map((e,t)=>{let r=d(),i=oX(n[e.dataKey]?.color||r[t%r.length]);return(0,$.jsx)(YG,{name:n[e.dataKey]?.label||e.dataKey,data:o,fill:i},e.dataKey)})]})}):e===`combo`?(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(ZJ,{data:o,children:[(0,$.jsx)(GV,{vertical:!1}),(0,$.jsx)(yK,{dataKey:r,tickLine:!1,tickMargin:10,axisLine:!1,interval:s?Math.ceil(o.length/5):0,tickFormatter:e=>!e||typeof e!=`string`?e:s&&e.length>8?e.slice(0,8)+`…`:e,...!s&&u&&{angle:-35,textAnchor:`end`,height:60}}),(0,$.jsx)(IK,{yAxisId:`left`,tickLine:!1,axisLine:!1}),(0,$.jsx)(IK,{yAxisId:`right`,orientation:`right`,tickLine:!1,axisLine:!1}),(0,$.jsx)($Y,{content:(0,$.jsx)(GY,{})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}}),i.map((e,t)=>{let r=oX(n[e.dataKey]?.color||iX),i=e.chartType||(t===0?`bar`:`line`),a=i===`bar`?`left`:`right`;return i===`line`?(0,$.jsx)(nU,{yAxisId:a,type:`monotone`,dataKey:e.dataKey,stroke:r,strokeWidth:2,dot:!1},e.dataKey):i===`area`?(0,$.jsx)(qU,{yAxisId:a,type:`monotone`,dataKey:e.dataKey,fill:r,stroke:r,fillOpacity:.4},e.dataKey):(0,$.jsx)(sG,{yAxisId:a,dataKey:e.dataKey,fill:r,radius:4},e.dataKey)})]})}):(0,$.jsx)(WY,{config:n,className:a,children:(0,$.jsxs)(l,{data:o,children:[(0,$.jsx)(GV,{vertical:!1}),(0,$.jsx)(yK,{dataKey:r,tickLine:!1,tickMargin:10,axisLine:!1,interval:s?Math.ceil(o.length/5):0,tickFormatter:e=>!e||typeof e!=`string`?e:s&&e.length>8?e.slice(0,8)+`…`:e,...!s&&u&&{angle:-35,textAnchor:`end`,height:60}}),(0,$.jsx)($Y,{content:(0,$.jsx)(GY,{})}),(0,$.jsx)(eX,{content:(0,$.jsx)(KY,{}),...s&&{verticalAlign:`bottom`,wrapperStyle:{fontSize:`11px`,paddingTop:`8px`}}}),i.map((t,r)=>{let a=d(),s=oX(n[t.dataKey]?.color||a[r%a.length]||iX);if(e===`bar`){let e=i.length===1&&o.length>1;return(0,$.jsx)(sG,{dataKey:t.dataKey,fill:s,radius:4,children:e&&o.map((e,t)=>(0,$.jsx)(Ij,{fill:oX(a[t%a.length])},`cell-${t}`))},t.dataKey)}return e===`line`?(0,$.jsx)(nU,{type:`monotone`,dataKey:t.dataKey,stroke:s,strokeWidth:2,dot:!1},t.dataKey):e===`area`?(0,$.jsx)(qU,{type:`monotone`,dataKey:t.dataKey,fill:s,stroke:s,fillOpacity:.4},t.dataKey):null})]})})}var $,iX,aX,oX,sX=f((()=>{RY(),tX(),$=b(),iX=`hsl(var(--primary))`,aX={slate:`#64748b`,gray:`#6b7280`,zinc:`#71717a`,neutral:`#737373`,stone:`#78716c`,red:`#ef4444`,orange:`#f97316`,amber:`#f59e0b`,yellow:`#eab308`,lime:`#84cc16`,green:`#22c55e`,emerald:`#10b981`,teal:`#14b8a6`,cyan:`#06b6d4`,sky:`#0ea5e9`,blue:`#3b82f6`,indigo:`#6366f1`,violet:`#8b5cf6`,purple:`#a855f7`,fuchsia:`#d946ef`,pink:`#ec4899`,rose:`#f43f5e`},oX=e=>aX[e]||e})),cX=b(),lX=_.default.lazy(()=>Promise.resolve().then(()=>(HY(),zY))),uX=_.default.lazy(()=>Promise.resolve().then(()=>(sX(),nX))),dX=({schema:e})=>(0,cX.jsx)(_.Suspense,{fallback:(0,cX.jsx)(r.Skeleton,{className:`w-full h-48 sm:h-64 md:h-80 lg:h-[400px]`}),children:(0,cX.jsx)(lX,{data:e.data,dataKey:e.dataKey,xAxisKey:e.xAxisKey,height:e.height,className:e.className,color:e.color})}),fX=({schema:e})=>{let t=_.default.useMemo(()=>{let t=e.series,n=e.xAxisKey,r=e.config;if(n||(e.index?n=e.index:e.category&&(n=e.category)),t||(e.categories?t=e.categories.map(e=>({dataKey:e})):e.value&&(t=[{dataKey:e.value}])),!r&&t){let n=e.colors||[`hsl(var(--chart-1))`,`hsl(var(--chart-2))`,`hsl(var(--chart-3))`],i={};t.forEach((e,t)=>{i[e.dataKey]={label:e.label||e.dataKey,color:n[t%n.length]}}),r=i}return{chartType:e.chartType,data:Array.isArray(e.data)?e.data:[],config:r,xAxisKey:n,series:t,className:e.className}},[e]);return(0,cX.jsx)(_.Suspense,{fallback:(0,cX.jsx)(r.Skeleton,{className:`w-full h-48 sm:h-64 md:h-80 lg:h-[400px]`}),children:(0,cX.jsx)(uX,{chartType:t.chartType,data:t.data,config:t.config,xAxisKey:t.xAxisKey,series:t.series,className:t.className})})},pX=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),mX=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),hX=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),gX=e=>{let t=hX(e);return t.charAt(0).toUpperCase()+t.slice(1)},_X={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},vX=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},yX=(0,_.createContext)({}),bX=()=>(0,_.useContext)(yX),xX=(0,_.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=bX()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,_.createElement)(`svg`,{ref:c,..._X,width:t??l??_X.width,height:t??l??_X.height,stroke:e??f,strokeWidth:m,className:pX(`lucide`,p,i),...!a&&!vX(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,_.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),SX=((e,t)=>{let n=(0,_.forwardRef)(({className:n,...r},i)=>(0,_.createElement)(xX,{ref:i,iconNode:t,className:pX(`lucide-${mX(gX(e))}`,`lucide-${e}`,n),...r}));return n.displayName=gX(e),n})(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),CX=(e,t,n,r)=>{let i=[n,{code:t,...r||{}}];if(e?.services?.logger?.forward)return e.services.logger.forward(i,`warn`,`react-i18next::`,!0);AX(i[0])&&(i[0]=`react-i18next:: ${i[0]}`),e?.services?.logger?.warn?e.services.logger.warn(...i):console?.warn&&console.warn(...i)},wX={},TX=(e,t,n,r)=>{AX(n)&&wX[n]||(AX(n)&&(wX[n]=new Date),CX(e,t,n,r))},EX=(e,t)=>()=>{if(e.isInitialized)t();else{let n=()=>{setTimeout(()=>{e.off(`initialized`,n)},0),t()};e.on(`initialized`,n)}},DX=(e,t,n)=>{e.loadNamespaces(t,EX(e,n))},OX=(e,t,n,r)=>{if(AX(n)&&(n=[n]),e.options.preload&&e.options.preload.indexOf(t)>-1)return DX(e,n,r);n.forEach(t=>{e.options.ns.indexOf(t)<0&&e.options.ns.push(t)}),e.loadLanguages(t,EX(e,r))},kX=(e,t,n={})=>!t.languages||!t.languages.length?(TX(t,`NO_LANGUAGES`,`i18n.languages were undefined or empty`,{languages:t.languages}),!0):t.hasLoadedNamespace(e,{lng:n.lng,precheck:(t,r)=>{if(n.bindI18n&&n.bindI18n.indexOf(`languageChanging`)>-1&&t.services.backendConnector.backend&&t.isLanguageChangingTo&&!r(t.isLanguageChangingTo,e))return!1}}),AX=e=>typeof e==`string`,jX=e=>typeof e==`object`&&!!e,MX=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g,NX={"&amp;":`&`,"&#38;":`&`,"&lt;":`<`,"&#60;":`<`,"&gt;":`>`,"&#62;":`>`,"&apos;":`'`,"&#39;":`'`,"&quot;":`"`,"&#34;":`"`,"&nbsp;":` `,"&#160;":` `,"&copy;":`©`,"&#169;":`©`,"&reg;":`®`,"&#174;":`®`,"&hellip;":`…`,"&#8230;":`…`,"&#x2F;":`/`,"&#47;":`/`},PX=e=>NX[e],FX={bindI18n:`languageChanged`,bindI18nStore:``,transEmptyNodeValue:``,transSupportBasicHtmlNodes:!0,transWrapTextNodes:``,transKeepBasicHtmlNodesFor:[`br`,`strong`,`i`,`p`],useSuspense:!0,unescape:e=>e.replace(MX,PX),transDefaultProps:void 0},IX=()=>FX,LX,RX=()=>LX,zX=(0,n.createContext)(),BX=class{constructor(){this.usedNamespaces={}}addUsedNamespaces(e){e.forEach(e=>{this.usedNamespaces[e]||(this.usedNamespaces[e]=!0)})}getUsedNamespaces(){return Object.keys(this.usedNamespaces)}},VX=mi(),HX={t:(e,t)=>{if(AX(t))return t;if(jX(t)&&AX(t.defaultValue))return t.defaultValue;if(typeof e==`function`)return``;if(Array.isArray(e)){let t=e[e.length-1];return typeof t==`function`?``:t}return e},ready:!1},UX=()=>()=>{},WX=(e,t={})=>{let{i18n:r}=t,{i18n:i,defaultNS:a}=(0,n.useContext)(zX)||{},o=r||i||RX();o&&!o.reportNamespaces&&(o.reportNamespaces=new BX),o||TX(o,`NO_I18NEXT_INSTANCE`,`useTranslation: You will need to pass in an i18next instance by using initReactI18next`);let s=(0,n.useMemo)(()=>({...IX(),...o?.options?.react,...t}),[o,t]),{useSuspense:c,keyPrefix:l}=s,u=e||a||o?.options?.defaultNS,d=AX(u)?[u]:u||[`translation`],f=(0,n.useMemo)(()=>d,d);o?.reportNamespaces?.addUsedNamespaces?.(f);let p=(0,n.useRef)(0),m=(0,n.useCallback)(e=>{if(!o)return UX;let{bindI18n:t,bindI18nStore:n}=s,r=()=>{p.current+=1,e()};return t&&o.on(t,r),n&&o.store.on(n,r),()=>{t&&t.split(` `).forEach(e=>o.off(e,r)),n&&n.split(` `).forEach(e=>o.store.off(e,r))}},[o,s]),h=(0,n.useRef)(),g=(0,n.useCallback)(()=>{if(!o)return HX;let e=!!(o.isInitialized||o.initializedStoreOnce)&&f.every(e=>kX(e,o,s)),n=t.lng||o.language,r=p.current,i=h.current;if(i&&i.ready===e&&i.lng===n&&i.keyPrefix===l&&i.revision===r)return i;let a={t:o.getFixedT(n,s.nsMode===`fallback`?f:f[0],l),ready:e,lng:n,keyPrefix:l,revision:r};return h.current=a,a},[o,f,l,s,t.lng]),[_,v]=(0,n.useState)(0),{t:y,ready:b}=(0,VX.useSyncExternalStore)(m,g,g);(0,n.useEffect)(()=>{if(o&&!b&&!c){let e=()=>v(e=>e+1);t.lng?OX(o,t.lng,f,e):DX(o,f,e)}},[o,t.lng,f,b,c,_]);let x=o||{},S=(0,n.useRef)(null),C=(0,n.useRef)(),w=e=>{let t=Object.getOwnPropertyDescriptors(e);t.__original&&delete t.__original;let n=Object.create(Object.getPrototypeOf(e),t);if(!Object.prototype.hasOwnProperty.call(n,`__original`))try{Object.defineProperty(n,`__original`,{value:e,writable:!1,enumerable:!1,configurable:!1})}catch{}return n},T=(0,n.useMemo)(()=>{let e=x,t=e?.language,n=e;e&&(S.current&&S.current.__original===e&&C.current===t?n=S.current:(n=w(e),S.current=n,C.current=t));let r=!b&&!c?(...e)=>(TX(o,`USE_T_BEFORE_READY`,`useTranslation: t was called before ready. When using useSuspense: false, make sure to check the ready flag before using t.`),y(...e)):y,i=[r,n,b];return i.t=r,i.i18n=n,i.ready=b,i},[y,x,b,x.resolvedLanguage,x.language,x.languages]);if(o&&c&&!b)throw new Promise(e=>{let n=()=>e();t.lng?OX(o,t.lng,f,n):DX(o,f,n)});return T},GX=(0,_.createContext)(null);function KX(e){let t=(0,_.useContext)(GX),{t:n,i18n:r}=WX(e);return{t:n,language:t?.language||r.language||`en`,changeLanguage:t?.changeLanguage||(async e=>{await r.changeLanguage(e)}),direction:t?.direction||`ltr`,i18n:r}}var qX=new Set([`common`,`validation`,`form`,`table`,`grid`,`calendar`,`list`,`kanban`,`chart`,`dashboard`,`configPanel`,`appDesigner`,`console`,`errors`,`detail`]);function JX(){let{t:e,i18n:t}=KX(),n=()=>{if(!t||typeof t.getResourceBundle!=`function`)return[];let e=t.language||`en`,n=t.getResourceBundle(e,`translation`);return n?Object.keys(n).filter(e=>!qX.has(e)&&n[e]&&typeof n[e]==`object`&&(n[e].objects||n[e].fields||n[e].apps||n[e].dashboards||n[e].pages||n[e].reports)):[]},r=e=>{let t=e.indexOf(`__`);return t>0?e.slice(t+2):e},i=(t,r)=>{let i=Array.isArray(t)?t:[t];try{let t=n();for(let n of t)for(let t of i){let r=`${n}.${t}`,i=e(r,{defaultValue:``});if(i&&i!==r&&i!==``)return i}}catch{}return r},a=(e,t)=>{let n=r(e);return n===e?[`objects.${e}.${t}`]:[`objects.${e}.${t}`,`objects.${n}.${t}`]},o=(e,t)=>{let n=r(e);return n===e?[`fields.${e}.${t}`]:[`fields.${e}.${t}`,`fields.${n}.${t}`]},s=(e,t,n)=>{let i=r(e);return i===e?[`fieldOptions.${e}.${t}.${n}`]:[`fieldOptions.${e}.${t}.${n}`,`fieldOptions.${i}.${t}.${n}`]},c=(e,t)=>{let n=r(e);return n===e?[`dashboards.${e}.${t}`]:[`dashboards.${e}.${t}`,`dashboards.${n}.${t}`]},l=(e,t)=>{let n=r(e);return n===e?[`pages.${e}.${t}`]:[`pages.${e}.${t}`,`pages.${n}.${t}`]},u=(e,t)=>{let n=r(e);return n===e?[`reports.${e}.${t}`]:[`reports.${e}.${t}`,`reports.${n}.${t}`]};return{objectLabel:e=>i(a(e.name,`label`),e.label),objectDescription:e=>{if(e.description)return i(a(e.name,`description`),e.description)},fieldLabel:(e,t,n)=>i(o(e,t),n),fieldOptionLabel:(e,t,n,r)=>i(s(e,t,n),r),translateOptions:(e,t,n)=>n.map(n=>({...n,label:i(s(e,t,n.value),n.label)})),appLabel:e=>i(`apps.${e.name}.label`,e.label??e.name),appDescription:e=>{let t=e.description??``;return i(`apps.${e.name}.description`,t)||void 0},navGroupLabel:(e,t,n)=>i(`apps.${e}.navigation.${t}.label`,n),dashboardLabel:e=>i(c(e.name,`label`),e.label??e.name),dashboardDescription:e=>{let t=e.description??``;return i(c(e.name,`description`),t)||void 0},dashboardActionLabel:(e,t,n)=>i(c(e,`actions.${t}.label`),n),widgetTitle:(e,t,n)=>i(c(e,`widgets.${t}.title`),n),widgetDescription:(e,t,n)=>{let r=n??``;return i(c(e,`widgets.${t}.description`),r)||void 0},pageLabel:e=>i(l(e.name,`label`),e.label??e.name),reportLabel:e=>i(u(e.name,`label`),e.label??e.name)}}function YX(){try{let{fieldLabel:e,translateOptions:t,fieldOptionLabel:n}=JX();return{fieldLabel:e,translateOptions:t,fieldOptionLabel:n}}catch{return{fieldLabel:(e,t,n)=>n,translateOptions:(e,t,n)=>n,fieldOptionLabel:(e,t,n,r)=>r}}}function XX(e){return e.replace(/[_-]/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function ZX(e,t){let{field:n,function:r,groupBy:i}=t,a={};for(let t of e){let e=String(t[i]??`Unknown`);a[e]||(a[e]=[]),a[e].push(t)}return Object.entries(a).map(([e,t])=>{let a=t.map(e=>Number(e[n])||0),o;switch(r){case`count`:o=t.length;break;case`avg`:o=a.length>0?a.reduce((e,t)=>e+t,0)/a.length:0;break;case`min`:o=a.length>0?Math.min(...a):0;break;case`max`:o=a.length>0?Math.max(...a):0;break;default:o=a.reduce((e,t)=>e+t,0);break}return{[i]:e,[n]:o}})}async function QX(e,n,r,i,a){if(!e.length||!n)return e;let o=a||((e,t)=>t),s=r?.fields?.[n];if(!s)return e.map(e=>{let t=String(e[n]??``),r=XX(t);return{...e,[n]:o(t,r)}});let c=s.type;if(c===`select`||c===`picklist`||c===`dropdown`){let t=s.options||[];if(t.length===0)return e.map(e=>{let t=String(e[n]??``),r=XX(t);return{...e,[n]:o(t,r)}});let r={};for(let e of t)typeof e==`string`?r[e]=e:e&&typeof e==`object`&&(r[String(e.value)]=e.label||String(e.value));return e.map(e=>{let t=String(e[n]??``),i=r[t]||XX(t);return{...e,[n]:o(t,i)}})}if(c===`lookup`||c===`master_detail`){let r=s.reference_to||s.reference;if(!r||!i||typeof i.find!=`function`)return e;let a=[...new Set(e.map(e=>e[n]).filter(e=>e!=null))];if(a.length===0)return e;let o=s.id_field||`id`;try{let c=(0,t.extractRecords)(await i.find(r,{$filter:{[o]:{$in:a}},$top:a.length})),l=s.reference_field||s.display_field||`name`,u={};for(let e of c){let t=String(e[o]??e.id??e._id??``),n=e[l]||e.name||e.label||e.title||t;t&&(u[t]=String(n))}return e.map(e=>{let t=String(e[n]??``);return{...e,[n]:u[t]||t}})}catch(t){return console.warn(`[ObjectChart] Failed to resolve lookup labels:`,t),e}}return e.map(e=>({...e,[n]:XX(String(e[n]??``))}))}var $X=e=>{let{schema:n}=e,r=(0,_.useContext)(a.SchemaRendererContext),i=e.dataSource||r?.dataSource,o=(0,a.useDataScope)(n.bind),{fieldOptionLabel:s}=YX(),c=(0,_.useRef)(s);(0,_.useEffect)(()=>{c.current=s},[s]);let[l,u]=(0,_.useState)([]),[d,f]=(0,_.useState)(!1),[p,m]=(0,_.useState)(null),h=(0,_.useMemo)(()=>n.aggregate?JSON.stringify(n.aggregate):``,[n.aggregate]),g=(0,_.useMemo)(()=>n.filter?JSON.stringify(n.filter):``,[n.filter]),v=(0,_.useCallback)(async(e,r)=>{if(!(!e||!n.objectName)){r.current&&(f(!0),m(null));try{let i;if(n.aggregate&&typeof e.aggregate==`function`){let t=await e.aggregate(n.objectName,{field:n.aggregate.field,function:n.aggregate.function,groupBy:n.aggregate.groupBy,filter:n.filter});i=Array.isArray(t)?t:[]}else if(typeof e.find==`function`)i=(0,t.extractRecords)(await e.find(n.objectName,{$filter:n.filter})),n.aggregate&&i.length>0&&(i=ZX(i,n.aggregate));else return;let a=n.aggregate?.groupBy||n.xAxisKey;if(a&&typeof e.getObjectSchema==`function`)try{let t=await e.getObjectSchema(n.objectName);i=await QX(i,a,t,e,(e,t)=>c.current(n.objectName,a,e,t))}catch{}r.current&&u(i)}catch(e){console.error(`[ObjectChart] Fetch error:`,e),r.current&&m(e instanceof Error?e.message:`Failed to load chart data`)}finally{r.current&&f(!1)}}},[n.objectName,h,g,n.xAxisKey]);(0,_.useEffect)(()=>{let e={current:!0};return n.objectName&&!o&&!n.data&&v(i,e),()=>{e.current=!1}},[n.objectName,i,o,n.data,g,h,v]);let y=o||n.data||l,b=Array.isArray(y)?y:[],x={...n,data:b};return d&&b.length===0?(0,cX.jsx)(`div`,{className:`flex items-center justify-center text-muted-foreground text-sm p-4 `+(n.className||``),"data-testid":`chart-loading`,children:`Loading chart data…`}):p?(0,cX.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-2 p-4 `+(n.className||``),"data-testid":`chart-error`,role:`alert`,children:[(0,cX.jsx)(SX,{className:`h-6 w-6 text-destructive opacity-60`}),(0,cX.jsx)(`p`,{className:`text-xs text-destructive font-medium`,children:`Failed to load chart data`}),(0,cX.jsx)(`p`,{className:`text-xs text-muted-foreground max-w-xs text-center`,children:p})]}):!i&&n.objectName&&b.length===0?(0,cX.jsxs)(`div`,{className:`flex items-center justify-center text-muted-foreground text-sm p-4 `+(n.className||``),"data-testid":`chart-no-datasource`,children:[`No data source available for “`,n.objectName,`”`]}):(0,cX.jsx)(fX,{...e,schema:x})};t.ComponentRegistry.register(`object-chart`,$X,{namespace:`plugin-charts`,label:`Object Chart`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`data`,type:`array`,label:`Data`,description:`Optional static data`},{name:`filter`,type:`array`,label:`Filter`},{name:`aggregate`,type:`object`,label:`Aggregate`,description:`Aggregation config: { field, function, groupBy }`}]});var eZ={"bar-chart":dX,chart:fX};t.ComponentRegistry.register(`bar-chart`,dX,{namespace:`plugin-charts`,label:`Bar Chart`,category:`plugin`,inputs:[{name:`data`,type:`array`,label:`Data`,required:!0},{name:`dataKey`,type:`string`,label:`Data Key`,defaultValue:`value`},{name:`xAxisKey`,type:`string`,label:`X-Axis Key`,defaultValue:`name`},{name:`height`,type:`number`,label:`Height`,defaultValue:400},{name:`color`,type:`color`,label:`Color`,defaultValue:`#8884d8`}],defaultProps:{data:[{name:`Jan`,value:400},{name:`Feb`,value:300},{name:`Mar`,value:600},{name:`Apr`,value:800},{name:`May`,value:500}],dataKey:`value`,xAxisKey:`name`,height:400,color:`#8884d8`}}),t.ComponentRegistry.register(`chart`,$X,{namespace:`view`,category:`view`,label:`Chart`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`type`,type:`string`,label:`Chart Type`},{name:`categoryField`,type:`string`,label:`Category Field`},{name:`valueField`,type:`string`,label:`Value Field`}]}),t.ComponentRegistry.register(`chart`,fX,{namespace:`plugin-charts`,label:`Chart`,category:`plugin`,inputs:[{name:`chartType`,type:`enum`,label:`Chart Type`,enum:[{label:`Bar`,value:`bar`},{label:`Line`,value:`line`},{label:`Area`,value:`area`},{label:`Pie`,value:`pie`},{label:`Donut`,value:`donut`},{label:`Radar`,value:`radar`},{label:`Scatter`,value:`scatter`}],defaultValue:`bar`},{name:`data`,type:`code`,label:`Data (JSON)`,required:!0},{name:`config`,type:`code`,label:`Config (JSON)`},{name:`xAxisKey`,type:`string`,label:`X Axis Key`,defaultValue:`name`},{name:`series`,type:`code`,label:`Series (JSON Array)`,required:!0},{name:`className`,type:`string`,label:`CSS Class`}],defaultProps:{chartType:`bar`,data:[{name:`Jan`,sales:400,revenue:240},{name:`Feb`,sales:300,revenue:139},{name:`Mar`,sales:600,revenue:380},{name:`Apr`,sales:800,revenue:430},{name:`May`,sales:500,revenue:220}],config:{sales:{label:`Sales`,color:`#8884d8`},revenue:{label:`Revenue`,color:`#82ca9d`}},xAxisKey:`name`,series:[{dataKey:`sales`},{dataKey:`revenue`}]}}),t.ComponentRegistry.register(`chart:bar`,fX,{namespace:`plugin-charts`,label:`Bar Chart (Alias)`,category:`plugin`,defaultProps:{chartType:`bar`}}),t.ComponentRegistry.register(`pie-chart`,fX,{namespace:`plugin-charts`,label:`Pie Chart`,category:`plugin`,defaultProps:{chartType:`pie`}}),t.ComponentRegistry.register(`donut-chart`,fX,{namespace:`plugin-charts`,label:`Donut Chart`,category:`plugin`,defaultProps:{chartType:`donut`}}),t.ComponentRegistry.register(`radar-chart`,fX,{namespace:`plugin-charts`,label:`Radar Chart`,category:`plugin`,defaultProps:{chartType:`radar`}}),t.ComponentRegistry.register(`scatter-chart`,fX,{namespace:`plugin-charts`,label:`Scatter Chart`,category:`plugin`,defaultProps:{chartType:`scatter`}}),e.ChartBarRenderer=dX,e.ChartRenderer=fX,e.ObjectChart=$X,e.chartComponents=eZ});
@@ -26,6 +26,7 @@ export interface ChartRendererProps {
26
26
  xAxisKey?: string;
27
27
  series?: Array<{
28
28
  dataKey: string;
29
+ label?: string;
29
30
  }>;
30
31
  };
31
32
  }
@@ -26,6 +26,6 @@ export declare function aggregateRecords(records: any[], aggregate: {
26
26
  * This function is pure data-layer logic — the rendering layer does not need
27
27
  * to perform any value→label conversion.
28
28
  */
29
- export declare function resolveGroupByLabels(data: any[], groupByField: string, objectSchema: any, dataSource?: any): Promise<any[]>;
29
+ export declare function resolveGroupByLabels(data: any[], groupByField: string, objectSchema: any, dataSource?: any, translateOption?: (value: string, fallbackLabel: string) => string): Promise<any[]>;
30
30
  export { extractRecords } from '../../core/src';
31
31
  export declare const ObjectChart: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -193,6 +193,92 @@ var e = Object.create, t = Object.defineProperty, n = Object.getOwnPropertyDescr
193
193
  })();
194
194
  })), p = /* @__PURE__ */ o(((e, t) => {
195
195
  process.env.NODE_ENV === "production" ? t.exports = d() : t.exports = f();
196
+ })), m = /* @__PURE__ */ o(((e) => {
197
+ var t = u("react");
198
+ function n(e, t) {
199
+ return e === t && (e !== 0 || 1 / e == 1 / t) || e !== e && t !== t;
200
+ }
201
+ var r = typeof Object.is == "function" ? Object.is : n, i = t.useState, a = t.useEffect, o = t.useLayoutEffect, s = t.useDebugValue;
202
+ function c(e, t) {
203
+ var n = t(), r = i({ inst: {
204
+ value: n,
205
+ getSnapshot: t
206
+ } }), c = r[0].inst, u = r[1];
207
+ return o(function() {
208
+ c.value = n, c.getSnapshot = t, l(c) && u({ inst: c });
209
+ }, [
210
+ e,
211
+ n,
212
+ t
213
+ ]), a(function() {
214
+ return l(c) && u({ inst: c }), e(function() {
215
+ l(c) && u({ inst: c });
216
+ });
217
+ }, [e]), s(n), n;
218
+ }
219
+ function l(e) {
220
+ var t = e.getSnapshot;
221
+ e = e.value;
222
+ try {
223
+ var n = t();
224
+ return !r(e, n);
225
+ } catch {
226
+ return !0;
227
+ }
228
+ }
229
+ function d(e, t) {
230
+ return t();
231
+ }
232
+ var f = typeof window > "u" || window.document === void 0 || window.document.createElement === void 0 ? d : c;
233
+ e.useSyncExternalStore = t.useSyncExternalStore === void 0 ? f : t.useSyncExternalStore;
234
+ })), h = /* @__PURE__ */ o(((e) => {
235
+ process.env.NODE_ENV !== "production" && (function() {
236
+ function t(e, t) {
237
+ return e === t && (e !== 0 || 1 / e == 1 / t) || e !== e && t !== t;
238
+ }
239
+ function n(e, t) {
240
+ f || a.startTransition === void 0 || (f = !0, console.error("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."));
241
+ var n = t();
242
+ if (!p) {
243
+ var i = t();
244
+ o(n, i) || (console.error("The result of getSnapshot should be cached to avoid an infinite loop"), p = !0);
245
+ }
246
+ i = s({ inst: {
247
+ value: n,
248
+ getSnapshot: t
249
+ } });
250
+ var u = i[0].inst, m = i[1];
251
+ return l(function() {
252
+ u.value = n, u.getSnapshot = t, r(u) && m({ inst: u });
253
+ }, [
254
+ e,
255
+ n,
256
+ t
257
+ ]), c(function() {
258
+ return r(u) && m({ inst: u }), e(function() {
259
+ r(u) && m({ inst: u });
260
+ });
261
+ }, [e]), d(n), n;
262
+ }
263
+ function r(e) {
264
+ var t = e.getSnapshot;
265
+ e = e.value;
266
+ try {
267
+ var n = t();
268
+ return !o(e, n);
269
+ } catch {
270
+ return !0;
271
+ }
272
+ }
273
+ function i(e, t) {
274
+ return t();
275
+ }
276
+ typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
277
+ var a = u("react"), o = typeof Object.is == "function" ? Object.is : t, s = a.useState, c = a.useEffect, l = a.useLayoutEffect, d = a.useDebugValue, f = !1, p = !1, m = typeof window > "u" || window.document === void 0 || window.document.createElement === void 0 ? i : n;
278
+ e.useSyncExternalStore = a.useSyncExternalStore === void 0 ? m : a.useSyncExternalStore, typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
279
+ })();
280
+ })), g = /* @__PURE__ */ o(((e, t) => {
281
+ process.env.NODE_ENV === "production" ? t.exports = m() : t.exports = h();
196
282
  }));
197
283
  //#endregion
198
- export { l as a, u as i, o as n, s as r, p as t };
284
+ export { u as a, s as i, p as n, l as o, o as r, g as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@object-ui/plugin-charts",
3
- "version": "3.3.1",
3
+ "version": "3.4.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Chart components plugin for Object UI, powered by Recharts",
@@ -24,12 +24,13 @@
24
24
  }
25
25
  },
26
26
  "dependencies": {
27
- "lucide-react": "^1.8.0",
27
+ "lucide-react": "^1.14.0",
28
28
  "recharts": "^3.8.1",
29
- "@object-ui/components": "3.3.1",
30
- "@object-ui/core": "3.3.1",
31
- "@object-ui/react": "3.3.1",
32
- "@object-ui/types": "3.3.1"
29
+ "@object-ui/components": "3.4.0",
30
+ "@object-ui/core": "3.4.0",
31
+ "@object-ui/i18n": "3.4.0",
32
+ "@object-ui/react": "3.4.0",
33
+ "@object-ui/types": "3.4.0"
33
34
  },
34
35
  "peerDependencies": {
35
36
  "react": "^18.0.0 || ^19.0.0",
@@ -40,8 +41,8 @@
40
41
  "@types/react-dom": "19.2.3",
41
42
  "@vitejs/plugin-react": "^6.0.1",
42
43
  "typescript": "^6.0.3",
43
- "vite": "^8.0.9",
44
- "vite-plugin-dts": "^4.5.4"
44
+ "vite": "^8.0.10",
45
+ "vite-plugin-dts": "^5.0.0"
45
46
  },
46
47
  "keywords": [
47
48
  "objectui",