@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
@@ -0,0 +1,32 @@
1
+ import { t as cn } from "./cn-BI_4DMBf.js";
2
+ import { Button } from "./button.js";
3
+ import { PopoverTrigger } from "./popover.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/lib/picker.tsx
6
+ function PickerTrigger({ icon: Icon, displayValue, placeholder, disabled, open, className }) {
7
+ return /* @__PURE__ */ jsxs(PopoverTrigger, {
8
+ disabled,
9
+ className: cn("flex h-10 w-full items-center justify-between rounded-full border px-3.5 text-gdt-sm transition-[border-color,box-shadow] outline-none", disabled ? "cursor-not-allowed border-line-subtle bg-surface text-fg-caption-placeholder" : open ? "border-line-focus bg-canvas text-fg-primary inset-ring-1 inset-ring-line-focus" : "border-line bg-canvas text-fg-primary hover:border-line-strong", className),
10
+ children: [/* @__PURE__ */ jsx("span", {
11
+ className: cn("min-w-0 truncate", !displayValue && "text-fg-caption-placeholder"),
12
+ children: displayValue || placeholder
13
+ }), /* @__PURE__ */ jsx(Icon, { className: cn("ml-2 size-4 shrink-0", disabled ? "text-fg-caption-placeholder" : "text-fg-secondary") })]
14
+ });
15
+ }
16
+ function PickerFooter({ secondaryLabel, onSecondary, onApply }) {
17
+ return /* @__PURE__ */ jsxs("div", {
18
+ className: "flex w-full items-center justify-between border-t border-line-subtle px-4 py-3",
19
+ children: [/* @__PURE__ */ jsx(Button, {
20
+ variant: "tertiary-outline",
21
+ size: "sm",
22
+ onClick: onSecondary,
23
+ children: secondaryLabel
24
+ }), /* @__PURE__ */ jsx(Button, {
25
+ size: "sm",
26
+ onClick: onApply,
27
+ children: "Apply"
28
+ })]
29
+ });
30
+ }
31
+ //#endregion
32
+ export { PickerTrigger as n, PickerFooter as t };
@@ -1,106 +1,108 @@
1
- import * as React from 'react';
2
- import { ComponentSize } from './size-context.js';
3
-
1
+ import { t as ComponentSize } from "./size-context-D4mYvcg8.js";
2
+ import { ChartConfig } from "./chart.js";
3
+ import * as React from "react";
4
+ import { Pie, PieChart as PieChart$1 } from "recharts";
5
+ //#region src/pie-chart.d.ts
4
6
  /**
5
- * Pie / donut charts are composed from recharts plot primitives directly —
6
- * recharts identifies `PieChart`, `Pie`, and `Cell` by component identity, so
7
- * they cannot be wrapped. This module supplies the giddaa-specific pieces that
8
- * would otherwise be copy-pasted: per-size layout numbers, a categorical
9
- * palette, the donut center label, and the rich legend (dot · name · value ·
10
- * percentage). Pair them with the shared frame from `./chart`.
7
+ * Pie / donut charts are composable wrappers over the recharts pie primitives.
8
+ * recharts 3 registers graphical items through context when they render, so the
9
+ * primitives CAN be wrapped in our own components. Each wrapper bakes in the
10
+ * giddaa defaults (square plot box, size-scaled radii, mark specs) and forwards
11
+ * every recharts prop, so anything can be overridden in place or replaced with
12
+ * the raw recharts element.
11
13
  *
12
- * A donut keeps an open center for a total label (`innerRadius` > 0); a pie
13
- * fills the circle (`innerRadius={0}`). Both read the same layout.
14
+ * A donut keeps an open center for a total label (`type="donut"`, the default);
15
+ * a pie fills the circle (`type="pie"`). Segment colours are assigned per `Cell`
16
+ * from `PIE_CHART_PALETTE` in slot order — a fourth+ category folds into "Other"
17
+ * (the palette has three validated categorical slots on purpose).
14
18
  *
15
19
  * @example
16
- * const chart = usePieChartLayout({ size: "md", type: "donut" });
17
20
  * <ChartCard size="md">
21
+ * <ChartHeader>
22
+ * <ChartTitle>Portfolio mix</ChartTitle>
23
+ * </ChartHeader>
18
24
  * <div className="flex items-center gap-4">
19
- * <ChartContainer config={config} {...chart.container}>
20
- * <PieChart>
21
- * <Pie data={data} dataKey="value" nameKey="label" {...chart.pie}>
22
- * {data.map((d) => <Cell key={d.label} fill={d.color} />)}
23
- * <Label content={<PieCenterLabel total="₦1.1M" caption="Total spend" />} />
24
- * </Pie>
25
- * </PieChart>
26
- * </ChartContainer>
25
+ * <PieChart config={config}>
26
+ * <PieChartSeries data={data} dataKey="value" nameKey="label" type="donut">
27
+ * {data.map((d, i) => <Cell key={d.label} fill={PIE_CHART_PALETTE[i]} />)}
28
+ * <Label content={<PieCenterLabel total="₦1.1M" caption="Total spend" />} />
29
+ * </PieChartSeries>
30
+ * </PieChart>
27
31
  * <PieChartLegend items={legendItems} />
28
32
  * </div>
29
33
  * </ChartCard>
30
34
  */
