@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/sparkline.js CHANGED
@@ -1,260 +1,324 @@
1
1
  "use client";
2
- import {
3
- ChartContainer,
4
- ChartTooltip,
5
- ChartTooltipContent
6
- } from "./chunk-NOFXVRWL.js";
7
- import {
8
- useComponentSize
9
- } from "./chunk-HL3ZSYES.js";
10
- import {
11
- cn
12
- } from "./chunk-Y4TTYVNE.js";
13
-
14
- // src/sparkline.tsx
15
- import {
16
- Area,
17
- AreaChart,
18
- Bar,
19
- BarChart,
20
- Line,
21
- LineChart,
22
- XAxis
23
- } from "recharts";
2
+ import { t as cn } from "./cn-BI_4DMBf.js";
3
+ import { useComponentSize } from "./size-context.js";
4
+ import { ChartContainer, ChartTooltip, ChartTooltipContent } from "./chart.js";
24
5
  import { jsx, jsxs } from "react/jsx-runtime";
25
- var SPARKLINE_LAYOUT = {
26
- sm: {
27
- width: 72,
28
- height: 24,
29
- strokeWidth: 1.5,
30
- dotRadius: 2,
31
- margin: { top: 4, right: 4, bottom: 2, left: 2 },
32
- barRadius: 1,
33
- maxBarSize: 6
34
- },
35
- md: {
36
- width: 104,
37
- height: 32,
38
- strokeWidth: 2,
39
- dotRadius: 2.5,
40
- margin: { top: 5, right: 5, bottom: 2, left: 2 },
41
- barRadius: 2,
42
- maxBarSize: 8
43
- },
44
- lg: {
45
- width: 144,
46
- height: 44,
47
- strokeWidth: 2,
48
- dotRadius: 3,
49
- margin: { top: 6, right: 6, bottom: 3, left: 3 },
50
- barRadius: 2,
51
- maxBarSize: 10
52
- }
6
+ import { Area, AreaChart, Bar, BarChart, Line, LineChart, XAxis } from "recharts";
7
+ //#region src/sparkline.tsx
8
+ const SPARKLINE_LAYOUT = {
9
+ sm: {
10
+ width: 72,
11
+ height: 24,
12
+ strokeWidth: 1.5,
13
+ dotRadius: 2,
14
+ margin: {
15
+ top: 4,
16
+ right: 4,
17
+ bottom: 2,
18
+ left: 2
19
+ },
20
+ barRadius: 1,
21
+ maxBarSize: 6
22
+ },
23
+ md: {
24
+ width: 104,
25
+ height: 32,
26
+ strokeWidth: 2,
27
+ dotRadius: 2.5,
28
+ margin: {
29
+ top: 5,
30
+ right: 5,
31
+ bottom: 2,
32
+ left: 2
33
+ },
34
+ barRadius: 2,
35
+ maxBarSize: 8
36
+ },
37
+ lg: {
38
+ width: 144,
39
+ height: 44,
40
+ strokeWidth: 2,
41
+ dotRadius: 3,
42
+ margin: {
43
+ top: 6,
44
+ right: 6,
45
+ bottom: 3,
46
+ left: 3
47
+ },
48
+ barRadius: 2,
49
+ maxBarSize: 10
50
+ }
53
51
  };
54
- var TREND_COLOR = {
55
- up: "var(--color-status-success)",
56
- down: "var(--color-status-danger)",
57
- flat: "var(--color-fg-secondary)"
52
+ const TREND_COLOR = {
53
+ up: "var(--color-status-success)",
54
+ down: "var(--color-status-danger)",
55
+ flat: "var(--color-fg-secondary)"
58
56
  };
57
+ /**
58
+ * Derive sentiment from the series: compare the last value to the first and
59
+ * read flat when the change is a small fraction of the overall range.
60
+ */
59
61
  function resolveTrend(data) {
60
- if (data.length < 2) return "flat";
61
- const first = data[0];
62
- const last = data[data.length - 1];
63
- const min = Math.min(...data);
64
- const max = Math.max(...data);
65
- const range = max - min || 1;
66
- const delta = last - first;
67
- if (Math.abs(delta) / range < 0.05) return "flat";
68
- return delta > 0 ? "up" : "down";
62
+ if (data.length < 2) return "flat";
63
+ const first = data[0];
64
+ const last = data[data.length - 1];
65
+ const min = Math.min(...data);
66
+ const range = Math.max(...data) - min || 1;
67
+ const delta = last - first;
68
+ if (Math.abs(delta) / range < .05) return "flat";
69
+ return delta > 0 ? "up" : "down";
69
70
  }
70
- function SparklineEndDot({
71
- cx,
72
- cy,
73
- index,
74
- lastIndex,
75
- radius
76
- }) {
77
- if (cx == null || cy == null || index !== lastIndex) {
78
- return null;
79
- }
80
- return /* @__PURE__ */ jsx(
81
- "circle",
82
- {
83
- cx,
84
- cy,
85
- r: radius,
86
- fill: "var(--color-value)",
87
- stroke: "var(--color-surface)",
88
- strokeWidth: 2
89
- }
90
- );
71
+ /**
72
+ * Custom dot passed to recharts as `dot={<SparklineEndDot ... />}`. recharts
73
+ * clones it for every point, injecting `cx`/`cy`/`index`; we only paint the
74
+ * latest point so the series carries a single end-point marker.
75
+ */
76
+ function SparklineEndDot({ cx, cy, index, lastIndex, radius }) {
77
+ if (cx == null || cy == null || index !== lastIndex) return null;
78
+ return /* @__PURE__ */ jsx("circle", {
79
+ cx,
80
+ cy,
81
+ r: radius,
82
+ fill: "var(--color-value)",
83
+ stroke: "var(--color-surface)",
84
+ strokeWidth: 2
85
+ });
91
86
  }
92
- function SparklineBarShape({
93
- x,
94
- y,
95
- width,
96
- height,
97
- index,
98
- value,
99
- lastIndex,
100
- radius,
101
- dotRadius
102
- }) {
103
- if (x == null || y == null || width == null || height == null) {
104
- return null;
105
- }
106
- const markerY = typeof value === "number" && value < 0 ? y + height : y;
107
- return /* @__PURE__ */ jsxs("g", { children: [
108
- /* @__PURE__ */ jsx(
109
- "rect",
110
- {
111
- x,
112
- y,
113
- width,
114
- height,
115
- rx: radius,
116
- ry: radius,
117
- fill: "var(--color-value)"
118
- }
119
- ),
120
- index === lastIndex ? /* @__PURE__ */ jsx(
121
- "circle",
122
- {
123
- cx: x + width / 2,
124
- cy: markerY,
125
- r: dotRadius,
126
- fill: "var(--color-value)",
127
- stroke: "var(--color-surface)",
128
- strokeWidth: 2
129
- }
130
- ) : null
131
- ] });
87
+ /**
88
+ * Bars do not support `dot`, so the marker is rendered as part of a custom bar
89
+ * shape. Only the latest bar receives the end-point marker.
90
+ */
91
+ function SparklineBarShape({ x, y, width, height, index, value, lastIndex, radius, dotRadius }) {
92
+ if (x == null || y == null || width == null || height == null) return null;
93
+ const markerY = typeof value === "number" && value < 0 ? y + height : y;
94
+ return /* @__PURE__ */ jsxs("g", { children: [/* @__PURE__ */ jsx("rect", {
95
+ x,
96
+ y,
97
+ width,
98
+ height,
99
+ rx: radius,
100
+ ry: radius,
101
+ fill: "var(--color-value)"
102
+ }), index === lastIndex ? /* @__PURE__ */ jsx("circle", {
103
+ cx: x + width / 2,
104
+ cy: markerY,
105
+ r: dotRadius,
106
+ fill: "var(--color-value)",
107
+ stroke: "var(--color-surface)",
108
+ strokeWidth: 2
109
+ }) : null] });
132
110
  }
133
- function Sparkline({
134
- data,
135
- type = "line",
136
- size,
137
- trend,
138
- showMarker = true,
139
- tooltip = false,
140
- label = "Value",
141
- labels,
142
- valueType = "number",
143
- className,
144
- style,
145
- ...props
146
- }) {
147
- const layout = SPARKLINE_LAYOUT[useComponentSize(size)];
148
- const resolvedTrend = trend ?? resolveTrend(data);
149
- const color = TREND_COLOR[resolvedTrend];
150
- const chartData = data.map((value, i) => ({
151
- x: labels?.[i] ?? `${i + 1}`,
152
- value
153
- }));
154
- const lastIndex = data.length - 1;
155
- const config = {
156
- value: { label, color }
157
- };
158
- const showDot = showMarker && data.length >= 2;
159
- const endDot = showDot ? /* @__PURE__ */ jsx(SparklineEndDot, { lastIndex, radius: layout.dotRadius }) : false;
160
- const barShape = showDot ? /* @__PURE__ */ jsx(
161
- SparklineBarShape,
162
- {
163
- lastIndex,
164
- radius: layout.barRadius,
165
- dotRadius: layout.dotRadius
166
- }
167
- ) : void 0;
168
- const activeDot = tooltip ? {
169
- r: layout.dotRadius + 0.5,
170
- fill: "var(--color-value)",
171
- stroke: "var(--color-surface)",
172
- strokeWidth: 2
173
- } : false;
174
- const tooltipNode = tooltip ? /* @__PURE__ */ jsx(
175
- ChartTooltip,
176
- {
177
- cursor: false,
178
- content: /* @__PURE__ */ jsx(ChartTooltipContent, { size: "xs", valueType })
179
- }
180
- ) : null;
181
- const ariaLabel = props["aria-label"] ?? `${label} sparkline, trend ${resolvedTrend}`;
182
- if (data.length < 2) {
183
- return /* @__PURE__ */ jsx(
184
- "div",
185
- {
186
- ...props,
187
- "aria-label": ariaLabel,
188
- role: "img",
189
- className: cn("w-full", className),
190
- style: { height: layout.height, ...style }
191
- }
192
- );
193
- }
194
- return /* @__PURE__ */ jsx(
195
- ChartContainer,
196
- {
197
- ...props,
198
- "aria-label": ariaLabel,
199
- role: "img",
200
- config,
201
- className: cn("aspect-auto w-full", className),
202
- style: { height: layout.height, ...style },
203
- children: type === "bar" ? /* @__PURE__ */ jsxs(BarChart, { accessibilityLayer: true, data: chartData, margin: layout.margin, children: [
204
- tooltipNode,
205
- /* @__PURE__ */ jsx(
206
- Bar,
207
- {
208
- dataKey: "value",
209
- fill: "var(--color-value)",
210
- radius: layout.barRadius,
211
- maxBarSize: layout.maxBarSize,
212
- shape: barShape,
213
- isAnimationActive: false
214
- }
215
- )
216
- ] }) : type === "area" ? /* @__PURE__ */ jsxs(AreaChart, { accessibilityLayer: true, data: chartData, margin: layout.margin, children: [
217
- tooltip ? /* @__PURE__ */ jsx(XAxis, { dataKey: "x", hide: true }) : null,
218
- tooltipNode,
219
- /* @__PURE__ */ jsx(
220
- Area,
221
- {
222
- type: "monotone",
223
- dataKey: "value",
224
- stroke: "var(--color-value)",
225
- strokeWidth: layout.strokeWidth,
226
- strokeLinejoin: "round",
227
- strokeLinecap: "round",
228
- fill: "var(--color-value)",
229
- fillOpacity: 0.14,
230
- dot: endDot,
231
- activeDot,
232
- isAnimationActive: false
233
- }
234
- )
235
- ] }) : /* @__PURE__ */ jsxs(LineChart, { accessibilityLayer: true, data: chartData, margin: layout.margin, children: [
236
- tooltip ? /* @__PURE__ */ jsx(XAxis, { dataKey: "x", hide: true }) : null,
237
- tooltipNode,
238
- /* @__PURE__ */ jsx(
239
- Line,
240
- {
241
- type: "monotone",
242
- dataKey: "value",
243
- stroke: "var(--color-value)",
244
- strokeWidth: layout.strokeWidth,
245
- strokeLinejoin: "round",
246
- strokeLinecap: "round",
247
- dot: endDot,
248
- activeDot,
249
- isAnimationActive: false
250
- }
251
- )
252
- ] })
253
- }
254
- );
111
+ function useSparklineSetup({ data, size, trend, showMarker, tooltip, label, labels, valueType }, kind, ariaLabelProp) {
112
+ const layout = SPARKLINE_LAYOUT[useComponentSize(size)];
113
+ const resolvedTrend = trend ?? resolveTrend(data);
114
+ const color = TREND_COLOR[resolvedTrend];
115
+ const chartData = data.map((value, i) => ({
116
+ x: labels?.[i] ?? `${i + 1}`,
117
+ value
118
+ }));
119
+ const config = { value: {
120
+ label: label ?? "Value",
121
+ color
122
+ } };
123
+ const activeDot = tooltip ? {
124
+ r: layout.dotRadius + .5,
125
+ fill: "var(--color-value)",
126
+ stroke: "var(--color-surface)",
127
+ strokeWidth: 2
128
+ } : false;
129
+ const tooltipNode = tooltip ? /* @__PURE__ */ jsx(ChartTooltip, {
130
+ cursor: false,
131
+ content: /* @__PURE__ */ jsx(ChartTooltipContent, {
132
+ size: "xs",
133
+ valueType: valueType ?? "number"
134
+ })
135
+ }) : null;
136
+ return {
137
+ layout,
138
+ resolvedTrend,
139
+ chartData,
140
+ lastIndex: data.length - 1,
141
+ config,
142
+ showDot: (showMarker ?? true) && data.length >= 2,
143
+ activeDot,
144
+ tooltipNode,
145
+ ariaLabel: ariaLabelProp ?? `${label ?? "Value"} ${kind}, trend ${resolvedTrend}`
146
+ };
255
147
  }
256
- export {
257
- SPARKLINE_LAYOUT,
258
- Sparkline
259
- };
260
- //# sourceMappingURL=sparkline.js.map
148
+ /**
149
+ * Frame shared by every render style — the empty placeholder (fewer than two
150
+ * points) and the responsive `ChartContainer` with the sparkline's aria wiring.
151
+ */
152
+ function SparklineFrame({ setup, empty, className, style, children, ...props }) {
153
+ const { layout, config, ariaLabel } = setup;
154
+ if (empty) return /* @__PURE__ */ jsx("div", {
155
+ ...props,
156
+ "aria-label": ariaLabel,
157
+ role: "img",
158
+ className: cn("w-full", className),
159
+ style: {
160
+ height: layout.height,
161
+ ...style
162
+ }
163
+ });
164
+ return /* @__PURE__ */ jsx(ChartContainer, {
165
+ ...props,
166
+ "aria-label": ariaLabel,
167
+ role: "img",
168
+ config,
169
+ className: cn("aspect-auto w-full", className),
170
+ style: {
171
+ height: layout.height,
172
+ ...style
173
+ },
174
+ children
175
+ });
176
+ }
177
+ /**
178
+ * Inline line sparkline — a bare trend stroke with an optional end-point dot and
179
+ * hover tooltip. Sentiment colour is auto-detected from the series direction.
180
+ */
181
+ function SparklineLine({ data, size, trend, showMarker, tooltip, label, labels, valueType, className, style, "aria-label": ariaLabelProp, ...rest }) {
182
+ const setup = useSparklineSetup({
183
+ data,
184
+ size,
185
+ trend,
186
+ showMarker,
187
+ tooltip,
188
+ label,
189
+ labels,
190
+ valueType
191
+ }, "sparkline", ariaLabelProp);
192
+ const { layout, chartData, lastIndex, showDot, activeDot, tooltipNode } = setup;
193
+ const endDot = showDot ? /* @__PURE__ */ jsx(SparklineEndDot, {
194
+ lastIndex,
195
+ radius: layout.dotRadius
196
+ }) : false;
197
+ return /* @__PURE__ */ jsx(SparklineFrame, {
198
+ setup,
199
+ empty: data.length < 2,
200
+ className,
201
+ style,
202
+ ...rest,
203
+ children: /* @__PURE__ */ jsxs(LineChart, {
204
+ accessibilityLayer: true,
205
+ data: chartData,
206
+ margin: layout.margin,
207
+ children: [
208
+ tooltipNode ? /* @__PURE__ */ jsx(XAxis, {
209
+ dataKey: "x",
210
+ hide: true
211
+ }) : null,
212
+ tooltipNode,
213
+ /* @__PURE__ */ jsx(Line, {
214
+ type: "monotone",
215
+ dataKey: "value",
216
+ stroke: "var(--color-value)",
217
+ strokeWidth: layout.strokeWidth,
218
+ strokeLinejoin: "round",
219
+ strokeLinecap: "round",
220
+ dot: endDot,
221
+ activeDot,
222
+ isAnimationActive: false
223
+ })
224
+ ]
225
+ })
226
+ });
227
+ }
228
+ /**
229
+ * Inline area sparkline — the same trend stroke as `SparklineLine` with a 14%
230
+ * wash beneath it, for KPI cards where the filled shape reads at a glance.
231
+ */
232
+ function SparklineArea({ data, size, trend, showMarker, tooltip, label, labels, valueType, className, style, "aria-label": ariaLabelProp, ...rest }) {
233
+ const setup = useSparklineSetup({
234
+ data,
235
+ size,
236
+ trend,
237
+ showMarker,
238
+ tooltip,
239
+ label,
240
+ labels,
241
+ valueType
242
+ }, "sparkline", ariaLabelProp);
243
+ const { layout, chartData, lastIndex, showDot, activeDot, tooltipNode } = setup;
244
+ const endDot = showDot ? /* @__PURE__ */ jsx(SparklineEndDot, {
245
+ lastIndex,
246
+ radius: layout.dotRadius
247
+ }) : false;
248
+ return /* @__PURE__ */ jsx(SparklineFrame, {
249
+ setup,
250
+ empty: data.length < 2,
251
+ className,
252
+ style,
253
+ ...rest,
254
+ children: /* @__PURE__ */ jsxs(AreaChart, {
255
+ accessibilityLayer: true,
256
+ data: chartData,
257
+ margin: layout.margin,
258
+ children: [
259
+ tooltipNode ? /* @__PURE__ */ jsx(XAxis, {
260
+ dataKey: "x",
261
+ hide: true
262
+ }) : null,
263
+ tooltipNode,
264
+ /* @__PURE__ */ jsx(Area, {
265
+ type: "monotone",
266
+ dataKey: "value",
267
+ stroke: "var(--color-value)",
268
+ strokeWidth: layout.strokeWidth,
269
+ strokeLinejoin: "round",
270
+ strokeLinecap: "round",
271
+ fill: "var(--color-value)",
272
+ fillOpacity: .14,
273
+ dot: endDot,
274
+ activeDot,
275
+ isAnimationActive: false
276
+ })
277
+ ]
278
+ })
279
+ });
280
+ }
281
+ /**
282
+ * Inline bar sparkline — one thin bar per point, for discrete series (counts,
283
+ * per-period totals). The end-point marker rides the latest bar.
284
+ */
285
+ function SparklineBar({ data, size, trend, showMarker, tooltip, label, labels, valueType, className, style, "aria-label": ariaLabelProp, ...rest }) {
286
+ const setup = useSparklineSetup({
287
+ data,
288
+ size,
289
+ trend,
290
+ showMarker,
291
+ tooltip,
292
+ label,
293
+ labels,
294
+ valueType
295
+ }, "bar sparkline", ariaLabelProp);
296
+ const { layout, chartData, lastIndex, showDot, tooltipNode } = setup;
297
+ const barShape = showDot ? /* @__PURE__ */ jsx(SparklineBarShape, {
298
+ lastIndex,
299
+ radius: layout.barRadius,
300
+ dotRadius: layout.dotRadius
301
+ }) : void 0;
302
+ return /* @__PURE__ */ jsx(SparklineFrame, {
303
+ setup,
304
+ empty: data.length < 2,
305
+ className,
306
+ style,
307
+ ...rest,
308
+ children: /* @__PURE__ */ jsxs(BarChart, {
309
+ accessibilityLayer: true,
310
+ data: chartData,
311
+ margin: layout.margin,
312
+ children: [tooltipNode, /* @__PURE__ */ jsx(Bar, {
313
+ dataKey: "value",
314
+ fill: "var(--color-value)",
315
+ radius: layout.barRadius,
316
+ maxBarSize: layout.maxBarSize,
317
+ shape: barShape,
318
+ isAnimationActive: false
319
+ })]
320
+ })
321
+ });
322
+ }
323
+ //#endregion
324
+ export { SPARKLINE_LAYOUT, SparklineArea, SparklineBar, SparklineLine };
package/dist/stepper.d.ts CHANGED
@@ -1,43 +1,42 @@
1
- import * as class_variance_authority_types from 'class-variance-authority/types';
2
- import { VariantProps } from 'class-variance-authority';
3
- import * as React from 'react';
4
-
1
+ import { VariantProps } from "class-variance-authority";
2
+ import * as React from "react";
3
+ //#region src/stepper.d.ts
5
4
  type StepperOrientation = "horizontal" | "vertical";
6
5
  type StepperState = "complete" | "active" | "upcoming";
7
6
  type StepperProps = React.ComponentProps<"div"> & {
8
- orientation?: StepperOrientation;
9
- /** Active step number (1-based). Items without an explicit `state` derive theirs from this. */
10
- value?: number;
7
+ orientation?: StepperOrientation;
8
+ /** Active step number (1-based). Items without an explicit `state` derive theirs from this. */
9
+ value?: number;
11
10
  };
12
11
  declare function Stepper({ orientation, value, className, children, ...props }: StepperProps): React.JSX.Element;
13
12
  type StepperItemProps = Omit<React.ComponentProps<"div">, "children"> & {
14
- /** Force a specific state instead of deriving it from the stepper `value`. */
15
- state?: StepperState;
16
- /** 1-based position. Injected by `Stepper`; only set this to override. */
17
- step?: number;
18
- /** Whether this is the last item (hides its connector). Injected by `Stepper`. */
19
- last?: boolean;
20
- /** Custom indicator node. Defaults to a numbered circle / checkmark. */
21
- indicator?: React.ReactNode;
22
- children?: React.ReactNode;
13
+ /** Force a specific state instead of deriving it from the stepper `value`. */
14
+ state?: StepperState;
15
+ /** 1-based position. Injected by `Stepper`; only set this to override. */
16
+ step?: number;
17
+ /** Whether this is the last item (hides its connector). Injected by `Stepper`. */
18
+ last?: boolean;
19
+ /** Custom indicator node. Defaults to a numbered circle / checkmark. */
20
+ indicator?: React.ReactNode;
21
+ children?: React.ReactNode;
23
22
  };
24
23
  declare function StepperItem({ state: stateOverride, step, last, indicator, className, children, ...props }: StepperItemProps): React.JSX.Element;
25
24
  declare const indicatorVariants: (props?: ({
26
- state?: "active" | "complete" | "upcoming" | null | undefined;
27
- } & class_variance_authority_types.ClassProp) | undefined) => string;
25
+ state?: "active" | "complete" | "upcoming" | null | undefined;
26
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
28
27
  type StepperIndicatorProps = Omit<React.ComponentProps<"div">, "children"> & VariantProps<typeof indicatorVariants> & {
29
- /** Override the rendered glyph. Defaults to the step number / checkmark. */
30
- children?: React.ReactNode;
28
+ /** Override the rendered glyph. Defaults to the step number / checkmark. */
29
+ children?: React.ReactNode;
31
30
  };
32
31
  declare function StepperIndicator({ className, state: stateProp, children, ...props }: StepperIndicatorProps): React.JSX.Element;
33
32
  declare function StepperSeparator({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
34
33
  declare function StepperTitle({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
35
34
  declare function StepperDescription({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
36
35
  type StepperMetaProps = Omit<React.ComponentProps<"div">, "children"> & {
37
- date?: React.ReactNode;
38
- time?: React.ReactNode;
36
+ date?: React.ReactNode;
37
+ time?: React.ReactNode;
39
38
  };
40
39
  /** Date / timestamp caption pair. Placeholder colour regardless of state. */
41
40
  declare function StepperMeta({ date, time, className, ...props }: StepperMetaProps): React.JSX.Element | null;
42
-
43
- export { Stepper, StepperDescription, StepperIndicator, StepperItem, StepperMeta, type StepperOrientation, StepperSeparator, type StepperState, StepperTitle };
41
+ //#endregion
42
+ export { Stepper, StepperDescription, StepperIndicator, StepperItem, StepperMeta, type StepperOrientation, StepperSeparator, type StepperState, StepperTitle };