@customafk/lunas-ui 0.2.62 → 0.2.64
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/features/charts/index.cjs +2 -0
- package/dist/features/charts/index.cjs.map +1 -0
- package/dist/features/charts/index.d.cts +904 -0
- package/dist/features/charts/index.d.mts +904 -0
- package/dist/features/charts/index.mjs +2 -0
- package/dist/features/charts/index.mjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +4 -2
- package/dist/index.d.mts +4 -2
- package/dist/index.mjs +1 -1
- package/dist/{resizable-CNIYTd7k.d.cts → resizable-BLfxHCf4.d.cts} +2 -2
- package/dist/{resizable-CNIYTd7k.d.mts → resizable-BLfxHCf4.d.mts} +2 -2
- package/dist/ui/chart.cjs +4 -0
- package/dist/ui/chart.cjs.map +1 -0
- package/dist/ui/chart.d.cts +80 -0
- package/dist/ui/chart.d.mts +80 -0
- package/dist/ui/chart.mjs +4 -0
- package/dist/ui/chart.mjs.map +1 -0
- package/dist/ui/resizable.d.cts +1 -1
- package/dist/ui/resizable.d.mts +1 -1
- package/package.json +11 -1
- package/styles/theme.css +8 -5
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ChartContainer as e,ChartLegend as t,ChartLegendContent as n,ChartTooltip as r,ChartTooltipContent as i}from"../../ui/chart.mjs";import{useId as a,useMemo as o}from"react";import{cn as s}from"@customafk/react-toolkit/utils";import{Fragment as c,jsx as l,jsxs as u}from"react/jsx-runtime";import{Area as d,AreaChart as f,Bar as p,BarChart as m,CartesianGrid as h,ComposedChart as g,Funnel as _,FunnelChart as v,Label as y,LabelList as b,Line as x,LineChart as S,Pie as C,PieChart as w,PolarAngleAxis as T,PolarGrid as E,PolarRadiusAxis as D,Radar as O,RadarChart as ee,RadialBar as k,RadialBarChart as A,Rectangle as j,ReferenceLine as M,ResponsiveContainer as te,Sankey as N,Scatter as P,ScatterChart as F,Treemap as I,XAxis as L,YAxis as R,ZAxis as ne,useXAxisScale as z,useYAxisScale as B}from"recharts";const V=e=>`var(--chart-${(e%8+8)%8+1})`,H=(e,t=`en-US`)=>new Intl.NumberFormat(t,{notation:`compact`,maximumFractionDigits:1}).format(e),U=(e,t=`USD`,n=`en-US`)=>new Intl.NumberFormat(n,{style:`currency`,currency:t,notation:Math.abs(e)>=1e4?`compact`:`standard`,maximumFractionDigits:+(Math.abs(e)>=1e4)}).format(e),W=(e,t=`en-US`)=>new Intl.NumberFormat(t,{style:`percent`,maximumFractionDigits:1}).format(e),G=(e,t=`en-US`)=>{let n=e instanceof Date?e:new Date(e);return Number.isNaN(n.getTime())?String(e):n.toLocaleDateString(t,{month:`short`,day:`numeric`})},K=(e,t,n)=>e>=t?n?.up??`var(--success)`:n?.down??`var(--danger)`,q=(e,t=`en-US`)=>new Intl.NumberFormat(t,{style:`percent`,maximumFractionDigits:1,signDisplay:`exceptZero`}).format(e),J=(e,t,n=100)=>{let r={};for(let n of t)r[n]=e.find(e=>typeof e[n]==`number`)?.[n];return e.map(e=>{let i={};for(let a of t){let t=e[a],o=r[a];i[a]=typeof t==`number`&&o?t/o*n:NaN}return{date:e.date,...i}})},Y=[`S`,`M`,`T`,`W`,`T`,`F`,`S`],X=({data:t,label:n=`Activity`,color:a=`var(--chart-1)`,valueFormatter:c=e=>e.toLocaleString(`en-US`),className:d,height:f})=>{let p=o(()=>({value:{label:n,color:a}}),[n,a]),{chartData:m,monthTicks:h,maxWeek:g,maxValue:_}=o(()=>{let e=t.map(e=>({...e,parsedDate:e.date instanceof Date?e.date:new Date(e.date)})).sort((e,t)=>e.parsedDate.getTime()-t.parsedDate.getTime());if(e.length===0)return{chartData:[],monthTicks:new Map,maxWeek:0,maxValue:1};let n=e[0]?.parsedDate,r=new Date(n);r.setDate(r.getDate()-r.getDay());let i=new Map,a=-1,o=e.map(e=>{let t=e.parsedDate.getDay(),n=Math.floor((e.parsedDate.getTime()-r.getTime())/864e5/7),o=e.parsedDate.getMonth();return o!==a&&(i.set(n,e.parsedDate.toLocaleDateString(`en-US`,{month:`short`})),a=o),{x:n,y:t,value:e.value,date:e.date}});return{chartData:o,monthTicks:i,maxWeek:Math.max(...o.map(e=>e.x)),maxValue:Math.max(...o.map(e=>e.value),1)}},[t]);return l(e,{"data-slot":`activity-heatmap-chart`,config:p,className:s(`w-full`,d),style:f===void 0?void 0:{height:f,aspectRatio:`auto`},children:u(F,{margin:{top:8,right:12,bottom:0,left:0},children:[l(L,{type:`number`,dataKey:`x`,domain:[-.5,g+.5],ticks:Array.from(h.keys()),tickFormatter:e=>h.get(e)??``,tickLine:!1,axisLine:!1,tickMargin:8,interval:0}),l(R,{type:`number`,dataKey:`y`,domain:[-.5,6.5],reversed:!0,ticks:[0,1,2,3,4,5,6],tickFormatter:e=>Y[e]??``,tickLine:!1,axisLine:!1,width:20,interval:0}),l(r,{cursor:!1,content:l(i,{hideLabel:!0,hideIndicator:!0,formatter:(e,t,n)=>{let r=n.payload;return u(`div`,{className:`grid gap-0.5`,children:[l(`span`,{className:`font-medium text-muted-strong`,children:G(r.date)}),u(`span`,{className:`text-muted`,children:[c(r.value),` `,p.value?.label]})]})}})}),l(P,{data:m,shape:e=>{let{cx:t,cy:n,payload:r}=e;if(t===void 0||n===void 0)return l(`g`,{});let i=Math.min(.12+.88*(r.value/_),1);return l(`rect`,{x:t-13/2,y:n-13/2,width:13,height:13,rx:3,fill:a,fillOpacity:i})}})]})})},Z=({data:e,upColor:t,downColor:n})=>{let r=z(),i=B();return!r||!i?null:l(`g`,{children:e.map(e=>{let a=r(e.date,{position:`start`}),o=r(e.date,{position:`end`}),s=i(e.high),c=i(e.low),d=i(e.open),f=i(e.close);if(a===void 0||o===void 0||s===void 0||c===void 0||d===void 0||f===void 0)return null;let p=o-a,m=Math.max(p*.6,2),h=a+p/2,g=K(e.close,e.open,{up:t,down:n}),_=Math.min(d,f),v=Math.max(Math.abs(f-d),1);return u(`g`,{children:[l(`line`,{x1:h,x2:h,y1:s,y2:c,stroke:g,strokeWidth:1}),l(`rect`,{x:h-m/2,y:_,width:m,height:v,fill:g})]},`${e.date}`)})})},re=({data:t,label:n=`Price`,upColor:a=`var(--success)`,downColor:c=`var(--danger)`,valueFormatter:d=e=>e.toLocaleString(`en-US`),dateFormatter:f=G,showGrid:m=!0,className:_,animate:v=!0,height:y})=>{let b=o(()=>({close:{label:n,color:a}}),[n,a]),x=o(()=>{if(t.length===0)return[0,1];let e=Math.min(...t.map(e=>e.low)),n=Math.max(...t.map(e=>e.high)),r=(n-e)*.08||Math.max(n,1)*.08;return[e-r,n+r]},[t]);return l(e,{"data-slot":`candlestick-chart`,config:b,className:s(`w-full`,_),style:y===void 0?void 0:{height:y,aspectRatio:`auto`},children:u(g,{data:t,margin:{top:8,right:12,bottom:0,left:12},children:[m&&l(h,{vertical:!1}),l(L,{dataKey:`date`,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:f}),l(R,{domain:x,tickLine:!1,axisLine:!1,tickMargin:8,width:64,tickFormatter:d}),l(r,{cursor:!1,content:l(i,{hideIndicator:!0,labelFormatter:(e,t)=>{let n=t?.[0]?.payload?.date;return n?f(n):null},formatter:(e,t,n)=>{let r=n.payload;return u(`div`,{className:`grid gap-0.5`,children:[u(`span`,{className:`text-muted`,children:[`O `,l(`span`,{className:`font-number text-text-positive-strong`,children:d(r.open)}),` H`,` `,l(`span`,{className:`font-number text-text-positive-strong`,children:d(r.high)})]}),u(`span`,{className:`text-muted`,children:[`L `,l(`span`,{className:`font-number text-text-positive-strong`,children:d(r.low)}),` C`,` `,l(`span`,{className:`font-number text-text-positive-strong`,children:d(r.close)})]})]})}})}),l(p,{dataKey:`close`,fill:`transparent`,isAnimationActive:v}),l(Z,{data:t,upColor:a,downColor:c})]})})},Q=({data:t,showConversionRates:n=!0,valueFormatter:a=H,className:c,animate:d=!0,height:f})=>{let{chartData:p,config:m}=o(()=>{let e=t[0]?.value??0,r=t.map((t,r)=>{let i=e===0?0:t.value/e,o=n?`${a(t.value)} (${W(i)})`:a(t.value);return{...t,key:t.key||t.name.toLowerCase().replace(/[^a-z0-9]+/g,`-`),fill:t.color||V(r),valueLabel:o}});return{chartData:r,config:Object.fromEntries(r.map(e=>[e.key,{label:e.name,color:e.fill}]))}},[t,n,a]);return l(e,{"data-slot":`conversion-funnel-chart`,config:m,className:s(`w-full`,c),style:f===void 0?void 0:{height:f,aspectRatio:`auto`},children:u(v,{margin:{top:8,right:120,bottom:8,left:120},children:[l(r,{content:l(i,{nameKey:`key`,hideLabel:!0})}),u(_,{dataKey:`value`,data:p,isAnimationActive:d,children:[l(b,{dataKey:`name`,position:`left`,offset:12,className:`fill-muted-strong`,fontSize:12}),l(b,{dataKey:`valueLabel`,position:`right`,offset:12,className:`fill-text-positive-strong font-number`,fontSize:12})]})]})})},ie=({data:t,label:n=`Points`,color:a=`var(--chart-1)`,xLabel:c,yLabel:d,xFormatter:f=e=>e.toLocaleString(`en-US`),yFormatter:p=e=>e.toLocaleString(`en-US`),showBubbleSize:m=!1,showGrid:g=!0,className:_,animate:v=!0,height:y})=>l(e,{"data-slot":`correlation-scatter-chart`,config:o(()=>({y:{label:n,color:a}}),[n,a]),className:s(`w-full`,_),style:y===void 0?void 0:{height:y,aspectRatio:`auto`},children:u(F,{margin:{top:8,right:12,bottom:0,left:12},children:[g&&l(h,{}),l(L,{type:`number`,dataKey:`x`,name:c,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:f}),l(R,{type:`number`,dataKey:`y`,name:d,tickLine:!1,axisLine:!1,tickMargin:8,width:64,tickFormatter:p}),m&&l(ne,{type:`number`,dataKey:`z`,range:[64,400]}),l(r,{cursor:{strokeDasharray:`3 3`},content:l(i,{hideLabel:!0,formatter:(e,t,n)=>{let r=n.payload;return u(`div`,{className:`grid gap-0.5`,children:[r.name&&l(`span`,{className:`font-medium text-muted-strong`,children:r.name}),u(`span`,{className:`text-muted`,children:[c||`x`,`: `,l(`span`,{className:`font-medium font-number text-text-positive-strong`,children:f(r.x)})]}),u(`span`,{className:`text-muted`,children:[d||`y`,`: `,l(`span`,{className:`font-medium font-number text-text-positive-strong`,children:p(r.y)})]})]})}})}),l(P,{data:t,fill:a,isAnimationActive:v})]})}),ae=e=>e.key||e.name.toLowerCase().replace(/[^a-z0-9]+/g,`-`),oe=({data:a,centerLabel:c,centerValueFormatter:d=H,totalValue:f,showLegend:p=!0,showCenterTotal:m=!0,className:h,animate:g=!0,height:_})=>{let{chartData:v,config:b,total:x}=o(()=>{let e=a.map((e,t)=>({...e,key:ae(e),fill:e.color||V(t)}));return{chartData:e,config:Object.fromEntries(e.map(e=>[e.key,{label:e.name,color:e.fill}])),total:f??a.reduce((e,t)=>e+t.value,0)}},[a,f]);return l(e,{"data-slot":`donut-chart`,config:b,className:s(`mx-auto`,_===void 0&&`aspect-square`,h),style:_===void 0?void 0:{height:_,aspectRatio:`auto`},children:u(w,{children:[l(r,{cursor:!1,content:l(i,{nameKey:`key`,hideLabel:!0})}),l(C,{data:v,dataKey:`value`,nameKey:`key`,innerRadius:`60%`,strokeWidth:5,isAnimationActive:g,children:m&&l(y,{content:({viewBox:e})=>!e||!(`cx`in e)||!(`cy`in e)?null:u(`text`,{x:e.cx,y:e.cy,textAnchor:`middle`,dominantBaseline:`middle`,children:[l(`tspan`,{x:e.cx,y:e.cy,className:`fill-text-positive-strong font-number text-2xl font-bold`,children:d(x)}),c&&l(`tspan`,{x:e.cx,y:(e.cy||0)+22,className:`fill-muted text-xs`,children:c})]})})}),p&&l(t,{content:l(n,{nameKey:`key`})})]})})},se=({data:t,label:n=`Return`,upColor:a=`var(--success)`,downColor:c=`var(--danger)`,valueFormatter:d=e=>q(e),showGrid:f=!0,className:g,animate:_=!0,height:v})=>l(e,{"data-slot":`gain-loss-bar-chart`,config:o(()=>({value:{label:n,color:a}}),[n,a]),className:s(`w-full`,g),style:v===void 0?void 0:{height:v,aspectRatio:`auto`},children:u(m,{data:t,margin:{top:8,right:12,bottom:0,left:12},children:[f&&l(h,{vertical:!1}),l(L,{dataKey:`name`,tickLine:!1,axisLine:!1,tickMargin:8}),l(R,{tickLine:!1,axisLine:!1,tickMargin:8,width:56,tickFormatter:d}),l(M,{y:0,stroke:`var(--border)`}),l(r,{cursor:!1,content:l(i,{hideIndicator:!0,formatter:e=>d(Number(e))})}),l(p,{dataKey:`value`,isAnimationActive:_,shape:e=>l(j,{...e,fill:K(Number(e.payload?.value??0),0,{up:a,down:c})})})]})}),ce=({data:a,series:d,base:f=100,valueFormatter:p=(e,t)=>q(e/t-1),dateFormatter:m=G,showLegend:g=!0,showGrid:_=!0,className:v,animate:y=!0,height:b})=>{let C=o(()=>d.map(e=>e.key),[d]),w=o(()=>J(a,C,f),[a,C,f]),T=o(()=>Object.fromEntries(d.map((e,t)=>[e.key,{label:e.label,color:e.color||V(t)}])),[d]);return l(e,{"data-slot":`indexed-performance-line-chart`,config:T,className:s(`w-full`,v),style:b===void 0?void 0:{height:b,aspectRatio:`auto`},children:u(S,{data:w,margin:{top:8,right:12,bottom:0,left:12},children:[_&&l(h,{vertical:!1}),l(L,{dataKey:`date`,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:m}),l(R,{tickLine:!1,axisLine:!1,tickMargin:8,width:56,domain:[`auto`,`auto`],tickFormatter:e=>p(Number(e),f)}),l(r,{content:l(i,{labelFormatter:(e,t)=>{let n=t?.[0]?.payload?.date;return n?m(n):null},formatter:(e,t,n)=>u(c,{children:[l(`div`,{className:`size-2.5 shrink-0 rounded-[2px]`,style:{backgroundColor:n.color}}),l(`span`,{className:`text-muted`,children:T[String(t)]?.label||t}),l(`span`,{className:`ml-auto font-medium font-number text-text-positive-strong tabular-nums`,children:p(Number(e),f)})]})})}),d.map((e,t)=>l(x,{type:`natural`,dataKey:e.key,stroke:e.color||V(t),strokeWidth:2,dot:!1,isAnimationActive:y},e.key)),g&&l(t,{content:l(n,{})})]})})},le=({data:a,series:c,valueFormatter:d=e=>e.toLocaleString(`en-US`),domain:f=[`auto`,`auto`],showLegend:p=!0,className:m,animate:h=!0,height:g})=>l(e,{"data-slot":`metric-radar-chart`,config:o(()=>Object.fromEntries(c.map((e,t)=>[e.key,{label:e.label,color:e.color||V(t)}])),[c]),className:s(`mx-auto`,g===void 0&&`aspect-square`,m),style:g===void 0?void 0:{height:g,aspectRatio:`auto`},children:u(ee,{data:a,children:[l(E,{}),l(T,{dataKey:`metric`,tick:{fontSize:12}}),l(D,{domain:f,tick:!1,axisLine:!1}),l(r,{content:l(i,{formatter:e=>d(Number(e))})}),c.map((e,t)=>{let n=e.color||V(t);return l(O,{dataKey:e.key,stroke:n,fill:n,fillOpacity:.25,isAnimationActive:h},e.key)}),p&&l(t,{content:l(n,{})})]})}),ue=({data:a,leftLabel:d=`Left`,rightLabel:f=`Right`,leftColor:g=`var(--chart-1)`,rightColor:_=`var(--chart-4)`,valueFormatter:v=e=>e.toLocaleString(`en-US`),showLegend:y=!0,showGrid:b=!0,className:x,animate:S=!0,height:C})=>{let w=o(()=>({left:{label:d,color:g},right:{label:f,color:_}}),[d,g,f,_]),T=o(()=>a.map(e=>({category:e.category,left:-e.left,right:e.right,originalLeft:e.left})),[a]);return l(e,{"data-slot":`mirrored-bar-chart`,config:w,className:s(`w-full`,x),style:C===void 0?void 0:{height:C,aspectRatio:`auto`},children:u(m,{data:T,layout:`vertical`,margin:{top:8,right:12,bottom:0,left:12},children:[b&&l(h,{horizontal:!1}),l(L,{type:`number`,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:e=>v(Math.abs(e))}),l(R,{type:`category`,dataKey:`category`,tickLine:!1,axisLine:!1,tickMargin:8,width:64}),l(M,{x:0,stroke:`var(--border)`}),l(r,{content:l(i,{formatter:(e,t,n)=>{let r=t===`left`,i=r?n.payload.originalLeft:Number(e);return u(c,{children:[l(`div`,{className:`size-2.5 shrink-0 rounded-[2px]`,style:{backgroundColor:n.color}}),l(`span`,{className:`text-muted`,children:r?d:f}),l(`span`,{className:`ml-auto font-medium font-number text-text-positive-strong tabular-nums`,children:v(i)})]})}})}),l(p,{dataKey:`left`,fill:g,radius:[4,0,0,4],isAnimationActive:S}),l(p,{dataKey:`right`,fill:_,radius:[0,4,4,0],isAnimationActive:S}),y&&l(t,{content:l(n,{})})]})})},de=({data:a,dataKey:c=`orders`,label:d=`Orders`,statuses:f,color:g=`var(--chart-1)`,valueFormatter:_=e=>e.toLocaleString(`en-US`),dateFormatter:v=G,showLegend:y=!!f,showGrid:b=!0,className:x,animate:S=!0,height:C})=>l(e,{"data-slot":`orders-bar-chart`,config:o(()=>f?Object.fromEntries(f.map((e,t)=>[e.key,{label:e.label,color:e.color||V(t)}])):{[c]:{label:d,color:g}},[f,c,d,g]),className:s(`w-full`,x),style:C===void 0?void 0:{height:C,aspectRatio:`auto`},children:u(m,{data:a,margin:{top:8,right:12,bottom:0,left:12},children:[b&&l(h,{vertical:!1}),l(L,{dataKey:`date`,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:v}),l(R,{tickLine:!1,axisLine:!1,tickMargin:8,width:48,allowDecimals:!1,tickFormatter:_}),l(r,{content:l(i,{labelFormatter:(e,t)=>{let n=t?.[0]?.payload?.date;return n?v(n):null}})}),f?f.map((e,t)=>l(p,{dataKey:e.key,stackId:`orders`,fill:e.color||V(t),radius:t===f.length-1?[4,4,0,0]:[0,0,0,0],isAnimationActive:S},e.key)):l(p,{dataKey:c,fill:g,radius:[4,4,0,0],isAnimationActive:S}),y&&l(t,{content:l(n,{})})]})}),fe=e=>e.key||e.name.toLowerCase().replace(/[^a-z0-9]+/g,`-`),pe=({data:t,valueFormatter:n=H,showLabels:a=!0,className:c,animate:d=!0,height:f})=>{let{chartData:p,config:m}=o(()=>{let e=t.map((e,t)=>({...e,key:fe(e),fill:e.color||V(t)}));return{chartData:e,config:Object.fromEntries(e.map(e=>[e.key,{label:e.name,color:e.fill}]))}},[t]);return l(e,{"data-slot":`portfolio-allocation-treemap`,config:m,className:s(`w-full`,c),style:f===void 0?void 0:{height:f,aspectRatio:`auto`},children:l(I,{data:p,dataKey:`value`,nameKey:`key`,isAnimationActive:d,content:e=>{if(e.depth!==1)return l(`g`,{});let t=p.find(t=>t.key===e.name),r=a&&e.width>=36&&e.height>=24;return u(`g`,{children:[l(`rect`,{x:e.x,y:e.y,width:e.width,height:e.height,fill:t?.fill,stroke:`var(--background)`}),r&&l(`text`,{x:e.x+6,y:e.y+16,className:`fill-white font-medium text-xs`,children:t?.name}),r&&e.height>40&&l(`text`,{x:e.x+6,y:e.y+32,className:`fill-white/80 font-number text-[11px]`,children:n(e.value)})]})},children:l(r,{content:l(i,{nameKey:`key`,hideLabel:!0,formatter:e=>n(Number(e))})})})})},me=({data:t,label:n=`Close`,rangeLabel:a=`Range`,color:c=`var(--chart-1)`,valueFormatter:f=e=>e.toLocaleString(`en-US`),dateFormatter:p=G,showGrid:m=!0,className:_,animate:v=!0,height:y})=>{let b=o(()=>({close:{label:n,color:c},rangeSpan:{label:a,color:c}}),[n,c,a]),S=o(()=>t.map(e=>({...e,rangeSpan:e.high-e.low})),[t]);return l(e,{"data-slot":`price-range-area-chart`,config:b,className:s(`w-full`,_),style:y===void 0?void 0:{height:y,aspectRatio:`auto`},children:u(g,{data:S,margin:{top:8,right:12,bottom:0,left:12},children:[m&&l(h,{vertical:!1}),l(L,{dataKey:`date`,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:p}),l(R,{domain:[`auto`,`auto`],tickLine:!1,axisLine:!1,tickMargin:8,width:64,tickFormatter:f}),l(r,{cursor:!1,content:l(i,{labelFormatter:(e,t)=>{let n=t?.[0]?.payload?.date;return n?p(n):null},formatter:(e,t,n)=>{if(t!==`close`)return null;let r=n.payload;return u(`div`,{className:`grid gap-0.5`,children:[u(`span`,{className:`text-muted`,children:[b.close?.label,` `,l(`span`,{className:`font-medium font-number text-text-positive-strong`,children:f(Number(e))})]}),u(`span`,{className:`text-[11px] text-muted`,children:[f(r.low),` – `,f(r.high)]})]})}})}),l(d,{dataKey:`low`,stackId:`range`,stroke:`none`,fill:`transparent`,isAnimationActive:v}),l(d,{dataKey:`rangeSpan`,stackId:`range`,stroke:`none`,fill:c,fillOpacity:.15,isAnimationActive:v}),l(x,{type:`natural`,dataKey:`close`,stroke:c,strokeWidth:2,dot:!1,isAnimationActive:v})]})})},he=({data:p,label:m=`Revenue`,comparisonLabel:g=`Previous period`,showComparison:_=!1,color:v=`var(--chart-1)`,comparisonColor:y=`var(--chart-8)`,valueFormatter:b=e=>U(e),dateFormatter:x=G,showLegend:S=_,showGrid:C=!0,className:w,animate:T=!0,height:E})=>{let D=a(),O=o(()=>({value:{label:m,color:v},..._?{previousValue:{label:g,color:y}}:{}}),[m,v,_,g,y]);return l(e,{"data-slot":`revenue-area-chart`,config:O,className:s(`w-full`,w),style:E===void 0?void 0:{height:E,aspectRatio:`auto`},children:u(f,{data:p,margin:{top:8,right:12,bottom:0,left:12},children:[u(`defs`,{children:[u(`linearGradient`,{id:`${D}-value`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[l(`stop`,{offset:`5%`,stopColor:v,stopOpacity:.6}),l(`stop`,{offset:`95%`,stopColor:v,stopOpacity:.05})]}),u(`linearGradient`,{id:`${D}-previous`,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[l(`stop`,{offset:`5%`,stopColor:y,stopOpacity:.3}),l(`stop`,{offset:`95%`,stopColor:y,stopOpacity:.02})]})]}),C&&l(h,{vertical:!1}),l(L,{dataKey:`date`,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:x}),l(R,{tickLine:!1,axisLine:!1,tickMargin:8,width:64,tickFormatter:b}),l(r,{cursor:!1,content:l(i,{labelFormatter:(e,t)=>{let n=t?.[0]?.payload?.date;return n?x(n):null},formatter:(e,t,n)=>u(c,{children:[l(`div`,{className:`size-2.5 shrink-0 rounded-[2px]`,style:{backgroundColor:n.color}}),l(`span`,{className:`text-muted`,children:O[String(t)]?.label||t}),l(`span`,{className:`text-text-positive-strong font-number ml-auto font-medium tabular-nums`,children:b(Number(e))})]})})}),_&&l(d,{type:`natural`,dataKey:`previousValue`,stroke:y,strokeWidth:2,strokeDasharray:`4 4`,fill:`url(#${D}-previous)`,isAnimationActive:T}),l(d,{type:`natural`,dataKey:`value`,stroke:v,strokeWidth:2,fill:`url(#${D}-value)`,isAnimationActive:T}),S&&l(t,{content:l(n,{})})]})})},ge=({data:a,revenueLabel:d=`Revenue`,ordersLabel:f=`Orders`,revenueColor:m=`var(--chart-1)`,ordersColor:_=`var(--chart-4)`,revenueFormatter:v=e=>U(e),ordersFormatter:y=e=>e.toLocaleString(`en-US`),dateFormatter:b=G,showLegend:S=!0,showGrid:C=!0,className:w,animate:T=!0,height:E})=>{let D=o(()=>({revenue:{label:d,color:m},orders:{label:f,color:_}}),[d,m,f,_]);return l(e,{"data-slot":`revenue-orders-composed-chart`,config:D,className:s(`w-full`,w),style:E===void 0?void 0:{height:E,aspectRatio:`auto`},children:u(g,{data:a,margin:{top:8,right:12,bottom:0,left:12},children:[C&&l(h,{vertical:!1}),l(L,{dataKey:`date`,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:b}),l(R,{yAxisId:`revenue`,tickLine:!1,axisLine:!1,tickMargin:8,width:64,tickFormatter:v}),l(R,{yAxisId:`orders`,orientation:`right`,tickLine:!1,axisLine:!1,tickMargin:8,width:48,allowDecimals:!1,tickFormatter:y}),l(r,{content:l(i,{labelFormatter:(e,t)=>{let n=t?.[0]?.payload?.date;return n?b(n):null},formatter:(e,t,n)=>u(c,{children:[l(`div`,{className:`size-2.5 shrink-0 rounded-[2px]`,style:{backgroundColor:n.color}}),l(`span`,{className:`text-muted`,children:D[String(t)]?.label||t}),l(`span`,{className:`text-text-positive-strong font-number ml-auto font-medium tabular-nums`,children:t===`revenue`?v(Number(e)):y(Number(e))})]})})}),l(p,{dataKey:`revenue`,yAxisId:`revenue`,fill:m,radius:[4,4,0,0],isAnimationActive:T}),l(x,{type:`natural`,dataKey:`orders`,yAxisId:`orders`,stroke:_,strokeWidth:2,dot:!1,isAnimationActive:T}),S&&l(t,{content:l(n,{})})]})})},_e=({value:t,target:n,label:r=`Target`,valueFormatter:i=(e,t)=>W(t===0?0:e/t),color:a=`var(--chart-1)`,className:c,animate:d=!0,height:f})=>{let p=o(()=>[{name:`progress`,value:Math.min(Math.max(t,0),n),fill:a}],[t,n,a]);return l(e,{"data-slot":`sales-target-radial-chart`,config:o(()=>({progress:{label:r,color:a}}),[r,a]),className:s(`mx-auto`,f===void 0&&`aspect-square`,c),style:f===void 0?void 0:{height:f,aspectRatio:`auto`},children:u(A,{data:p,startAngle:90,endAngle:-270,innerRadius:`75%`,outerRadius:`100%`,children:[l(T,{type:`number`,domain:[0,n],angleAxisId:0,tick:!1}),l(k,{dataKey:`value`,angleAxisId:0,background:!0,cornerRadius:10,isAnimationActive:d}),l(D,{tick:!1,tickLine:!1,axisLine:!1,children:l(y,{content:({viewBox:e})=>!e||!(`cx`in e)||!(`cy`in e)?null:u(`text`,{x:e.cx,y:e.cy,textAnchor:`middle`,dominantBaseline:`middle`,children:[l(`tspan`,{x:e.cx,y:e.cy,className:`fill-text-positive-strong font-number text-3xl font-bold`,children:i(t,n)}),l(`tspan`,{x:e.cx,y:(e.cy||0)+24,className:`fill-muted text-xs`,children:r})]})})})]})})},$=e=>e.length*5.6+14,ve=({nodes:t,links:n,valueFormatter:r=e=>e.toLocaleString(`en-US`),nodeWidth:i=14,nodePadding:a=24,labelWidth:c=170,className:d,animate:f=!0,height:p})=>{let{data:m,colorByName:h,effectiveLabelWidth:g,rootNames:_,leafNames:v}=o(()=>{let e=t.map(e=>typeof e==`string`?{name:e}:e),i=new Map(e.map((e,t)=>[e.name,t])),a=new Map(e.map((e,t)=>[e.name,e.color||V(t)])),o=n.map(e=>({source:i.get(e.source),target:i.get(e.target),value:e.value})).filter(e=>e.source!==void 0&&e.target!==void 0),s=new Set(o.map(e=>e.target)),l=new Set(o.map(e=>e.source)),u=new Set(e.filter((e,t)=>!s.has(t)).map(e=>e.name)),d=new Set(e.filter((e,t)=>!l.has(t)).map(e=>e.name)),f=c;return e.forEach((e,t)=>{if(s.has(t)&&l.has(t))return;let n=o.filter(e=>e.source===t||e.target===t).reduce((e,t)=>e+t.value,0);f=Math.max(f,$(`${e.name}: ${r(n)}`)+16)}),{data:{nodes:e,links:o},colorByName:a,effectiveLabelWidth:f,rootNames:u,leafNames:d}},[t,n,c,r]);return l(e,{"data-slot":`sankey-flow-chart`,config:{},className:s(`w-full`,d),style:p===void 0?void 0:{height:p,aspectRatio:`auto`},children:l(N,{data:m,nodeWidth:i,nodePadding:a,linkCurvature:.45,margin:{top:28,right:g,bottom:8,left:g},node:e=>{let{x:t,y:n,width:i,height:a,payload:o}=e,s=h.get(o.name)??`var(--chart-1)`,c=_.has(o.name),d=v.has(o.name),p=`${o.name}: ${r(o.value)}`,m=$(p),g,y,b,x,S;return c||d?(b=c?`end`:`start`,y=n+a/2,S=y-18/2,x=c?t-8-m:t+i+8,g=c?x+m-6:x+6):(b=`middle`,y=o.depth%2==0?n-10:n-30,S=y-18+4,x=t+i/2-m/2,g=t+i/2),u(`g`,{children:[l(j,{className:`recharts-sankey-node`,x:t,y:n,width:i,height:a,fill:s,stroke:`var(--background)`,strokeWidth:1.5,isAnimationActive:f}),l(`rect`,{x,y:S,width:m,height:18,rx:4,fill:`var(--background)`,fillOpacity:.92}),l(`text`,{x:g,y,textAnchor:b,dominantBaseline:`middle`,className:`fill-text-positive-strong text-[11px] font-medium`,children:p})]})},link:e=>{let{sourceX:t,sourceY:n,sourceControlX:r,targetX:i,targetY:a,targetControlX:o,linkWidth:s,payload:c}=e,u=h.get(c.source.name)??`var(--chart-1)`,d=`color-mix(in oklch, ${u} 60%, ${h.get(c.target.name)??u} 40%)`;return l(`path`,{className:`recharts-sankey-link`,d:`M${t},${n} C${r},${n} ${o},${a} ${i},${a}`,fill:`none`,stroke:d,strokeWidth:s,strokeOpacity:.4})}})})},ye={up:`var(--success)`,down:`var(--danger)`,neutral:`var(--chart-1)`},be=({data:e,type:t=`area`,trend:n=`neutral`,color:r,height:i=40,animate:c=!0,className:p})=>{let m=a(),h=r||ye[n],g=o(()=>e.map(e=>typeof e==`number`?{value:e}:e),[e]),_={top:2,right:0,bottom:2,left:0};return l(`div`,{"data-slot":`sparkline-chart`,className:s(`w-full`,p),style:{height:i},children:l(te,{children:t===`line`?l(S,{data:g,margin:_,children:l(x,{type:`natural`,dataKey:`value`,stroke:h,strokeWidth:2,dot:!1,isAnimationActive:c})}):u(f,{data:g,margin:_,children:[l(`defs`,{children:u(`linearGradient`,{id:m,x1:`0`,y1:`0`,x2:`0`,y2:`1`,children:[l(`stop`,{offset:`5%`,stopColor:h,stopOpacity:.4}),l(`stop`,{offset:`95%`,stopColor:h,stopOpacity:.05})]})}),l(d,{type:`natural`,dataKey:`value`,stroke:h,strokeWidth:2,fill:`url(#${m})`,isAnimationActive:c})]})})})},xe=({data:a,series:c,valueFormatter:p=e=>e.toLocaleString(`en-US`),dateFormatter:m=G,showLegend:g=!0,showGrid:_=!0,className:v,animate:y=!0,height:b})=>l(e,{"data-slot":`stacked-area-chart`,config:o(()=>Object.fromEntries(c.map((e,t)=>[e.key,{label:e.label,color:e.color||V(t)}])),[c]),className:s(`w-full`,v),style:b===void 0?void 0:{height:b,aspectRatio:`auto`},children:u(f,{data:a,margin:{top:8,right:12,bottom:0,left:12},children:[_&&l(h,{vertical:!1}),l(L,{dataKey:`date`,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:m}),l(R,{tickLine:!1,axisLine:!1,tickMargin:8,width:64,tickFormatter:p}),l(r,{content:l(i,{labelFormatter:(e,t)=>{let n=t?.[0]?.payload?.date;return n?m(n):null},formatter:e=>p(Number(e))})}),c.map((e,t)=>{let n=e.color||V(t);return l(d,{type:`natural`,dataKey:e.key,stackId:`stack`,stroke:n,fill:n,fillOpacity:.35,isAnimationActive:y},e.key)}),g&&l(t,{content:l(n,{})})]})}),Se=({data:t,label:n=`Sales`,maxItems:a=8,color:c=`var(--chart-1)`,valueFormatter:d=H,showValueLabels:f=!0,className:h,animate:g=!0,height:_})=>{let v=o(()=>[...t].sort((e,t)=>t.value-e.value).slice(0,a),[t,a]);return l(e,{"data-slot":`top-products-bar-chart`,config:o(()=>({value:{label:n,color:c}}),[n,c]),className:s(`w-full`,h),style:_===void 0?void 0:{height:_,aspectRatio:`auto`},children:u(m,{data:v,layout:`vertical`,margin:{top:0,right:f?48:12,bottom:0,left:12},children:[l(L,{type:`number`,dataKey:`value`,hide:!0}),l(R,{type:`category`,dataKey:`name`,tickLine:!1,axisLine:!1,tickMargin:8,width:120}),l(r,{cursor:!1,content:l(i,{hideLabel:!0})}),l(p,{dataKey:`value`,fill:c,radius:4,isAnimationActive:g,children:f&&l(b,{dataKey:`value`,position:`right`,offset:8,className:`fill-muted-strong`,fontSize:12,formatter:e=>d(Number(e))})})]})})},Ce=({data:t,label:n=`Volume`,upColor:a=`var(--success)`,downColor:c=`var(--danger)`,valueFormatter:d=H,dateFormatter:f=G,showGrid:g=!0,className:_,animate:v=!0,height:y})=>{let b=o(()=>({volume:{label:n,color:a}}),[n,a]),x=o(()=>t.map((e,n)=>({...e,previousClose:n>0?t[n-1]?.close:e.close})),[t]);return l(e,{"data-slot":`volume-bar-chart`,config:b,className:s(`w-full`,_),style:y===void 0?void 0:{height:y,aspectRatio:`auto`},children:u(m,{data:x,margin:{top:8,right:12,bottom:0,left:12},children:[g&&l(h,{vertical:!1}),l(L,{dataKey:`date`,tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:f}),l(R,{tickLine:!1,axisLine:!1,tickMargin:8,width:56,tickFormatter:d}),l(r,{cursor:!1,content:l(i,{hideIndicator:!0,labelFormatter:(e,t)=>{let n=t?.[0]?.payload?.date;return n?f(n):null},formatter:e=>d(Number(e))})}),l(p,{dataKey:`volume`,isAnimationActive:v,shape:e=>{let t=e.payload,n=K(t?.close??0,t?.previousClose??0,{up:a,down:c});return l(j,{...e,fill:n})}})]})})},we=({data:t,totalColor:n=`var(--chart-1)`,upColor:a=`var(--success)`,downColor:c=`var(--danger)`,valueFormatter:d=e=>e.toLocaleString(`en-US`),showGrid:f=!0,className:g,animate:_=!0,height:v})=>{let y=o(()=>({size:{label:`Amount`,color:n}}),[n]),b=o(()=>{let e=0;return t.map(t=>{if(t.isTotal)return e=t.value,{...t,base:0,size:t.value,color:n,runningTotal:e};let r=e;e+=t.value;let i=Math.min(r,e);return{...t,base:i,size:Math.abs(t.value),color:K(t.value,0,{up:a,down:c}),runningTotal:e}})},[t,n,a,c]);return l(e,{"data-slot":`waterfall-chart`,config:y,className:s(`w-full`,g),style:v===void 0?void 0:{height:v,aspectRatio:`auto`},children:u(m,{data:b,margin:{top:8,right:12,bottom:0,left:12},children:[f&&l(h,{vertical:!1}),l(L,{dataKey:`label`,tickLine:!1,axisLine:!1,tickMargin:8}),l(R,{tickLine:!1,axisLine:!1,tickMargin:8,width:64,tickFormatter:d}),l(r,{cursor:!1,content:l(i,{hideIndicator:!0,formatter:(e,t,n)=>{let r=n.payload;return u(`div`,{className:`grid gap-0.5`,children:[u(`span`,{className:`text-muted`,children:[r.isTotal?`Total`:r.value>=0?`Increase`:`Decrease`,` `,l(`span`,{className:`font-medium font-number text-text-positive-strong`,children:d(r.value)})]}),u(`span`,{className:`text-[11px] text-muted`,children:[`Running total `,d(r.runningTotal)]})]})}})}),l(p,{dataKey:`base`,stackId:`waterfall`,fill:`transparent`,isAnimationActive:!1}),l(p,{dataKey:`size`,stackId:`waterfall`,isAnimationActive:_,shape:e=>l(j,{...e,fill:e.payload.color,radius:2})})]})})};export{X as ActivityHeatmapChart,re as CandlestickChart,Q as ConversionFunnelChart,ie as CorrelationScatterChart,oe as DonutChart,se as GainLossBarChart,ce as IndexedPerformanceLineChart,le as MetricRadarChart,ue as MirroredBarChart,de as OrdersBarChart,pe as PortfolioAllocationTreemap,me as PriceRangeAreaChart,he as RevenueAreaChart,ge as RevenueOrdersComposedChart,_e as SalesTargetRadialChart,ve as SankeyFlowChart,be as SparklineChart,xe as StackedAreaChart,Se as TopProductsBarChart,Ce as VolumeBarChart,we as WaterfallChart,J as computeIndexedSeries,H as formatCompactNumber,U as formatCurrency,W as formatPercent,q as formatSignedPercent,V as getChartColor,K as getDirectionColor,G as toDateLabel};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["point","toKey"],"sources":["../../../packages/components/features/charts/utils.ts","../../../packages/components/features/charts/components/activity-heatmap-chart.tsx","../../../packages/components/features/charts/components/candlestick-chart.tsx","../../../packages/components/features/charts/components/conversion-funnel-chart.tsx","../../../packages/components/features/charts/components/correlation-scatter-chart.tsx","../../../packages/components/features/charts/components/donut-chart.tsx","../../../packages/components/features/charts/components/gain-loss-bar-chart.tsx","../../../packages/components/features/charts/components/indexed-performance-line-chart.tsx","../../../packages/components/features/charts/components/metric-radar-chart.tsx","../../../packages/components/features/charts/components/mirrored-bar-chart.tsx","../../../packages/components/features/charts/components/orders-bar-chart.tsx","../../../packages/components/features/charts/components/portfolio-allocation-treemap.tsx","../../../packages/components/features/charts/components/price-range-area-chart.tsx","../../../packages/components/features/charts/components/revenue-area-chart.tsx","../../../packages/components/features/charts/components/revenue-orders-composed-chart.tsx","../../../packages/components/features/charts/components/sales-target-radial-chart.tsx","../../../packages/components/features/charts/components/sankey-flow-chart.tsx","../../../packages/components/features/charts/components/sparkline-chart.tsx","../../../packages/components/features/charts/components/stacked-area-chart.tsx","../../../packages/components/features/charts/components/top-products-bar-chart.tsx","../../../packages/components/features/charts/components/volume-bar-chart.tsx","../../../packages/components/features/charts/components/waterfall-chart.tsx"],"sourcesContent":["const CHART_COLOR_COUNT = 8;\n\n/** Cycles through the eight `--chart-N` theme palette variables. */\nexport const getChartColor = (index: number): string => `var(--chart-${(((index % CHART_COLOR_COUNT) + CHART_COLOR_COUNT) % CHART_COLOR_COUNT) + 1})`;\n\nexport const formatCompactNumber = (value: number, locale = 'en-US'): string =>\n new Intl.NumberFormat(locale, { notation: 'compact', maximumFractionDigits: 1 }).format(value);\n\nexport const formatCurrency = (value: number, currency = 'USD', locale = 'en-US'): string =>\n new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n notation: Math.abs(value) >= 10_000 ? 'compact' : 'standard',\n maximumFractionDigits: Math.abs(value) >= 10_000 ? 1 : 0,\n }).format(value);\n\nexport const formatPercent = (value: number, locale = 'en-US'): string =>\n new Intl.NumberFormat(locale, { style: 'percent', maximumFractionDigits: 1 }).format(value);\n\nexport const toDateLabel = (date: string | Date, locale = 'en-US'): string => {\n const parsed = date instanceof Date ? date : new Date(date);\n if (Number.isNaN(parsed.getTime())) return String(date);\n return parsed.toLocaleDateString(locale, { month: 'short', day: 'numeric' });\n};\n\n/** Picks an up/down color by comparing `current` against `reference` (e.g. close vs. open, or vs. zero). */\nexport const getDirectionColor = (current: number, reference: number, colors?: { up?: string; down?: string }): string =>\n current >= reference ? (colors?.up ?? 'var(--success)') : (colors?.down ?? 'var(--danger)');\n\nexport const formatSignedPercent = (value: number, locale = 'en-US'): string => {\n const formatted = new Intl.NumberFormat(locale, { style: 'percent', maximumFractionDigits: 1, signDisplay: 'exceptZero' }).format(value);\n return formatted;\n};\n\n/**\n * Normalizes each of `seriesKeys` in `data` to a common `base` value at its first defined point,\n * so relative performance across series with different price scales becomes directly comparable.\n */\nexport const computeIndexedSeries = <T extends { date: string | Date } & Record<string, unknown>>(\n data: readonly T[],\n seriesKeys: readonly string[],\n base = 100\n): Array<Record<string, string | Date | number>> => {\n const baseValues: Record<string, number | undefined> = {};\n for (const key of seriesKeys) {\n const first = data.find(point => typeof point[key] === 'number')?.[key] as number | undefined;\n baseValues[key] = first;\n }\n\n return data.map(point => {\n const indexed: Record<string, number> = {};\n for (const key of seriesKeys) {\n const raw = point[key];\n const baseValue = baseValues[key];\n indexed[key] = typeof raw === 'number' && baseValue ? (raw / baseValue) * base : Number.NaN;\n }\n return { date: point.date, ...indexed };\n });\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Scatter, ScatterChart, XAxis, YAxis } from 'recharts';\nimport type { ActivityPoint, BaseChartProps } from '../types';\nimport { toDateLabel } from '../utils';\n\nconst WEEKDAY_LABELS = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\nconst CELL_SIZE = 13;\nconst MS_PER_DAY = 86_400_000;\n\nexport type ActivityHeatmapChartProps = BaseChartProps & {\n data: ActivityPoint[];\n /** Series label used in the theme config. Defaults to `'Activity'`. */\n label?: string;\n color?: string;\n valueFormatter?: (value: number) => string;\n};\n\n/**\n * A GitHub-style calendar heatmap for daily activity/usage intensity — logins, orders, commits\n * per day — laid out as a week-by-weekday grid with color opacity mapped to value.\n *\n * @example\n * ```tsx\n * import { ActivityHeatmapChart } from '@customafk/lunas-ui/features/charts';\n *\n * <ActivityHeatmapChart\n * data={[\n * { date: '2026-06-01', value: 4 },\n * { date: '2026-06-02', value: 12 },\n * ]}\n * />\n * ```\n */\nexport const ActivityHeatmapChart = ({\n data,\n label = 'Activity',\n color = 'var(--chart-1)',\n valueFormatter = value => value.toLocaleString('en-US'),\n className,\n height,\n}: ActivityHeatmapChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ value: { label, color } }), [label, color]);\n\n const { chartData, monthTicks, maxWeek, maxValue } = useMemo(() => {\n const parsed = data\n .map(point => ({ ...point, parsedDate: point.date instanceof Date ? point.date : new Date(point.date) }))\n .sort((a, b) => a.parsedDate.getTime() - b.parsedDate.getTime());\n\n if (parsed.length === 0) return { chartData: [], monthTicks: new Map<number, string>(), maxWeek: 0, maxValue: 1 };\n\n const firstDate = parsed[0]?.parsedDate;\n const weekStart = new Date(firstDate);\n weekStart.setDate(weekStart.getDate() - weekStart.getDay());\n\n const months = new Map<number, string>();\n let lastMonth = -1;\n\n const points = parsed.map(point => {\n const weekday = point.parsedDate.getDay();\n const weekIndex = Math.floor((point.parsedDate.getTime() - weekStart.getTime()) / MS_PER_DAY / 7);\n const month = point.parsedDate.getMonth();\n if (month !== lastMonth) {\n months.set(weekIndex, point.parsedDate.toLocaleDateString('en-US', { month: 'short' }));\n lastMonth = month;\n }\n return { x: weekIndex, y: weekday, value: point.value, date: point.date };\n });\n\n return {\n chartData: points,\n monthTicks: months,\n maxWeek: Math.max(...points.map(point => point.x)),\n maxValue: Math.max(...points.map(point => point.value), 1),\n };\n }, [data]);\n\n return (\n <ChartContainer\n data-slot=\"activity-heatmap-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ScatterChart margin={{ top: 8, right: 12, bottom: 0, left: 0 }}>\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n domain={[-0.5, maxWeek + 0.5]}\n ticks={Array.from(monthTicks.keys())}\n tickFormatter={x => monthTicks.get(x) ?? ''}\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n interval={0}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n domain={[-0.5, 6.5]}\n reversed\n ticks={[0, 1, 2, 3, 4, 5, 6]}\n tickFormatter={y => WEEKDAY_LABELS[y] ?? ''}\n tickLine={false}\n axisLine={false}\n width={20}\n interval={0}\n />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideLabel\n hideIndicator\n formatter={(_value, _name, item) => {\n const point = item.payload as { date: string | Date; value: number };\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"font-medium text-muted-strong\">{toDateLabel(point.date)}</span>\n <span className=\"text-muted\">\n {valueFormatter(point.value)} {config.value?.label}\n </span>\n </div>\n );\n }}\n />\n }\n />\n <Scatter\n data={chartData}\n shape={props => {\n const { cx, cy, payload } = props;\n if (cx === undefined || cy === undefined) return <g />;\n const point = payload as { value: number };\n const intensity = Math.min(0.12 + 0.88 * (point.value / maxValue), 1);\n return <rect x={cx - CELL_SIZE / 2} y={cy - CELL_SIZE / 2} width={CELL_SIZE} height={CELL_SIZE} rx={3} fill={color} fillOpacity={intensity} />;\n }}\n />\n </ScatterChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, CartesianGrid, ComposedChart, useXAxisScale, useYAxisScale, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, OHLCPoint } from '../types';\nimport { getDirectionColor, toDateLabel } from '../utils';\n\ntype CandlestickSeriesProps = {\n data: OHLCPoint[];\n upColor: string;\n downColor: string;\n};\n\n/** Draws candle wicks + bodies directly against the chart's computed axis scales (recharts v3 pattern). */\nconst CandlestickSeries = ({ data, upColor, downColor }: CandlestickSeriesProps) => {\n const xScale = useXAxisScale();\n const yScale = useYAxisScale();\n\n if (!xScale || !yScale) return null;\n\n return (\n <g>\n {data.map(point => {\n const xStart = xScale(point.date, { position: 'start' });\n const xEnd = xScale(point.date, { position: 'end' });\n const yHigh = yScale(point.high);\n const yLow = yScale(point.low);\n const yOpen = yScale(point.open);\n const yClose = yScale(point.close);\n if (xStart === undefined || xEnd === undefined || yHigh === undefined || yLow === undefined || yOpen === undefined || yClose === undefined) {\n return null;\n }\n\n const bandWidth = xEnd - xStart;\n const bodyWidth = Math.max(bandWidth * 0.6, 2);\n const xCenter = xStart + bandWidth / 2;\n const color = getDirectionColor(point.close, point.open, { up: upColor, down: downColor });\n const bodyTop = Math.min(yOpen, yClose);\n const bodyHeight = Math.max(Math.abs(yClose - yOpen), 1);\n\n return (\n <g key={`${point.date}`}>\n <line x1={xCenter} x2={xCenter} y1={yHigh} y2={yLow} stroke={color} strokeWidth={1} />\n <rect x={xCenter - bodyWidth / 2} y={bodyTop} width={bodyWidth} height={bodyHeight} fill={color} />\n </g>\n );\n })}\n </g>\n );\n};\n\nexport type CandlestickChartProps = BaseChartProps & {\n data: OHLCPoint[];\n /** Series label used in the theme config. Defaults to `'Price'`. */\n label?: string;\n upColor?: string;\n downColor?: string;\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showGrid?: boolean;\n};\n\n/**\n * A stock candlestick chart — open/high/low/close per period, green/red bodies, high-low wicks.\n * Recharts has no native candlestick type, so bodies and wicks are drawn against the chart's\n * computed axis scales via `useXAxisScale`/`useYAxisScale` (recharts v3).\n *\n * @example\n * ```tsx\n * import { CandlestickChart } from '@customafk/lunas-ui/features/charts';\n *\n * <CandlestickChart\n * data={[\n * { date: '2026-06-01', open: 140, high: 146.2, low: 138.5, close: 144.9 },\n * { date: '2026-06-02', open: 144.9, high: 145.6, low: 141.2, close: 142.1 },\n * ]}\n * />\n * ```\n */\nexport const CandlestickChart = ({\n data,\n label = 'Price',\n upColor = 'var(--success)',\n downColor = 'var(--danger)',\n valueFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showGrid = true,\n className,\n animate = true,\n height,\n}: CandlestickChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ close: { label, color: upColor } }), [label, upColor]);\n\n const yDomain = useMemo<[number, number]>(() => {\n if (data.length === 0) return [0, 1];\n const min = Math.min(...data.map(point => point.low));\n const max = Math.max(...data.map(point => point.high));\n const padding = (max - min) * 0.08 || Math.max(max, 1) * 0.08;\n return [min - padding, max + padding];\n }, [data]);\n\n return (\n <ChartContainer\n data-slot=\"candlestick-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ComposedChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis domain={yDomain} tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideIndicator\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(_value, _name, item) => {\n const point = item.payload as OHLCPoint;\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"text-muted\">\n O <span className=\"font-number text-text-positive-strong\">{valueFormatter(point.open)}</span> H{' '}\n <span className=\"font-number text-text-positive-strong\">{valueFormatter(point.high)}</span>\n </span>\n <span className=\"text-muted\">\n L <span className=\"font-number text-text-positive-strong\">{valueFormatter(point.low)}</span> C{' '}\n <span className=\"font-number text-text-positive-strong\">{valueFormatter(point.close)}</span>\n </span>\n </div>\n );\n }}\n />\n }\n />\n {/* Invisible series so the Tooltip has a graphical item to attach to; payload still carries the full OHLC row. */}\n <Bar dataKey=\"close\" fill=\"transparent\" isAnimationActive={animate} />\n <CandlestickSeries data={data} upColor={upColor} downColor={downColor} />\n </ComposedChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Funnel, FunnelChart, LabelList } from 'recharts';\nimport type { BaseChartProps, NamedValue } from '../types';\nimport { formatCompactNumber, formatPercent, getChartColor } from '../utils';\n\nexport type FunnelStage = NamedValue & {\n /** Config key; derived from `name` when omitted. */\n key?: string;\n color?: string;\n};\n\nexport type ConversionFunnelChartProps = BaseChartProps & {\n /** Funnel stages ordered top (widest) to bottom. */\n data: FunnelStage[];\n /** Appends each stage's percentage of the first stage. Defaults to `true`. */\n showConversionRates?: boolean;\n valueFormatter?: (value: number) => string;\n};\n\n/**\n * A conversion funnel for the ecommerce purchase journey — sessions, product views, carts,\n * checkouts, purchases — with per-stage conversion rates against the first stage.\n *\n * @example\n * ```tsx\n * import { ConversionFunnelChart } from '@customafk/lunas-ui/features/charts';\n *\n * <ConversionFunnelChart\n * data={[\n * { name: 'Sessions', value: 50000 },\n * { name: 'Product views', value: 32000 },\n * { name: 'Added to cart', value: 8400 },\n * { name: 'Purchased', value: 2900 },\n * ]}\n * />\n * ```\n */\nexport const ConversionFunnelChart = ({\n data,\n showConversionRates = true,\n valueFormatter = formatCompactNumber,\n className,\n animate = true,\n height,\n}: ConversionFunnelChartProps) => {\n const { chartData, config } = useMemo(() => {\n const first = data[0]?.value ?? 0;\n const entries = data.map((stage, index) => {\n const rate = first === 0 ? 0 : stage.value / first;\n const valueLabel = showConversionRates ? `${valueFormatter(stage.value)} (${formatPercent(rate)})` : valueFormatter(stage.value);\n return {\n ...stage,\n key: stage.key || stage.name.toLowerCase().replace(/[^a-z0-9]+/g, '-'),\n fill: stage.color || getChartColor(index),\n valueLabel,\n };\n });\n const chartConfig: ChartConfig = Object.fromEntries(entries.map(entry => [entry.key, { label: entry.name, color: entry.fill }]));\n return { chartData: entries, config: chartConfig };\n }, [data, showConversionRates, valueFormatter]);\n\n return (\n <ChartContainer\n data-slot=\"conversion-funnel-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <FunnelChart margin={{ top: 8, right: 120, bottom: 8, left: 120 }}>\n <ChartTooltip content={<ChartTooltipContent nameKey=\"key\" hideLabel />} />\n <Funnel dataKey=\"value\" data={chartData} isAnimationActive={animate}>\n <LabelList dataKey=\"name\" position=\"left\" offset={12} className=\"fill-muted-strong\" fontSize={12} />\n <LabelList dataKey=\"valueLabel\" position=\"right\" offset={12} className=\"fill-text-positive-strong font-number\" fontSize={12} />\n </Funnel>\n </FunnelChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { CartesianGrid, Scatter, ScatterChart, XAxis, YAxis, ZAxis } from 'recharts';\nimport type { BaseChartProps, ScatterPoint } from '../types';\n\nexport type CorrelationScatterChartProps = BaseChartProps & {\n data: ScatterPoint[];\n /** Series label used in the theme config. Defaults to `'Points'`. */\n label?: string;\n color?: string;\n xLabel?: string;\n yLabel?: string;\n xFormatter?: (value: number) => string;\n yFormatter?: (value: number) => string;\n /** Sizes each point from its `z` value. Defaults to `false`. */\n showBubbleSize?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A scatter (or bubble, with `showBubbleSize`) chart for correlating two metrics, with an\n * optional third dimension mapped to point size.\n *\n * @example\n * ```tsx\n * import { CorrelationScatterChart } from '@customafk/lunas-ui/features/charts';\n *\n * <CorrelationScatterChart\n * data={[\n * { x: 12, y: 4200, z: 40, name: 'Product A' },\n * { x: 18, y: 5100, z: 65, name: 'Product B' },\n * ]}\n * xLabel=\"Price ($)\"\n * yLabel=\"Units sold\"\n * showBubbleSize\n * />\n * ```\n */\nexport const CorrelationScatterChart = ({\n data,\n label = 'Points',\n color = 'var(--chart-1)',\n xLabel,\n yLabel,\n xFormatter = value => value.toLocaleString('en-US'),\n yFormatter = value => value.toLocaleString('en-US'),\n showBubbleSize = false,\n showGrid = true,\n className,\n animate = true,\n height,\n}: CorrelationScatterChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ y: { label, color } }), [label, color]);\n\n return (\n <ChartContainer\n data-slot=\"correlation-scatter-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ScatterChart margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid />}\n <XAxis type=\"number\" dataKey=\"x\" name={xLabel} tickLine={false} axisLine={false} tickMargin={8} tickFormatter={xFormatter} />\n <YAxis type=\"number\" dataKey=\"y\" name={yLabel} tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={yFormatter} />\n {showBubbleSize && <ZAxis type=\"number\" dataKey=\"z\" range={[64, 400]} />}\n <ChartTooltip\n cursor={{ strokeDasharray: '3 3' }}\n content={\n <ChartTooltipContent\n hideLabel\n formatter={(_value, _name, item) => {\n const point = item.payload as ScatterPoint;\n return (\n <div className=\"grid gap-0.5\">\n {point.name && <span className=\"font-medium text-muted-strong\">{point.name}</span>}\n <span className=\"text-muted\">\n {xLabel || 'x'}: <span className=\"font-medium font-number text-text-positive-strong\">{xFormatter(point.x)}</span>\n </span>\n <span className=\"text-muted\">\n {yLabel || 'y'}: <span className=\"font-medium font-number text-text-positive-strong\">{yFormatter(point.y)}</span>\n </span>\n </div>\n );\n }}\n />\n }\n />\n <Scatter data={data} fill={color} isAnimationActive={animate} />\n </ScatterChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Label, Pie, PieChart } from 'recharts';\nimport type { BaseChartProps, NamedValue } from '../types';\nimport { formatCompactNumber, getChartColor } from '../utils';\n\nexport type DonutChartSegment = NamedValue & {\n /** Config key; derived from `name` when omitted. */\n key?: string;\n color?: string;\n};\n\nexport type DonutChartProps = BaseChartProps & {\n data: DonutChartSegment[];\n /** Text under the center total, e.g. `'Total sales'`. */\n centerLabel?: string;\n /** Formats the center total. Defaults to compact notation. */\n centerValueFormatter?: (total: number) => string;\n /** Overrides the computed segment sum shown in the center. */\n totalValue?: number;\n showLegend?: boolean;\n showCenterTotal?: boolean;\n};\n\nconst toKey = (segment: DonutChartSegment): string => segment.key || segment.name.toLowerCase().replace(/[^a-z0-9]+/g, '-');\n\n/**\n * A donut breakdown chart with a center total — category sales, traffic sources, payment methods.\n *\n * @example\n * ```tsx\n * import { DonutChart } from '@customafk/lunas-ui/features/charts';\n *\n * <DonutChart\n * data={[\n * { name: 'Fashion', value: 12400 },\n * { name: 'Electronics', value: 8200 },\n * ]}\n * centerLabel=\"Total sales\"\n * />\n * ```\n */\nexport const DonutChart = ({\n data,\n centerLabel,\n centerValueFormatter = formatCompactNumber,\n totalValue,\n showLegend = true,\n showCenterTotal = true,\n className,\n animate = true,\n height,\n}: DonutChartProps) => {\n const { chartData, config, total } = useMemo(() => {\n const entries = data.map((segment, index) => ({\n ...segment,\n key: toKey(segment),\n fill: segment.color || getChartColor(index),\n }));\n const chartConfig: ChartConfig = Object.fromEntries(entries.map(entry => [entry.key, { label: entry.name, color: entry.fill }]));\n return {\n chartData: entries,\n config: chartConfig,\n total: totalValue ?? data.reduce((sum, segment) => sum + segment.value, 0),\n };\n }, [data, totalValue]);\n\n return (\n <ChartContainer\n data-slot=\"donut-chart\"\n config={config}\n className={cn('mx-auto', height === undefined && 'aspect-square', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <PieChart>\n <ChartTooltip cursor={false} content={<ChartTooltipContent nameKey=\"key\" hideLabel />} />\n <Pie data={chartData} dataKey=\"value\" nameKey=\"key\" innerRadius=\"60%\" strokeWidth={5} isAnimationActive={animate}>\n {showCenterTotal && (\n <Label\n content={({ viewBox }) => {\n if (!viewBox || !('cx' in viewBox) || !('cy' in viewBox)) return null;\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\" dominantBaseline=\"middle\">\n <tspan x={viewBox.cx} y={viewBox.cy} className=\"fill-text-positive-strong font-number text-2xl font-bold\">\n {centerValueFormatter(total)}\n </tspan>\n {centerLabel && (\n <tspan x={viewBox.cx} y={(viewBox.cy || 0) + 22} className=\"fill-muted text-xs\">\n {centerLabel}\n </tspan>\n )}\n </text>\n );\n }}\n />\n )}\n </Pie>\n {showLegend && <ChartLegend content={<ChartLegendContent nameKey=\"key\" />} />}\n </PieChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, CartesianGrid, Rectangle, ReferenceLine, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, NamedValue } from '../types';\nimport { formatSignedPercent, getDirectionColor } from '../utils';\n\nexport type GainLossBarChartProps = BaseChartProps & {\n /** `name` is the period label (e.g. a month or quarter); `value` is the signed return. */\n data: NamedValue[];\n /** Series label. Defaults to `'Return'`. */\n label?: string;\n upColor?: string;\n downColor?: string;\n /** Formats tooltip and Y-axis values. Defaults to a signed percentage. */\n valueFormatter?: (value: number) => string;\n showGrid?: boolean;\n};\n\n/**\n * Diverging bars for period returns — bars grow up (gain) or down (loss) from a zero baseline,\n * colored accordingly. Clearer than a plain bar chart for signed data.\n *\n * @example\n * ```tsx\n * import { GainLossBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <GainLossBarChart\n * data={[\n * { name: 'Jan', value: 0.032 },\n * { name: 'Feb', value: -0.014 },\n * ]}\n * />\n * ```\n */\nexport const GainLossBarChart = ({\n data,\n label = 'Return',\n upColor = 'var(--success)',\n downColor = 'var(--danger)',\n valueFormatter = value => formatSignedPercent(value),\n showGrid = true,\n className,\n animate = true,\n height,\n}: GainLossBarChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ value: { label, color: upColor } }), [label, upColor]);\n\n return (\n <ChartContainer\n data-slot=\"gain-loss-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"name\" tickLine={false} axisLine={false} tickMargin={8} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={56} tickFormatter={valueFormatter} />\n <ReferenceLine y={0} stroke=\"var(--border)\" />\n <ChartTooltip cursor={false} content={<ChartTooltipContent hideIndicator formatter={value => valueFormatter(Number(value))} />} />\n <Bar\n dataKey=\"value\"\n isAnimationActive={animate}\n shape={props => <Rectangle {...props} fill={getDirectionColor(Number(props.payload?.value ?? 0), 0, { up: upColor, down: downColor })} />}\n />\n </BarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { CartesianGrid, Line, LineChart, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, ChartSeries } from '../types';\nimport { computeIndexedSeries, formatSignedPercent, getChartColor, toDateLabel } from '../utils';\n\nexport type IndexedPerformanceLineChartProps = BaseChartProps & {\n data: Array<{ date: string | Date } & Record<string, unknown>>;\n /** One entry per instrument/fund to compare. */\n series: ChartSeries[];\n /** The value every series is normalized to at its first data point. Defaults to `100`. */\n base?: number;\n /** Formats tooltip and Y-axis values. Defaults to signed % change from `base`. */\n valueFormatter?: (indexedValue: number, base: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A multi-line chart normalizing several instruments to a common base (default 100) at the\n * start of the period, so relative performance is directly comparable regardless of price scale.\n *\n * @example\n * ```tsx\n * import { IndexedPerformanceLineChart } from '@customafk/lunas-ui/features/charts';\n *\n * <IndexedPerformanceLineChart\n * data={[\n * { date: '2026-06-01', aapl: 142.5, spy: 512.1 },\n * { date: '2026-06-02', aapl: 145.1, spy: 515.8 },\n * ]}\n * series={[\n * { key: 'aapl', label: 'AAPL' },\n * { key: 'spy', label: 'S&P 500' },\n * ]}\n * />\n * ```\n */\nexport const IndexedPerformanceLineChart = ({\n data,\n series,\n base = 100,\n valueFormatter = (indexedValue, indexBase) => formatSignedPercent(indexedValue / indexBase - 1),\n dateFormatter = toDateLabel,\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: IndexedPerformanceLineChartProps) => {\n const seriesKeys = useMemo(() => series.map(item => item.key), [series]);\n\n const chartData = useMemo(() => computeIndexedSeries(data, seriesKeys, base), [data, seriesKeys, base]);\n\n const config = useMemo<ChartConfig>(\n () => Object.fromEntries(series.map((item, index) => [item.key, { label: item.label, color: item.color || getChartColor(index) }])),\n [series]\n );\n\n return (\n <ChartContainer\n data-slot=\"indexed-performance-line-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <LineChart data={chartData} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n width={56}\n domain={['auto', 'auto']}\n tickFormatter={value => valueFormatter(Number(value), base)}\n />\n <ChartTooltip\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"ml-auto font-medium font-number text-text-positive-strong tabular-nums\">{valueFormatter(Number(value), base)}</span>\n </>\n )}\n />\n }\n />\n {series.map((item, index) => (\n <Line\n key={item.key}\n type=\"natural\"\n dataKey={item.key}\n stroke={item.color || getChartColor(index)}\n strokeWidth={2}\n dot={false}\n isAnimationActive={animate}\n />\n ))}\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </LineChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { PolarAngleAxis, PolarGrid, PolarRadiusAxis, Radar, RadarChart } from 'recharts';\nimport type { BaseChartProps, ChartSeries } from '../types';\nimport { getChartColor } from '../utils';\n\nexport type MetricRadarChartProps = BaseChartProps & {\n data: Array<{ metric: string } & Record<string, unknown>>;\n /** One entry per entity being compared (e.g. a candidate, a product, a team). */\n series: ChartSeries[];\n valueFormatter?: (value: number) => string;\n /** Radius-axis domain. Defaults to `['auto', 'auto']`. */\n domain?: [number | 'auto', number | 'auto'];\n showLegend?: boolean;\n};\n\n/**\n * A radar chart comparing one or more entities across several metrics/dimensions — performance\n * review scores, feature comparisons, skill matrices.\n *\n * @example\n * ```tsx\n * import { MetricRadarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <MetricRadarChart\n * data={[\n * { metric: 'Speed', teamA: 80, teamB: 65 },\n * { metric: 'Quality', teamA: 70, teamB: 90 },\n * { metric: 'Cost', teamA: 60, teamB: 75 },\n * ]}\n * series={[\n * { key: 'teamA', label: 'Team A' },\n * { key: 'teamB', label: 'Team B' },\n * ]}\n * />\n * ```\n */\nexport const MetricRadarChart = ({\n data,\n series,\n valueFormatter = value => value.toLocaleString('en-US'),\n domain = ['auto', 'auto'],\n showLegend = true,\n className,\n animate = true,\n height,\n}: MetricRadarChartProps) => {\n const config = useMemo<ChartConfig>(\n () => Object.fromEntries(series.map((item, index) => [item.key, { label: item.label, color: item.color || getChartColor(index) }])),\n [series]\n );\n\n return (\n <ChartContainer\n data-slot=\"metric-radar-chart\"\n config={config}\n className={cn('mx-auto', height === undefined && 'aspect-square', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <RadarChart data={data}>\n <PolarGrid />\n <PolarAngleAxis dataKey=\"metric\" tick={{ fontSize: 12 }} />\n <PolarRadiusAxis domain={domain} tick={false} axisLine={false} />\n <ChartTooltip content={<ChartTooltipContent formatter={value => valueFormatter(Number(value))} />} />\n {series.map((item, index) => {\n const color = item.color || getChartColor(index);\n return <Radar key={item.key} dataKey={item.key} stroke={color} fill={color} fillOpacity={0.25} isAnimationActive={animate} />;\n })}\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </RadarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, CartesianGrid, ReferenceLine, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps } from '../types';\n\nexport type MirroredBarRow = {\n category: string;\n left: number;\n right: number;\n};\n\nexport type MirroredBarChartProps = BaseChartProps & {\n data: MirroredBarRow[];\n leftLabel?: string;\n rightLabel?: string;\n leftColor?: string;\n rightColor?: string;\n valueFormatter?: (value: number) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A two-sided horizontal bar comparison (population-pyramid style) — this period vs. last\n * period, male vs. female, before vs. after — mirrored around a shared zero baseline.\n *\n * @example\n * ```tsx\n * import { MirroredBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <MirroredBarChart\n * data={[\n * { category: '18-24', left: 1200, right: 1400 },\n * { category: '25-34', left: 2600, right: 2100 },\n * ]}\n * leftLabel=\"Male\"\n * rightLabel=\"Female\"\n * />\n * ```\n */\nexport const MirroredBarChart = ({\n data,\n leftLabel = 'Left',\n rightLabel = 'Right',\n leftColor = 'var(--chart-1)',\n rightColor = 'var(--chart-4)',\n valueFormatter = value => value.toLocaleString('en-US'),\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: MirroredBarChartProps) => {\n const config = useMemo<ChartConfig>(\n () => ({ left: { label: leftLabel, color: leftColor }, right: { label: rightLabel, color: rightColor } }),\n [leftLabel, leftColor, rightLabel, rightColor]\n );\n\n const chartData = useMemo(() => data.map(row => ({ category: row.category, left: -row.left, right: row.right, originalLeft: row.left })), [data]);\n\n const axisFormatter = (value: number) => valueFormatter(Math.abs(value));\n\n return (\n <ChartContainer\n data-slot=\"mirrored-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={chartData} layout=\"vertical\" margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid horizontal={false} />}\n <XAxis type=\"number\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={axisFormatter} />\n <YAxis type=\"category\" dataKey=\"category\" tickLine={false} axisLine={false} tickMargin={8} width={64} />\n <ReferenceLine x={0} stroke=\"var(--border)\" />\n <ChartTooltip\n content={\n <ChartTooltipContent\n formatter={(value, name, item) => {\n const isLeft = name === 'left';\n const rawValue = isLeft ? item.payload.originalLeft : Number(value);\n return (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{isLeft ? leftLabel : rightLabel}</span>\n <span className=\"ml-auto font-medium font-number text-text-positive-strong tabular-nums\">{valueFormatter(rawValue)}</span>\n </>\n );\n }}\n />\n }\n />\n <Bar dataKey=\"left\" fill={leftColor} radius={[4, 0, 0, 4]} isAnimationActive={animate} />\n <Bar dataKey=\"right\" fill={rightColor} radius={[0, 4, 4, 0]} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </BarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, CartesianGrid, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, ChartSeries } from '../types';\nimport { getChartColor, toDateLabel } from '../utils';\n\nexport type OrdersBarChartProps = BaseChartProps & {\n data: Array<{ date: string | Date } & Record<string, unknown>>;\n /** Simple mode: the key holding each period's count. Defaults to `'orders'`. */\n dataKey?: string;\n /** Series label in simple mode. Defaults to `'Orders'`. */\n label?: string;\n /** Stacked mode: one series per order status; each `key` indexes into the data rows. */\n statuses?: ChartSeries[];\n color?: string;\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n /** Defaults to `true` when `statuses` is provided. */\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A bar chart for order volume per period — a single series by default, or stacked by order\n * status when `statuses` is provided.\n *\n * @example\n * ```tsx\n * import { OrdersBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <OrdersBarChart\n * data={[{ date: '2026-06-01', completed: 32, pending: 6, cancelled: 2 }]}\n * statuses={[\n * { key: 'completed', label: 'Completed' },\n * { key: 'pending', label: 'Pending' },\n * { key: 'cancelled', label: 'Cancelled' },\n * ]}\n * />\n * ```\n */\nexport const OrdersBarChart = ({\n data,\n dataKey = 'orders',\n label = 'Orders',\n statuses,\n color = 'var(--chart-1)',\n valueFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showLegend = !!statuses,\n showGrid = true,\n className,\n animate = true,\n height,\n}: OrdersBarChartProps) => {\n const config = useMemo<ChartConfig>(() => {\n if (!statuses) return { [dataKey]: { label, color } };\n return Object.fromEntries(statuses.map((status, index) => [status.key, { label: status.label, color: status.color || getChartColor(index) }]));\n }, [statuses, dataKey, label, color]);\n\n return (\n <ChartContainer\n data-slot=\"orders-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={48} allowDecimals={false} tickFormatter={valueFormatter} />\n <ChartTooltip\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n />\n }\n />\n {statuses ? (\n statuses.map((status, index) => (\n <Bar\n key={status.key}\n dataKey={status.key}\n stackId=\"orders\"\n fill={status.color || getChartColor(index)}\n radius={index === statuses.length - 1 ? [4, 4, 0, 0] : [0, 0, 0, 0]}\n isAnimationActive={animate}\n />\n ))\n ) : (\n <Bar dataKey={dataKey} fill={color} radius={[4, 4, 0, 0]} isAnimationActive={animate} />\n )}\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </BarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport type { TreemapNode } from 'recharts';\nimport { Treemap } from 'recharts';\nimport type { BaseChartProps, PortfolioHolding } from '../types';\nimport { formatCompactNumber, getChartColor } from '../utils';\n\nexport type PortfolioAllocationTreemapProps = BaseChartProps & {\n data: PortfolioHolding[];\n valueFormatter?: (value: number) => string;\n /** Shows the holding name and formatted value inside each rect when it fits. Defaults to `true`. */\n showLabels?: boolean;\n};\n\nconst toKey = (holding: PortfolioHolding): string => holding.key || holding.name.toLowerCase().replace(/[^a-z0-9]+/g, '-');\n\n/**\n * A treemap for portfolio holdings / asset allocation, sized by weight — clearer than a donut\n * once there are more than a handful of positions.\n *\n * @example\n * ```tsx\n * import { PortfolioAllocationTreemap } from '@customafk/lunas-ui/features/charts';\n *\n * <PortfolioAllocationTreemap\n * data={[\n * { name: 'AAPL', value: 24000 },\n * { name: 'MSFT', value: 18500 },\n * { name: 'Bonds', value: 12000 },\n * ]}\n * />\n * ```\n */\nexport const PortfolioAllocationTreemap = ({\n data,\n valueFormatter = formatCompactNumber,\n showLabels = true,\n className,\n animate = true,\n height,\n}: PortfolioAllocationTreemapProps) => {\n const { chartData, config } = useMemo(() => {\n const entries = data.map((holding, index) => ({\n ...holding,\n key: toKey(holding),\n fill: holding.color || getChartColor(index),\n }));\n const chartConfig: ChartConfig = Object.fromEntries(entries.map(entry => [entry.key, { label: entry.name, color: entry.fill }]));\n return { chartData: entries, config: chartConfig };\n }, [data]);\n\n const renderContent = (node: TreemapNode) => {\n if (node.depth !== 1) return <g />;\n const holding = chartData.find(entry => entry.key === node.name);\n const fitsLabel = showLabels && node.width >= 36 && node.height >= 24;\n\n return (\n <g>\n <rect x={node.x} y={node.y} width={node.width} height={node.height} fill={holding?.fill} stroke=\"var(--background)\" />\n {fitsLabel && (\n <text x={node.x + 6} y={node.y + 16} className=\"fill-white font-medium text-xs\">\n {holding?.name}\n </text>\n )}\n {fitsLabel && node.height > 40 && (\n <text x={node.x + 6} y={node.y + 32} className=\"fill-white/80 font-number text-[11px]\">\n {valueFormatter(node.value)}\n </text>\n )}\n </g>\n );\n };\n\n return (\n <ChartContainer\n data-slot=\"portfolio-allocation-treemap\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <Treemap data={chartData} dataKey=\"value\" nameKey=\"key\" isAnimationActive={animate} content={renderContent}>\n <ChartTooltip content={<ChartTooltipContent nameKey=\"key\" hideLabel formatter={value => valueFormatter(Number(value))} />} />\n </Treemap>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Area, CartesianGrid, ComposedChart, Line, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, OHLCPoint } from '../types';\nimport { toDateLabel } from '../utils';\n\nexport type PriceRangeAreaChartProps = BaseChartProps & {\n /** Only `date`, `high`, `low`, and `close` are used; pass the same rows given to `CandlestickChart`. */\n data: Array<Pick<OHLCPoint, 'date' | 'high' | 'low' | 'close'>>;\n /** Close-price series label. Defaults to `'Close'`. */\n label?: string;\n /** High-low band label. Defaults to `'Range'`. */\n rangeLabel?: string;\n color?: string;\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showGrid?: boolean;\n};\n\n/**\n * A shaded high-low trading-range band with the close price drawn on top — the daily range is\n * visible at a glance alongside the closing trend.\n *\n * @example\n * ```tsx\n * import { PriceRangeAreaChart } from '@customafk/lunas-ui/features/charts';\n *\n * <PriceRangeAreaChart\n * data={[{ date: '2026-06-01', high: 146.2, low: 141.8, close: 144.9 }]}\n * />\n * ```\n */\nexport const PriceRangeAreaChart = ({\n data,\n label = 'Close',\n rangeLabel = 'Range',\n color = 'var(--chart-1)',\n valueFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showGrid = true,\n className,\n animate = true,\n height,\n}: PriceRangeAreaChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ close: { label, color }, rangeSpan: { label: rangeLabel, color } }), [label, color, rangeLabel]);\n\n const chartData = useMemo(() => data.map(point => ({ ...point, rangeSpan: point.high - point.low })), [data]);\n\n return (\n <ChartContainer\n data-slot=\"price-range-area-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ComposedChart data={chartData} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis domain={['auto', 'auto']} tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => {\n if (name !== 'close') return null;\n const point = item.payload as { high: number; low: number };\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"text-muted\">\n {config.close?.label} <span className=\"font-medium font-number text-text-positive-strong\">{valueFormatter(Number(value))}</span>\n </span>\n <span className=\"text-[11px] text-muted\">\n {valueFormatter(point.low)} – {valueFormatter(point.high)}\n </span>\n </div>\n );\n }}\n />\n }\n />\n <Area dataKey=\"low\" stackId=\"range\" stroke=\"none\" fill=\"transparent\" isAnimationActive={animate} />\n <Area dataKey=\"rangeSpan\" stackId=\"range\" stroke=\"none\" fill={color} fillOpacity={0.15} isAnimationActive={animate} />\n <Line type=\"natural\" dataKey=\"close\" stroke={color} strokeWidth={2} dot={false} isAnimationActive={animate} />\n </ComposedChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useId, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, TimeSeriesPoint } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueAreaChartProps = BaseChartProps & {\n data: TimeSeriesPoint[];\n /** Series label. Defaults to `'Revenue'`. */\n label?: string;\n /** Comparison series label. Defaults to `'Previous period'`. */\n comparisonLabel?: string;\n /** Renders `previousValue` as a second, muted area series. */\n showComparison?: boolean;\n color?: string;\n comparisonColor?: string;\n /** Formats tooltip and Y-axis values. Defaults to compact currency. */\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n /** Defaults to `showComparison`. */\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A gradient area chart for revenue (or any currency metric) over time, with an optional\n * previous-period comparison series.\n *\n * @example\n * ```tsx\n * import { RevenueAreaChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueAreaChart\n * data={[\n * { date: '2026-06-01', value: 4200, previousValue: 3800 },\n * { date: '2026-06-02', value: 5100, previousValue: 4300 },\n * ]}\n * showComparison\n * />\n * ```\n */\nexport const RevenueAreaChart = ({\n data,\n label = 'Revenue',\n comparisonLabel = 'Previous period',\n showComparison = false,\n color = 'var(--chart-1)',\n comparisonColor = 'var(--chart-8)',\n valueFormatter = value => formatCurrency(value),\n dateFormatter = toDateLabel,\n showLegend = showComparison,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueAreaChartProps) => {\n const gradientId = useId();\n\n const config = useMemo<ChartConfig>(\n () => ({\n value: { label, color },\n ...(showComparison ? { previousValue: { label: comparisonLabel, color: comparisonColor } } : {}),\n }),\n [label, color, showComparison, comparisonLabel, comparisonColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-area-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <AreaChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n <defs>\n <linearGradient id={`${gradientId}-value`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={color} stopOpacity={0.6} />\n <stop offset=\"95%\" stopColor={color} stopOpacity={0.05} />\n </linearGradient>\n <linearGradient id={`${gradientId}-previous`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={comparisonColor} stopOpacity={0.3} />\n <stop offset=\"95%\" stopColor={comparisonColor} stopOpacity={0.02} />\n </linearGradient>\n </defs>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">{valueFormatter(Number(value))}</span>\n </>\n )}\n />\n }\n />\n {showComparison && (\n <Area\n type=\"natural\"\n dataKey=\"previousValue\"\n stroke={comparisonColor}\n strokeWidth={2}\n strokeDasharray=\"4 4\"\n fill={`url(#${gradientId}-previous)`}\n isAnimationActive={animate}\n />\n )}\n <Area type=\"natural\" dataKey=\"value\" stroke={color} strokeWidth={2} fill={`url(#${gradientId}-value)`} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </AreaChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, CartesianGrid, ComposedChart, Line, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatCurrency, toDateLabel } from '../utils';\n\nexport type RevenueOrdersPoint = {\n date: string | Date;\n revenue: number;\n orders: number;\n};\n\nexport type RevenueOrdersComposedChartProps = BaseChartProps & {\n data: RevenueOrdersPoint[];\n revenueLabel?: string;\n ordersLabel?: string;\n revenueColor?: string;\n ordersColor?: string;\n /** Formats the left (revenue) axis and tooltip values. Defaults to compact currency. */\n revenueFormatter?: (value: number) => string;\n /** Formats the right (orders) axis and tooltip values. */\n ordersFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A dual-axis chart combining revenue bars (left axis, currency) with an orders line\n * (right axis, count) to correlate the two metrics per period.\n *\n * @example\n * ```tsx\n * import { RevenueOrdersComposedChart } from '@customafk/lunas-ui/features/charts';\n *\n * <RevenueOrdersComposedChart\n * data={[{ date: '2026-06-01', revenue: 12400, orders: 87 }]}\n * />\n * ```\n */\nexport const RevenueOrdersComposedChart = ({\n data,\n revenueLabel = 'Revenue',\n ordersLabel = 'Orders',\n revenueColor = 'var(--chart-1)',\n ordersColor = 'var(--chart-4)',\n revenueFormatter = value => formatCurrency(value),\n ordersFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: RevenueOrdersComposedChartProps) => {\n const config = useMemo<ChartConfig>(\n () => ({\n revenue: { label: revenueLabel, color: revenueColor },\n orders: { label: ordersLabel, color: ordersColor },\n }),\n [revenueLabel, revenueColor, ordersLabel, ordersColor]\n );\n\n return (\n <ChartContainer\n data-slot=\"revenue-orders-composed-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <ComposedChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis yAxisId=\"revenue\" tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={revenueFormatter} />\n <YAxis\n yAxisId=\"orders\"\n orientation=\"right\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n width={48}\n allowDecimals={false}\n tickFormatter={ordersFormatter}\n />\n <ChartTooltip\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={(value, name, item) => (\n <>\n <div className=\"size-2.5 shrink-0 rounded-[2px]\" style={{ backgroundColor: item.color }} />\n <span className=\"text-muted\">{config[String(name)]?.label || name}</span>\n <span className=\"text-text-positive-strong font-number ml-auto font-medium tabular-nums\">\n {name === 'revenue' ? revenueFormatter(Number(value)) : ordersFormatter(Number(value))}\n </span>\n </>\n )}\n />\n }\n />\n <Bar dataKey=\"revenue\" yAxisId=\"revenue\" fill={revenueColor} radius={[4, 4, 0, 0]} isAnimationActive={animate} />\n <Line type=\"natural\" dataKey=\"orders\" yAxisId=\"orders\" stroke={ordersColor} strokeWidth={2} dot={false} isAnimationActive={animate} />\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </ComposedChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer } from '@/components/ui/chart';\n\nimport { Label, PolarAngleAxis, PolarRadiusAxis, RadialBar, RadialBarChart } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { formatPercent } from '../utils';\n\nexport type SalesTargetRadialChartProps = BaseChartProps & {\n /** Current progress value, e.g. revenue to date. */\n value: number;\n /** The goal the value is measured against. */\n target: number;\n /** Text under the center figure. Defaults to `'Target'`. */\n label?: string;\n /** Formats the center figure. Defaults to percent-of-target. */\n valueFormatter?: (value: number, target: number) => string;\n color?: string;\n};\n\n/**\n * A radial gauge showing progress toward a sales target with the completion figure in the center.\n *\n * @example\n * ```tsx\n * import { SalesTargetRadialChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SalesTargetRadialChart value={65_000} target={100_000} label=\"Monthly target\" />\n * ```\n */\nexport const SalesTargetRadialChart = ({\n value,\n target,\n label = 'Target',\n valueFormatter = (current, goal) => formatPercent(goal === 0 ? 0 : current / goal),\n color = 'var(--chart-1)',\n className,\n animate = true,\n height,\n}: SalesTargetRadialChartProps) => {\n const chartData = useMemo(() => [{ name: 'progress', value: Math.min(Math.max(value, 0), target), fill: color }], [value, target, color]);\n\n const config = useMemo<ChartConfig>(() => ({ progress: { label, color } }), [label, color]);\n\n return (\n <ChartContainer\n data-slot=\"sales-target-radial-chart\"\n config={config}\n className={cn('mx-auto', height === undefined && 'aspect-square', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <RadialBarChart data={chartData} startAngle={90} endAngle={-270} innerRadius=\"75%\" outerRadius=\"100%\">\n <PolarAngleAxis type=\"number\" domain={[0, target]} angleAxisId={0} tick={false} />\n <RadialBar dataKey=\"value\" angleAxisId={0} background cornerRadius={10} isAnimationActive={animate} />\n <PolarRadiusAxis tick={false} tickLine={false} axisLine={false}>\n <Label\n content={({ viewBox }) => {\n if (!viewBox || !('cx' in viewBox) || !('cy' in viewBox)) return null;\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\" dominantBaseline=\"middle\">\n <tspan x={viewBox.cx} y={viewBox.cy} className=\"fill-text-positive-strong font-number text-3xl font-bold\">\n {valueFormatter(value, target)}\n </tspan>\n <tspan x={viewBox.cx} y={(viewBox.cy || 0) + 24} className=\"fill-muted text-xs\">\n {label}\n </tspan>\n </text>\n );\n }}\n />\n </PolarRadiusAxis>\n </RadialBarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { ChartContainer } from '@/components/ui/chart';\n\nimport type { SankeyLinkProps, SankeyNodeProps } from 'recharts';\nimport { Rectangle, Sankey } from 'recharts';\nimport type { BaseChartProps } from '../types';\nimport { getChartColor } from '../utils';\n\nexport type SankeyFlowNode = {\n name: string;\n color?: string;\n};\n\nexport type SankeyFlowLink = {\n /** Node name, matching an entry in `nodes`. */\n source: string;\n /** Node name, matching an entry in `nodes`. */\n target: string;\n value: number;\n};\n\nexport type SankeyFlowChartProps = BaseChartProps & {\n nodes: Array<SankeyFlowNode | string>;\n links: SankeyFlowLink[];\n valueFormatter?: (value: number) => string;\n nodeWidth?: number;\n nodePadding?: number;\n /** Minimum horizontal space reserved for node labels outside the plot area; grows to fit the longest root/leaf label. Defaults to `170`. */\n labelWidth?: number;\n};\n\n/**\n * A Sankey flow diagram — revenue/cost breakdowns, funnels with branching paths, budget\n * allocation — where band width is proportional to the flow value between named nodes.\n *\n * @example\n * ```tsx\n * import { SankeyFlowChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SankeyFlowChart\n * height={500}\n * nodes={['iPhone', 'Mac', 'Net Sales', 'Cost of Sales', 'Gross Profit']}\n * links={[\n * { source: 'iPhone', target: 'Net Sales', value: 205489 },\n * { source: 'Mac', target: 'Net Sales', value: 40177 },\n * { source: 'Net Sales', target: 'Cost of Sales', value: 223546 },\n * { source: 'Net Sales', target: 'Gross Profit', value: 170782 },\n * ]}\n * />\n * ```\n */\nconst estimateLabelWidth = (label: string): number => label.length * 5.6 + 14;\n\nexport const SankeyFlowChart = ({\n nodes,\n links,\n valueFormatter = value => value.toLocaleString('en-US'),\n nodeWidth = 14,\n nodePadding = 24,\n labelWidth = 170,\n className,\n animate = true,\n height,\n}: SankeyFlowChartProps) => {\n const { data, colorByName, effectiveLabelWidth, rootNames, leafNames } = useMemo(() => {\n const nodeList = nodes.map(node => (typeof node === 'string' ? { name: node } : node));\n const nameToIndex = new Map(nodeList.map((node, index) => [node.name, index]));\n const colors = new Map(nodeList.map((node, index) => [node.name, node.color || getChartColor(index)]));\n\n const sankeyLinks = links\n .map(link => ({ source: nameToIndex.get(link.source), target: nameToIndex.get(link.target), value: link.value }))\n .filter((link): link is { source: number; target: number; value: number } => link.source !== undefined && link.target !== undefined);\n\n // Computed from our own link list rather than trusting recharts' `payload.depth`/`sourceLinks`\n // at render time — the latter don't reliably flag terminal (leaf) nodes as such.\n const hasIncoming = new Set(sankeyLinks.map(link => link.target));\n const hasOutgoing = new Set(sankeyLinks.map(link => link.source));\n const roots = new Set(nodeList.filter((_, index) => !hasIncoming.has(index)).map(node => node.name));\n const leaves = new Set(nodeList.filter((_, index) => !hasOutgoing.has(index)).map(node => node.name));\n\n // Only root/leaf nodes get side labels using this margin; widen it to fit the longest one\n // so long names don't clip past the SVG edge.\n let maxWidth = labelWidth;\n nodeList.forEach((node, index) => {\n if (hasIncoming.has(index) && hasOutgoing.has(index)) return;\n const relatedValue = sankeyLinks.filter(link => link.source === index || link.target === index).reduce((sum, link) => sum + link.value, 0);\n maxWidth = Math.max(maxWidth, estimateLabelWidth(`${node.name}: ${valueFormatter(relatedValue)}`) + 16);\n });\n\n return { data: { nodes: nodeList, links: sankeyLinks }, colorByName: colors, effectiveLabelWidth: maxWidth, rootNames: roots, leafNames: leaves };\n }, [nodes, links, labelWidth, valueFormatter]);\n\n return (\n <ChartContainer\n data-slot=\"sankey-flow-chart\"\n config={{}}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <Sankey\n data={data}\n nodeWidth={nodeWidth}\n nodePadding={nodePadding}\n linkCurvature={0.45}\n margin={{ top: 28, right: effectiveLabelWidth, bottom: 8, left: effectiveLabelWidth }}\n node={(props: SankeyNodeProps) => {\n const { x, y, width, height: nodeHeight, payload } = props;\n const color = colorByName.get(payload.name) ?? 'var(--chart-1)';\n const isRoot = rootNames.has(payload.name);\n const isLeaf = leafNames.has(payload.name);\n const label = `${payload.name}: ${valueFormatter(payload.value)}`;\n const pillWidth = estimateLabelWidth(label);\n const pillHeight = 18;\n\n let textX: number;\n let textY: number;\n let textAnchor: 'start' | 'end' | 'middle';\n let pillX: number;\n let pillY: number;\n\n if (isRoot || isLeaf) {\n textAnchor = isRoot ? 'end' : 'start';\n textY = y + nodeHeight / 2;\n pillY = textY - pillHeight / 2;\n pillX = isRoot ? x - 8 - pillWidth : x + width + 8;\n textX = isRoot ? pillX + pillWidth - 6 : pillX + 6;\n } else {\n // Intermediate nodes label above the bar (not beside it) so chained, closely-spaced\n // depth columns never collide sideways. Consecutive depths are additionally staggered\n // to two alternating heights (zigzag) — when almost all of a node's value passes\n // straight through to the next depth (e.g. Operating Income -> Profit before tax),\n // both nodes land at nearly the same y, so same-height labels would still overlap.\n textAnchor = 'middle';\n textY = payload.depth % 2 === 0 ? y - 10 : y - 30;\n pillY = textY - pillHeight + 4;\n pillX = x + width / 2 - pillWidth / 2;\n textX = x + width / 2;\n }\n\n return (\n <g>\n <Rectangle\n className=\"recharts-sankey-node\"\n x={x}\n y={y}\n width={width}\n height={nodeHeight}\n fill={color}\n stroke=\"var(--background)\"\n strokeWidth={1.5}\n isAnimationActive={animate}\n />\n <rect x={pillX} y={pillY} width={pillWidth} height={pillHeight} rx={4} fill=\"var(--background)\" fillOpacity={0.92} />\n <text x={textX} y={textY} textAnchor={textAnchor} dominantBaseline=\"middle\" className=\"fill-text-positive-strong text-[11px] font-medium\">\n {label}\n </text>\n </g>\n );\n }}\n link={(props: SankeyLinkProps) => {\n const { sourceX, sourceY, sourceControlX, targetX, targetY, targetControlX, linkWidth, payload } = props;\n const sourceColor = colorByName.get(payload.source.name) ?? 'var(--chart-1)';\n const targetColor = colorByName.get(payload.target.name) ?? sourceColor;\n // Blending toward the target's color (rather than a flat source-only fill) keeps sibling\n // flows out of the same source visually distinct from each other wherever they run close\n // together or cross — a flat single hue made e.g. Gross Profit's three outgoing flows\n // (-> R&D, -> SG&A, -> Operating Income) indistinguishable from one another.\n const color = `color-mix(in oklch, ${sourceColor} 60%, ${targetColor} 40%)`;\n return (\n <path\n className=\"recharts-sankey-link\"\n d={`M${sourceX},${sourceY} C${sourceControlX},${sourceY} ${targetControlX},${targetY} ${targetX},${targetY}`}\n fill=\"none\"\n stroke={color}\n strokeWidth={linkWidth}\n strokeOpacity={0.4}\n />\n );\n }}\n />\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useId, useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { Area, AreaChart, Line, LineChart, ResponsiveContainer } from 'recharts';\nimport type { ChartTrend } from '../types';\n\nconst TREND_COLORS: Record<ChartTrend, string> = {\n up: 'var(--success)',\n down: 'var(--danger)',\n neutral: 'var(--chart-1)',\n};\n\nexport type SparklineChartProps = {\n data: number[] | Array<{ value: number }>;\n /** Render style. Defaults to `'area'`. */\n type?: 'line' | 'area';\n /** Colors the series like the `Statistic` trend prop. Defaults to `'neutral'`. */\n trend?: ChartTrend;\n /** Explicit series color; overrides `trend`. */\n color?: string;\n /** Fixed height in px. Defaults to `40`. */\n height?: number;\n animate?: boolean;\n className?: string;\n};\n\n/**\n * A tiny, axis-less trend chart for KPI cards; pairs with the `Statistic` display component.\n *\n * @example\n * ```tsx\n * import { SparklineChart } from '@customafk/lunas-ui/features/charts';\n *\n * <SparklineChart data={[12, 18, 14, 26, 22, 31]} trend=\"up\" />\n * ```\n */\nexport const SparklineChart = ({ data, type = 'area', trend = 'neutral', color, height = 40, animate = true, className }: SparklineChartProps) => {\n const gradientId = useId();\n const seriesColor = color || TREND_COLORS[trend];\n\n const chartData = useMemo(() => data.map(point => (typeof point === 'number' ? { value: point } : point)), [data]);\n\n const margin = { top: 2, right: 0, bottom: 2, left: 0 };\n\n return (\n <div data-slot=\"sparkline-chart\" className={cn('w-full', className)} style={{ height }}>\n <ResponsiveContainer>\n {type === 'line' ? (\n <LineChart data={chartData} margin={margin}>\n <Line type=\"natural\" dataKey=\"value\" stroke={seriesColor} strokeWidth={2} dot={false} isAnimationActive={animate} />\n </LineChart>\n ) : (\n <AreaChart data={chartData} margin={margin}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"5%\" stopColor={seriesColor} stopOpacity={0.4} />\n <stop offset=\"95%\" stopColor={seriesColor} stopOpacity={0.05} />\n </linearGradient>\n </defs>\n <Area type=\"natural\" dataKey=\"value\" stroke={seriesColor} strokeWidth={2} fill={`url(#${gradientId})`} isAnimationActive={animate} />\n </AreaChart>\n )}\n </ResponsiveContainer>\n </div>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Area, AreaChart, CartesianGrid, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, ChartSeries } from '../types';\nimport { getChartColor, toDateLabel } from '../utils';\n\nexport type StackedAreaChartProps = BaseChartProps & {\n data: Array<{ date: string | Date } & Record<string, unknown>>;\n /** One entry per stacked category. */\n series: ChartSeries[];\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showLegend?: boolean;\n showGrid?: boolean;\n};\n\n/**\n * A stacked area chart for cumulative composition over time — e.g. revenue by channel, traffic\n * by source. Unlike `RevenueAreaChart` (a single series plus one comparison overlay), every\n * series here stacks to show the total alongside each category's contribution.\n *\n * @example\n * ```tsx\n * import { StackedAreaChart } from '@customafk/lunas-ui/features/charts';\n *\n * <StackedAreaChart\n * data={[{ date: '2026-06-01', direct: 4200, organic: 3100, paid: 1800 }]}\n * series={[\n * { key: 'direct', label: 'Direct' },\n * { key: 'organic', label: 'Organic' },\n * { key: 'paid', label: 'Paid' },\n * ]}\n * />\n * ```\n */\nexport const StackedAreaChart = ({\n data,\n series,\n valueFormatter = value => value.toLocaleString('en-US'),\n dateFormatter = toDateLabel,\n showLegend = true,\n showGrid = true,\n className,\n animate = true,\n height,\n}: StackedAreaChartProps) => {\n const config = useMemo<ChartConfig>(\n () => Object.fromEntries(series.map((item, index) => [item.key, { label: item.label, color: item.color || getChartColor(index) }])),\n [series]\n );\n\n return (\n <ChartContainer\n data-slot=\"stacked-area-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <AreaChart data={data} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n content={\n <ChartTooltipContent\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={value => valueFormatter(Number(value))}\n />\n }\n />\n {series.map((item, index) => {\n const color = item.color || getChartColor(index);\n return (\n <Area key={item.key} type=\"natural\" dataKey={item.key} stackId=\"stack\" stroke={color} fill={color} fillOpacity={0.35} isAnimationActive={animate} />\n );\n })}\n {showLegend && <ChartLegend content={<ChartLegendContent />} />}\n </AreaChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, LabelList, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, NamedValue } from '../types';\nimport { formatCompactNumber } from '../utils';\n\nexport type TopProductsBarChartProps = BaseChartProps & {\n data: NamedValue[];\n /** Series label. Defaults to `'Sales'`. */\n label?: string;\n /** Number of items shown after sorting descending. Defaults to `8`. */\n maxItems?: number;\n color?: string;\n valueFormatter?: (value: number) => string;\n /** Value labels at the end of each bar. Defaults to `true`. */\n showValueLabels?: boolean;\n};\n\n/**\n * A horizontal bar ranking chart — top products, best categories, top customers.\n *\n * @example\n * ```tsx\n * import { TopProductsBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <TopProductsBarChart\n * data={[\n * { name: 'Wireless Earbuds', value: 1245 },\n * { name: 'Smart Watch', value: 986 },\n * ]}\n * />\n * ```\n */\nexport const TopProductsBarChart = ({\n data,\n label = 'Sales',\n maxItems = 8,\n color = 'var(--chart-1)',\n valueFormatter = formatCompactNumber,\n showValueLabels = true,\n className,\n animate = true,\n height,\n}: TopProductsBarChartProps) => {\n const chartData = useMemo(() => [...data].sort((a, b) => b.value - a.value).slice(0, maxItems), [data, maxItems]);\n\n const config = useMemo<ChartConfig>(() => ({ value: { label, color } }), [label, color]);\n\n return (\n <ChartContainer\n data-slot=\"top-products-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={chartData} layout=\"vertical\" margin={{ top: 0, right: showValueLabels ? 48 : 12, bottom: 0, left: 12 }}>\n <XAxis type=\"number\" dataKey=\"value\" hide />\n <YAxis type=\"category\" dataKey=\"name\" tickLine={false} axisLine={false} tickMargin={8} width={120} />\n <ChartTooltip cursor={false} content={<ChartTooltipContent hideLabel />} />\n <Bar dataKey=\"value\" fill={color} radius={4} isAnimationActive={animate}>\n {showValueLabels && (\n <LabelList\n dataKey=\"value\"\n position=\"right\"\n offset={8}\n className=\"fill-muted-strong\"\n fontSize={12}\n formatter={(value: React.ReactNode) => valueFormatter(Number(value))}\n />\n )}\n </Bar>\n </BarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, CartesianGrid, Rectangle, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, OHLCPoint } from '../types';\nimport { formatCompactNumber, getDirectionColor, toDateLabel } from '../utils';\n\nexport type VolumeBarChartProps = BaseChartProps & {\n /** Only `date`, `close`, and `volume` are used; pass the same rows given to `CandlestickChart`. */\n data: Array<Pick<OHLCPoint, 'date' | 'close' | 'volume'>>;\n /** Series label. Defaults to `'Volume'`. */\n label?: string;\n upColor?: string;\n downColor?: string;\n valueFormatter?: (value: number) => string;\n dateFormatter?: (date: string | Date) => string;\n showGrid?: boolean;\n};\n\n/**\n * Volume bars colored by day direction (close vs. previous close), meant to sit under a\n * `CandlestickChart` on a shared time axis.\n *\n * @example\n * ```tsx\n * import { VolumeBarChart } from '@customafk/lunas-ui/features/charts';\n *\n * <VolumeBarChart\n * data={[\n * { date: '2026-06-01', close: 142.5, volume: 2_400_000 },\n * { date: '2026-06-02', close: 145.1, volume: 3_100_000 },\n * ]}\n * />\n * ```\n */\nexport const VolumeBarChart = ({\n data,\n label = 'Volume',\n upColor = 'var(--success)',\n downColor = 'var(--danger)',\n valueFormatter = formatCompactNumber,\n dateFormatter = toDateLabel,\n showGrid = true,\n className,\n animate = true,\n height,\n}: VolumeBarChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ volume: { label, color: upColor } }), [label, upColor]);\n\n const chartData = useMemo(() => data.map((point, index) => ({ ...point, previousClose: index > 0 ? data[index - 1]?.close : point.close })), [data]);\n\n return (\n <ChartContainer\n data-slot=\"volume-bar-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={chartData} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"date\" tickLine={false} axisLine={false} tickMargin={8} tickFormatter={dateFormatter} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={56} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideIndicator\n labelFormatter={(_, payload) => {\n const date = payload?.[0]?.payload?.date;\n return date ? dateFormatter(date) : null;\n }}\n formatter={value => valueFormatter(Number(value))}\n />\n }\n />\n <Bar\n dataKey=\"volume\"\n isAnimationActive={animate}\n shape={props => {\n const point = props.payload as { close?: number; previousClose?: number } | undefined;\n const color = getDirectionColor(point?.close ?? 0, point?.previousClose ?? 0, { up: upColor, down: downColor });\n return <Rectangle {...props} fill={color} />;\n }}\n />\n </BarChart>\n </ChartContainer>\n );\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { cn } from '@customafk/react-toolkit/utils';\n\nimport { type ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\n\nimport { Bar, BarChart, CartesianGrid, Rectangle, XAxis, YAxis } from 'recharts';\nimport type { BaseChartProps, WaterfallPoint } from '../types';\nimport { getDirectionColor } from '../utils';\n\nexport type WaterfallChartProps = BaseChartProps & {\n data: WaterfallPoint[];\n /** Color for `isTotal` bars. Defaults to `'var(--chart-1)'`. */\n totalColor?: string;\n upColor?: string;\n downColor?: string;\n valueFormatter?: (value: number) => string;\n showGrid?: boolean;\n};\n\n/**\n * A waterfall/bridge chart — an incremental sequence of positive/negative steps between totals\n * (e.g. starting balance → revenue → costs → ending balance). Built as stacked bars: an\n * invisible \"base\" bar positions each floating step at its running total.\n *\n * @example\n * ```tsx\n * import { WaterfallChart } from '@customafk/lunas-ui/features/charts';\n *\n * <WaterfallChart\n * data={[\n * { label: 'Starting cash', value: 50000, isTotal: true },\n * { label: 'Revenue', value: 32000 },\n * { label: 'COGS', value: -18000 },\n * { label: 'Opex', value: -9000 },\n * { label: 'Ending cash', value: 55000, isTotal: true },\n * ]}\n * />\n * ```\n */\nexport const WaterfallChart = ({\n data,\n totalColor = 'var(--chart-1)',\n upColor = 'var(--success)',\n downColor = 'var(--danger)',\n valueFormatter = value => value.toLocaleString('en-US'),\n showGrid = true,\n className,\n animate = true,\n height,\n}: WaterfallChartProps) => {\n const config = useMemo<ChartConfig>(() => ({ size: { label: 'Amount', color: totalColor } }), [totalColor]);\n\n const chartData = useMemo(() => {\n let cumulative = 0;\n return data.map(point => {\n if (point.isTotal) {\n const base = 0;\n cumulative = point.value;\n return { ...point, base, size: point.value, color: totalColor, runningTotal: cumulative };\n }\n const previous = cumulative;\n cumulative += point.value;\n const base = Math.min(previous, cumulative);\n return {\n ...point,\n base,\n size: Math.abs(point.value),\n color: getDirectionColor(point.value, 0, { up: upColor, down: downColor }),\n runningTotal: cumulative,\n };\n });\n }, [data, totalColor, upColor, downColor]);\n\n return (\n <ChartContainer\n data-slot=\"waterfall-chart\"\n config={config}\n className={cn('w-full', className)}\n style={height !== undefined ? { height, aspectRatio: 'auto' } : undefined}\n >\n <BarChart data={chartData} margin={{ top: 8, right: 12, bottom: 0, left: 12 }}>\n {showGrid && <CartesianGrid vertical={false} />}\n <XAxis dataKey=\"label\" tickLine={false} axisLine={false} tickMargin={8} />\n <YAxis tickLine={false} axisLine={false} tickMargin={8} width={64} tickFormatter={valueFormatter} />\n <ChartTooltip\n cursor={false}\n content={\n <ChartTooltipContent\n hideIndicator\n formatter={(_value, _name, item) => {\n const point = item.payload as (typeof chartData)[number];\n return (\n <div className=\"grid gap-0.5\">\n <span className=\"text-muted\">\n {point.isTotal ? 'Total' : point.value >= 0 ? 'Increase' : 'Decrease'}{' '}\n <span className=\"font-medium font-number text-text-positive-strong\">{valueFormatter(point.value)}</span>\n </span>\n <span className=\"text-[11px] text-muted\">Running total {valueFormatter(point.runningTotal)}</span>\n </div>\n );\n }}\n />\n }\n />\n <Bar dataKey=\"base\" stackId=\"waterfall\" fill=\"transparent\" isAnimationActive={false} />\n <Bar\n dataKey=\"size\"\n stackId=\"waterfall\"\n isAnimationActive={animate}\n shape={props => <Rectangle {...props} fill={(props.payload as { color: string }).color} radius={2} />}\n />\n </BarChart>\n </ChartContainer>\n );\n};\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ui/button.cjs"),t=require("./typography/paragraph.cjs"),n=require("./ui/card.cjs"),r=require("./ui/skeleton.cjs"),ee=require("./ui/image.cjs"),te=require("./cards/grid-product-card.cjs"),ne=require("./cards/product-card.cjs"),re=require("./cards/simple-card.cjs"),ie=require("./layouts/flex.cjs"),ae=require("./data-display/country.cjs"),i=require("./data-display/data-list.cjs"),oe=require("./date-B3cozmfV.cjs"),a=require("./ui/badge.cjs"),o=require("./ui/tooltip.cjs"),s=require("./data-display/date-tooltip.cjs"),c=require("./data-display/empty.cjs"),l=require("./data-display/name.cjs"),se=require("./data-display/phone-number.cjs"),ce=require("./data-display/role-badge.cjs"),le=require("./data-display/statistic.cjs"),u=require("./ui/avatar.cjs"),ue=require("./data-display/user.cjs"),d=require("./ui/alert-dialog.cjs"),de=require("./dialogs/confirm-dialog.cjs"),fe=require("./typography/title.cjs"),pe=require("./ui/separator.cjs"),f=require("./ui/sheet.cjs"),me=require("./dialogs/detail-dialog/index.cjs"),p=require("./dialogs/error-dialog.cjs"),m=require("./ui/dialog.cjs"),he=require("./dialogs/loading-dialog.cjs"),h=require("./features/descriptions/index.cjs"),g=require("./ui/command.cjs"),ge=require("./search-modal-CMhsIxae.cjs"),_=require("./tables-B0Jl8Osc.cjs"),v=require("./ui/dropdown-menu.cjs"),y=require("./ui/progress.cjs"),b=require("./ui/switch.cjs"),_e=require("./ui/checkbox.cjs"),ve=require("./ui/spinner.cjs"),x=require("./ui/resizable.cjs"),ye=require("./ui/input.cjs"),be=require("./ui/label.cjs"),S=require("./ui/popover.cjs"),C=require("./ui/select.cjs"),w=require("./tanstack-form-BMVn8ai_.cjs"),T=require("./ui/drawer.cjs"),E=require("./ui/calendar.cjs"),D=require("./ui/radio-group.cjs"),O=require("./ui/textarea.cjs"),k=require("./text-editor-DJYQXXtP.cjs"),A=require("./cms-layout-SubgSF72.cjs"),j=require("./payment-layout-BLrXT-oc.cjs"),M=require("./layouts/grid.cjs"),N=require("./pages/FeatureDeveloping.cjs"),xe=require("./pages/FeatureFixing.cjs"),Se=require("./pages/NotAuthorized.cjs"),Ce=require("./pages/NotFound.cjs"),P=require("./alert-D31c6DLq.cjs"),we=require("./pages/LoginPage.cjs"),Te=require("./pages/RegisterPage.cjs"),F=require("./ui/input-otp.cjs"),Ee=require("./pages/VerifyEmailPage.cjs"),De=require("./systems/google.cjs"),Oe=require("./ui/buttons/add-new.cjs"),ke=require("./ui/buttons/edit.cjs"),Ae=require("./ui/buttons/refresh.cjs"),je=require("./ui/buttons/trash.cjs"),Me=require("./ui/buttons/upload-image.cjs"),Ne=require("./ui/inputs/search-input.cjs"),Pe=require("./ui/aspect-ratio.cjs"),I=require("./ui/breadcrumb.cjs"),L=require("./ui/button-group.cjs"),R=require("./ui/carousel.cjs"),z=require("./ui/collapsible.cjs"),B=require("./ui/context-menu.cjs"),V=require("./ui/empty.cjs"),Fe=require("./ui/file-uploader.cjs"),H=require("./ui/form.cjs"),U=require("./ui/hover-card.cjs"),W=require("./ui/item.cjs"),G=require("./ui/menubar.cjs"),K=require("./ui/multi-select.cjs"),q=require("./ui/navigation-menu.cjs"),J=require("./ui/pagination.cjs"),Y=require("./ui/scroll-area.cjs"),Ie=require("./ui/slider.cjs"),Le=require("./ui/sonner.cjs"),X=require("./ui/table.cjs"),Z=require("./ui/tabs.cjs"),Q=require("./ui/toggle.cjs"),$=require("./ui/toggle-group.cjs");let Re=require("sonner");exports.AddNewBtn=Oe.AddNewBtn,exports.Alert=P.t,exports.AlertDescription=P.n,exports.AlertDialog=d.AlertDialog,exports.AlertDialogAction=d.AlertDialogAction,exports.AlertDialogCancel=d.AlertDialogCancel,exports.AlertDialogContent=d.AlertDialogContent,exports.AlertDialogDescription=d.AlertDialogDescription,exports.AlertDialogFooter=d.AlertDialogFooter,exports.AlertDialogHeader=d.AlertDialogHeader,exports.AlertDialogOverlay=d.AlertDialogOverlay,exports.AlertDialogPortal=d.AlertDialogPortal,exports.AlertDialogTitle=d.AlertDialogTitle,exports.AlertDialogTrigger=d.AlertDialogTrigger,exports.AlertTitle=P.r,exports.ArrayCol=w.W,exports.ArrayHeaderRow=w.G,exports.AspectRatio=Pe.AspectRatio,exports.Avatar=u.Avatar,exports.AvatarFallback=u.AvatarFallback,exports.AvatarImage=u.AvatarImage,exports.Badge=a.Badge,exports.Breadcrumb=I.Breadcrumb,exports.BreadcrumbEllipsis=I.BreadcrumbEllipsis,exports.BreadcrumbItem=I.BreadcrumbItem,exports.BreadcrumbLink=I.BreadcrumbLink,exports.BreadcrumbList=I.BreadcrumbList,exports.BreadcrumbPage=I.BreadcrumbPage,exports.BreadcrumbSeparator=I.BreadcrumbSeparator,exports.Button=e.Button,exports.ButtonGroup=L.ButtonGroup,exports.ButtonGroupSeparator=L.ButtonGroupSeparator,exports.ButtonGroupText=L.ButtonGroupText,exports.CMSLayout=A.t,exports.Calendar=E.Calendar,exports.CalendarDayButton=E.CalendarDayButton,exports.Card=n.Card,exports.CardAction=n.CardAction,exports.CardContent=n.CardContent,exports.CardDescription=n.CardDescription,exports.CardFooter=n.CardFooter,exports.CardHeader=n.CardHeader,exports.CardTitle=n.CardTitle,exports.Carousel=R.Carousel,exports.CarouselContent=R.CarouselContent,exports.CarouselItem=R.CarouselItem,exports.CarouselNext=R.CarouselNext,exports.CarouselPrevious=R.CarouselPrevious,exports.Checkbox=_e.Checkbox,exports.CheckboxField=w.E,exports.Collapsible=z.Collapsible,exports.CollapsibleContent=z.CollapsibleContent,exports.CollapsibleTrigger=z.CollapsibleTrigger,exports.ComboboxField=w.T,exports.Command=g.Command,exports.CommandDialog=g.CommandDialog,exports.CommandEmpty=g.CommandEmpty,exports.CommandGroup=g.CommandGroup,exports.CommandInput=g.CommandInput,exports.CommandItem=g.CommandItem,exports.CommandList=g.CommandList,exports.CommandSeparator=g.CommandSeparator,exports.CommandShortcut=g.CommandShortcut,exports.ConfirmDialog=de.ConfirmDialog,exports.ContextMenu=B.ContextMenu,exports.ContextMenuCheckboxItem=B.ContextMenuCheckboxItem,exports.ContextMenuContent=B.ContextMenuContent,exports.ContextMenuGroup=B.ContextMenuGroup,exports.ContextMenuItem=B.ContextMenuItem,exports.ContextMenuLabel=B.ContextMenuLabel,exports.ContextMenuPortal=B.ContextMenuPortal,exports.ContextMenuRadioGroup=B.ContextMenuRadioGroup,exports.ContextMenuRadioItem=B.ContextMenuRadioItem,exports.ContextMenuSeparator=B.ContextMenuSeparator,exports.ContextMenuShortcut=B.ContextMenuShortcut,exports.ContextMenuSub=B.ContextMenuSub,exports.ContextMenuSubContent=B.ContextMenuSubContent,exports.ContextMenuSubTrigger=B.ContextMenuSubTrigger,exports.ContextMenuTrigger=B.ContextMenuTrigger,exports.CountryDisplay=ae.CountryDisplay,exports.DataList=i.DataList,exports.DataListItem=i.DataListItem,exports.DateDisplay=oe.t,exports.DateField=w.w,exports.DateTooltip=s.DateTooltip,exports.Description=h.Description,exports.DescriptionBadge=h.DescriptionBadge,exports.DescriptionBoolean=h.DescriptionBoolean,exports.DescriptionCopy=h.DescriptionCopy,exports.DescriptionDate=h.DescriptionDate,exports.DescriptionEmpty=h.DescriptionEmpty,exports.DescriptionHeader=h.DescriptionHeader,exports.DescriptionImages=h.DescriptionImages,exports.DescriptionItem=h.DescriptionItem,exports.DescriptionLink=h.DescriptionLink,exports.DescriptionLongText=h.DescriptionLongText,exports.DescriptionName=h.DescriptionName,exports.DescriptionNumberPhone=h.DescriptionNumberPhone,exports.DescriptionSection=h.DescriptionSection,exports.DescriptionStatistic=h.DescriptionStatistic,exports.DescriptionStatus=h.DescriptionStatus,exports.DescriptionTagList=h.DescriptionTagList,exports.DescriptionUser=h.DescriptionUser,exports.DetailDialog=me.DetailDialog,exports.Dialog=m.Dialog,exports.DialogClose=m.DialogClose,exports.DialogContent=m.DialogContent,exports.DialogDescription=m.DialogDescription,exports.DialogFooter=m.DialogFooter,exports.DialogHeader=m.DialogHeader,exports.DialogOverlay=m.DialogOverlay,exports.DialogPortal=m.DialogPortal,exports.DialogTitle=m.DialogTitle,exports.DialogTrigger=m.DialogTrigger,exports.Drawer=T.Drawer,exports.DrawerClose=T.DrawerClose,exports.DrawerContent=T.DrawerContent,exports.DrawerDescription=T.DrawerDescription,exports.DrawerFooter=T.DrawerFooter,exports.DrawerHeader=T.DrawerHeader,exports.DrawerOverlay=T.DrawerOverlay,exports.DrawerPortal=T.DrawerPortal,exports.DrawerTitle=T.DrawerTitle,exports.DrawerTrigger=T.DrawerTrigger,exports.DropdownMenu=v.DropdownMenu,exports.DropdownMenuCheckboxItem=v.DropdownMenuCheckboxItem,exports.DropdownMenuContent=v.DropdownMenuContent,exports.DropdownMenuGroup=v.DropdownMenuGroup,exports.DropdownMenuItem=v.DropdownMenuItem,exports.DropdownMenuLabel=v.DropdownMenuLabel,exports.DropdownMenuPortal=v.DropdownMenuPortal,exports.DropdownMenuRadioGroup=v.DropdownMenuRadioGroup,exports.DropdownMenuRadioItem=v.DropdownMenuRadioItem,exports.DropdownMenuSeparator=v.DropdownMenuSeparator,exports.DropdownMenuShortcut=v.DropdownMenuShortcut,exports.DropdownMenuSub=v.DropdownMenuSub,exports.DropdownMenuSubContent=v.DropdownMenuSubContent,exports.DropdownMenuSubTrigger=v.DropdownMenuSubTrigger,exports.DropdownMenuTrigger=v.DropdownMenuTrigger,exports.EditBtn=ke.EditBtn,exports.EmailField=w.C,exports.Empty=V.Empty,exports.EmptyContent=V.EmptyContent,exports.EmptyDescription=V.EmptyDescription,exports.EmptyDisplay=c.EmptyDisplay,exports.EmptyHeader=V.EmptyHeader,exports.EmptyMedia=V.EmptyMedia,exports.EmptyTitle=V.EmptyTitle,exports.ErrorDialog=p.ErrorDialog,exports.FeatureDeveloping=N.FeatureDeveloping,exports.FeatureFixing=xe.FeatureFixing,exports.Field=w.L,exports.FieldContent=w.R,exports.FieldContentMain=w.z,exports.FieldError=w.B,exports.FieldGroup=w.V,exports.FieldLabel=w.H,exports.FieldSeparator=w.U,exports.FileUploader=Fe.FileUploader,exports.Flex=ie.Flex,exports.Form=H.Form,exports.FormControl=H.FormControl,exports.FormDescription=H.FormDescription,exports.FormField=H.FormField,exports.FormItem=H.FormItem,exports.FormLabel=H.FormLabel,exports.FormMessage=H.FormMessage,exports.Google=De.Google,exports.Grid=M.Grid,exports.GridProductCard=te.GridProductCard,exports.HoverCard=U.HoverCard,exports.HoverCardContent=U.HoverCardContent,exports.HoverCardTrigger=U.HoverCardTrigger,exports.Image=ee.Image,exports.Input=ye.Input,exports.InputOTP=F.InputOTP,exports.InputOTPGroup=F.InputOTPGroup,exports.InputOTPSeparator=F.InputOTPSeparator,exports.InputOTPSlot=F.InputOTPSlot,exports.Item=W.Item,exports.ItemActions=W.ItemActions,exports.ItemContent=W.ItemContent,exports.ItemDescription=W.ItemDescription,exports.ItemFooter=W.ItemFooter,exports.ItemGroup=W.ItemGroup,exports.ItemHeader=W.ItemHeader,exports.ItemMedia=W.ItemMedia,exports.ItemSeparator=W.ItemSeparator,exports.ItemTitle=W.ItemTitle,exports.Label=be.Label,exports.LoadingDialog=he.LoadingDialog,exports.LoginPage=we.LoginPage,exports.Menubar=G.Menubar,exports.MenubarCheckboxItem=G.MenubarCheckboxItem,exports.MenubarContent=G.MenubarContent,exports.MenubarGroup=G.MenubarGroup,exports.MenubarItem=G.MenubarItem,exports.MenubarLabel=G.MenubarLabel,exports.MenubarMenu=G.MenubarMenu,exports.MenubarPortal=G.MenubarPortal,exports.MenubarRadioGroup=G.MenubarRadioGroup,exports.MenubarRadioItem=G.MenubarRadioItem,exports.MenubarSeparator=G.MenubarSeparator,exports.MenubarShortcut=G.MenubarShortcut,exports.MenubarSub=G.MenubarSub,exports.MenubarSubContent=G.MenubarSubContent,exports.MenubarSubTrigger=G.MenubarSubTrigger,exports.MenubarTrigger=G.MenubarTrigger,exports.MultipleSelector=K.MultipleSelector,exports.NameDisplay=l.NameDisplay,exports.NavigationMenu=q.NavigationMenu,exports.NavigationMenuContent=q.NavigationMenuContent,exports.NavigationMenuIndicator=q.NavigationMenuIndicator,exports.NavigationMenuItem=q.NavigationMenuItem,exports.NavigationMenuLink=q.NavigationMenuLink,exports.NavigationMenuList=q.NavigationMenuList,exports.NavigationMenuTrigger=q.NavigationMenuTrigger,exports.NavigationMenuViewport=q.NavigationMenuViewport,exports.NotAuthorized=Se.NotAuthorized,exports.NotFound=Ce.NotFound,exports.NumberField=w.S,exports.Pagination=J.Pagination,exports.PaginationContent=J.PaginationContent,exports.PaginationEllipsis=J.PaginationEllipsis,exports.PaginationItem=J.PaginationItem,exports.PaginationLink=J.PaginationLink,exports.PaginationNext=J.PaginationNext,exports.PaginationPrevious=J.PaginationPrevious,exports.Paragraph=t.Paragraph,exports.PasswordField=w.x,exports.PaymentLayout=j.t,exports.PhoneNumberDisplay=se.PhoneNumberDisplay,exports.Popover=S.Popover,exports.PopoverAnchor=S.PopoverAnchor,exports.PopoverClose=S.PopoverClose,exports.PopoverContent=S.PopoverContent,exports.PopoverTrigger=S.PopoverTrigger,exports.ProductCard=ne.ProductCard,exports.Progress=y.Progress,exports.RadioGroup=D.RadioGroup,exports.RadioGroupField=w.b,exports.RadioGroupItem=D.RadioGroupItem,exports.RefreshBtn=Ae.RefreshBtn,exports.RegisterPage=Te.RegisterPage,exports.ResizableHandle=x.ResizableHandle,exports.ResizablePanel=x.ResizablePanel,exports.ResizablePanelGroup=x.ResizablePanelGroup,exports.RoleBadge=ce.RoleBadge,exports.ScrollArea=Y.ScrollArea,exports.ScrollBar=Y.ScrollBar,exports.SearchInput=Ne.SearchInput,exports.SearchModal=ge.t,exports.Select=C.Select,exports.SelectContent=C.SelectContent,exports.SelectField=w.y,exports.SelectGroup=C.SelectGroup,exports.SelectItem=C.SelectItem,exports.SelectLabel=C.SelectLabel,exports.SelectSeparator=C.SelectSeparator,exports.SelectTrigger=C.SelectTrigger,exports.SelectValue=C.SelectValue,exports.Separator=pe.Separator,exports.Sheet=f.Sheet,exports.SheetClose=f.SheetClose,exports.SheetContent=f.SheetContent,exports.SheetDescription=f.SheetDescription,exports.SheetFooter=f.SheetFooter,exports.SheetHeader=f.SheetHeader,exports.SheetTitle=f.SheetTitle,exports.SheetTrigger=f.SheetTrigger,exports.SimpleArrayField=w.K,exports.SimpleBooleanField=w.I,exports.SimpleCard=re.SimpleCard,exports.SimpleComboboxField=w.F,exports.SimpleDateField=w.P,exports.SimpleEmailField=w.M,exports.SimpleNumberField=w.j,exports.SimplePasswordField=w.A,exports.SimpleRadioGroupField=w.N,exports.SimpleSelectField=w.k,exports.SimpleTextField=w.D,exports.SimpleTextareaField=w.O,exports.Skeleton=r.Skeleton,exports.Slider=Ie.Slider,exports.Spinner=ve.Spinner,exports.Statistic=le.Statistic,exports.Switch=b.Switch,exports.SwitchField=w.v,exports.Table=X.Table,exports.TableBody=X.TableBody,exports.TableCaption=X.TableCaption,exports.TableCell=X.TableCell,exports.TableFooter=X.TableFooter,exports.TableHead=X.TableHead,exports.TableHeader=X.TableHeader,exports.TableRow=X.TableRow,exports.Tabs=Z.Tabs,exports.TabsContent=Z.TabsContent,exports.TabsList=Z.TabsList,exports.TabsTrigger=Z.TabsTrigger,exports.TanStackActionSubmit=w.m,exports.TanStackActionsForm=w.p,exports.TanStackCardForm=w.f,exports.TanStackContainerForm=w.d,exports.TanStackDialogForm=w.u,exports.TanStackFieldGroup=w.l,exports.TanStackPopoverForm=w.c,exports.TanStackSectionForm=w.s,exports.TanStackTitleField=w.o,exports.TextEditor=k.t,exports.TextEditorField=w.h,exports.TextEditorToolbar=k.n,exports.TextField=w._,exports.Textarea=O.Textarea,exports.TextareaField=w.g,exports.Title=fe.Title,exports.Toaster=Le.Toaster,exports.Toggle=Q.Toggle,exports.ToggleGroup=$.ToggleGroup,exports.ToggleGroupItem=$.ToggleGroupItem,exports.Tooltip=o.Tooltip,exports.TooltipContent=o.TooltipContent,exports.TooltipProvider=o.TooltipProvider,exports.TooltipTrigger=o.TooltipTrigger,exports.TrashBtn=je.TrashBtn,exports.UITableAnalysisPanel=_.s,exports.UITableAvatarNameDisplay=_.W,exports.UITableBadgeDisplay=_.U,exports.UITableBody=_.T,exports.UITableBooleanDisplay=_.H,exports.UITableCell=_.w,exports.UITableCellActions=_.C,exports.UITableCellSelect=_.S,exports.UITableContainer=_.c,exports.UITableCurrencyDisplay=_.V,exports.UITableDateDisplay=_.B,exports.UITableDescriptionDisplay=_.z,exports.UITableEditButton=_.R,exports.UITableEmailDisplay=_.L,exports.UITableEmptyDisplay=_.x,exports.UITableFilter=_.o,exports.UITableFooter=_.b,exports.UITableFooterRow=_.y,exports.UITableHead=_.v,exports.UITableHeadCell=_.g,exports.UITableHeadCellOption=_._,exports.UITableHeadCellSelect=_.h,exports.UITableHeadRow=_.m,exports.UITableInnerTable=_.p,exports.UITableInnerWrapper=_.f,exports.UITableListDisplay=_.I,exports.UITableLoadMore=_.d,exports.UITableMoreButton=_.F,exports.UITableNameDisplay=_.P,exports.UITablePermalink=_.N,exports.UITablePhoneNumberDisplay=_.M,exports.UITableProgressDisplay=_.j,exports.UITableProvider=_.a,exports.UITableRemoveButton=_.A,exports.UITableRow=_.u,exports.UITableStatisticDisplay=_.k,exports.UITableStatusDisplay=_.O,exports.UITableSummaryBar=_.i,exports.UITableToggleButton=_.D,exports.UITableTooltip=_.t,exports.UITableTooltipActions=_.n,exports.UITableTooltipFilter=_.r,exports.UITableUserDataDisplay=_.E,exports.UITableWrapper=_.l,exports.UploadImageBtn=Me.UploadImageBtn,exports.UserDataDisplay=ue.UserDataDisplay,exports.VerifyEmailPage=Ee.VerifyEmailPage,exports.badgeVariants=a.badgeVariants,exports.buttonGroupVariants=L.buttonGroupVariants,exports.navigationMenuTriggerStyle=q.navigationMenuTriggerStyle,exports.paragraphVariants=t.paragraphVariants,exports.toast=Re.toast,exports.toggleVariants=Q.toggleVariants,exports.useDebounce=K.useDebounce,exports.useFormField=H.useFormField,exports.useTanStackFieldContext=w.t,exports.useTanStackForm=w.n,exports.useTanStackFormContext=w.r,exports.withTanStackFieldGroup=w.i,exports.withTanStackForm=w.a;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./ui/button.cjs"),t=require("./typography/paragraph.cjs"),n=require("./ui/card.cjs"),ee=require("./ui/skeleton.cjs"),te=require("./ui/image.cjs"),ne=require("./cards/grid-product-card.cjs"),r=require("./cards/product-card.cjs"),i=require("./cards/simple-card.cjs"),re=require("./layouts/flex.cjs"),ie=require("./data-display/country.cjs"),a=require("./data-display/data-list.cjs"),ae=require("./date-B3cozmfV.cjs"),o=require("./ui/badge.cjs"),s=require("./ui/tooltip.cjs"),oe=require("./data-display/date-tooltip.cjs"),se=require("./data-display/empty.cjs"),ce=require("./data-display/name.cjs"),c=require("./data-display/phone-number.cjs"),l=require("./data-display/role-badge.cjs"),u=require("./data-display/statistic.cjs"),d=require("./ui/avatar.cjs"),f=require("./data-display/user.cjs"),p=require("./ui/alert-dialog.cjs"),m=require("./dialogs/confirm-dialog.cjs"),le=require("./typography/title.cjs"),ue=require("./ui/separator.cjs"),h=require("./ui/sheet.cjs"),de=require("./dialogs/detail-dialog/index.cjs"),fe=require("./dialogs/error-dialog.cjs"),g=require("./ui/dialog.cjs"),pe=require("./dialogs/loading-dialog.cjs"),_=require("./ui/chart.cjs"),v=require("./features/charts/index.cjs"),y=require("./features/descriptions/index.cjs"),b=require("./ui/command.cjs"),me=require("./search-modal-CMhsIxae.cjs"),x=require("./tables-B0Jl8Osc.cjs"),S=require("./ui/dropdown-menu.cjs"),he=require("./ui/progress.cjs"),ge=require("./ui/switch.cjs"),_e=require("./ui/checkbox.cjs"),ve=require("./ui/spinner.cjs"),C=require("./ui/resizable.cjs"),ye=require("./ui/input.cjs"),be=require("./ui/label.cjs"),w=require("./ui/popover.cjs"),T=require("./ui/select.cjs"),E=require("./tanstack-form-BMVn8ai_.cjs"),D=require("./ui/drawer.cjs"),O=require("./ui/calendar.cjs"),k=require("./ui/radio-group.cjs"),A=require("./ui/textarea.cjs"),j=require("./text-editor-DJYQXXtP.cjs"),M=require("./cms-layout-SubgSF72.cjs"),N=require("./payment-layout-BLrXT-oc.cjs"),xe=require("./layouts/grid.cjs"),Se=require("./pages/FeatureDeveloping.cjs"),Ce=require("./pages/FeatureFixing.cjs"),we=require("./pages/NotAuthorized.cjs"),Te=require("./pages/NotFound.cjs"),P=require("./alert-D31c6DLq.cjs"),Ee=require("./pages/LoginPage.cjs"),De=require("./pages/RegisterPage.cjs"),F=require("./ui/input-otp.cjs"),Oe=require("./pages/VerifyEmailPage.cjs"),ke=require("./systems/google.cjs"),Ae=require("./ui/buttons/add-new.cjs"),je=require("./ui/buttons/edit.cjs"),Me=require("./ui/buttons/refresh.cjs"),Ne=require("./ui/buttons/trash.cjs"),Pe=require("./ui/buttons/upload-image.cjs"),Fe=require("./ui/inputs/search-input.cjs"),Ie=require("./ui/aspect-ratio.cjs"),I=require("./ui/breadcrumb.cjs"),L=require("./ui/button-group.cjs"),R=require("./ui/carousel.cjs"),z=require("./ui/collapsible.cjs"),B=require("./ui/context-menu.cjs"),V=require("./ui/empty.cjs"),Le=require("./ui/file-uploader.cjs"),H=require("./ui/form.cjs"),U=require("./ui/hover-card.cjs"),W=require("./ui/item.cjs"),G=require("./ui/menubar.cjs"),K=require("./ui/multi-select.cjs"),q=require("./ui/navigation-menu.cjs"),J=require("./ui/pagination.cjs"),Y=require("./ui/scroll-area.cjs"),Re=require("./ui/slider.cjs"),ze=require("./ui/sonner.cjs"),X=require("./ui/table.cjs"),Z=require("./ui/tabs.cjs"),Q=require("./ui/toggle.cjs"),$=require("./ui/toggle-group.cjs");let Be=require("sonner");exports.ActivityHeatmapChart=v.ActivityHeatmapChart,exports.AddNewBtn=Ae.AddNewBtn,exports.Alert=P.t,exports.AlertDescription=P.n,exports.AlertDialog=p.AlertDialog,exports.AlertDialogAction=p.AlertDialogAction,exports.AlertDialogCancel=p.AlertDialogCancel,exports.AlertDialogContent=p.AlertDialogContent,exports.AlertDialogDescription=p.AlertDialogDescription,exports.AlertDialogFooter=p.AlertDialogFooter,exports.AlertDialogHeader=p.AlertDialogHeader,exports.AlertDialogOverlay=p.AlertDialogOverlay,exports.AlertDialogPortal=p.AlertDialogPortal,exports.AlertDialogTitle=p.AlertDialogTitle,exports.AlertDialogTrigger=p.AlertDialogTrigger,exports.AlertTitle=P.r,exports.ArrayCol=E.W,exports.ArrayHeaderRow=E.G,exports.AspectRatio=Ie.AspectRatio,exports.Avatar=d.Avatar,exports.AvatarFallback=d.AvatarFallback,exports.AvatarImage=d.AvatarImage,exports.Badge=o.Badge,exports.Breadcrumb=I.Breadcrumb,exports.BreadcrumbEllipsis=I.BreadcrumbEllipsis,exports.BreadcrumbItem=I.BreadcrumbItem,exports.BreadcrumbLink=I.BreadcrumbLink,exports.BreadcrumbList=I.BreadcrumbList,exports.BreadcrumbPage=I.BreadcrumbPage,exports.BreadcrumbSeparator=I.BreadcrumbSeparator,exports.Button=e.Button,exports.ButtonGroup=L.ButtonGroup,exports.ButtonGroupSeparator=L.ButtonGroupSeparator,exports.ButtonGroupText=L.ButtonGroupText,exports.CMSLayout=M.t,exports.Calendar=O.Calendar,exports.CalendarDayButton=O.CalendarDayButton,exports.CandlestickChart=v.CandlestickChart,exports.Card=n.Card,exports.CardAction=n.CardAction,exports.CardContent=n.CardContent,exports.CardDescription=n.CardDescription,exports.CardFooter=n.CardFooter,exports.CardHeader=n.CardHeader,exports.CardTitle=n.CardTitle,exports.Carousel=R.Carousel,exports.CarouselContent=R.CarouselContent,exports.CarouselItem=R.CarouselItem,exports.CarouselNext=R.CarouselNext,exports.CarouselPrevious=R.CarouselPrevious,exports.ChartContainer=_.ChartContainer,exports.ChartLegend=_.ChartLegend,exports.ChartLegendContent=_.ChartLegendContent,exports.ChartStyle=_.ChartStyle,exports.ChartTooltip=_.ChartTooltip,exports.ChartTooltipContent=_.ChartTooltipContent,exports.Checkbox=_e.Checkbox,exports.CheckboxField=E.E,exports.Collapsible=z.Collapsible,exports.CollapsibleContent=z.CollapsibleContent,exports.CollapsibleTrigger=z.CollapsibleTrigger,exports.ComboboxField=E.T,exports.Command=b.Command,exports.CommandDialog=b.CommandDialog,exports.CommandEmpty=b.CommandEmpty,exports.CommandGroup=b.CommandGroup,exports.CommandInput=b.CommandInput,exports.CommandItem=b.CommandItem,exports.CommandList=b.CommandList,exports.CommandSeparator=b.CommandSeparator,exports.CommandShortcut=b.CommandShortcut,exports.ConfirmDialog=m.ConfirmDialog,exports.ContextMenu=B.ContextMenu,exports.ContextMenuCheckboxItem=B.ContextMenuCheckboxItem,exports.ContextMenuContent=B.ContextMenuContent,exports.ContextMenuGroup=B.ContextMenuGroup,exports.ContextMenuItem=B.ContextMenuItem,exports.ContextMenuLabel=B.ContextMenuLabel,exports.ContextMenuPortal=B.ContextMenuPortal,exports.ContextMenuRadioGroup=B.ContextMenuRadioGroup,exports.ContextMenuRadioItem=B.ContextMenuRadioItem,exports.ContextMenuSeparator=B.ContextMenuSeparator,exports.ContextMenuShortcut=B.ContextMenuShortcut,exports.ContextMenuSub=B.ContextMenuSub,exports.ContextMenuSubContent=B.ContextMenuSubContent,exports.ContextMenuSubTrigger=B.ContextMenuSubTrigger,exports.ContextMenuTrigger=B.ContextMenuTrigger,exports.ConversionFunnelChart=v.ConversionFunnelChart,exports.CorrelationScatterChart=v.CorrelationScatterChart,exports.CountryDisplay=ie.CountryDisplay,exports.DataList=a.DataList,exports.DataListItem=a.DataListItem,exports.DateDisplay=ae.t,exports.DateField=E.w,exports.DateTooltip=oe.DateTooltip,exports.Description=y.Description,exports.DescriptionBadge=y.DescriptionBadge,exports.DescriptionBoolean=y.DescriptionBoolean,exports.DescriptionCopy=y.DescriptionCopy,exports.DescriptionDate=y.DescriptionDate,exports.DescriptionEmpty=y.DescriptionEmpty,exports.DescriptionHeader=y.DescriptionHeader,exports.DescriptionImages=y.DescriptionImages,exports.DescriptionItem=y.DescriptionItem,exports.DescriptionLink=y.DescriptionLink,exports.DescriptionLongText=y.DescriptionLongText,exports.DescriptionName=y.DescriptionName,exports.DescriptionNumberPhone=y.DescriptionNumberPhone,exports.DescriptionSection=y.DescriptionSection,exports.DescriptionStatistic=y.DescriptionStatistic,exports.DescriptionStatus=y.DescriptionStatus,exports.DescriptionTagList=y.DescriptionTagList,exports.DescriptionUser=y.DescriptionUser,exports.DetailDialog=de.DetailDialog,exports.Dialog=g.Dialog,exports.DialogClose=g.DialogClose,exports.DialogContent=g.DialogContent,exports.DialogDescription=g.DialogDescription,exports.DialogFooter=g.DialogFooter,exports.DialogHeader=g.DialogHeader,exports.DialogOverlay=g.DialogOverlay,exports.DialogPortal=g.DialogPortal,exports.DialogTitle=g.DialogTitle,exports.DialogTrigger=g.DialogTrigger,exports.DonutChart=v.DonutChart,exports.Drawer=D.Drawer,exports.DrawerClose=D.DrawerClose,exports.DrawerContent=D.DrawerContent,exports.DrawerDescription=D.DrawerDescription,exports.DrawerFooter=D.DrawerFooter,exports.DrawerHeader=D.DrawerHeader,exports.DrawerOverlay=D.DrawerOverlay,exports.DrawerPortal=D.DrawerPortal,exports.DrawerTitle=D.DrawerTitle,exports.DrawerTrigger=D.DrawerTrigger,exports.DropdownMenu=S.DropdownMenu,exports.DropdownMenuCheckboxItem=S.DropdownMenuCheckboxItem,exports.DropdownMenuContent=S.DropdownMenuContent,exports.DropdownMenuGroup=S.DropdownMenuGroup,exports.DropdownMenuItem=S.DropdownMenuItem,exports.DropdownMenuLabel=S.DropdownMenuLabel,exports.DropdownMenuPortal=S.DropdownMenuPortal,exports.DropdownMenuRadioGroup=S.DropdownMenuRadioGroup,exports.DropdownMenuRadioItem=S.DropdownMenuRadioItem,exports.DropdownMenuSeparator=S.DropdownMenuSeparator,exports.DropdownMenuShortcut=S.DropdownMenuShortcut,exports.DropdownMenuSub=S.DropdownMenuSub,exports.DropdownMenuSubContent=S.DropdownMenuSubContent,exports.DropdownMenuSubTrigger=S.DropdownMenuSubTrigger,exports.DropdownMenuTrigger=S.DropdownMenuTrigger,exports.EditBtn=je.EditBtn,exports.EmailField=E.C,exports.Empty=V.Empty,exports.EmptyContent=V.EmptyContent,exports.EmptyDescription=V.EmptyDescription,exports.EmptyDisplay=se.EmptyDisplay,exports.EmptyHeader=V.EmptyHeader,exports.EmptyMedia=V.EmptyMedia,exports.EmptyTitle=V.EmptyTitle,exports.ErrorDialog=fe.ErrorDialog,exports.FeatureDeveloping=Se.FeatureDeveloping,exports.FeatureFixing=Ce.FeatureFixing,exports.Field=E.L,exports.FieldContent=E.R,exports.FieldContentMain=E.z,exports.FieldError=E.B,exports.FieldGroup=E.V,exports.FieldLabel=E.H,exports.FieldSeparator=E.U,exports.FileUploader=Le.FileUploader,exports.Flex=re.Flex,exports.Form=H.Form,exports.FormControl=H.FormControl,exports.FormDescription=H.FormDescription,exports.FormField=H.FormField,exports.FormItem=H.FormItem,exports.FormLabel=H.FormLabel,exports.FormMessage=H.FormMessage,exports.GainLossBarChart=v.GainLossBarChart,exports.Google=ke.Google,exports.Grid=xe.Grid,exports.GridProductCard=ne.GridProductCard,exports.HoverCard=U.HoverCard,exports.HoverCardContent=U.HoverCardContent,exports.HoverCardTrigger=U.HoverCardTrigger,exports.Image=te.Image,exports.IndexedPerformanceLineChart=v.IndexedPerformanceLineChart,exports.Input=ye.Input,exports.InputOTP=F.InputOTP,exports.InputOTPGroup=F.InputOTPGroup,exports.InputOTPSeparator=F.InputOTPSeparator,exports.InputOTPSlot=F.InputOTPSlot,exports.Item=W.Item,exports.ItemActions=W.ItemActions,exports.ItemContent=W.ItemContent,exports.ItemDescription=W.ItemDescription,exports.ItemFooter=W.ItemFooter,exports.ItemGroup=W.ItemGroup,exports.ItemHeader=W.ItemHeader,exports.ItemMedia=W.ItemMedia,exports.ItemSeparator=W.ItemSeparator,exports.ItemTitle=W.ItemTitle,exports.Label=be.Label,exports.LoadingDialog=pe.LoadingDialog,exports.LoginPage=Ee.LoginPage,exports.Menubar=G.Menubar,exports.MenubarCheckboxItem=G.MenubarCheckboxItem,exports.MenubarContent=G.MenubarContent,exports.MenubarGroup=G.MenubarGroup,exports.MenubarItem=G.MenubarItem,exports.MenubarLabel=G.MenubarLabel,exports.MenubarMenu=G.MenubarMenu,exports.MenubarPortal=G.MenubarPortal,exports.MenubarRadioGroup=G.MenubarRadioGroup,exports.MenubarRadioItem=G.MenubarRadioItem,exports.MenubarSeparator=G.MenubarSeparator,exports.MenubarShortcut=G.MenubarShortcut,exports.MenubarSub=G.MenubarSub,exports.MenubarSubContent=G.MenubarSubContent,exports.MenubarSubTrigger=G.MenubarSubTrigger,exports.MenubarTrigger=G.MenubarTrigger,exports.MetricRadarChart=v.MetricRadarChart,exports.MirroredBarChart=v.MirroredBarChart,exports.MultipleSelector=K.MultipleSelector,exports.NameDisplay=ce.NameDisplay,exports.NavigationMenu=q.NavigationMenu,exports.NavigationMenuContent=q.NavigationMenuContent,exports.NavigationMenuIndicator=q.NavigationMenuIndicator,exports.NavigationMenuItem=q.NavigationMenuItem,exports.NavigationMenuLink=q.NavigationMenuLink,exports.NavigationMenuList=q.NavigationMenuList,exports.NavigationMenuTrigger=q.NavigationMenuTrigger,exports.NavigationMenuViewport=q.NavigationMenuViewport,exports.NotAuthorized=we.NotAuthorized,exports.NotFound=Te.NotFound,exports.NumberField=E.S,exports.OrdersBarChart=v.OrdersBarChart,exports.Pagination=J.Pagination,exports.PaginationContent=J.PaginationContent,exports.PaginationEllipsis=J.PaginationEllipsis,exports.PaginationItem=J.PaginationItem,exports.PaginationLink=J.PaginationLink,exports.PaginationNext=J.PaginationNext,exports.PaginationPrevious=J.PaginationPrevious,exports.Paragraph=t.Paragraph,exports.PasswordField=E.x,exports.PaymentLayout=N.t,exports.PhoneNumberDisplay=c.PhoneNumberDisplay,exports.Popover=w.Popover,exports.PopoverAnchor=w.PopoverAnchor,exports.PopoverClose=w.PopoverClose,exports.PopoverContent=w.PopoverContent,exports.PopoverTrigger=w.PopoverTrigger,exports.PortfolioAllocationTreemap=v.PortfolioAllocationTreemap,exports.PriceRangeAreaChart=v.PriceRangeAreaChart,exports.ProductCard=r.ProductCard,exports.Progress=he.Progress,exports.RadioGroup=k.RadioGroup,exports.RadioGroupField=E.b,exports.RadioGroupItem=k.RadioGroupItem,exports.RefreshBtn=Me.RefreshBtn,exports.RegisterPage=De.RegisterPage,exports.ResizableHandle=C.ResizableHandle,exports.ResizablePanel=C.ResizablePanel,exports.ResizablePanelGroup=C.ResizablePanelGroup,exports.RevenueAreaChart=v.RevenueAreaChart,exports.RevenueOrdersComposedChart=v.RevenueOrdersComposedChart,exports.RoleBadge=l.RoleBadge,exports.SalesTargetRadialChart=v.SalesTargetRadialChart,exports.SankeyFlowChart=v.SankeyFlowChart,exports.ScrollArea=Y.ScrollArea,exports.ScrollBar=Y.ScrollBar,exports.SearchInput=Fe.SearchInput,exports.SearchModal=me.t,exports.Select=T.Select,exports.SelectContent=T.SelectContent,exports.SelectField=E.y,exports.SelectGroup=T.SelectGroup,exports.SelectItem=T.SelectItem,exports.SelectLabel=T.SelectLabel,exports.SelectSeparator=T.SelectSeparator,exports.SelectTrigger=T.SelectTrigger,exports.SelectValue=T.SelectValue,exports.Separator=ue.Separator,exports.Sheet=h.Sheet,exports.SheetClose=h.SheetClose,exports.SheetContent=h.SheetContent,exports.SheetDescription=h.SheetDescription,exports.SheetFooter=h.SheetFooter,exports.SheetHeader=h.SheetHeader,exports.SheetTitle=h.SheetTitle,exports.SheetTrigger=h.SheetTrigger,exports.SimpleArrayField=E.K,exports.SimpleBooleanField=E.I,exports.SimpleCard=i.SimpleCard,exports.SimpleComboboxField=E.F,exports.SimpleDateField=E.P,exports.SimpleEmailField=E.M,exports.SimpleNumberField=E.j,exports.SimplePasswordField=E.A,exports.SimpleRadioGroupField=E.N,exports.SimpleSelectField=E.k,exports.SimpleTextField=E.D,exports.SimpleTextareaField=E.O,exports.Skeleton=ee.Skeleton,exports.Slider=Re.Slider,exports.SparklineChart=v.SparklineChart,exports.Spinner=ve.Spinner,exports.StackedAreaChart=v.StackedAreaChart,exports.Statistic=u.Statistic,exports.Switch=ge.Switch,exports.SwitchField=E.v,exports.Table=X.Table,exports.TableBody=X.TableBody,exports.TableCaption=X.TableCaption,exports.TableCell=X.TableCell,exports.TableFooter=X.TableFooter,exports.TableHead=X.TableHead,exports.TableHeader=X.TableHeader,exports.TableRow=X.TableRow,exports.Tabs=Z.Tabs,exports.TabsContent=Z.TabsContent,exports.TabsList=Z.TabsList,exports.TabsTrigger=Z.TabsTrigger,exports.TanStackActionSubmit=E.m,exports.TanStackActionsForm=E.p,exports.TanStackCardForm=E.f,exports.TanStackContainerForm=E.d,exports.TanStackDialogForm=E.u,exports.TanStackFieldGroup=E.l,exports.TanStackPopoverForm=E.c,exports.TanStackSectionForm=E.s,exports.TanStackTitleField=E.o,exports.TextEditor=j.t,exports.TextEditorField=E.h,exports.TextEditorToolbar=j.n,exports.TextField=E._,exports.Textarea=A.Textarea,exports.TextareaField=E.g,exports.Title=le.Title,exports.Toaster=ze.Toaster,exports.Toggle=Q.Toggle,exports.ToggleGroup=$.ToggleGroup,exports.ToggleGroupItem=$.ToggleGroupItem,exports.Tooltip=s.Tooltip,exports.TooltipContent=s.TooltipContent,exports.TooltipProvider=s.TooltipProvider,exports.TooltipTrigger=s.TooltipTrigger,exports.TopProductsBarChart=v.TopProductsBarChart,exports.TrashBtn=Ne.TrashBtn,exports.UITableAnalysisPanel=x.s,exports.UITableAvatarNameDisplay=x.W,exports.UITableBadgeDisplay=x.U,exports.UITableBody=x.T,exports.UITableBooleanDisplay=x.H,exports.UITableCell=x.w,exports.UITableCellActions=x.C,exports.UITableCellSelect=x.S,exports.UITableContainer=x.c,exports.UITableCurrencyDisplay=x.V,exports.UITableDateDisplay=x.B,exports.UITableDescriptionDisplay=x.z,exports.UITableEditButton=x.R,exports.UITableEmailDisplay=x.L,exports.UITableEmptyDisplay=x.x,exports.UITableFilter=x.o,exports.UITableFooter=x.b,exports.UITableFooterRow=x.y,exports.UITableHead=x.v,exports.UITableHeadCell=x.g,exports.UITableHeadCellOption=x._,exports.UITableHeadCellSelect=x.h,exports.UITableHeadRow=x.m,exports.UITableInnerTable=x.p,exports.UITableInnerWrapper=x.f,exports.UITableListDisplay=x.I,exports.UITableLoadMore=x.d,exports.UITableMoreButton=x.F,exports.UITableNameDisplay=x.P,exports.UITablePermalink=x.N,exports.UITablePhoneNumberDisplay=x.M,exports.UITableProgressDisplay=x.j,exports.UITableProvider=x.a,exports.UITableRemoveButton=x.A,exports.UITableRow=x.u,exports.UITableStatisticDisplay=x.k,exports.UITableStatusDisplay=x.O,exports.UITableSummaryBar=x.i,exports.UITableToggleButton=x.D,exports.UITableTooltip=x.t,exports.UITableTooltipActions=x.n,exports.UITableTooltipFilter=x.r,exports.UITableUserDataDisplay=x.E,exports.UITableWrapper=x.l,exports.UploadImageBtn=Pe.UploadImageBtn,exports.UserDataDisplay=f.UserDataDisplay,exports.VerifyEmailPage=Oe.VerifyEmailPage,exports.VolumeBarChart=v.VolumeBarChart,exports.WaterfallChart=v.WaterfallChart,exports.badgeVariants=o.badgeVariants,exports.buttonGroupVariants=L.buttonGroupVariants,exports.computeIndexedSeries=v.computeIndexedSeries,exports.formatCompactNumber=v.formatCompactNumber,exports.formatCurrency=v.formatCurrency,exports.formatPercent=v.formatPercent,exports.formatSignedPercent=v.formatSignedPercent,exports.getChartColor=v.getChartColor,exports.getDirectionColor=v.getDirectionColor,exports.navigationMenuTriggerStyle=q.navigationMenuTriggerStyle,exports.paragraphVariants=t.paragraphVariants,exports.toDateLabel=v.toDateLabel,exports.toast=Be.toast,exports.toggleVariants=Q.toggleVariants,exports.useChart=_.useChart,exports.useDebounce=K.useDebounce,exports.useFormField=H.useFormField,exports.useTanStackFieldContext=E.t,exports.useTanStackForm=E.n,exports.useTanStackFormContext=E.r,exports.withTanStackFieldGroup=E.i,exports.withTanStackForm=E.a;
|
package/dist/index.d.cts
CHANGED
|
@@ -18,6 +18,7 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./ui/t
|
|
|
18
18
|
import { DetailDialog, DetailDialogProps } from "./dialogs/detail-dialog/index.cjs";
|
|
19
19
|
import { ErrorDialog, ErrorDialogProps } from "./dialogs/error-dialog.cjs";
|
|
20
20
|
import { LoadingDialog, LoadingDialogProps } from "./dialogs/loading-dialog.cjs";
|
|
21
|
+
import { ActivityHeatmapChart, ActivityHeatmapChartProps, ActivityPoint, BaseChartProps, CandlestickChart, CandlestickChartProps, ChartSeries, ChartTrend, ConversionFunnelChart, ConversionFunnelChartProps, CorrelationScatterChart, CorrelationScatterChartProps, DonutChart, DonutChartProps, DonutChartSegment, FunnelStage, GainLossBarChart, GainLossBarChartProps, IndexedPerformanceLineChart, IndexedPerformanceLineChartProps, MetricRadarChart, MetricRadarChartProps, MirroredBarChart, MirroredBarChartProps, MirroredBarRow, NamedValue, OHLCPoint, OrdersBarChart, OrdersBarChartProps, PortfolioAllocationTreemap, PortfolioAllocationTreemapProps, PortfolioHolding, PriceRangeAreaChart, PriceRangeAreaChartProps, RevenueAreaChart, RevenueAreaChartProps, RevenueOrdersComposedChart, RevenueOrdersComposedChartProps, RevenueOrdersPoint, SalesTargetRadialChart, SalesTargetRadialChartProps, SankeyFlowChart, SankeyFlowChartProps, SankeyFlowLink, SankeyFlowNode, ScatterPoint, SparklineChart, SparklineChartProps, StackedAreaChart, StackedAreaChartProps, TimeSeriesPoint, TopProductsBarChart, TopProductsBarChartProps, VolumeBarChart, VolumeBarChartProps, WaterfallChart, WaterfallChartProps, WaterfallPoint, computeIndexedSeries, formatCompactNumber, formatCurrency, formatPercent, formatSignedPercent, getChartColor, getDirectionColor, toDateLabel } from "./features/charts/index.cjs";
|
|
21
22
|
import { n as BadgeProps, r as badgeVariants, t as Badge } from "./badge-D0InQSvM.cjs";
|
|
22
23
|
import { Description, DescriptionBadge, DescriptionBoolean, DescriptionCopy, DescriptionDate, DescriptionEmpty, DescriptionHeader, DescriptionImages, DescriptionItem, DescriptionLink, DescriptionLongText, DescriptionName, DescriptionNumberPhone, DescriptionSection, DescriptionStatistic, DescriptionStatisticProps, DescriptionStatus, DescriptionTagList, DescriptionUser } from "./features/descriptions/index.cjs";
|
|
23
24
|
import { SearchModal } from "./features/search-modal/index.cjs";
|
|
@@ -54,6 +55,7 @@ import { ButtonGroup, ButtonGroupSeparator, ButtonGroupText, buttonGroupVariants
|
|
|
54
55
|
import { Calendar, CalendarDayButton } from "./ui/calendar.cjs";
|
|
55
56
|
import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "./ui/card.cjs";
|
|
56
57
|
import { Carousel, CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "./ui/carousel.cjs";
|
|
58
|
+
import { ChartConfig, ChartContainer, ChartContainerProps, ChartLegend, ChartLegendContent, ChartLegendContentProps, ChartStyle, ChartTooltip, ChartTooltipContent, ChartTooltipContentProps, useChart } from "./ui/chart.cjs";
|
|
57
59
|
import { Checkbox } from "./ui/checkbox.cjs";
|
|
58
60
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./ui/collapsible.cjs";
|
|
59
61
|
import { a as DialogFooter, c as DialogPortal, i as DialogDescription, l as DialogTitle, n as DialogClose, o as DialogHeader, r as DialogContent, s as DialogOverlay, t as Dialog, u as DialogTrigger } from "./dialog-BASlxWF_.cjs";
|
|
@@ -76,7 +78,7 @@ import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, Pagi
|
|
|
76
78
|
import { Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger } from "./ui/popover.cjs";
|
|
77
79
|
import { Progress } from "./ui/progress.cjs";
|
|
78
80
|
import { RadioGroup, RadioGroupItem } from "./ui/radio-group.cjs";
|
|
79
|
-
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "./resizable-
|
|
81
|
+
import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "./resizable-BLfxHCf4.cjs";
|
|
80
82
|
import { ScrollArea, ScrollBar } from "./ui/scroll-area.cjs";
|
|
81
83
|
import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue } from "./ui/select.cjs";
|
|
82
84
|
import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from "./ui/sheet.cjs";
|
|
@@ -90,4 +92,4 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs.cjs";
|
|
|
90
92
|
import { Textarea } from "./ui/textarea.cjs";
|
|
91
93
|
import { Toggle, toggleVariants } from "./ui/toggle.cjs";
|
|
92
94
|
import { ToggleGroup, ToggleGroupItem } from "./ui/toggle-group.cjs";
|
|
93
|
-
export { ActiveFilter, AddNewBtn, Alert, AlertDescription, AlertDescriptionProps, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertProps, AlertTitle, AlertTitleProps, AnyFieldProps, ArrayCol, ArrayHeaderRow, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, BooleanFieldValue, BooleanFilterValue, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, CMSLayout, CMSLayoutProps, type CMSLayoutUser, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, Checkbox, CheckboxField, CheckboxFieldProps, Collapsible, CollapsibleContent, CollapsibleTrigger, ColumnAggregation, ColumnAggregationType, ComboboxField, ComboboxFieldProps, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CountryDisplay, CsvCell, DataList, DataListItem, DateDisplay, DateField, DateFieldProps, DateFieldValue, DateRangeFilterValue, DateTooltip, Description, DescriptionBadge, DescriptionBoolean, DescriptionCopy, DescriptionDate, DescriptionEmpty, DescriptionHeader, DescriptionImages, DescriptionItem, DescriptionLink, DescriptionLongText, DescriptionName, DescriptionNumberPhone, DescriptionSection, DescriptionStatistic, DescriptionStatisticProps, DescriptionStatus, DescriptionTagList, DescriptionUser, DetailDialog, type DetailDialogProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditBtn, EmailField, EmailFieldProps, Empty, EmptyContent, EmptyDescription, EmptyDisplay, EmptyHeader, EmptyMedia, EmptyTitle, ErrorDialog, type ErrorDialogProps, FeatureDeveloping, FeatureFixing, Field, FieldContent, FieldContentMain, FieldError, FieldGroup, FieldLabel, FieldOrientation, FieldRounding, FieldSeparator, FieldType, FileUploader, FilterDefinition, FilterOption, FilterType, FilterValue, Flex, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Google, Grid, GridProductCard, HoverCard, HoverCardContent, HoverCardTrigger, Image, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputVariantProps, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, LoadingDialog, type LoadingDialogProps, LoginPage, type LoginPageProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MultiSelectFieldValue, MultipleSelector, MultipleSelectorRef, NameDisplay, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NotAuthorized, NotFound, type NotFoundProps, NumberField, NumberFieldProps, NumberFieldValue, NumberFilterValue, Option, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Paragraph, type ParagraphProps, PasswordField, PasswordFieldProps, PaymentLayout, PaymentLayoutUser, PhoneNumberDisplay, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, ProductCard, Progress, RadioGroup, RadioGroupField, RadioGroupFieldProps, RadioGroupItem, RadioOption, RefreshBtn, RegisterPage, type RegisterPageProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, RoleBadge, RowData, ScrollArea, ScrollBar, SearchInput, SearchModal, Select, SelectContent, SelectField, SelectFieldProps, SelectGroup, SelectItem, SelectLabel, SelectOption, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SimpleArrayField, SimpleBooleanField, SimpleCard, SimpleComboboxField, SimpleDateField, SimpleEmailField, SimpleNumberField, SimplePasswordField, SimpleRadioGroupField, SimpleSelectField, SimpleTextField, SimpleTextFieldProps, SimpleTextareaField, SingleTagFilterValue, Skeleton, Slider, Spinner, Statistic, type StatisticProps, SummaryItem, Switch, SwitchField, SwitchFieldProps, TTableAnalysisContext, TTableBodyContext, TTableContext, TTableFilterContext, TTableHeadRowContext, TTableInnerTableContext, TTableInnerWrapperContext, TTableRowContext, TUITableBody, TUITableCell, TUITableCellActions, TUITableCellSelect, TUITableColumn, TUITableEmptyDisplay, TUITableFooter, TUITableHead, TUITableHeadCell, TUITableHeadCellOption, TUITableHeadCellSelect, TUITableHeadRow, TUITableInnerTable, TUITableInnerWrapper, TUITableLoadMore, TUITableRow, TUITableWrapper, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableProviderProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagFilterValue, TanStackActionSubmit, TanStackActionsForm, TanStackCardForm, TanStackContainerForm, TanStackDialogForm, TanStackFieldGroup, TanStackPopoverForm, TanStackSectionForm, TanStackTitleField, TextEditor, TextEditorField, TextEditorFieldProps, type TextEditorProps, TextEditorToolbar, type TextEditorToolbarProps, TextField, TextFieldProps, TextFieldValue, TextFilterValue, Textarea, TextareaField, TextareaFieldProps, Title, type TitleProps, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TrashBtn, UITableAnalysisPanel, UITableAvatarNameDisplay, UITableBadgeDisplay, UITableBody, UITableBooleanDisplay, UITableCell, UITableCellActions, UITableCellSelect, UITableContainer, UITableCurrencyDisplay, UITableDateDisplay, UITableDescriptionDisplay, UITableEditButton, UITableEmailDisplay, UITableEmptyDisplay, UITableFilter, UITableFooter, UITableFooterRow, UITableHead, UITableHeadCell, UITableHeadCellOption, UITableHeadCellSelect, UITableHeadRow, UITableInnerTable, UITableInnerWrapper, UITableListDisplay, UITableLoadMore, UITableMoreButton, UITableNameDisplay, UITablePermalink, UITablePhoneNumberDisplay, UITableProgressDisplay, UITableProvider, UITableRemoveButton, UITableRow, UITableStatisticDisplay, UITableStatusDisplay, UITableSummaryBar, UITableToggleButton, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper, UploadImageBtn, UserDataDisplay, VerifyEmailPage, type VerifyEmailPageProps, badgeVariants, buttonGroupVariants, navigationMenuTriggerStyle, paragraphVariants, toast, toggleVariants, useDebounce, useFormField, useTanStackFieldContext, useTanStackForm, useTanStackFormContext, withTanStackFieldGroup, withTanStackForm };
|
|
95
|
+
export { ActiveFilter, ActivityHeatmapChart, ActivityHeatmapChartProps, ActivityPoint, AddNewBtn, Alert, AlertDescription, AlertDescriptionProps, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertProps, AlertTitle, AlertTitleProps, AnyFieldProps, ArrayCol, ArrayHeaderRow, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, BaseChartProps, BooleanFieldValue, BooleanFilterValue, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, CMSLayout, CMSLayoutProps, type CMSLayoutUser, Calendar, CalendarDayButton, CandlestickChart, CandlestickChartProps, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartConfig, ChartContainer, ChartContainerProps, ChartLegend, ChartLegendContent, ChartLegendContentProps, ChartSeries, ChartStyle, ChartTooltip, ChartTooltipContent, ChartTooltipContentProps, ChartTrend, Checkbox, CheckboxField, CheckboxFieldProps, Collapsible, CollapsibleContent, CollapsibleTrigger, ColumnAggregation, ColumnAggregationType, ComboboxField, ComboboxFieldProps, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversionFunnelChart, ConversionFunnelChartProps, CorrelationScatterChart, CorrelationScatterChartProps, CountryDisplay, CsvCell, DataList, DataListItem, DateDisplay, DateField, DateFieldProps, DateFieldValue, DateRangeFilterValue, DateTooltip, Description, DescriptionBadge, DescriptionBoolean, DescriptionCopy, DescriptionDate, DescriptionEmpty, DescriptionHeader, DescriptionImages, DescriptionItem, DescriptionLink, DescriptionLongText, DescriptionName, DescriptionNumberPhone, DescriptionSection, DescriptionStatistic, DescriptionStatisticProps, DescriptionStatus, DescriptionTagList, DescriptionUser, DetailDialog, type DetailDialogProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DonutChart, DonutChartProps, DonutChartSegment, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EditBtn, EmailField, EmailFieldProps, Empty, EmptyContent, EmptyDescription, EmptyDisplay, EmptyHeader, EmptyMedia, EmptyTitle, ErrorDialog, type ErrorDialogProps, FeatureDeveloping, FeatureFixing, Field, FieldContent, FieldContentMain, FieldError, FieldGroup, FieldLabel, FieldOrientation, FieldRounding, FieldSeparator, FieldType, FileUploader, FilterDefinition, FilterOption, FilterType, FilterValue, Flex, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FunnelStage, GainLossBarChart, GainLossBarChartProps, Google, Grid, GridProductCard, HoverCard, HoverCardContent, HoverCardTrigger, Image, IndexedPerformanceLineChart, IndexedPerformanceLineChartProps, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputVariantProps, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, LoadingDialog, type LoadingDialogProps, LoginPage, type LoginPageProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricRadarChart, MetricRadarChartProps, MirroredBarChart, MirroredBarChartProps, MirroredBarRow, MultiSelectFieldValue, MultipleSelector, MultipleSelectorRef, NameDisplay, NamedValue, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NotAuthorized, NotFound, type NotFoundProps, NumberField, NumberFieldProps, NumberFieldValue, NumberFilterValue, OHLCPoint, Option, OrdersBarChart, OrdersBarChartProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Paragraph, type ParagraphProps, PasswordField, PasswordFieldProps, PaymentLayout, PaymentLayoutUser, PhoneNumberDisplay, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverTrigger, PortfolioAllocationTreemap, PortfolioAllocationTreemapProps, PortfolioHolding, PriceRangeAreaChart, PriceRangeAreaChartProps, ProductCard, Progress, RadioGroup, RadioGroupField, RadioGroupFieldProps, RadioGroupItem, RadioOption, RefreshBtn, RegisterPage, type RegisterPageProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, RevenueAreaChart, RevenueAreaChartProps, RevenueOrdersComposedChart, RevenueOrdersComposedChartProps, RevenueOrdersPoint, RoleBadge, RowData, SalesTargetRadialChart, SalesTargetRadialChartProps, SankeyFlowChart, SankeyFlowChartProps, SankeyFlowLink, SankeyFlowNode, ScatterPoint, ScrollArea, ScrollBar, SearchInput, SearchModal, Select, SelectContent, SelectField, SelectFieldProps, SelectGroup, SelectItem, SelectLabel, SelectOption, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, SimpleArrayField, SimpleBooleanField, SimpleCard, SimpleComboboxField, SimpleDateField, SimpleEmailField, SimpleNumberField, SimplePasswordField, SimpleRadioGroupField, SimpleSelectField, SimpleTextField, SimpleTextFieldProps, SimpleTextareaField, SingleTagFilterValue, Skeleton, Slider, SparklineChart, SparklineChartProps, Spinner, StackedAreaChart, StackedAreaChartProps, Statistic, type StatisticProps, SummaryItem, Switch, SwitchField, SwitchFieldProps, TTableAnalysisContext, TTableBodyContext, TTableContext, TTableFilterContext, TTableHeadRowContext, TTableInnerTableContext, TTableInnerWrapperContext, TTableRowContext, TUITableBody, TUITableCell, TUITableCellActions, TUITableCellSelect, TUITableColumn, TUITableEmptyDisplay, TUITableFooter, TUITableHead, TUITableHeadCell, TUITableHeadCellOption, TUITableHeadCellSelect, TUITableHeadRow, TUITableInnerTable, TUITableInnerWrapper, TUITableLoadMore, TUITableRow, TUITableWrapper, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableProviderProps, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TagFilterValue, TanStackActionSubmit, TanStackActionsForm, TanStackCardForm, TanStackContainerForm, TanStackDialogForm, TanStackFieldGroup, TanStackPopoverForm, TanStackSectionForm, TanStackTitleField, TextEditor, TextEditorField, TextEditorFieldProps, type TextEditorProps, TextEditorToolbar, type TextEditorToolbarProps, TextField, TextFieldProps, TextFieldValue, TextFilterValue, Textarea, TextareaField, TextareaFieldProps, TimeSeriesPoint, Title, type TitleProps, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TopProductsBarChart, TopProductsBarChartProps, TrashBtn, UITableAnalysisPanel, UITableAvatarNameDisplay, UITableBadgeDisplay, UITableBody, UITableBooleanDisplay, UITableCell, UITableCellActions, UITableCellSelect, UITableContainer, UITableCurrencyDisplay, UITableDateDisplay, UITableDescriptionDisplay, UITableEditButton, UITableEmailDisplay, UITableEmptyDisplay, UITableFilter, UITableFooter, UITableFooterRow, UITableHead, UITableHeadCell, UITableHeadCellOption, UITableHeadCellSelect, UITableHeadRow, UITableInnerTable, UITableInnerWrapper, UITableListDisplay, UITableLoadMore, UITableMoreButton, UITableNameDisplay, UITablePermalink, UITablePhoneNumberDisplay, UITableProgressDisplay, UITableProvider, UITableRemoveButton, UITableRow, UITableStatisticDisplay, UITableStatusDisplay, UITableSummaryBar, UITableToggleButton, UITableTooltip, UITableTooltipActions, UITableTooltipFilter, UITableUserDataDisplay, UITableWrapper, UploadImageBtn, UserDataDisplay, VerifyEmailPage, type VerifyEmailPageProps, VolumeBarChart, VolumeBarChartProps, WaterfallChart, WaterfallChartProps, WaterfallPoint, badgeVariants, buttonGroupVariants, computeIndexedSeries, formatCompactNumber, formatCurrency, formatPercent, formatSignedPercent, getChartColor, getDirectionColor, navigationMenuTriggerStyle, paragraphVariants, toDateLabel, toast, toggleVariants, useChart, useDebounce, useFormField, useTanStackFieldContext, useTanStackForm, useTanStackFormContext, withTanStackFieldGroup, withTanStackForm };
|