31
35
  /** Pie sizes line up with the three shared `ComponentSize` values. */
32
36
  type PieChartSize = ComponentSize;
37
+ /**
38
+ * Categorical segment palette — the theme-aware `chart-1`…`chart-3` tokens.
39
+ * Assign colours in this fixed slot order, never cycled: a fourth category folds
40
+ * into "Other". Override per segment with a `Cell` `fill`.
41
+ */
42
+ declare const PIE_CHART_PALETTE: readonly ["var(--color-chart-1)", "var(--color-chart-2)", "var(--color-chart-3)"];
33
43
  type PieChartLayout = {
34
- /** Square plot box in px (width = height); width is NOT parent-driven here. */
35
- size: number;
36
- /** Donut hole radius in px. Pass `0` to the `Pie` for a filled pie. */
37
- innerRadius: number;
38
- /** Outer ring radius in px. */
39
- outerRadius: number;
40
- /** Gap between segments, in degrees. */
41
- paddingAngle: number;
42
- /** Corner radius of each segment. */
43
- cornerRadius: number;
44
- /** Center total font size. */
45
- totalFontSize: number;
46
- /** Center caption font size. */
47
- captionFontSize: number;
44
+ /** Square plot box in px (width = height); width is NOT parent-driven here. */
45
+ size: number;
46
+ /** Donut hole radius in px. `type="pie"` collapses it to 0. */
47
+ innerRadius: number;
48
+ /** Outer ring radius in px. */
49
+ outerRadius: number;
50
+ /** Gap between segments, in degrees. */
51
+ paddingAngle: number;
52
+ /** Corner radius of each segment. */
53
+ cornerRadius: number;
54
+ /** Center total font size. */
55
+ totalFontSize: number;
56
+ /** Center caption font size. */
57
+ captionFontSize: number;
48
58
  };
49
59
  declare const PIE_CHART_LAYOUT: Record<PieChartSize, PieChartLayout>;
60
+ type PieChartProps = Omit<React.ComponentProps<typeof PieChart$1>, "width" | "height"> & {
61
+ /** Series labels/icons for the shared tooltip and legend (see `ChartConfig`). */
62
+ config?: ChartConfig;
63
+ /** Plot scale; inherited from the nearest `SizeProvider` when omitted. */
64
+ size?: PieChartSize;
65
+ /** Applied to the square plot box, e.g. to override its dimensions. */
66
+ className?: string;
67
+ };
50
68
  /**
51
- * Categorical palette for pie/donut segments, ordered by share. Giddaa has no
52
- * `chart-1`…`chart-N` tokens yet, so these map to the brand scales: forest
53
- * brass moss clay stone. Assign by index, or override per `Cell`.
69
+ * Plot root wraps the shared `ChartContainer` (tooltip/legend theming,
70
+ * responsive box) around the recharts `PieChart` in a fixed square box from
71
+ * `PIE_CHART_LAYOUT` (unlike the cartesian roots, a pie's width is not
72
+ * parent-driven). `size` flows to the child primitives through `SizeProvider`.
54
73
  */
