@customafk/lunas-ui 0.2.63 → 0.2.65

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.
Files changed (187) hide show
  1. package/dist/action-submit-3kZ7JOop.cjs +2 -0
  2. package/dist/action-submit-3kZ7JOop.cjs.map +1 -0
  3. package/dist/action-submit-Dg5GvYz5.mjs +2 -0
  4. package/dist/action-submit-Dg5GvYz5.mjs.map +1 -0
  5. package/dist/actions-form-BL_B81Vg.mjs +2 -0
  6. package/dist/actions-form-BL_B81Vg.mjs.map +1 -0
  7. package/dist/actions-form-CE_enCgE.cjs +2 -0
  8. package/dist/actions-form-CE_enCgE.cjs.map +1 -0
  9. package/dist/card-form-BR5kDTzB.cjs +2 -0
  10. package/dist/card-form-BR5kDTzB.cjs.map +1 -0
  11. package/dist/card-form-D9fNO-6F.mjs +2 -0
  12. package/dist/card-form-D9fNO-6F.mjs.map +1 -0
  13. package/dist/checkbox-field-CRcfuDu1.mjs +2 -0
  14. package/dist/checkbox-field-CRcfuDu1.mjs.map +1 -0
  15. package/dist/checkbox-field-DdeohRmi.cjs +2 -0
  16. package/dist/checkbox-field-DdeohRmi.cjs.map +1 -0
  17. package/dist/combobox-field-BGChwajc.mjs +2 -0
  18. package/dist/combobox-field-BGChwajc.mjs.map +1 -0
  19. package/dist/combobox-field-D9NdSih1.cjs +2 -0
  20. package/dist/combobox-field-D9NdSih1.cjs.map +1 -0
  21. package/dist/container-form-BdsEX0NH.mjs +2 -0
  22. package/dist/container-form-BdsEX0NH.mjs.map +1 -0
  23. package/dist/container-form-CxxUYctk.cjs +2 -0
  24. package/dist/container-form-CxxUYctk.cjs.map +1 -0
  25. package/dist/date-field-BqAX4M_h.cjs +2 -0
  26. package/dist/date-field-BqAX4M_h.cjs.map +1 -0
  27. package/dist/date-field-Dm4ki1HS.mjs +2 -0
  28. package/dist/date-field-Dm4ki1HS.mjs.map +1 -0
  29. package/dist/dialog-form-ClWBZbUN.mjs +2 -0
  30. package/dist/dialog-form-ClWBZbUN.mjs.map +1 -0
  31. package/dist/dialog-form-DN-NlQFO.cjs +2 -0
  32. package/dist/dialog-form-DN-NlQFO.cjs.map +1 -0
  33. package/dist/dialogs/confirm-dialog.cjs +1 -1
  34. package/dist/dialogs/confirm-dialog.cjs.map +1 -1
  35. package/dist/dialogs/confirm-dialog.mjs +1 -1
  36. package/dist/dialogs/confirm-dialog.mjs.map +1 -1
  37. package/dist/email-field-DZNR_JbT.mjs +2 -0
  38. package/dist/email-field-DZNR_JbT.mjs.map +1 -0
  39. package/dist/email-field-lDd9ouFN.cjs +2 -0
  40. package/dist/email-field-lDd9ouFN.cjs.map +1 -0
  41. package/dist/features/charts/index.cjs +1 -1
  42. package/dist/features/charts/index.cjs.map +1 -1
  43. package/dist/features/charts/index.d.cts +556 -1
  44. package/dist/features/charts/index.d.mts +556 -1
  45. package/dist/features/charts/index.mjs +1 -1
  46. package/dist/features/charts/index.mjs.map +1 -1
  47. package/dist/features/tables/index.d.cts +1 -1
  48. package/dist/features/tables/index.d.mts +1 -1
  49. package/dist/features/tanstack-form/index.cjs +1 -1
  50. package/dist/features/tanstack-form/index.d.cts +1 -1
  51. package/dist/features/tanstack-form/index.d.mts +1 -1
  52. package/dist/features/tanstack-form/index.mjs +1 -1
  53. package/dist/field-BKyUqvzh.mjs +2 -0
  54. package/dist/field-BKyUqvzh.mjs.map +1 -0
  55. package/dist/field-BV5twmKA.cjs +2 -0
  56. package/dist/field-BV5twmKA.cjs.map +1 -0
  57. package/dist/group-field-0kStiX8n.cjs +2 -0
  58. package/dist/group-field-0kStiX8n.cjs.map +1 -0
  59. package/dist/group-field-bviEXmo4.mjs +2 -0
  60. package/dist/group-field-bviEXmo4.mjs.map +1 -0
  61. package/dist/{index-CGpGIM1H.d.cts → index-C4isgHWG.d.cts} +2 -2
  62. package/dist/{index-DueBB0rP.d.mts → index-C8W56XKm.d.mts} +2 -2
  63. package/dist/{index-C2KjuFXQ.d.cts → index-DDROD2y9.d.cts} +596 -1117
  64. package/dist/{index-C2KjuFXQ.d.mts → index-DDROD2y9.d.mts} +596 -1117
  65. package/dist/index.cjs +1 -1
  66. package/dist/index.d.cts +5 -5
  67. package/dist/index.d.mts +5 -5
  68. package/dist/index.mjs +1 -1
  69. package/dist/{input-BJMvABEL.d.cts → input-go3H4EQz.d.cts} +2 -2
  70. package/dist/{input-BJMvABEL.d.mts → input-go3H4EQz.d.mts} +2 -2
  71. package/dist/number-field-Baj9Yhiv.mjs +2 -0
  72. package/dist/number-field-Baj9Yhiv.mjs.map +1 -0
  73. package/dist/number-field-BqeSbMvE.cjs +2 -0
  74. package/dist/number-field-BqeSbMvE.cjs.map +1 -0
  75. package/dist/number-input-CqkegUWs.mjs +2 -0
  76. package/dist/number-input-CqkegUWs.mjs.map +1 -0
  77. package/dist/number-input-kTh9zzr7.cjs +2 -0
  78. package/dist/number-input-kTh9zzr7.cjs.map +1 -0
  79. package/dist/password-field-Cq0S949S.cjs +2 -0
  80. package/dist/password-field-Cq0S949S.cjs.map +1 -0
  81. package/dist/password-field-fzpU42sV.mjs +2 -0
  82. package/dist/password-field-fzpU42sV.mjs.map +1 -0
  83. package/dist/popover-form-DNbBGWVF.mjs +2 -0
  84. package/dist/popover-form-DNbBGWVF.mjs.map +1 -0
  85. package/dist/popover-form-KLmew1Vd.cjs +2 -0
  86. package/dist/popover-form-KLmew1Vd.cjs.map +1 -0
  87. package/dist/radio-group-field-DjzD3i-f.cjs +2 -0
  88. package/dist/radio-group-field-DjzD3i-f.cjs.map +1 -0
  89. package/dist/radio-group-field-Ps8yHpnH.mjs +2 -0
  90. package/dist/radio-group-field-Ps8yHpnH.mjs.map +1 -0
  91. package/dist/section-form-B9iTs2we.cjs +2 -0
  92. package/dist/section-form-B9iTs2we.cjs.map +1 -0
  93. package/dist/section-form-B_AZr7jZ.mjs +2 -0
  94. package/dist/section-form-B_AZr7jZ.mjs.map +1 -0
  95. package/dist/select-field-B4eU65OI.cjs +2 -0
  96. package/dist/select-field-B4eU65OI.cjs.map +1 -0
  97. package/dist/select-field-D6Dw-Jwg.mjs +2 -0
  98. package/dist/select-field-D6Dw-Jwg.mjs.map +1 -0
  99. package/dist/separator-BlNAFSJv.mjs +2 -0
  100. package/dist/separator-BlNAFSJv.mjs.map +1 -0
  101. package/dist/separator-sBz__BXC.cjs +2 -0
  102. package/dist/separator-sBz__BXC.cjs.map +1 -0
  103. package/dist/simple-array-field-9oZ-Smzp.mjs +2 -0
  104. package/dist/simple-array-field-9oZ-Smzp.mjs.map +1 -0
  105. package/dist/simple-array-field-Bcs2pHdp.cjs +2 -0
  106. package/dist/simple-array-field-Bcs2pHdp.cjs.map +1 -0
  107. package/dist/simple-boolean-field-C-qq6Vlt.cjs +2 -0
  108. package/dist/simple-boolean-field-C-qq6Vlt.cjs.map +1 -0
  109. package/dist/simple-boolean-field-CkJUMxNU.mjs +2 -0
  110. package/dist/simple-boolean-field-CkJUMxNU.mjs.map +1 -0
  111. package/dist/simple-combobox-field-5dfMd49B.mjs +2 -0
  112. package/dist/simple-combobox-field-5dfMd49B.mjs.map +1 -0
  113. package/dist/simple-combobox-field-BtmQGEo5.cjs +2 -0
  114. package/dist/simple-combobox-field-BtmQGEo5.cjs.map +1 -0
  115. package/dist/simple-date-field-BXoLb496.mjs +2 -0
  116. package/dist/simple-date-field-BXoLb496.mjs.map +1 -0
  117. package/dist/simple-date-field-LVfNhVJi.cjs +2 -0
  118. package/dist/simple-date-field-LVfNhVJi.cjs.map +1 -0
  119. package/dist/simple-email-field-QVUrm8f7.cjs +2 -0
  120. package/dist/simple-email-field-QVUrm8f7.cjs.map +1 -0
  121. package/dist/simple-email-field-rZZIXu7S.mjs +2 -0
  122. package/dist/simple-email-field-rZZIXu7S.mjs.map +1 -0
  123. package/dist/simple-number-field-P9PTwcs4.cjs +2 -0
  124. package/dist/simple-number-field-P9PTwcs4.cjs.map +1 -0
  125. package/dist/simple-number-field-PJAyAOMO.mjs +2 -0
  126. package/dist/simple-number-field-PJAyAOMO.mjs.map +1 -0
  127. package/dist/simple-password-field-BEuFXAsk.mjs +2 -0
  128. package/dist/simple-password-field-BEuFXAsk.mjs.map +1 -0
  129. package/dist/simple-password-field-BW6YkfSP.cjs +2 -0
  130. package/dist/simple-password-field-BW6YkfSP.cjs.map +1 -0
  131. package/dist/simple-radio-group-field-BtQHJpOz.cjs +2 -0
  132. package/dist/simple-radio-group-field-BtQHJpOz.cjs.map +1 -0
  133. package/dist/simple-radio-group-field-DiYQfgts.mjs +2 -0
  134. package/dist/simple-radio-group-field-DiYQfgts.mjs.map +1 -0
  135. package/dist/simple-select-field--zJMLBUY.cjs +2 -0
  136. package/dist/simple-select-field--zJMLBUY.cjs.map +1 -0
  137. package/dist/simple-select-field-Df4DLsbi.mjs +2 -0
  138. package/dist/simple-select-field-Df4DLsbi.mjs.map +1 -0
  139. package/dist/simple-text-field-DVkuHrhF.cjs +2 -0
  140. package/dist/simple-text-field-DVkuHrhF.cjs.map +1 -0
  141. package/dist/simple-text-field-zAfkmlhc.mjs +2 -0
  142. package/dist/simple-text-field-zAfkmlhc.mjs.map +1 -0
  143. package/dist/simple-textarea-field-BaMK0feA.cjs +2 -0
  144. package/dist/simple-textarea-field-BaMK0feA.cjs.map +1 -0
  145. package/dist/simple-textarea-field-q9DeFByl.mjs +2 -0
  146. package/dist/simple-textarea-field-q9DeFByl.mjs.map +1 -0
  147. package/dist/submit-button-CGBaPzE9.mjs +2 -0
  148. package/dist/submit-button-CGBaPzE9.mjs.map +1 -0
  149. package/dist/submit-button-CvINfld5.cjs +2 -0
  150. package/dist/submit-button-CvINfld5.cjs.map +1 -0
  151. package/dist/switch-field-B8HVvc2f.mjs +2 -0
  152. package/dist/switch-field-B8HVvc2f.mjs.map +1 -0
  153. package/dist/switch-field-C1uNuuku.cjs +2 -0
  154. package/dist/switch-field-C1uNuuku.cjs.map +1 -0
  155. package/dist/tanstack-form-CM_Hb3JT.mjs +2 -0
  156. package/dist/tanstack-form-CM_Hb3JT.mjs.map +1 -0
  157. package/dist/tanstack-form-DS_ZvRl8.cjs +2 -0
  158. package/dist/tanstack-form-DS_ZvRl8.cjs.map +1 -0
  159. package/dist/text-editor-field-BBDgCPuc.cjs +2 -0
  160. package/dist/text-editor-field-BBDgCPuc.cjs.map +1 -0
  161. package/dist/text-editor-field-CcsR48Jw.mjs +2 -0
  162. package/dist/text-editor-field-CcsR48Jw.mjs.map +1 -0
  163. package/dist/text-field-BhC_ik5w.cjs +2 -0
  164. package/dist/text-field-BhC_ik5w.cjs.map +1 -0
  165. package/dist/text-field-qhiYvQKt.mjs +2 -0
  166. package/dist/text-field-qhiYvQKt.mjs.map +1 -0
  167. package/dist/textarea-field-C-7ZoUMz.cjs +2 -0
  168. package/dist/textarea-field-C-7ZoUMz.cjs.map +1 -0
  169. package/dist/textarea-field-DqDciVSB.mjs +2 -0
  170. package/dist/textarea-field-DqDciVSB.mjs.map +1 -0
  171. package/dist/title-field-84EnHPvl.mjs +2 -0
  172. package/dist/title-field-84EnHPvl.mjs.map +1 -0
  173. package/dist/title-field-CKxwzMOM.cjs +2 -0
  174. package/dist/title-field-CKxwzMOM.cjs.map +1 -0
  175. package/dist/ui/badge.cjs +1 -1
  176. package/dist/ui/badge.cjs.map +1 -1
  177. package/dist/ui/badge.mjs +1 -1
  178. package/dist/ui/badge.mjs.map +1 -1
  179. package/dist/ui/input.d.cts +1 -1
  180. package/dist/ui/input.d.mts +1 -1
  181. package/dist/ui/inputs/search-input.d.cts +1 -1
  182. package/dist/ui/inputs/search-input.d.mts +1 -1
  183. package/package.json +1 -5
  184. package/dist/tanstack-form-BMVn8ai_.cjs +0 -2
  185. package/dist/tanstack-form-BMVn8ai_.cjs.map +0 -1
  186. package/dist/tanstack-form-DTCgWGCA.mjs +0 -2
  187. package/dist/tanstack-form-DTCgWGCA.mjs.map +0 -1
