@giddaa-housing/ui 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/css/generated/shared.css +1 -1
  2. package/css/giddaa.css +12 -2
  3. package/dist/accordion.d.ts +9 -10
  4. package/dist/accordion.js +41 -87
  5. package/dist/activity-timeline.d.ts +12 -16
  6. package/dist/activity-timeline.js +83 -198
  7. package/dist/alert.d.ts +8 -9
  8. package/dist/alert.js +53 -111
  9. package/dist/auth-layout.d.ts +4 -4
  10. package/dist/auth-layout.js +143 -294
  11. package/dist/avatar.d.ts +6 -6
  12. package/dist/avatar.js +49 -19
  13. package/dist/badge.d.ts +12 -14
  14. package/dist/badge.js +71 -11
  15. package/dist/bar-chart.d.ts +65 -67
  16. package/dist/bar-chart.js +232 -207
  17. package/dist/breadcrumb.d.ts +5 -5
  18. package/dist/breadcrumb.js +56 -118
  19. package/dist/bullet-chart.d.ts +41 -37
  20. package/dist/bullet-chart.js +125 -148
  21. package/dist/button-BZIeyUw6.d.ts +17 -0
  22. package/dist/button-group.d.ts +13 -16
  23. package/dist/button-group.js +39 -88
  24. package/dist/button.d.ts +2 -19
  25. package/dist/button.js +94 -13
  26. package/dist/calendar.d.ts +6 -6
  27. package/dist/calendar.js +138 -17
  28. package/dist/card.d.ts +14 -16
  29. package/dist/card.js +59 -145
  30. package/dist/carousel.d.ts +34 -35
  31. package/dist/carousel.js +335 -20
  32. package/dist/chart.d.ts +90 -63
  33. package/dist/chart.js +573 -28
  34. package/dist/checkbox.d.ts +10 -12
  35. package/dist/checkbox.js +82 -47
  36. package/dist/cn-BI_4DMBf.js +23 -0
  37. package/dist/collapsible.d.ts +7 -8
  38. package/dist/collapsible.js +22 -47
  39. package/dist/combobox.d.ts +10 -10
  40. package/dist/combobox.js +236 -44
  41. package/dist/cta.d.ts +12 -14
  42. package/dist/cta.js +175 -341
  43. package/dist/currency-selector.d.ts +31 -32
  44. package/dist/currency-selector.js +106 -184
  45. package/dist/data-table.d.ts +168 -0
  46. package/dist/data-table.js +676 -0
  47. package/dist/date-picker.d.ts +22 -23
  48. package/dist/date-picker.js +119 -192
  49. package/dist/details-card.d.ts +7 -7
  50. package/dist/details-card.js +104 -253
  51. package/dist/dialog.d.ts +13 -14
  52. package/dist/dialog.js +116 -209
  53. package/dist/dropdown-menu.d.ts +13 -13
  54. package/dist/dropdown-menu.js +180 -37
  55. package/dist/dropzone.d.ts +55 -55
  56. package/dist/dropzone.js +327 -439
  57. package/dist/editorial-card.d.ts +23 -25
  58. package/dist/editorial-card.js +129 -296
  59. package/dist/empty-state.d.ts +8 -9
  60. package/dist/empty-state.js +48 -105
  61. package/dist/field.d.ts +23 -25
  62. package/dist/field.js +110 -221
  63. package/dist/filter.d.ts +118 -0
  64. package/dist/filter.js +775 -0
  65. package/dist/footer.d.ts +8 -15
  66. package/dist/footer.js +197 -400
  67. package/dist/funnel-chart.d.ts +49 -48
  68. package/dist/funnel-chart.js +170 -189
  69. package/dist/gallery-indicator.d.ts +11 -12
  70. package/dist/gallery-indicator.js +75 -12
  71. package/dist/heatmap-chart.d.ts +47 -50
  72. package/dist/heatmap-chart.js +186 -237
  73. package/dist/infotip.d.ts +8 -9
  74. package/dist/infotip.js +33 -59
  75. package/dist/input-CfoEJ8A6.d.ts +12 -0
  76. package/dist/input-group.d.ts +16 -20
  77. package/dist/input-group.js +99 -23
  78. package/dist/input-size-context-C-SFx9sx.d.ts +10 -0
  79. package/dist/input-size-context.d.ts +2 -11
  80. package/dist/input-size-context.js +17 -9
  81. package/dist/input.d.ts +2 -13
  82. package/dist/input.js +27 -11
  83. package/dist/item.d.ts +7 -8
  84. package/dist/item.js +22 -59
  85. package/dist/kpi-card.d.ts +18 -20
  86. package/dist/kpi-card.js +84 -192
  87. package/dist/label.d.ts +6 -6
  88. package/dist/label.js +40 -8
  89. package/dist/line-chart.d.ts +200 -129
  90. package/dist/line-chart.js +330 -105
  91. package/dist/list-item.d.ts +22 -0
  92. package/dist/list-item.js +84 -0
  93. package/dist/logo.d.ts +4 -4
  94. package/dist/logo.js +92 -9
  95. package/dist/map-indicator.d.ts +7 -7
  96. package/dist/map-indicator.js +80 -106
  97. package/dist/match.d.ts +10 -11
  98. package/dist/match.js +62 -107
  99. package/dist/media-gallery-hero.d.ts +40 -42
  100. package/dist/media-gallery-hero.js +182 -343
  101. package/dist/media-player.d.ts +17 -17
  102. package/dist/media-player.js +873 -1348
  103. package/dist/multi-step-form.d.ts +56 -0
  104. package/dist/multi-step-form.js +342 -0
  105. package/dist/number-input.d.ts +34 -34
  106. package/dist/number-input.js +64 -117
  107. package/dist/page-header.d.ts +10 -11
  108. package/dist/page-header.js +34 -79
  109. package/dist/pagination.d.ts +17 -21
  110. package/dist/pagination.js +132 -207
  111. package/dist/password-input.d.ts +5 -13
  112. package/dist/password-input.js +31 -55
  113. package/dist/phone-input.d.ts +19 -20
  114. package/dist/phone-input.js +226 -344
  115. package/dist/photo-gallery.d.ts +19 -19
  116. package/dist/photo-gallery.js +313 -449
  117. package/dist/picker-lzgmsNfG.js +32 -0
  118. package/dist/pie-chart.d.ts +121 -90
  119. package/dist/pie-chart.js +183 -149
  120. package/dist/popover.d.ts +9 -9
  121. package/dist/popover.js +72 -23
  122. package/dist/price-tag.d.ts +26 -27
  123. package/dist/price-tag.js +113 -173
  124. package/dist/progress.d.ts +16 -17
  125. package/dist/progress.js +169 -24
  126. package/dist/property-listing-card.d.ts +14 -17
  127. package/dist/property-listing-card.js +102 -220
  128. package/dist/purchase-option-card.d.ts +79 -0
  129. package/dist/purchase-option-card.js +176 -0
  130. package/dist/radar-chart.d.ts +29 -31
  131. package/dist/radar-chart.js +162 -137
  132. package/dist/radio-group.d.ts +11 -13
  133. package/dist/radio-group.js +46 -60
  134. package/dist/review-block.d.ts +14 -16
  135. package/dist/review-block.js +154 -10
  136. package/dist/rich-text-editor.d.ts +30 -14
  137. package/dist/rich-text-editor.js +592 -716
  138. package/dist/scatter-chart.d.ts +45 -47
  139. package/dist/scatter-chart.js +236 -240
  140. package/dist/search-input.d.ts +8 -16
  141. package/dist/search-input.js +57 -109
  142. package/dist/select.d.ts +8 -8
  143. package/dist/select.js +144 -27
  144. package/dist/separator.d.ts +8 -9
  145. package/dist/separator.js +32 -8
  146. package/dist/sheet.d.ts +11 -11
  147. package/dist/sheet.js +103 -24
  148. package/dist/sidebar.d.ts +32 -37
  149. package/dist/sidebar.js +364 -634
  150. package/dist/size-context-D4mYvcg8.d.ts +10 -0
  151. package/dist/size-context.d.ts +2 -11
  152. package/dist/size-context.js +17 -9
  153. package/dist/skeleton.d.ts +4 -5
  154. package/dist/skeleton.js +12 -8
  155. package/dist/slider.d.ts +8 -9
  156. package/dist/slider.js +64 -135
  157. package/dist/sparkline.d.ts +68 -58
  158. package/dist/sparkline.js +315 -251
  159. package/dist/stepper.d.ts +23 -24
  160. package/dist/stepper.js +149 -246
  161. package/dist/styles.css +1004 -116
  162. package/dist/switch.d.ts +10 -12
  163. package/dist/switch.js +48 -70
  164. package/dist/table-card.d.ts +35 -0
  165. package/dist/table-card.js +125 -0
  166. package/dist/table.d.ts +18 -14
  167. package/dist/table.js +117 -154
  168. package/dist/tabs.d.ts +33 -15
  169. package/dist/tabs.js +110 -18
  170. package/dist/tag.d.ts +21 -23
  171. package/dist/tag.js +103 -159
  172. package/dist/testimonial-block.d.ts +18 -19
  173. package/dist/testimonial-block.js +189 -358
  174. package/dist/textarea-IS_D8pXf.d.ts +11 -0
  175. package/dist/textarea.d.ts +2 -12
  176. package/dist/textarea.js +24 -11
  177. package/dist/time-picker.d.ts +11 -11
  178. package/dist/time-picker.js +245 -302
  179. package/dist/toast.d.ts +16 -18
  180. package/dist/toast.js +154 -205
  181. package/dist/tooltip.d.ts +8 -9
  182. package/dist/tooltip.js +37 -12
  183. package/dist/tree-map.d.ts +59 -62
  184. package/dist/tree-map.js +226 -269
  185. package/dist/use-uncontrolled-CLfM1XbB.js +21 -0
  186. package/dist/waterfall-chart.d.ts +94 -97
  187. package/dist/waterfall-chart.js +455 -552
  188. package/package.json +36 -9
  189. package/dist/accordion.js.map +0 -1
  190. package/dist/activity-timeline.js.map +0 -1
  191. package/dist/alert.js.map +0 -1
  192. package/dist/auth-layout.js.map +0 -1
  193. package/dist/avatar.js.map +0 -1
  194. package/dist/badge.js.map +0 -1
  195. package/dist/bar-chart.js.map +0 -1
  196. package/dist/breadcrumb.js.map +0 -1
  197. package/dist/bullet-chart.js.map +0 -1
  198. package/dist/button-group.js.map +0 -1
  199. package/dist/button.js.map +0 -1
  200. package/dist/calendar.js.map +0 -1
  201. package/dist/card.js.map +0 -1
  202. package/dist/carousel.js.map +0 -1
  203. package/dist/chart.js.map +0 -1
  204. package/dist/checkbox.js.map +0 -1
  205. package/dist/chunk-322YCNVL.js +0 -278
  206. package/dist/chunk-322YCNVL.js.map +0 -1
  207. package/dist/chunk-3ACQVT7A.js +0 -25
  208. package/dist/chunk-3ACQVT7A.js.map +0 -1
  209. package/dist/chunk-3T65TLJX.js +0 -334
  210. package/dist/chunk-3T65TLJX.js.map +0 -1
  211. package/dist/chunk-6ZSGQHH2.js +0 -192
  212. package/dist/chunk-6ZSGQHH2.js.map +0 -1
  213. package/dist/chunk-7TBMLFGW.js +0 -41
  214. package/dist/chunk-7TBMLFGW.js.map +0 -1
  215. package/dist/chunk-B4H6RNDH.js +0 -135
  216. package/dist/chunk-B4H6RNDH.js.map +0 -1
  217. package/dist/chunk-BUXCGZ6X.js +0 -219
  218. package/dist/chunk-BUXCGZ6X.js.map +0 -1
  219. package/dist/chunk-CHII2QHH.js +0 -58
  220. package/dist/chunk-CHII2QHH.js.map +0 -1
  221. package/dist/chunk-DMNOXRRW.js +0 -147
  222. package/dist/chunk-DMNOXRRW.js.map +0 -1
  223. package/dist/chunk-EFSOSSIC.js +0 -130
  224. package/dist/chunk-EFSOSSIC.js.map +0 -1
  225. package/dist/chunk-FZDSVMKY.js +0 -363
  226. package/dist/chunk-FZDSVMKY.js.map +0 -1
  227. package/dist/chunk-GJOFIJS3.js +0 -246
  228. package/dist/chunk-GJOFIJS3.js.map +0 -1
  229. package/dist/chunk-HL3ZSYES.js +0 -23
  230. package/dist/chunk-HL3ZSYES.js.map +0 -1
  231. package/dist/chunk-JVLUBAPB.js +0 -129
  232. package/dist/chunk-JVLUBAPB.js.map +0 -1
  233. package/dist/chunk-KDPYSOYZ.js +0 -64
  234. package/dist/chunk-KDPYSOYZ.js.map +0 -1
  235. package/dist/chunk-KSMDANKI.js +0 -43
  236. package/dist/chunk-KSMDANKI.js.map +0 -1
  237. package/dist/chunk-MEKCCOP5.js +0 -46
  238. package/dist/chunk-MEKCCOP5.js.map +0 -1
  239. package/dist/chunk-NOFXVRWL.js +0 -451
  240. package/dist/chunk-NOFXVRWL.js.map +0 -1
  241. package/dist/chunk-PC5MHNVA.js +0 -171
  242. package/dist/chunk-PC5MHNVA.js.map +0 -1
  243. package/dist/chunk-QKAQZ2GU.js +0 -122
  244. package/dist/chunk-QKAQZ2GU.js.map +0 -1
  245. package/dist/chunk-QZHSHSVV.js +0 -26
  246. package/dist/chunk-QZHSHSVV.js.map +0 -1
  247. package/dist/chunk-RBMK26XD.js +0 -19
  248. package/dist/chunk-RBMK26XD.js.map +0 -1
  249. package/dist/chunk-SFNJGF6M.js +0 -262
  250. package/dist/chunk-SFNJGF6M.js.map +0 -1
  251. package/dist/chunk-UJJNLGTM.js +0 -112
  252. package/dist/chunk-UJJNLGTM.js.map +0 -1
  253. package/dist/chunk-VGR4ZWJ3.js +0 -418
  254. package/dist/chunk-VGR4ZWJ3.js.map +0 -1
  255. package/dist/chunk-XG47P6D4.js +0 -99
  256. package/dist/chunk-XG47P6D4.js.map +0 -1
  257. package/dist/chunk-XZZAHNVM.js +0 -21
  258. package/dist/chunk-XZZAHNVM.js.map +0 -1
  259. package/dist/chunk-Y4TTYVNE.js +0 -36
  260. package/dist/chunk-Y4TTYVNE.js.map +0 -1
  261. package/dist/chunk-YDWIHW6Q.js +0 -69
  262. package/dist/chunk-YDWIHW6Q.js.map +0 -1
  263. package/dist/collapsible.js.map +0 -1
  264. package/dist/combobox.js.map +0 -1
  265. package/dist/cta.js.map +0 -1
  266. package/dist/currency-selector.js.map +0 -1
  267. package/dist/date-picker.js.map +0 -1
  268. package/dist/details-card.js.map +0 -1
  269. package/dist/dialog.js.map +0 -1
  270. package/dist/dropdown-menu.js.map +0 -1
  271. package/dist/dropzone.js.map +0 -1
  272. package/dist/editorial-card.js.map +0 -1
  273. package/dist/empty-state.js.map +0 -1
  274. package/dist/field.js.map +0 -1
  275. package/dist/footer.js.map +0 -1
  276. package/dist/funnel-chart.js.map +0 -1
  277. package/dist/gallery-indicator.js.map +0 -1
  278. package/dist/heatmap-chart.js.map +0 -1
  279. package/dist/infotip.js.map +0 -1
  280. package/dist/input-group.js.map +0 -1
  281. package/dist/input-size-context.js.map +0 -1
  282. package/dist/input.js.map +0 -1
  283. package/dist/item.js.map +0 -1
  284. package/dist/kpi-card.js.map +0 -1
  285. package/dist/label.js.map +0 -1
  286. package/dist/line-chart.js.map +0 -1
  287. package/dist/logo.js.map +0 -1
  288. package/dist/map-indicator.js.map +0 -1
  289. package/dist/match.js.map +0 -1
  290. package/dist/media-gallery-hero.js.map +0 -1
  291. package/dist/media-player.js.map +0 -1
  292. package/dist/number-input.js.map +0 -1
  293. package/dist/page-header.js.map +0 -1
  294. package/dist/pagination.js.map +0 -1
  295. package/dist/password-input.js.map +0 -1
  296. package/dist/phone-input.js.map +0 -1
  297. package/dist/photo-gallery.js.map +0 -1
  298. package/dist/pie-chart.js.map +0 -1
  299. package/dist/popover.js.map +0 -1
  300. package/dist/price-tag.js.map +0 -1
  301. package/dist/progress.js.map +0 -1
  302. package/dist/property-listing-card.js.map +0 -1
  303. package/dist/radar-chart.js.map +0 -1
  304. package/dist/radio-group.js.map +0 -1
  305. package/dist/review-block.js.map +0 -1
  306. package/dist/rich-text-editor.js.map +0 -1
  307. package/dist/scatter-chart.js.map +0 -1
  308. package/dist/search-input.js.map +0 -1
  309. package/dist/select.js.map +0 -1
  310. package/dist/separator.js.map +0 -1
  311. package/dist/sheet.js.map +0 -1
  312. package/dist/sidebar.js.map +0 -1
  313. package/dist/size-context.js.map +0 -1
  314. package/dist/skeleton.js.map +0 -1
  315. package/dist/slider.js.map +0 -1
  316. package/dist/sparkline.js.map +0 -1
  317. package/dist/stepper.js.map +0 -1
  318. package/dist/switch.js.map +0 -1
  319. package/dist/tab-list.d.ts +0 -38
  320. package/dist/tab-list.js +0 -123
  321. package/dist/tab-list.js.map +0 -1
  322. package/dist/table.js.map +0 -1
  323. package/dist/tabs.js.map +0 -1
  324. package/dist/tag.js.map +0 -1
  325. package/dist/testimonial-block.js.map +0 -1
  326. package/dist/textarea.js.map +0 -1
  327. package/dist/time-picker.js.map +0 -1
  328. package/dist/toast.js.map +0 -1
  329. package/dist/tooltip.js.map +0 -1
  330. package/dist/tree-map.js.map +0 -1
  331. package/dist/waterfall-chart.js.map +0 -1