55
- declare const PIE_CHART_PALETTE: readonly ["var(--color-forest-700)", "var(--color-brass-500)", "var(--color-moss-600)", "var(--color-clay-500)", "var(--color-stone-500)"];
74
+ declare function PieChart({ config, size, className, children, ...props }: PieChartProps): React.JSX.Element;
75
+ type PieChartSeriesProps = React.ComponentProps<typeof Pie> & {
76
+ /** `donut` keeps an open center (default); `pie` fills the circle. */
77
+ type?: "donut" | "pie";
78
+ /** Explicit mark scale; otherwise inherited from the chart's `size`. */
79
+ size?: PieChartSize;
80
+ };
56
81
  /**
57
- * Resolve the pie-chart layout for an explicit or inherited component size and
58
- * chart `type`. The returned object groups the giddaa defaults by the recharts
59
- * component they belong to — spread `container` onto `ChartContainer` and `pie`
60
- * onto `Pie`, then pass the data-specific props (`data`, `dataKey`, `nameKey`)
61
- * directly afterwards. `type="pie"` collapses the donut hole (`innerRadius` 0).
82
+ * One data series recharts `Pie` with the giddaa mark spec: size-scaled
83
+ * radii, a small inter-segment gap, and no stroke. Pass `Cell` children for
84
+ * per-segment colours and a `Label` for the donut center. Each numeric prop is
85
+ * defaulted from the layout and still wins when passed directly.
62
86
  */
63
- declare function usePieChartLayout({ size, type, }?: {
64
- size?: PieChartSize;
65
- type?: "donut" | "pie";
66
- }): {
67
- container: {
68
- className: string;
69
- style: {
70
- width: number;
71
- height: number;
72
- };
73
- };
74
- pie: {
75
- innerRadius: number;
76
- outerRadius: number;
77
- paddingAngle: number;
78
- cornerRadius: number;
79
- strokeWidth: number;
80
- };
81
- label: {
82
- totalFontSize: number;
83
- captionFontSize: number;
84
- };
85
- };
87
+ declare function PieChartSeries({ type, size, innerRadius, outerRadius, paddingAngle, cornerRadius, strokeWidth, ...props }: PieChartSeriesProps): React.JSX.Element;
86
88
  /**
87
89
  * Center label for a donut — the hero total over a short caption. Pass it to
88
90
  * recharts as `<Label content={<PieCenterLabel total=… caption=… />} />` inside
89
- * the `Pie`; recharts injects the `viewBox` carrying the polar center (cx/cy).
91
+ * the `PieChartSeries`; recharts injects the `viewBox` carrying the polar center.
90
92
  */
91
93
  type PieCenterLabelProps = {
92
- /** Hero figure — pre-formatted, e.g. "₦1.1M". */
93
- total: React.ReactNode;
94
- /** Short label describing what the total represents, e.g. "Total spend". */
95
- caption?: React.ReactNode;
96
- /** Explicit size; otherwise inherited from the nearest `SizeProvider`. */
97
- size?: PieChartSize;
98
- viewBox?: {
99
- cx?: number;
100
- cy?: number;
101
- };
94
+ /** Hero figure — pre-formatted, e.g. "₦1.1M". */
95
+ total: React.ReactNode;
96
+ /** Short label describing what the total represents, e.g. "Total spend". */
97
+ caption?: React.ReactNode;
98
+ /** Explicit size; otherwise inherited from the nearest `SizeProvider`. */
99
+ size?: PieChartSize;
100
+ viewBox?: {
101
+ cx?: number;
102
+ cy?: number;
103
+ };
102
104
  };