@@ -15,6 +15,38 @@ type NamedValue = {
15
15
  name: string;
16
16
  value: number;
17
17
  };
18
+ /** A single OHLC(V) period — one candle, one trading day, etc. */
19
+ type OHLCPoint = {
20
+ date: string | Date;
21
+ open: number;
22
+ high: number;
23
+ low: number;
24
+ close: number;
25
+ volume?: number;
26
+ };
27
+ /** A single portfolio holding or asset allocation segment. */
28
+ type PortfolioHolding = NamedValue & {
29
+ /** Config key; derived from `name` when omitted. */key?: string;
30
+ color?: string;
31
+ };
32
+ /** A single step in a waterfall/bridge chart. */
33
+ type WaterfallPoint = {
34
+ label: string; /** Signed delta for a step; the running/starting/ending amount when `isTotal` is set. */
35
+ value: number; /** Renders as a full-height bar from zero instead of a floating delta. Defaults to `false`. */
36
+ isTotal?: boolean;
37
+ };
38
+ /** A single point in an x/y correlation chart; `z` optionally sizes the bubble. */
39
+ type ScatterPoint = {
40
+ x: number;
41
+ y: number;
42
+ z?: number;
43
+ name?: string;
44
+ };
45
+ /** A single day's intensity value in an activity/usage calendar heatmap. */
46
+ type ActivityPoint = {
47
+ date: string | Date;
48
+ value: number;
49
+ };
18
50
  /** Props shared by every prebuilt chart. */