package/dist/chart.js CHANGED
@@ -1,30 +1,575 @@
1
1
  "use client";
2
- import {
3
- ChartCard,
4
- ChartContainer,
5
- ChartDescription,
6
- ChartHeader,
7
- ChartLegend,
8
- ChartLegendContent,
9
- ChartStyle,
10
- ChartTitle,
11
- ChartTooltip,
12
- ChartTooltipContent,
13
- cartesianAxisProps
14
- } from "./chunk-NOFXVRWL.js";
15
- import "./chunk-HL3ZSYES.js";
16
- import "./chunk-Y4TTYVNE.js";
17
- export {
18
- ChartCard,
19
- ChartContainer,
20
- ChartDescription,
21
- ChartHeader,
22
- ChartLegend,
23
- ChartLegendContent,
24
- ChartStyle,
25
- ChartTitle,
26
- ChartTooltip,
27
- ChartTooltipContent,
28
- cartesianAxisProps
2
+ import { t as cn } from "./cn-BI_4DMBf.js";
3
+ import { SizeProvider, useComponentSize } from "./size-context.js";
4
+ import { ArrowDown, ArrowUp } from "lucide-react";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import { cva } from "class-variance-authority";
7
+ import * as React from "react";
8
+ import * as RechartsPrimitive from "recharts";
9
+ //#region src/chart.tsx
10
+ /**
11
+ * Fallback colour for a legend marker or tooltip dot when a series resolves no
12
+ * colour of its own — it defaults to the first categorical slot (`chart-1`).
13
+ * A series almost always carries its own colour (set by the chart's `color`
14
+ * prop or `ChartConfig`), so this is only hit by an unconfigured series.
15
+ */
16
+ const SERIES_COLOR_FALLBACK = "var(--color-chart-1)";
17
+ function formatChartValue(value, type) {
18
+ if (Array.isArray(value)) return value.join(", ");
19
+ if (typeof value !== "number") return value == null ? "" : String(value);
20
+ switch (type) {
21
+ case "currency": return `₦${value.toLocaleString("en-NG")}`;
22
+ case "percentage": return `${value.toLocaleString("en-NG", {
23
+ minimumFractionDigits: 1,
24
+ maximumFractionDigits: 1
25
+ })}%`;
26
+ default: return value.toLocaleString("en-NG");
27
+ }
28
+ }
29
+ const THEMES = {
30
+ light: "",
31
+ dark: ".dark"
29
32
  };
30
- //# sourceMappingURL=chart.js.map
33
+ const INITIAL_DIMENSION = {
34
+ width: 320,
35
+ height: 200
36
+ };
37
+ const ChartContext = React.createContext(null);
38
+ function useChart() {
39
+ const context = React.useContext(ChartContext);
40
+ if (!context) throw new Error("useChart must be used within a <ChartContainer />");
41
+ return context;
42
+ }
43
+ /**
44
+ * Shared chart frame — the chrome that surrounds the plot of any chart type
45
+ * (bar, line, area, pie). These are presentational, domain-free, and size-aware:
46
+ * a `size` flows through `SizeProvider` so the plot and its labels can scale
47
+ * with the card. Compose them with the plot primitives:
48
+ *
49
+ * <ChartCard size="md">
50
+ * <ChartHeader>
51
+ * <ChartTitle>Revenue Overview</ChartTitle>
52
+ * <ChartDescription>Monthly revenue · Jan–Jul</ChartDescription>
53
+ * </ChartHeader>
54
+ * <ChartContainer config={config}>{/* recharts plot *\/}</ChartContainer>
55
+ * </ChartCard>
56
+ *
57
+ * // Single-metric chart tile
58
+ * <ChartCard size="md">
59
+ * <ChartTitle>Properties sold</ChartTitle>
60
+ * <ChartMetric>
61
+ * <ChartValue>1.28k</ChartValue>
62
+ * <ChartTrend direction="up">
63
+ * <ChartTrendChip><ChartTrendValue>12.5%</ChartTrendValue></ChartTrendChip>
64
+ * <ChartTrendCaption>vs last month</ChartTrendCaption>
65
+ * </ChartTrend>
66
+ * </ChartMetric>
67
+ * <ChartFooter>{/* sparkline *\/}</ChartFooter>
68
+ * </ChartCard>
69
+ */
70
+ const chartCardVariants = cva("flex w-full min-w-0 flex-col rounded-2xl border border-line-subtle bg-surface-raised text-fg-primary shadow-1", {
71
+ variants: { size: {
72
+ sm: "gap-3 p-4",
73
+ md: "gap-4 p-5",
74
+ lg: "gap-5 p-6"
75
+ } },
76
+ defaultVariants: { size: "md" }
77
+ });
78
+ function ChartCard({ className, size, children, ...props }) {
79
+ const resolvedSize = useComponentSize(size);
80
+ return /* @__PURE__ */ jsx(SizeProvider, {
81
+ size: resolvedSize,
82
+ children: /* @__PURE__ */ jsx("section", {
83
+ "data-slot": "chart-card",
84
+ className: cn(chartCardVariants({ size: resolvedSize }), className),
85
+ ...props,
86
+ children
87
+ })
88
+ });
89
+ }
90
+ function ChartHeader({ className, ...props }) {
91
+ return /* @__PURE__ */ jsx("div", {
92
+ "data-slot": "chart-header",
93
+ className: cn("flex min-w-0 flex-col gap-1", className),
94
+ ...props
95
+ });
96
+ }
97
+ const chartTitleVariants = cva("min-w-0 font-bold text-fg-primary", {
98
+ variants: { size: {
99
+ sm: "text-gdt-md",
100
+ md: "text-gdt-lg",
101
+ lg: "text-gdt-h5"
102
+ } },
103
+ defaultVariants: { size: "md" }
104
+ });
105
+ function ChartTitle({ className, size, ...props }) {
106
+ const resolvedSize = useComponentSize(size);
107
+ return /* @__PURE__ */ jsx("h3", {
108
+ "data-slot": "chart-title",
109
+ className: cn(chartTitleVariants({ size: resolvedSize }), className),
110
+ ...props
111
+ });
112
+ }
113
+ const chartDescriptionVariants = cva("min-w-0 font-normal text-fg-secondary", {
114
+ variants: { size: {
115
+ sm: "text-gdt-xs",
116
+ md: "text-gdt-sm",
117
+ lg: "text-gdt-sm"
118
+ } },
119
+ defaultVariants: { size: "md" }
120
+ });
121
+ function ChartDescription({ className, size, ...props }) {
122
+ const resolvedSize = useComponentSize(size);
123
+ return /* @__PURE__ */ jsx("p", {
124
+ "data-slot": "chart-description",
125
+ className: cn(chartDescriptionVariants({ size: resolvedSize }), className),
126
+ ...props
127
+ });
128
+ }
129
+ const chartMetricVariants = cva("min-w-0", {
130
+ variants: {
131
+ layout: {
132
+ stacked: "flex flex-col items-start",
133
+ inline: "flex flex-wrap items-center"
134
+ },
135
+ size: {
136
+ sm: "gap-1.5",
137
+ md: "gap-2",
138
+ lg: "gap-3"
139
+ }
140
+ },
141
+ defaultVariants: {
142
+ layout: "stacked",
143
+ size: "md"
144
+ }
145
+ });
146
+ function ChartMetric({ className, layout = "stacked", size, ...props }) {
147
+ const resolvedSize = useComponentSize(size);
148
+ return /* @__PURE__ */ jsx("div", {
149
+ "data-slot": "chart-metric",
150
+ "data-layout": layout,
151
+ className: cn(chartMetricVariants({
152
+ layout,
153
+ size: resolvedSize
154
+ }), className),
155
+ ...props
156
+ });
157
+ }
158
+ const chartValueVariants = cva("min-w-0 font-extrabold leading-none tracking-[-0.02em] text-fg-primary tabular-nums", {
159
+ variants: { size: {
160
+ sm: "text-[2.25rem]",
161
+ md: "text-[3rem]",
162
+ lg: "text-[3.875rem]"
163
+ } },
164
+ defaultVariants: { size: "md" }
165
+ });
166
+ function ChartValue({ className, size, ...props }) {
167
+ const resolvedSize = useComponentSize(size);
168
+ return /* @__PURE__ */ jsx("p", {
169
+ "data-slot": "chart-value",
170
+ className: cn(chartValueVariants({ size: resolvedSize }), className),
171
+ ...props
172
+ });
173
+ }
174
+ const ChartTrendContext = React.createContext(null);
175
+ function useChartTrend({ direction, size } = {}) {
176
+ const context = React.useContext(ChartTrendContext);
177
+ return {
178
+ direction: direction ?? context?.direction ?? "up",
179
+ size: size ?? context?.size ?? "md"
180
+ };
181
+ }
182
+ const chartTrendVariants = cva("min-w-0", {
183
+ variants: {
184
+ orientation: {
185
+ horizontal: "flex flex-wrap items-center gap-2",
186
+ vertical: "flex flex-col items-start"
187
+ },
188
+ size: {
189
+ sm: "",
190
+ md: "",
191
+ lg: ""
192
+ }
193
+ },
194
+ compoundVariants: [
195
+ {
196
+ orientation: "vertical",
197
+ size: "sm",
198
+ className: "gap-0.5"
199
+ },
200
+ {
201
+ orientation: "vertical",
202
+ size: "md",
203
+ className: "gap-1"
204
+ },
205
+ {
206
+ orientation: "vertical",
207
+ size: "lg",
208
+ className: "gap-1"
209
+ }
210
+ ],
211
+ defaultVariants: {
212
+ orientation: "horizontal",
213
+ size: "md"
214
+ }
215
+ });
216
+ function ChartTrend({ className, direction = "up", orientation = "horizontal", size, ...props }) {
217
+ const resolvedSize = useComponentSize(size);
218
+ return /* @__PURE__ */ jsx(ChartTrendContext.Provider, {
219
+ value: {
220
+ direction,
221
+ size: resolvedSize
222
+ },
223
+ children: /* @__PURE__ */ jsx("p", {
224
+ "data-slot": "chart-trend",
225
+ "data-direction": direction,
226
+ "data-orientation": orientation,
227
+ className: cn(chartTrendVariants({
228
+ orientation,
229
+ size: resolvedSize
230
+ }), className),
231
+ ...props
232
+ })
233
+ });
234
+ }
235
+ const chartTrendChipVariants = cva("inline-flex shrink-0 items-center rounded-full font-semibold leading-none", {
236
+ variants: {
237
+ direction: {
238
+ up: "bg-surface-brand-subtle text-status-success",
239
+ down: "bg-surface-danger-subtle text-status-danger"
240
+ },
241
+ size: {
242
+ sm: "gap-1 px-2 py-0.5 [&>svg]:size-2.5",
243
+ md: "gap-1 px-[9px] py-1 [&>svg]:size-3",
244
+ lg: "gap-1 px-2.5 py-1.5 [&>svg]:size-3.5"
245
+ }
246
+ },
247
+ defaultVariants: {
248
+ direction: "up",
249
+ size: "md"
250
+ }
251
+ });
252
+ function ChartTrendChip({ children, className, direction: directionProp, showIcon = true, size: sizeProp, ...props }) {
253
+ const { direction, size } = useChartTrend({
254
+ direction: directionProp,
255
+ size: sizeProp
256
+ });
257
+ const Icon = direction === "down" ? ArrowDown : ArrowUp;
258
+ return /* @__PURE__ */ jsxs("span", {
259
+ "data-slot": "chart-trend-chip",
260
+ "data-direction": direction,
261
+ className: cn(chartTrendChipVariants({
262
+ direction,
263
+ size
264
+ }), className),
265
+ ...props,
266
+ children: [showIcon ? /* @__PURE__ */ jsx(Icon, {
267
+ "aria-hidden": "true",
268
+ className: "shrink-0"
269
+ }) : null, children]
270
+ });
271
+ }
272
+ const chartTrendValueVariants = cva("font-semibold leading-none text-current", {
273
+ variants: { size: {
274
+ sm: "text-[11px]",
275
+ md: "text-[13px]",
276
+ lg: "text-[15px]"
277
+ } },
278
+ defaultVariants: { size: "md" }
279
+ });
280
+ function ChartTrendValue({ className, size: sizeProp, ...props }) {
281
+ const { size } = useChartTrend({ size: sizeProp });
282
+ return /* @__PURE__ */ jsx("span", {
283
+ "data-slot": "chart-trend-value",
284
+ className: cn(chartTrendValueVariants({ size }), className),
285
+ ...props
286
+ });
287
+ }
288
+ const chartTrendCaptionVariants = cva("min-w-0 truncate font-normal leading-none text-fg-secondary", {
289
+ variants: { size: {
290
+ sm: "text-[11px]",
291
+ md: "text-xs",
292
+ lg: "text-[13px]"
293
+ } },
294
+ defaultVariants: { size: "md" }
295
+ });
296
+ function ChartTrendCaption({ className, size: sizeProp, ...props }) {
297
+ const { size } = useChartTrend({ size: sizeProp });
298
+ return /* @__PURE__ */ jsx("span", {
299
+ "data-slot": "chart-trend-caption",
300
+ className: cn(chartTrendCaptionVariants({ size }), className),
301
+ ...props
302
+ });
303
+ }
304
+ function ChartFooter({ className, ...props }) {
305
+ return /* @__PURE__ */ jsx("div", {
306
+ "data-slot": "chart-footer",
307
+ className: cn("mt-auto flex min-h-0 w-full flex-1 flex-col items-start justify-end", className),
308
+ ...props
309
+ });
310
+ }
311
+ function ChartContainer({ id, className, children, config, initialDimension = INITIAL_DIMENSION, ...props }) {
312
+ const uniqueId = React.useId();
313
+ const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
314
+ return /* @__PURE__ */ jsx(ChartContext.Provider, {
315
+ value: { config },
316
+ children: /* @__PURE__ */ jsxs("div", {
317
+ "data-slot": "chart",
318
+ "data-chart": chartId,
319
+ className: cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-fg-caption-placeholder [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-line [&_.recharts-curve.recharts-tooltip-cursor]:stroke-line [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-line [&_.recharts-radial-bar-background-sector]:fill-surface-raised [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-surface-raised [&_.recharts-reference-line_[stroke='#ccc']]:stroke-line [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className),
320
+ ...props,
321
+ children: [/* @__PURE__ */ jsx(ChartStyle, {
322
+ id: chartId,
323
+ config
324
+ }), /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, {
325
+ initialDimension,
326
+ children
327
+ })]
328
+ })
329
+ });
330
+ }
331
+ const ChartStyle = ({ id, config }) => {
332
+ const colorConfig = Object.entries(config).filter(([, config]) => config.theme ?? config.color);
333
+ if (!colorConfig.length) return null;
334
+ return /* @__PURE__ */ jsx("style", { children: Object.entries(THEMES).map(([theme, prefix]) => `
335
+ ${prefix} [data-chart=${id}] {
336
+ ${colorConfig.map(([key, itemConfig]) => {
337
+ const color = itemConfig.theme?.[theme] ?? itemConfig.color;
338
+ return color ? ` --color-${key}: ${color};` : null;
339
+ }).join("\n")}
340
+ }
341
+ `).join("\n") });
342
+ };
343
+ const ChartTooltip = RechartsPrimitive.Tooltip;
344
+ /**
345
+ * Hover tooltip for a chart data point. It surfaces a single precise value with
346
+ * type-appropriate formatting — grouped integers, percentages, or ₦-prefixed
347
+ * currency — sitting on an elevated overlay (bg-surface-overlay, Shadow-2,
348
+ * 1px border-subtle) so users can read exact figures without leaving the chart.
349
+ *
350
+ * Anatomy: series dot · metric label · hero value · period caption.
351
+ */
352
+ const chartTooltipVariants = cva("flex flex-col bg-surface-overlay border border-line-subtle shadow-2", {
353
+ variants: { size: {
354
+ xs: "gap-0.5 rounded-md p-2",
355
+ sm: "gap-0.5 rounded-md p-2.5",
356
+ md: "gap-1 rounded-lg p-3",
357
+ lg: "gap-1 rounded-xl p-3.5"
358
+ } },
359
+ defaultVariants: { size: "md" }
360
+ });
361
+ const chartTooltipDotVariants = cva("shrink-0 rounded-full", {
362
+ variants: { size: {
363
+ xs: "size-1.5",
364
+ sm: "size-2",
365
+ md: "size-2.5",
366
+ lg: "size-2.5"
367
+ } },
368
+ defaultVariants: { size: "md" }
369
+ });
370
+ const chartTooltipLabelVariants = cva("font-medium text-fg-secondary", {
371
+ variants: { size: {
372
+ xs: "text-gdt-xs",
373
+ sm: "text-gdt-xs",
374
+ md: "text-gdt-sm",
375
+ lg: "text-gdt-sm"
376
+ } },
377
+ defaultVariants: { size: "md" }
378
+ });
379
+ const chartTooltipValueVariants = cva("font-extrabold text-fg-primary tabular-nums", {
380
+ variants: { size: {
381
+ xs: "text-gdt-sm",
382
+ sm: "text-gdt-md",
383
+ md: "text-gdt-lg",
384
+ lg: "text-gdt-xl"
385
+ } },
386
+ defaultVariants: { size: "md" }
387
+ });
388
+ function ChartTooltipContent({ active, payload, className, hideIndicator = false, label, labelFormatter, formatter, color, nameKey, valueType = "number", size = "md" }) {
389
+ const { config } = useChart();
390
+ if (!active || !payload?.length) return null;
391
+ const [item] = payload.filter((entry) => entry.type !== "none");
392
+ if (!item) return null;
393
+ const itemConfig = getPayloadConfigFromPayload(config, item, `${nameKey ?? item.name ?? item.dataKey ?? "value"}`);
394
+ const dotColor = color ?? item.payload?.fill ?? item.color ?? SERIES_COLOR_FALLBACK;
395
+ const metricLabel = itemConfig?.label ?? item.name;
396
+ const heroValue = formatter ? formatter(item.value, item.name ?? "", item, 0, item.payload) : formatChartValue(item.value, valueType);
397
+ const periodCaption = labelFormatter ? labelFormatter(label, payload) : (typeof label === "string" ? config[label]?.label : null) ?? label;
398
+ return /* @__PURE__ */ jsxs("div", {
399
+ className: cn(chartTooltipVariants({ size }), className),
400
+ children: [
401
+ metricLabel != null && /* @__PURE__ */ jsxs("div", {
402
+ className: "flex items-center gap-1.5 [&>svg]:size-3 [&>svg]:shrink-0",
403
+ children: [!hideIndicator && (itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx("span", {
404
+ "aria-hidden": "true",
405
+ className: cn(chartTooltipDotVariants({ size })),
406
+ style: { backgroundColor: dotColor }
407
+ })), /* @__PURE__ */ jsx("span", {
408
+ className: cn(chartTooltipLabelVariants({ size })),
409
+ children: metricLabel
410
+ })]
411
+ }),
412
+ /* @__PURE__ */ jsx("p", {
413
+ className: cn(chartTooltipValueVariants({ size })),
414
+ children: heroValue
415
+ }),
416
+ periodCaption != null && periodCaption !== "" && /* @__PURE__ */ jsx("p", {
417
+ className: "text-gdt-xs text-fg-caption-placeholder",
418
+ children: periodCaption
419
+ })
420
+ ]
421
+ });
422
+ }
423
+ const ChartLegend = RechartsPrimitive.Legend;
424
+ const chartLegendItemVariants = cva("group/legend-item flex items-center rounded-md leading-none text-fg-primary transition-colors [&>svg]:shrink-0", {
425
+ variants: {
426
+ size: {
427
+ sm: "gap-1.5 px-2 py-1 text-gdt-xs [&>svg]:size-3",
428
+ md: "gap-2 px-2.5 py-1.5 text-gdt-sm [&>svg]:size-3.5"
429
+ },
430
+ interactive: {
431
+ true: "cursor-pointer outline-none hover:bg-surface-raised focus-visible:bg-surface-raised",
432
+ false: ""
433
+ },
434
+ inactive: {
435
+ true: "text-fg-caption-placeholder line-through",
436
+ false: ""
437
+ }
438
+ },
439
+ defaultVariants: {
440
+ size: "md",
441
+ interactive: false,
442
+ inactive: false
443
+ }
444
+ });
445
+ const chartLegendMarkerSizeVariants = cva("shrink-0", {
446
+ variants: {
447
+ marker: {
448
+ dot: "rounded-full",
449
+ square: "rounded-[2px]",
450
+ line: "rounded-full"
451
+ },
452
+ size: {
453
+ sm: "",
454
+ md: ""
455
+ }
456
+ },
457
+ compoundVariants: [
458
+ {
459
+ marker: ["dot", "square"],
460
+ size: "sm",
461
+ className: "size-2"
462
+ },
463
+ {
464
+ marker: ["dot", "square"],
465
+ size: "md",
466
+ className: "size-2.5"
467
+ },
468
+ {
469
+ marker: "line",
470
+ size: "sm",
471
+ className: "h-[3px] w-3"
472
+ },
473
+ {
474
+ marker: "line",
475
+ size: "md",
476
+ className: "h-[3px] w-3.5"
477
+ }
478
+ ],
479
+ defaultVariants: {
480
+ marker: "dot",
481
+ size: "md"
482
+ }
483
+ });
484
+ /**
485
+ * A shared legend for all chart types. Each item pairs a series marker with a
486
+ * label and can be toggled to hide or show its series — the inactive state mutes
487
+ * the marker and strikes through the label. Items compose into horizontal rows
488
+ * or vertical columns, in two sizes, with dot, square, or line markers.
489
+ *
490
+ * Toggling: pass `onToggle` to make items interactive. Inactive items are read
491
+ * from each payload entry's `inactive` flag (recharts sets this when wired) or
492
+ * the controlled `inactiveKeys` set.
493
+ */
494
+ function ChartLegendContent({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey, marker = "dot", size = "md", orientation = "horizontal", inactiveKeys, onToggle }) {
495
+ const { config } = useChart();
496
+ if (!payload?.length) return null;
497
+ const inactiveSet = inactiveKeys ? new Set(inactiveKeys) : void 0;
498
+ const interactive = Boolean(onToggle);
499
+ return /* @__PURE__ */ jsx("div", {
500
+ className: cn("flex", orientation === "vertical" ? "flex-col items-start gap-0.5" : "flex-row flex-wrap items-center justify-center gap-x-1 gap-y-0.5", verticalAlign === "top" ? "pb-3" : "pt-3", className),
501
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
502
+ const key = `${nameKey ?? item.dataKey ?? "value"}`;
503
+ const itemKey = `${item.dataKey ?? item.value ?? index}`;
504
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
505
+ const inactive = (inactiveSet?.has(key) ?? false) || Boolean(item.inactive);
506
+ const markerColor = inactive ? "var(--color-fg-caption-placeholder)" : item.color ?? SERIES_COLOR_FALLBACK;
507
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx("span", {
508
+ "aria-hidden": "true",
509
+ className: cn(chartLegendMarkerSizeVariants({
510
+ marker,
511
+ size
512
+ })),
513
+ style: { backgroundColor: markerColor }
514
+ }), itemConfig?.label ?? item.value] });
515
+ if (interactive) return /* @__PURE__ */ jsx("button", {
516
+ type: "button",
517
+ "aria-pressed": !inactive,
518
+ onClick: () => onToggle?.(key),
519
+ className: cn(chartLegendItemVariants({
520
+ size,
521
+ interactive,
522
+ inactive
523
+ })),
524
+ children: content
525
+ }, itemKey);
526
+ return /* @__PURE__ */ jsx("div", {
527
+ className: cn(chartLegendItemVariants({
528
+ size,
529
+ interactive,
530
+ inactive
531
+ })),
532
+ children: content
533
+ }, itemKey);
534
+ })
535
+ });
536
+ }
537
+ /**
538
+ * Shared `<XAxis>`/`<YAxis>` props — the giddaa cartesian-axis defaults (no tick
539
+ * or axis lines, a size-scaled tick font, and a reserved value-axis width) that
540
+ * every bar and line chart would otherwise repeat per axis. Spread the result
541
+ * onto the recharts axis, then add the chart-specific props (`dataKey`,
542
+ * `domain`, `ticks`, a `width`/`type` override, …). Chart modules build their
543
+ * per-size axis wrappers (`BarChartXAxis`, `LineChartXAxis`, …) on top of this:
544
+ *
545
+ * const axes = cartesianAxisProps({ tickMargin: 8, tickFontSize: 11, yAxisWidth: 32 });
546
+ * <XAxis dataKey="month" {...axes.xAxis} />
547
+ * <YAxis domain={[0, 120]} {...axes.yAxis} />
548
+ */
549
+ function cartesianAxisProps(layout) {
550
+ const tick = { fontSize: layout.tickFontSize };
551
+ return {
552
+ xAxis: {
553
+ tickLine: false,
554
+ axisLine: false,
555
+ tickMargin: layout.tickMargin,
556
+ tick
557
+ },
558
+ yAxis: {
559
+ tickLine: false,
560
+ axisLine: false,
561
+ width: layout.yAxisWidth,
562
+ tick
563
+ }
564
+ };
565
+ }
566
+ function getPayloadConfigFromPayload(config, payload, key) {
567
+ if (typeof payload !== "object" || payload === null) return;
568
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
569
+ let configLabelKey = key;
570
+ if (key in payload && typeof payload[key] === "string") configLabelKey = payload[key];
571
+ else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") configLabelKey = payloadPayload[key];
572
+ return configLabelKey in config ? config[configLabelKey] : config[key];
573
+ }
574
+ //#endregion
575
+ export { ChartCard, ChartContainer, ChartDescription, ChartFooter, ChartHeader, ChartLegend, ChartLegendContent, ChartMetric, ChartStyle, ChartTitle, ChartTooltip, ChartTooltipContent, ChartTrend, ChartTrendCaption, ChartTrendChip, ChartTrendValue, ChartValue, cartesianAxisProps };
@@ -1,15 +1,13 @@
1
- import * as React from 'react';
2
- import * as class_variance_authority_types from 'class-variance-authority/types';
3
- import { Checkbox as Checkbox$1 } from '@base-ui/react/checkbox';
4
- export { CheckboxGroup } from '@base-ui/react/checkbox-group';
5
- import { VariantProps } from 'class-variance-authority';
6
-
1
+ import { VariantProps } from "class-variance-authority";
2
+ import { Checkbox as Checkbox$1 } from "@base-ui/react/checkbox";
3
+ import { CheckboxGroup } from "@base-ui/react/checkbox-group";
4
+ //#region src/checkbox.d.ts
7
5
  declare const checkboxVariants: (props?: ({
8
- size?: "sm" | "md" | "lg" | null | undefined;
9
- } & class_variance_authority_types.ClassProp) | undefined) => string;
6
+ size?: "lg" | "md" | "sm" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
8
  type CheckboxSize = NonNullable<VariantProps<typeof checkboxVariants>["size"]>;
11
9
  type CheckboxProps = Checkbox$1.Root.Props & {
12
- size?: CheckboxSize;
10
+ size?: CheckboxSize;
13
11
  };
14
12
  /**
15
13
  * Compose with the shared field primitives for label and helper text.
@@ -68,6 +66,6 @@ type CheckboxProps = Checkbox$1.Root.Props & {
68
66
  * </FieldSet>
69
67
  * ```
70
68
  */
71
- declare function Checkbox({ className, size, ...props }: CheckboxProps): React.JSX.Element;
72
-
73
- export { Checkbox, checkboxVariants };
69
+ declare function Checkbox({ className, size, ...props }: CheckboxProps): import("react").JSX.Element;
70
+ //#endregion
71
+ export { Checkbox, CheckboxGroup, checkboxVariants };