103
- declare function PieCenterLabel({ total, caption, size, viewBox, }: PieCenterLabelProps): React.JSX.Element | null;
105
+ declare function PieCenterLabel({ total, caption, size, viewBox }: PieCenterLabelProps): React.JSX.Element | null;
104
106
  /**
105
107
  * Rich legend for pie/donut charts. Unlike the shared `ChartLegendContent`
106
108
  * (marker + label only), each row pairs a colour dot with the category name, its
@@ -108,18 +110,47 @@ declare function PieCenterLabel({ total, caption, size, viewBox, }: PieCenterLab
108
110
  * mini table. Values and percentages are pre-formatted by the caller.
109
111
  */
110
112
  type PieLegendItem = {
111
- /** Category name, e.g. "Housing". */
112
- label: string;
113
- /** Segment colour — should match the matching `Cell` fill. */
114
- color: string;
115
- /** Pre-formatted value, e.g. "₦420k". */
116
- value: React.ReactNode;
117
- /** Pre-formatted share, e.g. "38%". */
118
- percentage: React.ReactNode;
113
+ /** Category name, e.g. "Housing". */
114
+ label: string;
115
+ /** Segment colour — should match the matching `Cell` fill. */
116
+ color: string;
117
+ /** Pre-formatted value, e.g. "₦420k". */
118
+ value: React.ReactNode;
119
+ /** Pre-formatted share, e.g. "38%". */
120
+ percentage: React.ReactNode;
119
121
  };
120
122
  declare function PieChartLegend({ items, size, className, ...props }: React.ComponentProps<"ul"> & {
121
- items: PieLegendItem[];
122
- size?: PieChartSize;
123
+ items: PieLegendItem[];
124
+ size?: PieChartSize;
123
125
  }): React.JSX.Element;
124
-
125
- export { PIE_CHART_LAYOUT, PIE_CHART_PALETTE, PieCenterLabel, type PieCenterLabelProps, type PieChartLayout, PieChartLegend, type PieChartSize, type PieLegendItem, usePieChartLayout };
126
+ /**
127
+ * @deprecated Compose the `<PieChart>`/`<PieChartSeries>` primitives instead
128
+ * see the module example. This layout hook predates recharts 3 wrapping support
129
+ * and will be removed in the next major. It returns prop bags to spread onto raw
130
+ * recharts elements.
131
+ */
132
+ declare function usePieChartLayout({ size, type }?: {
133
+ size?: PieChartSize;
134
+ type?: "donut" | "pie";
135
+ }): {
136
+ container: {
137
+ className: string;
138
+ style: {
139
+ width: number;
140
+ height: number;
141
+ };
142
+ };
143
+ pie: {
144
+ innerRadius: number;
145
+ outerRadius: number;
146
+ paddingAngle: number;
147
+ cornerRadius: number;
148
+ strokeWidth: number;
149
+ };
150
+ label: {
151
+ totalFontSize: number;
152
+ captionFontSize: number;
153
+ };
154
+ };
155
+ //#endregion
156
+ export { PIE_CHART_LAYOUT, PIE_CHART_PALETTE, PieCenterLabel, type PieCenterLabelProps, PieChart, type PieChartLayout, PieChartLegend, type PieChartProps, PieChartSeries, type PieChartSeriesProps, type PieChartSize, type PieLegendItem, usePieChartLayout };
package/dist/pie-chart.js CHANGED
@@ -1,157 +1,191 @@
1
1
  "use client";
2
- import {
3
- useComponentSize
4
- } from "./chunk-HL3ZSYES.js";
5
- import {
6
- cn
7
- } from "./chunk-Y4TTYVNE.js";
8
-
9
- // src/pie-chart.tsx
10
- import { cva } from "class-variance-authority";
2
+ import { t as cn } from "./cn-BI_4DMBf.js";
3
+ import { SizeProvider, useComponentSize } from "./size-context.js";
4
+ import { ChartContainer } from "./chart.js";
11
5
  import { jsx, jsxs } from "react/jsx-runtime";