19
51
  type BaseChartProps = {
20
52
  className?: string; /** Enable the recharts enter animation. Disable for deterministic tests. Defaults to `true`. */
@@ -22,6 +54,78 @@ type BaseChartProps = {
22
54
  height?: number;
23
55
  };
24
56
  //#endregion
57
+ //#region packages/components/features/charts/components/activity-heatmap-chart.d.ts
58
+ type ActivityHeatmapChartProps = BaseChartProps & {
59
+ data: ActivityPoint[]; /** Series label used in the theme config. Defaults to `'Activity'`. */
60
+ label?: string;
61
+ color?: string;
62
+ valueFormatter?: (value: number) => string;
63
+ };
64
+ /**
65
+ * A GitHub-style calendar heatmap for daily activity/usage intensity — logins, orders, commits
66
+ * per day — laid out as a week-by-weekday grid with color opacity mapped to value.
67
+ *
68
+ * @example
69
+ * ```tsx
70
+ * import { ActivityHeatmapChart } from '@customafk/lunas-ui/features/charts';
71
+ *
72
+ * <ActivityHeatmapChart
73
+ * data={[
74
+ * { date: '2026-06-01', value: 4 },
75
+ * { date: '2026-06-02', value: 12 },
76
+ * ]}
77
+ * />
78
+ * ```
79
+ */
80
+ declare const ActivityHeatmapChart: ({
81
+ data,
82
+ label,
83
+ color,
84
+ valueFormatter,
85
+ className,
86
+ height
87
+ }: ActivityHeatmapChartProps) => import("react").JSX.Element;
88
+ //#endregion
89
+ //#region packages/components/features/charts/components/candlestick-chart.d.ts
90
+ type CandlestickChartProps = BaseChartProps & {
91
+ data: OHLCPoint[]; /** Series label used in the theme config. Defaults to `'Price'`. */
92
+ label?: string;
93
+ upColor?: string;
94
+ downColor?: string;
95
+ valueFormatter?: (value: number) => string;
96
+ dateFormatter?: (date: string | Date) => string;
97
+ showGrid?: boolean;
98
+ };
99
+ /**
100
+ * A stock candlestick chart — open/high/low/close per period, green/red bodies, high-low wicks.
101
+ * Recharts has no native candlestick type, so bodies and wicks are drawn against the chart's
102
+ * computed axis scales via `useXAxisScale`/`useYAxisScale` (recharts v3).
103
+ *
104
+ * @example
105
+ * ```tsx
106
+ * import { CandlestickChart } from '@customafk/lunas-ui/features/charts';
107
+ *
108
+ * <CandlestickChart
109
+ * data={[
110
+ * { date: '2026-06-01', open: 140, high: 146.2, low: 138.5, close: 144.9 },
111
+ * { date: '2026-06-02', open: 144.9, high: 145.6, low: 141.2, close: 142.1 },
112
+ * ]}
113
+ * />
114
+ * ```
115
+ */
116
+ declare const CandlestickChart: ({
117
+ data,
118
+ label,
119
+ upColor,
120
+ downColor,
121
+ valueFormatter,
122
+ dateFormatter,
123
+ showGrid,
124
+ className,
125
+ animate,
126
+ height
127
+ }: CandlestickChartProps) => import("react").JSX.Element;
128
+ //#endregion
25
129
  //#region packages/components/features/charts/components/conversion-funnel-chart.d.ts
26
130
  type FunnelStage = NamedValue & {
27
131
  /** Config key; derived from `name` when omitted. */key?: string;
@@ -59,6 +163,52 @@ declare const ConversionFunnelChart: ({
59
163
  height
60
164
  }: ConversionFunnelChartProps) => import("react").JSX.Element;
61
165
  //#endregion
166
+ //#region packages/components/features/charts/components/correlation-scatter-chart.d.ts
167
+ type CorrelationScatterChartProps = BaseChartProps & {
168
+ data: ScatterPoint[]; /** Series label used in the theme config. Defaults to `'Points'`. */
169
+ label?: string;
170
+ color?: string;
171
+ xLabel?: string;
172
+ yLabel?: string;
173
+ xFormatter?: (value: number) => string;
174
+ yFormatter?: (value: number) => string; /** Sizes each point from its `z` value. Defaults to `false`. */
175
+ showBubbleSize?: boolean;
176
+ showGrid?: boolean;
177
+ };
178
+ /**
179
+ * A scatter (or bubble, with `showBubbleSize`) chart for correlating two metrics, with an
180
+ * optional third dimension mapped to point size.
181
+ *
182
+ * @example
183
+ * ```tsx
184
+ * import { CorrelationScatterChart } from '@customafk/lunas-ui/features/charts';
185
+ *
186
+ * <CorrelationScatterChart
187
+ * data={[
188
+ * { x: 12, y: 4200, z: 40, name: 'Product A' },
189
+ * { x: 18, y: 5100, z: 65, name: 'Product B' },
190
+ * ]}
191
+ * xLabel="Price ($)"
192
+ * yLabel="Units sold"
193
+ * showBubbleSize
194
+ * />
195
+ * ```
196
+ */
197
+ declare const CorrelationScatterChart: ({
198
+ data,
199
+ label,
200
+ color,
201
+ xLabel,
202
+ yLabel,
203
+ xFormatter,
204
+ yFormatter,
205
+ showBubbleSize,
206
+ showGrid,
207
+ className,
208
+ animate,
209
+ height
210
+ }: CorrelationScatterChartProps) => import("react").JSX.Element;
211
+ //#endregion
62
212
  //#region packages/components/features/charts/components/donut-chart.d.ts
63
213
  type DonutChartSegment = NamedValue & {
64
214
  /** Config key; derived from `name` when omitted. */key?: string;
@@ -100,6 +250,178 @@ declare const DonutChart: ({
100
250
  height
101
251
  }: DonutChartProps) => import("react").JSX.Element;
102
252
  //#endregion
253
+ //#region packages/components/features/charts/components/gain-loss-bar-chart.d.ts
254
+ type GainLossBarChartProps = BaseChartProps & {
255
+ /** `name` is the period label (e.g. a month or quarter); `value` is the signed return. */data: NamedValue[]; /** Series label. Defaults to `'Return'`. */
256
+ label?: string;
257
+ upColor?: string;
258
+ downColor?: string; /** Formats tooltip and Y-axis values. Defaults to a signed percentage. */
259
+ valueFormatter?: (value: number) => string;
260
+ showGrid?: boolean;
261
+ };
262
+ /**
263
+ * Diverging bars for period returns — bars grow up (gain) or down (loss) from a zero baseline,
264
+ * colored accordingly. Clearer than a plain bar chart for signed data.
265
+ *
266
+ * @example
267
+ * ```tsx
268
+ * import { GainLossBarChart } from '@customafk/lunas-ui/features/charts';
269
+ *
270
+ * <GainLossBarChart
271
+ * data={[
272
+ * { name: 'Jan', value: 0.032 },
273
+ * { name: 'Feb', value: -0.014 },
274
+ * ]}
275
+ * />
276
+ * ```
277
+ */
278
+ declare const GainLossBarChart: ({
279
+ data,
280
+ label,
281
+ upColor,
282
+ downColor,
283
+ valueFormatter,
284
+ showGrid,
285
+ className,
286
+ animate,
287
+ height
288
+ }: GainLossBarChartProps) => import("react").JSX.Element;
289
+ //#endregion
290
+ //#region packages/components/features/charts/components/indexed-performance-line-chart.d.ts
291
+ type IndexedPerformanceLineChartProps = BaseChartProps & {
292
+ data: Array<{
293
+ date: string | Date;
294
+ } & Record<string, unknown>>; /** One entry per instrument/fund to compare. */
295
+ series: ChartSeries[]; /** The value every series is normalized to at its first data point. Defaults to `100`. */
296
+ base?: number; /** Formats tooltip and Y-axis values. Defaults to signed % change from `base`. */
297
+ valueFormatter?: (indexedValue: number, base: number) => string;
298
+ dateFormatter?: (date: string | Date) => string;
299
+ showLegend?: boolean;
300
+ showGrid?: boolean;
301
+ };
302
+ /**
303
+ * A multi-line chart normalizing several instruments to a common base (default 100) at the
304
+ * start of the period, so relative performance is directly comparable regardless of price scale.
305
+ *
306
+ * @example
307
+ * ```tsx
308
+ * import { IndexedPerformanceLineChart } from '@customafk/lunas-ui/features/charts';
309
+ *
310
+ * <IndexedPerformanceLineChart
311
+ * data={[
312
+ * { date: '2026-06-01', aapl: 142.5, spy: 512.1 },
313
+ * { date: '2026-06-02', aapl: 145.1, spy: 515.8 },
314
+ * ]}
315
+ * series={[
316
+ * { key: 'aapl', label: 'AAPL' },
317
+ * { key: 'spy', label: 'S&P 500' },
318
+ * ]}
319
+ * />
320
+ * ```
321
+ */
322
+ declare const IndexedPerformanceLineChart: ({
323
+ data,
324
+ series,
325
+ base,
326
+ valueFormatter,
327
+ dateFormatter,
328
+ showLegend,
329
+ showGrid,
330
+ className,
331
+ animate,
332
+ height
333
+ }: IndexedPerformanceLineChartProps) => import("react").JSX.Element;
334
+ //#endregion
335
+ //#region packages/components/features/charts/components/metric-radar-chart.d.ts
336
+ type MetricRadarChartProps = BaseChartProps & {
337
+ data: Array<{
338
+ metric: string;
339
+ } & Record<string, unknown>>; /** One entry per entity being compared (e.g. a candidate, a product, a team). */
340
+ series: ChartSeries[];
341
+ valueFormatter?: (value: number) => string; /** Radius-axis domain. Defaults to `['auto', 'auto']`. */
342
+ domain?: [number | 'auto', number | 'auto'];
343
+ showLegend?: boolean;
344
+ };
345
+ /**
346
+ * A radar chart comparing one or more entities across several metrics/dimensions — performance
347
+ * review scores, feature comparisons, skill matrices.
348
+ *
349
+ * @example
350
+ * ```tsx
351
+ * import { MetricRadarChart } from '@customafk/lunas-ui/features/charts';
352
+ *
353
+ * <MetricRadarChart
354
+ * data={[
355
+ * { metric: 'Speed', teamA: 80, teamB: 65 },
356
+ * { metric: 'Quality', teamA: 70, teamB: 90 },
357
+ * { metric: 'Cost', teamA: 60, teamB: 75 },
358
+ * ]}
359
+ * series={[
360
+ * { key: 'teamA', label: 'Team A' },
361
+ * { key: 'teamB', label: 'Team B' },
362
+ * ]}
363
+ * />
364
+ * ```
365
+ */
366
+ declare const MetricRadarChart: ({
367
+ data,
368
+ series,
369
+ valueFormatter,
370
+ domain,
371
+ showLegend,
372
+ className,
373
+ animate,
374
+ height
375
+ }: MetricRadarChartProps) => import("react").JSX.Element;
376
+ //#endregion
377
+ //#region packages/components/features/charts/components/mirrored-bar-chart.d.ts
378
+ type MirroredBarRow = {
379
+ category: string;
380
+ left: number;
381
+ right: number;
382
+ };
383
+ type MirroredBarChartProps = BaseChartProps & {
384
+ data: MirroredBarRow[];
385
+ leftLabel?: string;
386
+ rightLabel?: string;
387
+ leftColor?: string;
388
+ rightColor?: string;
389
+ valueFormatter?: (value: number) => string;
390
+ showLegend?: boolean;
391
+ showGrid?: boolean;
392
+ };
393
+ /**
394
+ * A two-sided horizontal bar comparison (population-pyramid style) — this period vs. last
395
+ * period, male vs. female, before vs. after — mirrored around a shared zero baseline.
396
+ *
397
+ * @example
398
+ * ```tsx
399
+ * import { MirroredBarChart } from '@customafk/lunas-ui/features/charts';
400
+ *
401
+ * <MirroredBarChart
402
+ * data={[
403
+ * { category: '18-24', left: 1200, right: 1400 },
404
+ * { category: '25-34', left: 2600, right: 2100 },
405
+ * ]}
406
+ * leftLabel="Male"
407
+ * rightLabel="Female"
408
+ * />
409
+ * ```
410
+ */
411
+ declare const MirroredBarChart: ({
412
+ data,
413
+ leftLabel,
414
+ rightLabel,
415
+ leftColor,
416
+ rightColor,
417
+ valueFormatter,
418
+ showLegend,
419
+ showGrid,
420
+ className,
421
+ animate,
422
+ height
423
+ }: MirroredBarChartProps) => import("react").JSX.Element;
424
+ //#endregion
103
425
  //#region packages/components/features/charts/components/orders-bar-chart.d.ts
104
426
  type OrdersBarChartProps = BaseChartProps & {
105
427
  data: Array<{
@@ -147,6 +469,74 @@ declare const OrdersBarChart: ({
147
469
  height
148
470
  }: OrdersBarChartProps) => import("react").JSX.Element;
149
471
  //#endregion
472
+ //#region packages/components/features/charts/components/portfolio-allocation-treemap.d.ts
473
+ type PortfolioAllocationTreemapProps = BaseChartProps & {
474
+ data: PortfolioHolding[];
475
+ valueFormatter?: (value: number) => string; /** Shows the holding name and formatted value inside each rect when it fits. Defaults to `true`. */
476
+ showLabels?: boolean;
477
+ };
478
+ /**
479
+ * A treemap for portfolio holdings / asset allocation, sized by weight — clearer than a donut
480
+ * once there are more than a handful of positions.
481
+ *
482
+ * @example
483
+ * ```tsx
484
+ * import { PortfolioAllocationTreemap } from '@customafk/lunas-ui/features/charts';
485
+ *
486
+ * <PortfolioAllocationTreemap
487
+ * data={[
488
+ * { name: 'AAPL', value: 24000 },
489
+ * { name: 'MSFT', value: 18500 },
490
+ * { name: 'Bonds', value: 12000 },
491
+ * ]}
492
+ * />
493
+ * ```
494
+ */
495
+ declare const PortfolioAllocationTreemap: ({
496
+ data,
497
+ valueFormatter,
498
+ showLabels,
499
+ className,
500
+ animate,
501
+ height
502
+ }: PortfolioAllocationTreemapProps) => import("react").JSX.Element;
503
+ //#endregion
504
+ //#region packages/components/features/charts/components/price-range-area-chart.d.ts
505
+ type PriceRangeAreaChartProps = BaseChartProps & {
506
+ /** Only `date`, `high`, `low`, and `close` are used; pass the same rows given to `CandlestickChart`. */data: Array<Pick<OHLCPoint, 'date' | 'high' | 'low' | 'close'>>; /** Close-price series label. Defaults to `'Close'`. */
507
+ label?: string; /** High-low band label. Defaults to `'Range'`. */
508
+ rangeLabel?: string;
509
+ color?: string;
510
+ valueFormatter?: (value: number) => string;
511
+ dateFormatter?: (date: string | Date) => string;
512
+ showGrid?: boolean;
513
+ };
514
+ /**
515
+ * A shaded high-low trading-range band with the close price drawn on top — the daily range is
516
+ * visible at a glance alongside the closing trend.
517
+ *
518
+ * @example
519
+ * ```tsx
520
+ * import { PriceRangeAreaChart } from '@customafk/lunas-ui/features/charts';
521
+ *
522
+ * <PriceRangeAreaChart
523
+ * data={[{ date: '2026-06-01', high: 146.2, low: 141.8, close: 144.9 }]}
524
+ * />
525
+ * ```
526
+ */
527
+ declare const PriceRangeAreaChart: ({
528
+ data,
529
+ label,
530
+ rangeLabel,
531
+ color,
532
+ valueFormatter,
533
+ dateFormatter,
534
+ showGrid,
535
+ className,
536
+ animate,
537
+ height
538
+ }: PriceRangeAreaChartProps) => import("react").JSX.Element;
539
+ //#endregion
150
540
  //#region packages/components/features/charts/components/revenue-area-chart.d.ts
151
541
  type RevenueAreaChartProps = BaseChartProps & {
152
542
  data: TimeSeriesPoint[]; /** Series label. Defaults to `'Revenue'`. */
@@ -269,6 +659,36 @@ declare const SalesTargetRadialChart: ({
269
659
  height
270
660
  }: SalesTargetRadialChartProps) => import("react").JSX.Element;
271
661
  //#endregion
662
+ //#region packages/components/features/charts/components/sankey-flow-chart.d.ts
663
+ type SankeyFlowNode = {
664
+ name: string;
665
+ color?: string;
666
+ };
667
+ type SankeyFlowLink = {
668
+ /** Node name, matching an entry in `nodes`. */source: string; /** Node name, matching an entry in `nodes`. */
669
+ target: string;
670
+ value: number;
671
+ };
672
+ type SankeyFlowChartProps = BaseChartProps & {
673
+ nodes: Array<SankeyFlowNode | string>;
674
+ links: SankeyFlowLink[];
675
+ valueFormatter?: (value: number) => string;
676
+ nodeWidth?: number;
677
+ nodePadding?: number; /** Minimum horizontal space reserved for node labels outside the plot area; grows to fit the longest root/leaf label. Defaults to `170`. */
678
+ labelWidth?: number;
679
+ };
680
+ declare const SankeyFlowChart: ({
681
+ nodes,
682
+ links,
683
+ valueFormatter,
684
+ nodeWidth,
685
+ nodePadding,
686
+ labelWidth,
687
+ className,
688
+ animate,
689
+ height
690
+ }: SankeyFlowChartProps) => import("react").JSX.Element;
691
+ //#endregion
272
692
  //#region packages/components/features/charts/components/sparkline-chart.d.ts
273
693
  type SparklineChartProps = {
274
694
  data: number[] | Array<{
@@ -301,6 +721,48 @@ declare const SparklineChart: ({
301
721
  className
302
722
  }: SparklineChartProps) => import("react").JSX.Element;
303
723
  //#endregion
724
+ //#region packages/components/features/charts/components/stacked-area-chart.d.ts
725
+ type StackedAreaChartProps = BaseChartProps & {
726
+ data: Array<{
727
+ date: string | Date;
728
+ } & Record<string, unknown>>; /** One entry per stacked category. */
729
+ series: ChartSeries[];
730
+ valueFormatter?: (value: number) => string;
731
+ dateFormatter?: (date: string | Date) => string;
732
+ showLegend?: boolean;
733
+ showGrid?: boolean;
734
+ };
735
+ /**
736
+ * A stacked area chart for cumulative composition over time — e.g. revenue by channel, traffic
737
+ * by source. Unlike `RevenueAreaChart` (a single series plus one comparison overlay), every
738
+ * series here stacks to show the total alongside each category's contribution.
739
+ *
740
+ * @example
741
+ * ```tsx
742
+ * import { StackedAreaChart } from '@customafk/lunas-ui/features/charts';
743
+ *
744
+ * <StackedAreaChart
745
+ * data={[{ date: '2026-06-01', direct: 4200, organic: 3100, paid: 1800 }]}
746
+ * series={[
747
+ * { key: 'direct', label: 'Direct' },
748
+ * { key: 'organic', label: 'Organic' },
749
+ * { key: 'paid', label: 'Paid' },
750
+ * ]}
751
+ * />
752
+ * ```
753
+ */
754
+ declare const StackedAreaChart: ({
755
+ data,
756
+ series,
757
+ valueFormatter,
758
+ dateFormatter,
759
+ showLegend,
760
+ showGrid,
761
+ className,
762
+ animate,
763
+ height
764
+ }: StackedAreaChartProps) => import("react").JSX.Element;
765
+ //#endregion
304
766
  //#region packages/components/features/charts/components/top-products-bar-chart.d.ts
305
767
  type TopProductsBarChartProps = BaseChartProps & {
306
768
  data: NamedValue[]; /** Series label. Defaults to `'Sales'`. */
@@ -337,6 +799,86 @@ declare const TopProductsBarChart: ({
337
799
  height
338
800
  }: TopProductsBarChartProps) => import("react").JSX.Element;
339
801
  //#endregion
802
+ //#region packages/components/features/charts/components/volume-bar-chart.d.ts
803
+ type VolumeBarChartProps = BaseChartProps & {
804
+ /** Only `date`, `close`, and `volume` are used; pass the same rows given to `CandlestickChart`. */data: Array<Pick<OHLCPoint, 'date' | 'close' | 'volume'>>; /** Series label. Defaults to `'Volume'`. */
805
+ label?: string;
806
+ upColor?: string;
807
+ downColor?: string;
808
+ valueFormatter?: (value: number) => string;
809
+ dateFormatter?: (date: string | Date) => string;
810
+ showGrid?: boolean;
811
+ };
812
+ /**
813
+ * Volume bars colored by day direction (close vs. previous close), meant to sit under a
814
+ * `CandlestickChart` on a shared time axis.
815
+ *
816
+ * @example
817
+ * ```tsx
818
+ * import { VolumeBarChart } from '@customafk/lunas-ui/features/charts';
819
+ *
820
+ * <VolumeBarChart
821
+ * data={[
822
+ * { date: '2026-06-01', close: 142.5, volume: 2_400_000 },
823
+ * { date: '2026-06-02', close: 145.1, volume: 3_100_000 },
824
+ * ]}
825
+ * />
826
+ * ```
827
+ */
828
+ declare const VolumeBarChart: ({
829
+ data,
830
+ label,
831
+ upColor,
832
+ downColor,
833
+ valueFormatter,
834
+ dateFormatter,
835
+ showGrid,
836
+ className,
837
+ animate,
838
+ height
839
+ }: VolumeBarChartProps) => import("react").JSX.Element;
840
+ //#endregion
841
+ //#region packages/components/features/charts/components/waterfall-chart.d.ts
842
+ type WaterfallChartProps = BaseChartProps & {
843
+ data: WaterfallPoint[]; /** Color for `isTotal` bars. Defaults to `'var(--chart-1)'`. */
844
+ totalColor?: string;
845
+ upColor?: string;
846
+ downColor?: string;
847
+ valueFormatter?: (value: number) => string;
848
+ showGrid?: boolean;
849
+ };
850
+ /**
851
+ * A waterfall/bridge chart — an incremental sequence of positive/negative steps between totals
852
+ * (e.g. starting balance → revenue → costs → ending balance). Built as stacked bars: an
853
+ * invisible "base" bar positions each floating step at its running total.
854
+ *
855
+ * @example
856
+ * ```tsx
857
+ * import { WaterfallChart } from '@customafk/lunas-ui/features/charts';
858
+ *
859
+ * <WaterfallChart
860
+ * data={[
861
+ * { label: 'Starting cash', value: 50000, isTotal: true },
862
+ * { label: 'Revenue', value: 32000 },
863
+ * { label: 'COGS', value: -18000 },
864
+ * { label: 'Opex', value: -9000 },
865
+ * { label: 'Ending cash', value: 55000, isTotal: true },
866
+ * ]}
867
+ * />
868
+ * ```
869
+ */
870
+ declare const WaterfallChart: ({
871
+ data,
872
+ totalColor,
873
+ upColor,
874
+ downColor,
875
+ valueFormatter,
876
+ showGrid,
877
+ className,
878
+ animate,
879
+ height
880
+ }: WaterfallChartProps) => import("react").JSX.Element;
881
+ //#endregion
340
882
  //#region packages/components/features/charts/utils.d.ts
341
883
  /** Cycles through the eight `--chart-N` theme palette variables. */
342
884
  declare const getChartColor: (index: number) => string;
@@ -344,6 +886,19 @@ declare const formatCompactNumber: (value: number, locale?: string) => string;
344
886
  declare const formatCurrency: (value: number, currency?: string, locale?: string) => string;
345
887
  declare const formatPercent: (value: number, locale?: string) => string;
346
888
  declare const toDateLabel: (date: string | Date, locale?: string) => string;
889
+ /** Picks an up/down color by comparing `current` against `reference` (e.g. close vs. open, or vs. zero). */
890
+ declare const getDirectionColor: (current: number, reference: number, colors?: {
891
+ up?: string;
892
+ down?: string;
893
+ }) => string;
894
+ declare const formatSignedPercent: (value: number, locale?: string) => string;
895
+ /**
896
+ * Normalizes each of `seriesKeys` in `data` to a common `base` value at its first defined point,
897
+ * so relative performance across series with different price scales becomes directly comparable.
898
+ */
899
+ declare const computeIndexedSeries: <T extends {
900
+ date: string | Date;
901
+ } & Record<string, unknown>>(data: readonly T[], seriesKeys: readonly string[], base?: number) => Array<Record<string, string | Date | number>>;
347
902
  //#endregion
348
- export { BaseChartProps, ChartSeries, ChartTrend, ConversionFunnelChart, ConversionFunnelChartProps, DonutChart, DonutChartProps, DonutChartSegment, FunnelStage, NamedValue, OrdersBarChart, OrdersBarChartProps, RevenueAreaChart, RevenueAreaChartProps, RevenueOrdersComposedChart, RevenueOrdersComposedChartProps, RevenueOrdersPoint, SalesTargetRadialChart, SalesTargetRadialChartProps, SparklineChart, SparklineChartProps, TimeSeriesPoint, TopProductsBarChart, TopProductsBarChartProps, formatCompactNumber, formatCurrency, formatPercent, getChartColor, toDateLabel };
903
+ export { 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 };
349
904
  //# sourceMappingURL=index.d.mts.map