12
- var PIE_CHART_LAYOUT = {
13
- sm: {
14
- size: 132,
15
- innerRadius: 42,
16
- outerRadius: 64,
17
- paddingAngle: 2,
18
- cornerRadius: 0,
19
- totalFontSize: 18,
20
- captionFontSize: 9
21
- },
22
- md: {
23
- size: 176,
24
- innerRadius: 56,
25
- outerRadius: 84,
26
- paddingAngle: 2,
27
- cornerRadius: 0,
28
- totalFontSize: 24,
29
- captionFontSize: 11
30
- },
31
- lg: {
32
- size: 224,
33
- innerRadius: 72,
34
- outerRadius: 108,
35
- paddingAngle: 2,
36
- cornerRadius: 0,
37
- totalFontSize: 30,
38
- captionFontSize: 12
39
- }
40
- };
41
- var PIE_CHART_PALETTE = [
42
- "var(--color-forest-700)",
43
- "var(--color-brass-500)",
44
- "var(--color-moss-600)",
45
- "var(--color-clay-500)",
46
- "var(--color-stone-500)"
6
+ import { cva } from "class-variance-authority";
7
+ import { Pie, PieChart as PieChart$1 } from "recharts";
8
+ //#region src/pie-chart.tsx
9
+ /**
10
+ * Categorical segment palette — the theme-aware `chart-1`…`chart-3` tokens.
11
+ * Assign colours in this fixed slot order, never cycled: a fourth category folds
12
+ * into "Other". Override per segment with a `Cell` `fill`.
13
+ */
14
+ const PIE_CHART_PALETTE = [
15
+ "var(--color-chart-1)",
16
+ "var(--color-chart-2)",
17
+ "var(--color-chart-3)"
47
18
  ];
48
- function usePieChartLayout({
49
- size,
50
- type = "donut"
51
- } = {}) {
52
- const layout = PIE_CHART_LAYOUT[useComponentSize(size)];
53
- return {
54
- container: {
55
- className: "aspect-square shrink-0",
56
- style: { width: layout.size, height: layout.size }
57
- },
58
- pie: {
59
- innerRadius: type === "pie" ? 0 : layout.innerRadius,
60
- outerRadius: layout.outerRadius,
61
- paddingAngle: type === "pie" ? 0 : layout.paddingAngle,
62
- cornerRadius: layout.cornerRadius,
63
- strokeWidth: 0
64
- },
65
- label: {
66
- totalFontSize: layout.totalFontSize,
67
- captionFontSize: layout.captionFontSize
68
- }
69
- };
19
+ const PIE_CHART_LAYOUT = {
20
+ sm: {
21
+ size: 132,
22
+ innerRadius: 42,
23
+ outerRadius: 64,
24
+ paddingAngle: 2,
25
+ cornerRadius: 0,
26
+ totalFontSize: 18,
27
+ captionFontSize: 9
28
+ },
29
+ md: {
30
+ size: 176,
31
+ innerRadius: 56,
32
+ outerRadius: 84,
33
+ paddingAngle: 2,
34
+ cornerRadius: 0,
35
+ totalFontSize: 24,
36
+ captionFontSize: 11
37
+ },
38
+ lg: {
39
+ size: 224,
40
+ innerRadius: 72,
41
+ outerRadius: 108,
42
+ paddingAngle: 2,
43
+ cornerRadius: 0,
44
+ totalFontSize: 30,
45
+ captionFontSize: 12
46
+ }
47
+ };
48
+ /**
49
+ * Plot root — wraps the shared `ChartContainer` (tooltip/legend theming,
50
+ * responsive box) around the recharts `PieChart` in a fixed square box from
51
+ * `PIE_CHART_LAYOUT` (unlike the cartesian roots, a pie's width is not
52
+ * parent-driven). `size` flows to the child primitives through `SizeProvider`.
53
+ */
54
+ function PieChart({ config = {}, size, className, children, ...props }) {
55
+ const resolvedSize = useComponentSize(size);
56
+ const layout = PIE_CHART_LAYOUT[resolvedSize];
57
+ return /* @__PURE__ */ jsx(SizeProvider, {
58
+ size: resolvedSize,
59
+ children: /* @__PURE__ */ jsx(ChartContainer, {
60
+ config,
61
+ className: cn("aspect-square shrink-0", className),
62
+ style: {
63
+ width: layout.size,
64
+ height: layout.size
65
+ },
66
+ children: /* @__PURE__ */ jsx(PieChart$1, {
67
+ accessibilityLayer: true,
68
+ ...props,
69
+ children
70
+ })
71
+ })
72
+ });
70
73
  }
71
- function PieCenterLabel({
72
- total,
73
- caption,
74
- size,
75
- viewBox
76
- }) {
77
- const { label } = usePieChartLayout({ size });
78
- if (!viewBox || viewBox.cx == null || viewBox.cy == null) {
79
- return null;
80
- }
81
- const { cx, cy } = viewBox;
82
- const captionY = cy + label.totalFontSize * 0.72;
83
- return /* @__PURE__ */ jsxs("text", { x: cx, y: cy, textAnchor: "middle", dominantBaseline: "central", children: [
84
- /* @__PURE__ */ jsx(
85
- "tspan",
86
- {
87
- x: cx,
88
- y: caption == null ? cy : cy - label.captionFontSize * 0.5,
89
- className: "fill-fg-primary font-extrabold tabular-nums",
90
- style: { fontSize: label.totalFontSize },
91
- children: total
92
- }
93
- ),
94
- caption != null && /* @__PURE__ */ jsx(
95
- "tspan",
96
- {
97
- x: cx,
98
- y: captionY,
99
- className: "fill-fg-secondary font-medium",
100
- style: { fontSize: label.captionFontSize },
101
- children: caption
102
- }
103
- )
104
- ] });
74
+ /**
75
+ * One data series — recharts `Pie` with the giddaa mark spec: size-scaled
76
+ * radii, a small inter-segment gap, and no stroke. Pass `Cell` children for
77
+ * per-segment colours and a `Label` for the donut center. Each numeric prop is
78
+ * defaulted from the layout and still wins when passed directly.
79
+ */
80
+ function PieChartSeries({ type = "donut", size, innerRadius, outerRadius, paddingAngle, cornerRadius, strokeWidth, ...props }) {
81
+ const layout = PIE_CHART_LAYOUT[useComponentSize(size)];
82
+ return /* @__PURE__ */ jsx(Pie, {
83
+ innerRadius: innerRadius ?? (type === "pie" ? 0 : layout.innerRadius),
84
+ outerRadius: outerRadius ?? layout.outerRadius,
85
+ paddingAngle: paddingAngle ?? (type === "pie" ? 0 : layout.paddingAngle),
86
+ cornerRadius: cornerRadius ?? layout.cornerRadius,
87
+ strokeWidth: strokeWidth ?? 0,
88
+ ...props
89
+ });
105
90
  }
106
- var pieLegendVariants = cva("flex min-w-0 flex-col", {
107
- variants: {
108
- size: {
109
- sm: "gap-1.5 text-gdt-xs",
110
- md: "gap-2 text-gdt-sm",
111
- lg: "gap-2.5 text-gdt-sm"
112
- }
113
- },
114
- defaultVariants: { size: "md" }
91
+ function PieCenterLabel({ total, caption, size, viewBox }) {
92
+ const layout = PIE_CHART_LAYOUT[useComponentSize(size)];
93
+ if (!viewBox || viewBox.cx == null || viewBox.cy == null) return null;
94
+ const { cx, cy } = viewBox;
95
+ const captionY = cy + layout.totalFontSize * .72;
96
+ return /* @__PURE__ */ jsxs("text", {
97
+ x: cx,
98
+ y: cy,
99
+ textAnchor: "middle",
100
+ dominantBaseline: "central",
101
+ children: [/* @__PURE__ */ jsx("tspan", {
102
+ x: cx,
103
+ y: caption == null ? cy : cy - layout.captionFontSize * .5,
104
+ className: "fill-fg-primary font-extrabold tabular-nums",
105
+ style: { fontSize: layout.totalFontSize },
106
+ children: total
107
+ }), caption != null && /* @__PURE__ */ jsx("tspan", {
108
+ x: cx,
109
+ y: captionY,
110
+ className: "fill-fg-secondary font-medium",
111
+ style: { fontSize: layout.captionFontSize },
112
+ children: caption
113
+ })]
114
+ });
115
+ }
116
+ const pieLegendVariants = cva("flex min-w-0 flex-col", {
117
+ variants: { size: {
118
+ sm: "gap-1.5 text-gdt-xs",
119
+ md: "gap-2 text-gdt-sm",
120
+ lg: "gap-2.5 text-gdt-sm"
121
+ } },
122
+ defaultVariants: { size: "md" }
115
123
  });
116
- var pieLegendDotVariants = cva("shrink-0 rounded-full", {
117
- variants: {
118
- size: { sm: "size-2", md: "size-2.5", lg: "size-3" }
119
- },
120
- defaultVariants: { size: "md" }
124
+ const pieLegendDotVariants = cva("shrink-0 rounded-full", {
125
+ variants: { size: {
126
+ sm: "size-2",
127
+ md: "size-2.5",
128
+ lg: "size-3"
129
+ } },
130
+ defaultVariants: { size: "md" }
121
131
  });
122
- function PieChartLegend({
123
- items,
124
- size,
125
- className,
126
- ...props
127
- }) {
128
- const resolvedSize = useComponentSize(size);
129
- return /* @__PURE__ */ jsx(
130
- "ul",
131
- {
132
- className: cn(pieLegendVariants({ size: resolvedSize }), className),
133
- ...props,
134
- children: items.map((item) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2.5", children: [
135
- /* @__PURE__ */ jsx(
136
- "span",
137
- {
138
- "aria-hidden": "true",
139
- className: cn(pieLegendDotVariants({ size: resolvedSize })),
140
- style: { backgroundColor: item.color }
141
- }
142
- ),
143
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate text-fg-primary", children: item.label }),
144
- /* @__PURE__ */ jsx("span", { className: "shrink-0 tabular-nums text-fg-secondary", children: item.value }),
145
- /* @__PURE__ */ jsx("span", { className: "w-9 shrink-0 text-right font-bold tabular-nums text-fg-primary", children: item.percentage })
146
- ] }, item.label))
147
- }
148
- );
132
+ function PieChartLegend({ items, size, className, ...props }) {
133
+ const resolvedSize = useComponentSize(size);
134
+ return /* @__PURE__ */ jsx("ul", {
135
+ className: cn(pieLegendVariants({ size: resolvedSize }), className),
136
+ ...props,
137
+ children: items.map((item) => /* @__PURE__ */ jsxs("li", {
138
+ className: "flex items-center gap-2.5",
139
+ children: [
140
+ /* @__PURE__ */ jsx("span", {
141
+ "aria-hidden": "true",
142
+ className: cn(pieLegendDotVariants({ size: resolvedSize })),
143
+ style: { backgroundColor: item.color }
144
+ }),
145
+ /* @__PURE__ */ jsx("span", {
146
+ className: "min-w-0 flex-1 truncate text-fg-primary",
147
+ children: item.label
148
+ }),
149
+ /* @__PURE__ */ jsx("span", {
150
+ className: "shrink-0 tabular-nums text-fg-secondary",
151
+ children: item.value
152
+ }),
153
+ /* @__PURE__ */ jsx("span", {
154
+ className: "w-9 shrink-0 text-right font-bold tabular-nums text-fg-primary",
155
+ children: item.percentage
156
+ })
157
+ ]
158
+ }, item.label))
159
+ });
149
160
  }
150
- export {
151
- PIE_CHART_LAYOUT,
152
- PIE_CHART_PALETTE,
153
- PieCenterLabel,
154
- PieChartLegend,
155
- usePieChartLayout
156
- };
157
- //# sourceMappingURL=pie-chart.js.map
161
+ /**
162
+ * @deprecated Compose the `<PieChart>`/`<PieChartSeries>` primitives instead —
163
+ * see the module example. This layout hook predates recharts 3 wrapping support
164
+ * and will be removed in the next major. It returns prop bags to spread onto raw
165
+ * recharts elements.
166
+ */
167
+ function usePieChartLayout({ size, type = "donut" } = {}) {
168
+ const layout = PIE_CHART_LAYOUT[useComponentSize(size)];
169
+ return {
170
+ container: {
171
+ className: "aspect-square shrink-0",
172
+ style: {
173
+ width: layout.size,
174
+ height: layout.size
175
+ }
176
+ },
177
+ pie: {
178
+ innerRadius: type === "pie" ? 0 : layout.innerRadius,
179
+ outerRadius: layout.outerRadius,
180
+ paddingAngle: type === "pie" ? 0 : layout.paddingAngle,
181
+ cornerRadius: layout.cornerRadius,
182
+ strokeWidth: 0
183
+ },
184
+ label: {
185
+ totalFontSize: layout.totalFontSize,
186
+ captionFontSize: layout.captionFontSize
187
+ }
188
+ };
189
+ }
190
+ //#endregion
191
+ export { PIE_CHART_LAYOUT, PIE_CHART_PALETTE, PieCenterLabel, PieChart, PieChartLegend, PieChartSeries, usePieChartLayout };
package/dist/popover.d.ts CHANGED
@@ -1,20 +1,20 @@
1
- import { Popover as Popover$1 } from '@base-ui/react/popover';
2
- import * as React from 'react';
3
- import { ComponentSize } from './size-context.js';
4
-
1
+ import { t as ComponentSize } from "./size-context-D4mYvcg8.js";
2
+ import * as React from "react";
3
+ import { Popover as Popover$1 } from "@base-ui/react/popover";
4
+ //#region src/popover.d.ts
5
5
  declare function Popover({ ...props }: Popover$1.Root.Props): React.JSX.Element;
6
6
  declare function PopoverTrigger({ ...props }: Popover$1.Trigger.Props): React.JSX.Element;
7
7
  type PopoverContentProps = Popover$1.Popup.Props & Pick<Popover$1.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset"> & {
8
- showArrow?: boolean;
9
- size?: ComponentSize;
8
+ showArrow?: boolean;
9
+ size?: ComponentSize;
10
10
  };
11
11
  declare function PopoverContent({ className, align, alignOffset, side, sideOffset, showArrow, size, children, ...props }: PopoverContentProps): React.JSX.Element;
12
12
  declare function PopoverHeader({ className, border, ...props }: React.ComponentProps<"div"> & {
13
- border?: boolean;
13
+ border?: boolean;
14
14
  }): React.JSX.Element;
15
15
  declare function PopoverBody({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
16
16
  declare function PopoverFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
17
17
  declare function PopoverTitle({ className, ...props }: Popover$1.Title.Props): React.JSX.Element;
18
18
  declare function PopoverDescription({ className, ...props }: Popover$1.Description.Props): React.JSX.Element;
19
-
20
- export { Popover, PopoverBody, PopoverContent, PopoverDescription, PopoverFooter, PopoverHeader, PopoverTitle, PopoverTrigger };
19
+ //#endregion
20
+ export { Popover, PopoverBody, PopoverContent, PopoverDescription, PopoverFooter, PopoverHeader, PopoverTitle, PopoverTrigger };