@brainfish-ai/components 0.25.5 → 0.26.1

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 (236) hide show
  1. package/dist/chat-search.d.ts +40 -3
  2. package/dist/esm/chunks/ChatSearch.Cqo4WF3n.js +95 -0
  3. package/dist/esm/chunks/ChatSearch.Cqo4WF3n.js.map +1 -0
  4. package/dist/esm/chunks/Conversation.UZ5rx7_0.js +22 -0
  5. package/dist/esm/chunks/{Conversation.BriXFYqU.js.map → Conversation.UZ5rx7_0.js.map} +1 -1
  6. package/dist/esm/chunks/FormattedMessage.D9xA6QsH.js +23 -0
  7. package/dist/esm/chunks/FormattedMessage.D9xA6QsH.js.map +1 -0
  8. package/dist/esm/chunks/MermaidDiagram.PRgXQ5Yh.js +2 -0
  9. package/dist/esm/chunks/{MermaidDiagram.xQ0CVFOI.js.map → MermaidDiagram.PRgXQ5Yh.js.map} +1 -1
  10. package/dist/esm/chunks/_commonjsHelpers.lGe4XDVY.js +2 -0
  11. package/dist/esm/chunks/_commonjsHelpers.lGe4XDVY.js.map +1 -0
  12. package/dist/esm/chunks/button.BYc5d6AZ.js +3 -0
  13. package/dist/esm/chunks/{button.DQL6gCAt.js.map → button.BYc5d6AZ.js.map} +1 -1
  14. package/dist/esm/chunks/chart.BDL2tf-S.js +10 -0
  15. package/dist/esm/chunks/{chart.4ZbtBMmR.js.map → chart.BDL2tf-S.js.map} +1 -1
  16. package/dist/esm/chunks/chat-logo.CqPppEb9.js +3 -0
  17. package/dist/esm/chunks/chat-logo.CqPppEb9.js.map +1 -0
  18. package/dist/esm/chunks/combobox.CxaWbDm9.js +6 -0
  19. package/dist/esm/chunks/{combobox.CJKym3Z1.js.map → combobox.CxaWbDm9.js.map} +1 -1
  20. package/dist/esm/chunks/dark.DuW7JuAk.js +2 -0
  21. package/dist/esm/chunks/{dark.Cq2RCgy4.js.map → dark.DuW7JuAk.js.map} +1 -1
  22. package/dist/esm/chunks/data-table.CJOR-1Kf.js +5 -0
  23. package/dist/esm/chunks/{data-table.DbcAYxMY.js.map → data-table.CJOR-1Kf.js.map} +1 -1
  24. package/dist/esm/chunks/date-picker.Bhplnvxn.js +4 -0
  25. package/dist/esm/chunks/{date-picker._cBTpdEK.js.map → date-picker.Bhplnvxn.js.map} +1 -1
  26. package/dist/esm/chunks/extends.DPdBf6DS.js +2 -0
  27. package/dist/esm/chunks/extends.DPdBf6DS.js.map +1 -0
  28. package/dist/esm/chunks/feature-flags.DOcVlPHk.js +3 -0
  29. package/dist/esm/chunks/{feature-flags.DeDEcnd1.js.map → feature-flags.DOcVlPHk.js.map} +1 -1
  30. package/dist/esm/chunks/feedback.BXKvlNz1.js +13 -0
  31. package/dist/esm/chunks/{feedback.W2OzN-5r.js.map → feedback.BXKvlNz1.js.map} +1 -1
  32. package/dist/esm/chunks/file-upload-status.4ukNFyi2.js +8 -0
  33. package/dist/esm/chunks/{file-upload-status.DP2iuttI.js.map → file-upload-status.4ukNFyi2.js.map} +1 -1
  34. package/dist/esm/chunks/filters.ita3UAnO.js +22 -0
  35. package/dist/esm/chunks/{filters.-7vSLEQ2.js.map → filters.ita3UAnO.js.map} +1 -1
  36. package/dist/esm/chunks/font-picker.BwEWBowG.js +6 -0
  37. package/dist/esm/chunks/{font-picker.DisEoE8a.js.map → font-picker.BwEWBowG.js.map} +1 -1
  38. package/dist/esm/chunks/formatDate.D2xEZm8f.js +2 -0
  39. package/dist/esm/chunks/{formatDate.CWN6IFKq.js.map → formatDate.D2xEZm8f.js.map} +1 -1
  40. package/dist/esm/chunks/formatNumber.DhVn228t.js +2 -0
  41. package/dist/esm/chunks/{formatNumber.Bm2k8QrT.js.map → formatNumber.DhVn228t.js.map} +1 -1
  42. package/dist/esm/chunks/generating-star.BN9p_FDu.js +7 -0
  43. package/dist/esm/chunks/generating-star.BN9p_FDu.js.map +1 -0
  44. package/dist/esm/chunks/header-nav.B4IJjted.js +10 -0
  45. package/dist/esm/chunks/{header-nav.b4hvOsKc.js.map → header-nav.B4IJjted.js.map} +1 -1
  46. package/dist/esm/chunks/header-pane.C1RWesOW.js +20 -0
  47. package/dist/esm/chunks/{header-pane.BV7xKJXV.js.map → header-pane.C1RWesOW.js.map} +1 -1
  48. package/dist/esm/chunks/hooks.BQTKhHSv.js +2 -0
  49. package/dist/esm/chunks/hooks.BQTKhHSv.js.map +1 -0
  50. package/dist/esm/chunks/index.uF4ME3WQ.js +4 -0
  51. package/dist/esm/chunks/{index.BqibIWDw.js.map → index.uF4ME3WQ.js.map} +1 -1
  52. package/dist/esm/chunks/input-with-tags.DrDDPxse.js +5 -0
  53. package/dist/esm/chunks/{input-with-tags.tg2nhPFv.js.map → input-with-tags.DrDDPxse.js.map} +1 -1
  54. package/dist/esm/chunks/logo.CketsPBx.js +5 -0
  55. package/dist/esm/chunks/{logo.D5BMN6Db.js.map → logo.CketsPBx.js.map} +1 -1
  56. package/dist/esm/chunks/primary.CMQbo1GJ.js +2 -0
  57. package/dist/esm/chunks/{primary.CtiRZbqq.js.map → primary.CMQbo1GJ.js.map} +1 -1
  58. package/dist/esm/chunks/review-list.qvxeqG9l.js +6 -0
  59. package/dist/esm/chunks/{review-list.BtSnfpSc.js.map → review-list.qvxeqG9l.js.map} +1 -1
  60. package/dist/esm/chunks/sidebar.IcJADYLR.js +25 -0
  61. package/dist/esm/chunks/sidebar.IcJADYLR.js.map +1 -0
  62. package/dist/esm/chunks/simpleSelect.DK1qZSXM.js +3 -0
  63. package/dist/esm/chunks/{simpleSelect.B1rktKkt.js.map → simpleSelect.DK1qZSXM.js.map} +1 -1
  64. package/dist/esm/chunks/status-badge.C-jt7Zs2.js +3 -0
  65. package/dist/esm/chunks/{status-badge.eFJ1PYeb.js.map → status-badge.C-jt7Zs2.js.map} +1 -1
  66. package/dist/esm/chunks/trend-value.BPBDBsk2.js +3 -0
  67. package/dist/esm/chunks/{trend-value.COSukPwk.js.map → trend-value.BPBDBsk2.js.map} +1 -1
  68. package/dist/esm/chunks/two-level-combobox.Bv2OQgjh.js +8 -0
  69. package/dist/esm/chunks/{two-level-combobox.BXs2z9u5.js.map → two-level-combobox.Bv2OQgjh.js.map} +1 -1
  70. package/dist/esm/chunks/useChartDateFormatters.Dx2h5AAm.js +2 -0
  71. package/dist/esm/chunks/{useChartDateFormatters.DS9ASgFO.js.map → useChartDateFormatters.Dx2h5AAm.js.map} +1 -1
  72. package/dist/esm/chunks/utils.C6Qu-kwd.js +2 -0
  73. package/dist/esm/chunks/{utils.Cwtlq8dh.js.map → utils.C6Qu-kwd.js.map} +1 -1
  74. package/dist/esm/colors.js +1 -169
  75. package/dist/esm/colors.js.map +1 -1
  76. package/dist/esm/components/article-suggestions-banner.js +4 -53
  77. package/dist/esm/components/article-suggestions-banner.js.map +1 -1
  78. package/dist/esm/components/articles-coverage.js +4 -116
  79. package/dist/esm/components/articles-coverage.js.map +1 -1
  80. package/dist/esm/components/articles-updated.js +4 -74
  81. package/dist/esm/components/articles-updated.js.map +1 -1
  82. package/dist/esm/components/breadcrumbs.js +3 -13
  83. package/dist/esm/components/breadcrumbs.js.map +1 -1
  84. package/dist/esm/components/chart-area-linear.js +6 -66
  85. package/dist/esm/components/chart-area-linear.js.map +1 -1
  86. package/dist/esm/components/chart-radial-stacked.js +2 -48
  87. package/dist/esm/components/chart-radial-stacked.js.map +1 -1
  88. package/dist/esm/components/chat-search.js +1 -1
  89. package/dist/esm/components/combobox.js +1 -1
  90. package/dist/esm/components/confirm-dialog.js +2 -47
  91. package/dist/esm/components/confirm-dialog.js.map +1 -1
  92. package/dist/esm/components/conversation.js +1 -1
  93. package/dist/esm/components/convos.js +27 -607
  94. package/dist/esm/components/convos.js.map +1 -1
  95. package/dist/esm/components/data-table.js +1 -1
  96. package/dist/esm/components/date-picker.js +1 -1
  97. package/dist/esm/components/discoveries-created.js +4 -64
  98. package/dist/esm/components/discoveries-created.js.map +1 -1
  99. package/dist/esm/components/feedback.js +1 -1
  100. package/dist/esm/components/file-upload.js +1 -1
  101. package/dist/esm/components/filter.js +1 -1
  102. package/dist/esm/components/font-picker.js +1 -1
  103. package/dist/esm/components/generating-star.js +1 -1
  104. package/dist/esm/components/input-with-tags.js +1 -1
  105. package/dist/esm/components/logo.js +1 -1
  106. package/dist/esm/components/markdown.js +1 -2
  107. package/dist/esm/components/markdown.js.map +1 -1
  108. package/dist/esm/components/metric-card.js +3 -29
  109. package/dist/esm/components/metric-card.js.map +1 -1
  110. package/dist/esm/components/select.js +1 -1
  111. package/dist/esm/components/trend-value.js +1 -1
  112. package/dist/esm/components/two-level-combobox.js +1 -1
  113. package/dist/esm/components/ui/accordion.js +7 -46
  114. package/dist/esm/components/ui/accordion.js.map +1 -1
  115. package/dist/esm/components/ui/alert-dialog.js +3 -114
  116. package/dist/esm/components/ui/alert-dialog.js.map +1 -1
  117. package/dist/esm/components/ui/alert.js +4 -103
  118. package/dist/esm/components/ui/alert.js.map +1 -1
  119. package/dist/esm/components/ui/avatar.js +7 -89
  120. package/dist/esm/components/ui/avatar.js.map +1 -1
  121. package/dist/esm/components/ui/badge.js +2 -26
  122. package/dist/esm/components/ui/badge.js.map +1 -1
  123. package/dist/esm/components/ui/breadcrumb.js +4 -60
  124. package/dist/esm/components/ui/breadcrumb.js.map +1 -1
  125. package/dist/esm/components/ui/button-group.js +4 -88
  126. package/dist/esm/components/ui/button-group.js.map +1 -1
  127. package/dist/esm/components/ui/button.js +1 -5
  128. package/dist/esm/components/ui/button.js.map +1 -1
  129. package/dist/esm/components/ui/calendar.js +2 -20
  130. package/dist/esm/components/ui/calendar.js.map +1 -1
  131. package/dist/esm/components/ui/card.js +1 -55
  132. package/dist/esm/components/ui/card.js.map +1 -1
  133. package/dist/esm/components/ui/collapsible.js +1 -33
  134. package/dist/esm/components/ui/collapsible.js.map +1 -1
  135. package/dist/esm/components/ui/combobox.js +1 -1
  136. package/dist/esm/components/ui/command.js +2 -79
  137. package/dist/esm/components/ui/command.js.map +1 -1
  138. package/dist/esm/components/ui/dialog.js +4 -60
  139. package/dist/esm/components/ui/dialog.js.map +1 -1
  140. package/dist/esm/components/ui/div-button.js +2 -61
  141. package/dist/esm/components/ui/div-button.js.map +1 -1
  142. package/dist/esm/components/ui/dropdown-menu.js +3 -114
  143. package/dist/esm/components/ui/dropdown-menu.js.map +1 -1
  144. package/dist/esm/components/ui/icon.js +2 -25
  145. package/dist/esm/components/ui/icon.js.map +1 -1
  146. package/dist/esm/components/ui/input.js +4 -47
  147. package/dist/esm/components/ui/input.js.map +1 -1
  148. package/dist/esm/components/ui/item.js +11 -140
  149. package/dist/esm/components/ui/item.js.map +1 -1
  150. package/dist/esm/components/ui/label.js +1 -19
  151. package/dist/esm/components/ui/label.js.map +1 -1
  152. package/dist/esm/components/ui/popover.js +1 -31
  153. package/dist/esm/components/ui/popover.js.map +1 -1
  154. package/dist/esm/components/ui/progress.js +2 -22
  155. package/dist/esm/components/ui/progress.js.map +1 -1
  156. package/dist/esm/components/ui/scroll-area.js +2 -32
  157. package/dist/esm/components/ui/scroll-area.js.map +1 -1
  158. package/dist/esm/components/ui/select.js +5 -66
  159. package/dist/esm/components/ui/select.js.map +1 -1
  160. package/dist/esm/components/ui/separator.js +1 -23
  161. package/dist/esm/components/ui/separator.js.map +1 -1
  162. package/dist/esm/components/ui/sheet.js +3 -62
  163. package/dist/esm/components/ui/sheet.js.map +1 -1
  164. package/dist/esm/components/ui/spinner.js +2 -17
  165. package/dist/esm/components/ui/spinner.js.map +1 -1
  166. package/dist/esm/components/ui/switch.js +2 -26
  167. package/dist/esm/components/ui/switch.js.map +1 -1
  168. package/dist/esm/components/ui/table.js +1 -82
  169. package/dist/esm/components/ui/table.js.map +1 -1
  170. package/dist/esm/components/ui/textarea.js +1 -33
  171. package/dist/esm/components/ui/textarea.js.map +1 -1
  172. package/dist/esm/components/ui/tooltip.js +3 -31
  173. package/dist/esm/components/ui/tooltip.js.map +1 -1
  174. package/dist/esm/global.css +1 -1
  175. package/dist/esm/index.js +1 -53
  176. package/dist/esm/index.js.map +1 -1
  177. package/dist/esm/layouts/full-layout.js +1 -1
  178. package/dist/esm/layouts/header-nav.js +1 -1
  179. package/dist/esm/layouts/sidebar.js +1 -1
  180. package/dist/esm/logos/microsoft-logo.js +6 -66
  181. package/dist/esm/logos/microsoft-logo.js.map +1 -1
  182. package/dist/esm/logos/microsoft-teams-logo.js +12 -112
  183. package/dist/esm/logos/microsoft-teams-logo.js.map +1 -1
  184. package/dist/esm/logos/slack-logo.js +3 -39
  185. package/dist/esm/logos/slack-logo.js.map +1 -1
  186. package/dist/esm/scenes/knowledge-review.js +17 -380
  187. package/dist/esm/scenes/knowledge-review.js.map +1 -1
  188. package/dist/esm/tailwind.preset.js +1 -1526
  189. package/dist/esm/tailwind.preset.js.map +1 -1
  190. package/dist/index.d.ts +48 -3
  191. package/dist/logo.d.ts +9 -0
  192. package/dist/stats.html +47 -46
  193. package/package.json +17 -18
  194. package/tailwind.preset.ts +1 -0
  195. package/dist/esm/chunks/ChatSearch.CL2VnSod.js +0 -6697
  196. package/dist/esm/chunks/ChatSearch.CL2VnSod.js.map +0 -1
  197. package/dist/esm/chunks/Conversation.BriXFYqU.js +0 -831
  198. package/dist/esm/chunks/FormattedMessage.CRbM-hF6.js +0 -39715
  199. package/dist/esm/chunks/FormattedMessage.CRbM-hF6.js.map +0 -1
  200. package/dist/esm/chunks/MermaidDiagram.xQ0CVFOI.js +0 -50
  201. package/dist/esm/chunks/_commonjsHelpers.BFTU3MAI.js +0 -8
  202. package/dist/esm/chunks/_commonjsHelpers.BFTU3MAI.js.map +0 -1
  203. package/dist/esm/chunks/button.DQL6gCAt.js +0 -48
  204. package/dist/esm/chunks/chart.4ZbtBMmR.js +0 -199
  205. package/dist/esm/chunks/combobox.CJKym3Z1.js +0 -95
  206. package/dist/esm/chunks/dark.Cq2RCgy4.js +0 -18
  207. package/dist/esm/chunks/data-table.DbcAYxMY.js +0 -102
  208. package/dist/esm/chunks/date-picker._cBTpdEK.js +0 -26
  209. package/dist/esm/chunks/extends.mO86zOh3.js +0 -12
  210. package/dist/esm/chunks/extends.mO86zOh3.js.map +0 -1
  211. package/dist/esm/chunks/feature-flags.DeDEcnd1.js +0 -22
  212. package/dist/esm/chunks/feedback.W2OzN-5r.js +0 -214
  213. package/dist/esm/chunks/file-upload-status.DP2iuttI.js +0 -141
  214. package/dist/esm/chunks/filters.-7vSLEQ2.js +0 -565
  215. package/dist/esm/chunks/font-picker.DisEoE8a.js +0 -181
  216. package/dist/esm/chunks/formatDate.CWN6IFKq.js +0 -952
  217. package/dist/esm/chunks/formatNumber.Bm2k8QrT.js +0 -10
  218. package/dist/esm/chunks/generating-star.DMDPNTaM.js +0 -1501
  219. package/dist/esm/chunks/generating-star.DMDPNTaM.js.map +0 -1
  220. package/dist/esm/chunks/header-nav.b4hvOsKc.js +0 -197
  221. package/dist/esm/chunks/header-pane.BV7xKJXV.js +0 -559
  222. package/dist/esm/chunks/hooks.m-nIJmio.js +0 -337
  223. package/dist/esm/chunks/hooks.m-nIJmio.js.map +0 -1
  224. package/dist/esm/chunks/index.BqibIWDw.js +0 -137
  225. package/dist/esm/chunks/input-with-tags.tg2nhPFv.js +0 -110
  226. package/dist/esm/chunks/logo.D5BMN6Db.js +0 -191
  227. package/dist/esm/chunks/primary.CtiRZbqq.js +0 -18
  228. package/dist/esm/chunks/review-list.BtSnfpSc.js +0 -117
  229. package/dist/esm/chunks/sidebar.PfXKnt9J.js +0 -803
  230. package/dist/esm/chunks/sidebar.PfXKnt9J.js.map +0 -1
  231. package/dist/esm/chunks/simpleSelect.B1rktKkt.js +0 -23
  232. package/dist/esm/chunks/status-badge.eFJ1PYeb.js +0 -18
  233. package/dist/esm/chunks/trend-value.COSukPwk.js +0 -51
  234. package/dist/esm/chunks/two-level-combobox.BXs2z9u5.js +0 -132
  235. package/dist/esm/chunks/useChartDateFormatters.DS9ASgFO.js +0 -11
  236. package/dist/esm/chunks/utils.Cwtlq8dh.js +0 -45
@@ -1,117 +1,5 @@
1
- import React__default from 'react';
2
- import { LineChart, CartesianGrid, XAxis, Line, PieChart, Pie, Label } from 'recharts';
3
- import { a as TrendValue } from '../chunks/trend-value.COSukPwk.js';
4
- import { Card, CardHeader, CardContent } from './ui/card.js';
5
- import { C as ChartContainer, a as ChartTooltip, b as ChartTooltipContent } from '../chunks/chart.4ZbtBMmR.js';
6
- import { f as formatNumber } from '../chunks/formatNumber.Bm2k8QrT.js';
7
- import { u as useChartDateFormatters } from '../chunks/useChartDateFormatters.DS9ASgFO.js';
8
- import { c as cn } from '../chunks/utils.Cwtlq8dh.js';
9
-
10
- const formatWhole = (value) => formatNumber(value, {});
11
- const COVERAGE_CHART_CONFIG = {
12
- covered: {
13
- label: "Covered",
14
- color: "var(--bfc-v2-color-blue-600, #357DE8)"
15
- },
16
- uncovered: {
17
- label: "Uncovered",
18
- color: "var(--bfc-v2-color-mono-300, #E5E5E5)"
19
- }
20
- };
21
- function ArticlesCoverage({
22
- total,
23
- trend,
24
- trendValue,
25
- coveragePercentage,
26
- data,
27
- chartConfig,
28
- locale,
29
- className
30
- }) {
31
- const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);
32
- const lineKeys = Object.keys(chartConfig);
33
- const clampedCoverage = Math.round(Math.min(100, Math.max(0, coveragePercentage)));
34
- return /* @__PURE__ */ React__default.createElement(Card, { className: cn("shadow-none border border-dark-300 rounded-lg", className) }, /* @__PURE__ */ React__default.createElement(CardHeader, { className: "p-0 space-y-0 border-b border-dark-300" }, /* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col gap-1 justify-center py-4 px-4" }, /* @__PURE__ */ React__default.createElement("p", { className: "uppercase heading-xxxs font-semibold text-dark tracking-normal" }, "Articles Generated by Brainfish (coverage)"), /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React__default.createElement("span", { className: "font-mono text-3xl leading-10 text-dark" }, formatWhole(total)), /* @__PURE__ */ React__default.createElement(TrendValue, { trend, trendValue })))), /* @__PURE__ */ React__default.createElement(CardContent, { className: "flex gap-2 p-0" }, /* @__PURE__ */ React__default.createElement("div", { className: "flex-1 min-w-0 px-4 pt-4 pb-0" }, /* @__PURE__ */ React__default.createElement(ChartContainer, { config: chartConfig, className: "h-48 w-full" }, /* @__PURE__ */ React__default.createElement(LineChart, { data, margin: { top: 8, left: 20, right: 20, bottom: 0 } }, /* @__PURE__ */ React__default.createElement(CartesianGrid, { horizontal: true, vertical: false, className: "stroke-dark-300" }), /* @__PURE__ */ React__default.createElement(
35
- XAxis,
36
- {
37
- dataKey: "date",
38
- tickLine: false,
39
- axisLine: false,
40
- tickMargin: 8,
41
- padding: { left: 15, right: 15 },
42
- minTickGap: 32,
43
- interval: "preserveStartEnd",
44
- tickFormatter,
45
- tick: ({ x, y, payload, index }) => {
46
- const isFirst = index === 0;
47
- const isLast = index === data.length - 1;
48
- const anchor = isFirst ? "start" : isLast ? "end" : "middle";
49
- const tickX = isFirst ? x - 15 : isLast ? x + 15 : x;
50
- return /* @__PURE__ */ React__default.createElement("text", { x: tickX, y, dy: 12, textAnchor: anchor, className: "text-xs fill-dark-600" }, tickFormatter(payload.value));
51
- }
52
- }
53
- ), /* @__PURE__ */ React__default.createElement(
54
- ChartTooltip,
55
- {
56
- cursor: false,
57
- content: ({ active, payload, label }) => /* @__PURE__ */ React__default.createElement(
58
- ChartTooltipContent,
59
- {
60
- active,
61
- payload,
62
- label: label != null ? formatXLabel(label) : ""
63
- }
64
- )
65
- }
66
- ), lineKeys.map((key) => /* @__PURE__ */ React__default.createElement(
67
- Line,
68
- {
69
- key,
70
- dataKey: key,
71
- type: "monotone",
72
- stroke: `var(--color-${key})`,
73
- strokeWidth: 2,
74
- dot: { r: 4, fill: "white", strokeWidth: 2, stroke: `var(--color-${key})` },
75
- activeDot: { r: 5, fill: "white", strokeWidth: 2, stroke: `var(--color-${key})` }
76
- }
77
- ))))), /* @__PURE__ */ React__default.createElement("div", { className: "w-80 shrink-0 flex items-center justify-center" }, /* @__PURE__ */ React__default.createElement(ChartContainer, { config: COVERAGE_CHART_CONFIG, className: "aspect-square w-full max-w-44" }, /* @__PURE__ */ React__default.createElement(PieChart, null, /* @__PURE__ */ React__default.createElement(
78
- Pie,
79
- {
80
- data: [{ value: 100, fill: "var(--color-uncovered)" }],
81
- dataKey: "value",
82
- innerRadius: "76%",
83
- outerRadius: "82%",
84
- stroke: "none",
85
- isAnimationActive: false
86
- }
87
- ), /* @__PURE__ */ React__default.createElement(
88
- Pie,
89
- {
90
- data: [
91
- { name: "covered", value: clampedCoverage, fill: "var(--color-covered)" },
92
- { name: "uncovered", value: 100 - clampedCoverage, fill: "transparent" }
93
- ],
94
- dataKey: "value",
95
- nameKey: "name",
96
- innerRadius: "68%",
97
- outerRadius: "90%",
98
- startAngle: 90,
99
- endAngle: -270,
100
- stroke: "none"
101
- },
102
- /* @__PURE__ */ React__default.createElement(
103
- Label,
104
- {
105
- content: ({ viewBox }) => {
106
- if (viewBox && "cx" in viewBox && "cy" in viewBox) {
107
- return /* @__PURE__ */ React__default.createElement("text", { x: viewBox.cx, y: viewBox.cy, textAnchor: "middle", dominantBaseline: "central" }, /* @__PURE__ */ React__default.createElement("tspan", { className: "font-mono text-3xl fill-dark-600" }, clampedCoverage, "%"));
108
- }
109
- return null;
110
- }
111
- }
112
- )
113
- ))))));
114
- }
115
-
116
- export { ArticlesCoverage };
1
+ import e from"react";import{LineChart as t,CartesianGrid as a,XAxis as r,Line as l,PieChart as n,Pie as o,Label as c}from"recharts";import{a as s}from"../chunks/trend-value.BPBDBsk2.js";import{Card as m,CardHeader as i,CardContent as d}from"./ui/card.js";import{C as u,a as f,b as v}from"../chunks/chart.BDL2tf-S.js";import{f as p}from"../chunks/formatNumber.DhVn228t.js";import{u as x}from"../chunks/useChartDateFormatters.Dx2h5AAm.js";import{c as k}from"../chunks/utils.C6Qu-kwd.js";const E={covered:{label:"Covered",color:"var(--bfc-v2-color-blue-600, #357DE8)"},uncovered:{label:"Uncovered",color:"var(--bfc-v2-color-mono-300, #E5E5E5)"}};function h({total:h,trend:y,trendValue:g,coveragePercentage:b,data:N,chartConfig:j,locale:w,className:A}){const{tickFormatter:K,formatXLabel:C}=x(w),M=Object.keys(j),R=Math.round(Math.min(100,Math.max(0,b)));/* @__PURE__ */
2
+ return e.createElement(m,{className:k("shadow-none border border-dark-300 rounded-lg",A)},/* @__PURE__ */e.createElement(i,{className:"p-0 space-y-0 border-b border-dark-300"},/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-1 justify-center py-4 px-4"},/* @__PURE__ */e.createElement("p",{className:"uppercase heading-xxxs font-semibold text-dark tracking-normal"},"Articles Generated by Brainfish (coverage)"),/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-2"},/* @__PURE__ */e.createElement("span",{className:"font-mono text-3xl leading-10 text-dark"},p(h,{})),/* @__PURE__ */e.createElement(s,{trend:y,trendValue:g})))),/* @__PURE__ */e.createElement(d,{className:"flex gap-2 p-0"},/* @__PURE__ */e.createElement("div",{className:"flex-1 min-w-0 px-4 pt-4 pb-0"},/* @__PURE__ */e.createElement(u,{config:j,className:"h-48 w-full"},/* @__PURE__ */e.createElement(t,{data:N,margin:{top:8,left:20,right:20,bottom:0}},/* @__PURE__ */e.createElement(a,{horizontal:!0,vertical:!1,className:"stroke-dark-300"}),/* @__PURE__ */e.createElement(r,{dataKey:"date",tickLine:!1,axisLine:!1,tickMargin:8,padding:{left:15,right:15},minTickGap:32,interval:"preserveStartEnd",tickFormatter:K,tick:({x:t,y:a,payload:r,index:l})=>{const n=0===l,o=l===N.length-1,c=n?"start":o?"end":"middle",s=n?t-15:o?t+15:t;/* @__PURE__ */
3
+ return e.createElement("text",{x:s,y:a,dy:12,textAnchor:c,className:"text-xs fill-dark-600"},K(r.value))}}),/* @__PURE__ */e.createElement(f,{cursor:!1,content:({active:t,payload:a,label:r})=>/* @__PURE__ */e.createElement(v,{active:t,payload:a,label:null!=r?C(r):""})}),M.map(t=>/* @__PURE__ */e.createElement(l,{key:t,dataKey:t,type:"monotone",stroke:`var(--color-${t})`,strokeWidth:2,dot:{r:4,fill:"white",strokeWidth:2,stroke:`var(--color-${t})`},activeDot:{r:5,fill:"white",strokeWidth:2,stroke:`var(--color-${t})`}}))))),/* @__PURE__ */e.createElement("div",{className:"w-80 shrink-0 flex items-center justify-center"},/* @__PURE__ */e.createElement(u,{config:E,className:"aspect-square w-full max-w-44"},/* @__PURE__ */e.createElement(n,null,/* @__PURE__ */e.createElement(o,{data:[{value:100,fill:"var(--color-uncovered)"}],dataKey:"value",innerRadius:"76%",outerRadius:"82%",stroke:"none",isAnimationActive:!1}),/* @__PURE__ */e.createElement(o,{data:[{name:"covered",value:R,fill:"var(--color-covered)"},{name:"uncovered",value:100-R,fill:"transparent"}],dataKey:"value",nameKey:"name",innerRadius:"68%",outerRadius:"90%",startAngle:90,endAngle:-270,stroke:"none"},
4
+ /* @__PURE__ */e.createElement(c,{content:({viewBox:t})=>t&&"cx"in t&&"cy"in t?/* @__PURE__ */e.createElement("text",{x:t.cx,y:t.cy,textAnchor:"middle",dominantBaseline:"central"},/* @__PURE__ */e.createElement("tspan",{className:"font-mono text-3xl fill-dark-600"},R,"%")):null})))))))}export{h as ArticlesCoverage};
117
5
  //# sourceMappingURL=articles-coverage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"articles-coverage.js","sources":["../../../src/components/articles-coverage/articles-coverage.tsx"],"sourcesContent":["import React from 'react';\nimport { CartesianGrid, Label, Line, LineChart, Pie, PieChart, XAxis } from 'recharts';\n\nimport { Trend, TrendValue } from '../trend-value';\n\nimport { Card, CardContent, CardHeader } from '@/components/ui/card';\nimport { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\nimport { formatNumber } from '@/lib/formatNumber';\nimport { useChartDateFormatters } from '@/lib/useChartDateFormatters';\nimport { cn } from '@/lib/utils';\n\nexport interface ArticlesCoverageProps {\n total: number;\n trend: Trend;\n trendValue: string;\n coveragePercentage: number;\n data: Array<Record<string, number | string | Date>>;\n chartConfig: ChartConfig;\n locale?: string;\n className?: string;\n}\n\nconst formatWhole = (value: number) => formatNumber(value, {});\n\nconst COVERAGE_CHART_CONFIG = {\n covered: {\n label: 'Covered',\n color: 'var(--bfc-v2-color-blue-600, #357DE8)',\n },\n uncovered: {\n label: 'Uncovered',\n color: 'var(--bfc-v2-color-mono-300, #E5E5E5)',\n },\n} satisfies ChartConfig;\n\nexport function ArticlesCoverage({\n total,\n trend,\n trendValue,\n coveragePercentage,\n data,\n chartConfig,\n locale,\n className,\n}: ArticlesCoverageProps) {\n const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);\n const lineKeys = Object.keys(chartConfig);\n const clampedCoverage = Math.round(Math.min(100, Math.max(0, coveragePercentage)));\n\n return (\n <Card className={cn('shadow-none border border-dark-300 rounded-lg', className)}>\n <CardHeader className=\"p-0 space-y-0 border-b border-dark-300\">\n <div className=\"flex flex-col gap-1 justify-center py-4 px-4\">\n <p className=\"uppercase heading-xxxs font-semibold text-dark tracking-normal\">\n Articles Generated by Brainfish (coverage)\n </p>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-3xl leading-10 text-dark\">{formatWhole(total)}</span>\n <TrendValue trend={trend} trendValue={trendValue} />\n </div>\n </div>\n </CardHeader>\n\n <CardContent className=\"flex gap-2 p-0\">\n <div className=\"flex-1 min-w-0 px-4 pt-4 pb-0\">\n <ChartContainer config={chartConfig} className=\"h-48 w-full\">\n <LineChart data={data} margin={{ top: 8, left: 20, right: 20, bottom: 0 }}>\n <CartesianGrid horizontal vertical={false} className=\"stroke-dark-300\" />\n <XAxis\n dataKey=\"date\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n padding={{ left: 15, right: 15 }}\n minTickGap={32}\n interval=\"preserveStartEnd\"\n tickFormatter={tickFormatter}\n tick={({ x, y, payload, index }) => {\n const isFirst = index === 0;\n const isLast = index === data.length - 1;\n const anchor = isFirst ? 'start' : isLast ? 'end' : 'middle';\n const tickX = isFirst ? x - 15 : isLast ? x + 15 : x;\n\n return (\n <text x={tickX} y={y} dy={12} textAnchor={anchor} className=\"text-xs fill-dark-600\">\n {tickFormatter(payload.value)}\n </text>\n );\n }}\n />\n <ChartTooltip\n cursor={false}\n content={({ active, payload, label }) => (\n <ChartTooltipContent\n active={active}\n payload={payload}\n label={label != null ? formatXLabel(label) : ''}\n />\n )}\n />\n {lineKeys.map((key) => (\n <Line\n key={key}\n dataKey={key}\n type=\"monotone\"\n stroke={`var(--color-${key})`}\n strokeWidth={2}\n dot={{ r: 4, fill: 'white', strokeWidth: 2, stroke: `var(--color-${key})` }}\n activeDot={{ r: 5, fill: 'white', strokeWidth: 2, stroke: `var(--color-${key})` }}\n />\n ))}\n </LineChart>\n </ChartContainer>\n </div>\n\n <div className=\"w-80 shrink-0 flex items-center justify-center\">\n <ChartContainer config={COVERAGE_CHART_CONFIG} className=\"aspect-square w-full max-w-44\">\n <PieChart>\n <Pie\n data={[{ value: 100, fill: 'var(--color-uncovered)' }]}\n dataKey=\"value\"\n innerRadius=\"76%\"\n outerRadius=\"82%\"\n stroke=\"none\"\n isAnimationActive={false}\n />\n <Pie\n data={[\n { name: 'covered', value: clampedCoverage, fill: 'var(--color-covered)' },\n { name: 'uncovered', value: 100 - clampedCoverage, fill: 'transparent' },\n ]}\n dataKey=\"value\"\n nameKey=\"name\"\n innerRadius=\"68%\"\n outerRadius=\"90%\"\n startAngle={90}\n endAngle={-270}\n stroke=\"none\"\n >\n <Label\n content={({ viewBox }) => {\n if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\" dominantBaseline=\"central\">\n <tspan className=\"font-mono text-3xl fill-dark-600\">{clampedCoverage}%</tspan>\n </text>\n );\n }\n\n return null;\n }}\n />\n </Pie>\n </PieChart>\n </ChartContainer>\n </div>\n </CardContent>\n </Card>\n );\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"articles-coverage.js","sources":["../../../src/components/articles-coverage/articles-coverage.tsx"],"sourcesContent":["import React from 'react';\nimport { CartesianGrid, Label, Line, LineChart, Pie, PieChart, XAxis } from 'recharts';\n\nimport { Trend, TrendValue } from '../trend-value';\n\nimport { Card, CardContent, CardHeader } from '@/components/ui/card';\nimport { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\nimport { formatNumber } from '@/lib/formatNumber';\nimport { useChartDateFormatters } from '@/lib/useChartDateFormatters';\nimport { cn } from '@/lib/utils';\n\nexport interface ArticlesCoverageProps {\n total: number;\n trend: Trend;\n trendValue: string;\n coveragePercentage: number;\n data: Array<Record<string, number | string | Date>>;\n chartConfig: ChartConfig;\n locale?: string;\n className?: string;\n}\n\nconst formatWhole = (value: number) => formatNumber(value, {});\n\nconst COVERAGE_CHART_CONFIG = {\n covered: {\n label: 'Covered',\n color: 'var(--bfc-v2-color-blue-600, #357DE8)',\n },\n uncovered: {\n label: 'Uncovered',\n color: 'var(--bfc-v2-color-mono-300, #E5E5E5)',\n },\n} satisfies ChartConfig;\n\nexport function ArticlesCoverage({\n total,\n trend,\n trendValue,\n coveragePercentage,\n data,\n chartConfig,\n locale,\n className,\n}: ArticlesCoverageProps) {\n const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);\n const lineKeys = Object.keys(chartConfig);\n const clampedCoverage = Math.round(Math.min(100, Math.max(0, coveragePercentage)));\n\n return (\n <Card className={cn('shadow-none border border-dark-300 rounded-lg', className)}>\n <CardHeader className=\"p-0 space-y-0 border-b border-dark-300\">\n <div className=\"flex flex-col gap-1 justify-center py-4 px-4\">\n <p className=\"uppercase heading-xxxs font-semibold text-dark tracking-normal\">\n Articles Generated by Brainfish (coverage)\n </p>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-3xl leading-10 text-dark\">{formatWhole(total)}</span>\n <TrendValue trend={trend} trendValue={trendValue} />\n </div>\n </div>\n </CardHeader>\n\n <CardContent className=\"flex gap-2 p-0\">\n <div className=\"flex-1 min-w-0 px-4 pt-4 pb-0\">\n <ChartContainer config={chartConfig} className=\"h-48 w-full\">\n <LineChart data={data} margin={{ top: 8, left: 20, right: 20, bottom: 0 }}>\n <CartesianGrid horizontal vertical={false} className=\"stroke-dark-300\" />\n <XAxis\n dataKey=\"date\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n padding={{ left: 15, right: 15 }}\n minTickGap={32}\n interval=\"preserveStartEnd\"\n tickFormatter={tickFormatter}\n tick={({ x, y, payload, index }) => {\n const isFirst = index === 0;\n const isLast = index === data.length - 1;\n const anchor = isFirst ? 'start' : isLast ? 'end' : 'middle';\n const tickX = isFirst ? x - 15 : isLast ? x + 15 : x;\n\n return (\n <text x={tickX} y={y} dy={12} textAnchor={anchor} className=\"text-xs fill-dark-600\">\n {tickFormatter(payload.value)}\n </text>\n );\n }}\n />\n <ChartTooltip\n cursor={false}\n content={({ active, payload, label }) => (\n <ChartTooltipContent\n active={active}\n payload={payload}\n label={label != null ? formatXLabel(label) : ''}\n />\n )}\n />\n {lineKeys.map((key) => (\n <Line\n key={key}\n dataKey={key}\n type=\"monotone\"\n stroke={`var(--color-${key})`}\n strokeWidth={2}\n dot={{ r: 4, fill: 'white', strokeWidth: 2, stroke: `var(--color-${key})` }}\n activeDot={{ r: 5, fill: 'white', strokeWidth: 2, stroke: `var(--color-${key})` }}\n />\n ))}\n </LineChart>\n </ChartContainer>\n </div>\n\n <div className=\"w-80 shrink-0 flex items-center justify-center\">\n <ChartContainer config={COVERAGE_CHART_CONFIG} className=\"aspect-square w-full max-w-44\">\n <PieChart>\n <Pie\n data={[{ value: 100, fill: 'var(--color-uncovered)' }]}\n dataKey=\"value\"\n innerRadius=\"76%\"\n outerRadius=\"82%\"\n stroke=\"none\"\n isAnimationActive={false}\n />\n <Pie\n data={[\n { name: 'covered', value: clampedCoverage, fill: 'var(--color-covered)' },\n { name: 'uncovered', value: 100 - clampedCoverage, fill: 'transparent' },\n ]}\n dataKey=\"value\"\n nameKey=\"name\"\n innerRadius=\"68%\"\n outerRadius=\"90%\"\n startAngle={90}\n endAngle={-270}\n stroke=\"none\"\n >\n <Label\n content={({ viewBox }) => {\n if (viewBox && 'cx' in viewBox && 'cy' in viewBox) {\n return (\n <text x={viewBox.cx} y={viewBox.cy} textAnchor=\"middle\" dominantBaseline=\"central\">\n <tspan className=\"font-mono text-3xl fill-dark-600\">{clampedCoverage}%</tspan>\n </text>\n );\n }\n\n return null;\n }}\n />\n </Pie>\n </PieChart>\n </ChartContainer>\n </div>\n </CardContent>\n </Card>\n );\n}\n"],"names":["COVERAGE_CHART_CONFIG","covered","label","color","uncovered","ArticlesCoverage","total","trend","trendValue","coveragePercentage","data","chartConfig","locale","className","tickFormatter","formatXLabel","useChartDateFormatters","lineKeys","Object","keys","clampedCoverage","Math","round","min","max","Card","cn","React","createElement","CardHeader","formatNumber","TrendValue","CardContent","ChartContainer","config","LineChart","margin","top","left","right","bottom","CartesianGrid","horizontal","vertical","XAxis","dataKey","tickLine","axisLine","tickMargin","padding","minTickGap","interval","tick","x","y","payload","index","isFirst","isLast","length","anchor","tickX","dy","textAnchor","value","ChartTooltip","cursor","content","active","ChartTooltipContent","map","key","Line","type","stroke","strokeWidth","dot","r","fill","activeDot","PieChart","Pie","innerRadius","outerRadius","isAnimationActive","name","nameKey","startAngle","endAngle","Label","viewBox","cx","cy","dominantBaseline"],"mappings":"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"}
@@ -1,75 +1,5 @@
1
- import React__default from 'react';
2
- import { LineChart, CartesianGrid, XAxis, Line } from 'recharts';
3
- import { a as TrendValue } from '../chunks/trend-value.COSukPwk.js';
4
- import { Card, CardHeader, CardContent } from './ui/card.js';
5
- import { C as ChartContainer, a as ChartTooltip, b as ChartTooltipContent, c as ChartLegend, d as ChartLegendContent } from '../chunks/chart.4ZbtBMmR.js';
6
- import { f as formatNumber } from '../chunks/formatNumber.Bm2k8QrT.js';
7
- import { u as useChartDateFormatters } from '../chunks/useChartDateFormatters.DS9ASgFO.js';
8
- import { c as cn } from '../chunks/utils.Cwtlq8dh.js';
9
-
10
- const formatWhole = (value) => formatNumber(value, {});
11
- function ArticlesUpdated({
12
- total,
13
- trend,
14
- trendValue,
15
- data,
16
- chartConfig,
17
- dashedKeys = [],
18
- locale,
19
- className
20
- }) {
21
- const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);
22
- const lineKeys = Object.keys(chartConfig);
23
- return /* @__PURE__ */ React__default.createElement(Card, { className: cn("shadow-none border border-dark-300 rounded-lg", className) }, /* @__PURE__ */ React__default.createElement(CardHeader, { className: "p-0 space-y-0 border-b border-dark-300" }, /* @__PURE__ */ React__default.createElement("div", { className: "flex flex-col gap-1 justify-center py-4 px-4" }, /* @__PURE__ */ React__default.createElement("p", { className: "uppercase heading-xxxs font-semibold text-dark tracking-normal" }, "Articles updated"), /* @__PURE__ */ React__default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React__default.createElement("span", { className: "font-mono text-3xl leading-10 text-dark" }, formatWhole(total)), /* @__PURE__ */ React__default.createElement(TrendValue, { trend, trendValue })))), /* @__PURE__ */ React__default.createElement(CardContent, { className: "p-4" }, /* @__PURE__ */ React__default.createElement(ChartContainer, { config: chartConfig, className: "h-48 w-full" }, /* @__PURE__ */ React__default.createElement(LineChart, { data, margin: { top: 8, left: 20, right: 20, bottom: 0 } }, /* @__PURE__ */ React__default.createElement(CartesianGrid, { horizontal: true, vertical: false, className: "stroke-dark-300" }), /* @__PURE__ */ React__default.createElement(
24
- XAxis,
25
- {
26
- dataKey: "date",
27
- tickLine: false,
28
- axisLine: false,
29
- tickMargin: 8,
30
- padding: { left: 15, right: 15 },
31
- minTickGap: 32,
32
- interval: "preserveStartEnd",
33
- tickFormatter,
34
- tick: ({ x, y, payload, index }) => {
35
- const isFirst = index === 0;
36
- const isLast = index === data.length - 1;
37
- const anchor = isFirst ? "start" : isLast ? "end" : "middle";
38
- const tickX = isFirst ? x - 15 : isLast ? x + 15 : x;
39
- return /* @__PURE__ */ React__default.createElement("text", { x: tickX, y, dy: 12, textAnchor: anchor, className: "text-xs fill-dark-600" }, tickFormatter(payload.value));
40
- }
41
- }
42
- ), /* @__PURE__ */ React__default.createElement(
43
- ChartTooltip,
44
- {
45
- cursor: false,
46
- content: ({ active, payload, label }) => /* @__PURE__ */ React__default.createElement(
47
- ChartTooltipContent,
48
- {
49
- active,
50
- payload,
51
- label: formatXLabel(label),
52
- className: "min-w-52"
53
- }
54
- )
55
- }
56
- ), lineKeys.map((key) => {
57
- const isDashed = dashedKeys.includes(key);
58
- return /* @__PURE__ */ React__default.createElement(
59
- Line,
60
- {
61
- key,
62
- dataKey: key,
63
- type: "monotone",
64
- stroke: `var(--color-${key})`,
65
- strokeWidth: 2,
66
- strokeDasharray: isDashed ? "5 5" : void 0,
67
- dot: ({ cx, cy, stroke }) => /* @__PURE__ */ React__default.createElement("circle", { cx, cy, r: 4, fill: "white", stroke, strokeWidth: 2 }),
68
- activeDot: { r: 5, strokeWidth: 0 }
69
- }
70
- );
71
- }), /* @__PURE__ */ React__default.createElement(ChartLegend, { content: /* @__PURE__ */ React__default.createElement(ChartLegendContent, null) })))));
72
- }
73
-
74
- export { ArticlesUpdated };
1
+ import e from"react";import{LineChart as t,CartesianGrid as a,XAxis as r,Line as c}from"recharts";import{a as s}from"../chunks/trend-value.BPBDBsk2.js";import{Card as l,CardHeader as n,CardContent as o}from"./ui/card.js";import{C as m,a as i,b as d,c as p,d as k}from"../chunks/chart.BDL2tf-S.js";import{f as u}from"../chunks/formatNumber.DhVn228t.js";import{u as f}from"../chunks/useChartDateFormatters.Dx2h5AAm.js";import{c as h}from"../chunks/utils.C6Qu-kwd.js";function x({total:x,trend:E,trendValue:y,data:g,chartConfig:b,dashedKeys:N=[],locale:v,className:j}){const{tickFormatter:w,formatXLabel:C}=f(v),D=Object.keys(b);/* @__PURE__ */
2
+ return e.createElement(l,{className:h("shadow-none border border-dark-300 rounded-lg",j)},/* @__PURE__ */e.createElement(n,{className:"p-0 space-y-0 border-b border-dark-300"},/* @__PURE__ */e.createElement("div",{className:"flex flex-col gap-1 justify-center py-4 px-4"},/* @__PURE__ */e.createElement("p",{className:"uppercase heading-xxxs font-semibold text-dark tracking-normal"},"Articles updated"),/* @__PURE__ */e.createElement("div",{className:"flex items-center gap-2"},/* @__PURE__ */e.createElement("span",{className:"font-mono text-3xl leading-10 text-dark"},u(x,{})),/* @__PURE__ */e.createElement(s,{trend:E,trendValue:y})))),/* @__PURE__ */e.createElement(o,{className:"p-4"},/* @__PURE__ */e.createElement(m,{config:b,className:"h-48 w-full"},/* @__PURE__ */e.createElement(t,{data:g,margin:{top:8,left:20,right:20,bottom:0}},/* @__PURE__ */e.createElement(a,{horizontal:!0,vertical:!1,className:"stroke-dark-300"}),/* @__PURE__ */e.createElement(r,{dataKey:"date",tickLine:!1,axisLine:!1,tickMargin:8,padding:{left:15,right:15},minTickGap:32,interval:"preserveStartEnd",tickFormatter:w,tick:({x:t,y:a,payload:r,index:c})=>{const s=0===c,l=c===g.length-1,n=s?"start":l?"end":"middle",o=s?t-15:l?t+15:t;/* @__PURE__ */
3
+ return e.createElement("text",{x:o,y:a,dy:12,textAnchor:n,className:"text-xs fill-dark-600"},w(r.value))}}),/* @__PURE__ */e.createElement(i,{cursor:!1,content:({active:t,payload:a,label:r})=>/* @__PURE__ */e.createElement(d,{active:t,payload:a,label:C(r),className:"min-w-52"})}),D.map(t=>{const a=N.includes(t);/* @__PURE__ */
4
+ return e.createElement(c,{key:t,dataKey:t,type:"monotone",stroke:`var(--color-${t})`,strokeWidth:2,strokeDasharray:a?"5 5":void 0,dot:({cx:t,cy:a,stroke:r})=>/* @__PURE__ */e.createElement("circle",{cx:t,cy:a,r:4,fill:"white",stroke:r,strokeWidth:2}),activeDot:{r:5,strokeWidth:0}})}),/* @__PURE__ */e.createElement(p,{content:/* @__PURE__ */e.createElement(k,null)})))))}export{x as ArticlesUpdated};
75
5
  //# sourceMappingURL=articles-updated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"articles-updated.js","sources":["../../../src/components/articles-updated/articles-updated.tsx"],"sourcesContent":["import React from 'react';\nimport { CartesianGrid, Line, LineChart, XAxis } from 'recharts';\n\nimport { Trend, TrendValue } from '../trend-value';\n\nimport { Card, CardContent, CardHeader } from '@/components/ui/card';\nimport {\n ChartConfig,\n ChartContainer,\n ChartLegend,\n ChartLegendContent,\n ChartTooltip,\n ChartTooltipContent,\n} from '@/components/ui/chart';\nimport { formatNumber } from '@/lib/formatNumber';\nimport { useChartDateFormatters } from '@/lib/useChartDateFormatters';\nimport { cn } from '@/lib/utils';\n\nexport interface ArticlesUpdatedProps {\n total: number;\n trend: Trend;\n trendValue: string;\n data: Array<Record<string, number | string | Date>>;\n chartConfig: ChartConfig;\n dashedKeys?: string[];\n locale?: string;\n className?: string;\n}\n\nconst formatWhole = (value: number) => formatNumber(value, {});\n\nexport function ArticlesUpdated({\n total,\n trend,\n trendValue,\n data,\n chartConfig,\n dashedKeys = [],\n locale,\n className,\n}: ArticlesUpdatedProps) {\n const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);\n const lineKeys = Object.keys(chartConfig);\n\n return (\n <Card className={cn('shadow-none border border-dark-300 rounded-lg', className)}>\n <CardHeader className=\"p-0 space-y-0 border-b border-dark-300\">\n <div className=\"flex flex-col gap-1 justify-center py-4 px-4\">\n <p className=\"uppercase heading-xxxs font-semibold text-dark tracking-normal\">Articles updated</p>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-3xl leading-10 text-dark\">{formatWhole(total)}</span>\n <TrendValue trend={trend} trendValue={trendValue} />\n </div>\n </div>\n </CardHeader>\n\n <CardContent className=\"p-4\">\n <ChartContainer config={chartConfig} className=\"h-48 w-full\">\n <LineChart data={data} margin={{ top: 8, left: 20, right: 20, bottom: 0 }}>\n <CartesianGrid horizontal vertical={false} className=\"stroke-dark-300\" />\n <XAxis\n dataKey=\"date\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n padding={{ left: 15, right: 15 }}\n minTickGap={32}\n interval=\"preserveStartEnd\"\n tickFormatter={tickFormatter}\n tick={({ x, y, payload, index }) => {\n const isFirst = index === 0;\n const isLast = index === data.length - 1;\n const anchor = isFirst ? 'start' : isLast ? 'end' : 'middle';\n const tickX = isFirst ? x - 15 : isLast ? x + 15 : x;\n\n return (\n <text x={tickX} y={y} dy={12} textAnchor={anchor} className=\"text-xs fill-dark-600\">\n {tickFormatter(payload.value)}\n </text>\n );\n }}\n />\n <ChartTooltip\n cursor={false}\n content={({ active, payload, label }) => (\n <ChartTooltipContent\n active={active}\n payload={payload}\n label={formatXLabel(label)}\n className=\"min-w-52\"\n />\n )}\n />\n {lineKeys.map((key) => {\n const isDashed = dashedKeys.includes(key);\n\n return (\n <Line\n key={key}\n dataKey={key}\n type=\"monotone\"\n stroke={`var(--color-${key})`}\n strokeWidth={2}\n strokeDasharray={isDashed ? '5 5' : undefined}\n dot={({ cx, cy, stroke }: { cx: number; cy: number; stroke: string }) => (\n <circle cx={cx} cy={cy} r={4} fill=\"white\" stroke={stroke} strokeWidth={2} />\n )}\n activeDot={{ r: 5, strokeWidth: 0 }}\n />\n );\n })}\n <ChartLegend content={<ChartLegendContent />} />\n </LineChart>\n </ChartContainer>\n </CardContent>\n </Card>\n );\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"articles-updated.js","sources":["../../../src/components/articles-updated/articles-updated.tsx"],"sourcesContent":["import React from 'react';\nimport { CartesianGrid, Line, LineChart, XAxis } from 'recharts';\n\nimport { Trend, TrendValue } from '../trend-value';\n\nimport { Card, CardContent, CardHeader } from '@/components/ui/card';\nimport {\n ChartConfig,\n ChartContainer,\n ChartLegend,\n ChartLegendContent,\n ChartTooltip,\n ChartTooltipContent,\n} from '@/components/ui/chart';\nimport { formatNumber } from '@/lib/formatNumber';\nimport { useChartDateFormatters } from '@/lib/useChartDateFormatters';\nimport { cn } from '@/lib/utils';\n\nexport interface ArticlesUpdatedProps {\n total: number;\n trend: Trend;\n trendValue: string;\n data: Array<Record<string, number | string | Date>>;\n chartConfig: ChartConfig;\n dashedKeys?: string[];\n locale?: string;\n className?: string;\n}\n\nconst formatWhole = (value: number) => formatNumber(value, {});\n\nexport function ArticlesUpdated({\n total,\n trend,\n trendValue,\n data,\n chartConfig,\n dashedKeys = [],\n locale,\n className,\n}: ArticlesUpdatedProps) {\n const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);\n const lineKeys = Object.keys(chartConfig);\n\n return (\n <Card className={cn('shadow-none border border-dark-300 rounded-lg', className)}>\n <CardHeader className=\"p-0 space-y-0 border-b border-dark-300\">\n <div className=\"flex flex-col gap-1 justify-center py-4 px-4\">\n <p className=\"uppercase heading-xxxs font-semibold text-dark tracking-normal\">Articles updated</p>\n <div className=\"flex items-center gap-2\">\n <span className=\"font-mono text-3xl leading-10 text-dark\">{formatWhole(total)}</span>\n <TrendValue trend={trend} trendValue={trendValue} />\n </div>\n </div>\n </CardHeader>\n\n <CardContent className=\"p-4\">\n <ChartContainer config={chartConfig} className=\"h-48 w-full\">\n <LineChart data={data} margin={{ top: 8, left: 20, right: 20, bottom: 0 }}>\n <CartesianGrid horizontal vertical={false} className=\"stroke-dark-300\" />\n <XAxis\n dataKey=\"date\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n padding={{ left: 15, right: 15 }}\n minTickGap={32}\n interval=\"preserveStartEnd\"\n tickFormatter={tickFormatter}\n tick={({ x, y, payload, index }) => {\n const isFirst = index === 0;\n const isLast = index === data.length - 1;\n const anchor = isFirst ? 'start' : isLast ? 'end' : 'middle';\n const tickX = isFirst ? x - 15 : isLast ? x + 15 : x;\n\n return (\n <text x={tickX} y={y} dy={12} textAnchor={anchor} className=\"text-xs fill-dark-600\">\n {tickFormatter(payload.value)}\n </text>\n );\n }}\n />\n <ChartTooltip\n cursor={false}\n content={({ active, payload, label }) => (\n <ChartTooltipContent\n active={active}\n payload={payload}\n label={formatXLabel(label)}\n className=\"min-w-52\"\n />\n )}\n />\n {lineKeys.map((key) => {\n const isDashed = dashedKeys.includes(key);\n\n return (\n <Line\n key={key}\n dataKey={key}\n type=\"monotone\"\n stroke={`var(--color-${key})`}\n strokeWidth={2}\n strokeDasharray={isDashed ? '5 5' : undefined}\n dot={({ cx, cy, stroke }: { cx: number; cy: number; stroke: string }) => (\n <circle cx={cx} cy={cy} r={4} fill=\"white\" stroke={stroke} strokeWidth={2} />\n )}\n activeDot={{ r: 5, strokeWidth: 0 }}\n />\n );\n })}\n <ChartLegend content={<ChartLegendContent />} />\n </LineChart>\n </ChartContainer>\n </CardContent>\n </Card>\n );\n}\n"],"names":["ArticlesUpdated","total","trend","trendValue","data","chartConfig","dashedKeys","locale","className","tickFormatter","formatXLabel","useChartDateFormatters","lineKeys","Object","keys","React","createElement","Card","cn","CardHeader","formatNumber","TrendValue","CardContent","ChartContainer","config","LineChart","margin","top","left","right","bottom","CartesianGrid","horizontal","vertical","XAxis","dataKey","tickLine","axisLine","tickMargin","padding","minTickGap","interval","tick","x","y","payload","index","isFirst","isLast","length","anchor","tickX","dy","textAnchor","value","ChartTooltip","cursor","content","active","label","ChartTooltipContent","map","key","isDashed","includes","Line","type","stroke","strokeWidth","strokeDasharray","dot","cx","cy","r","fill","activeDot","ChartLegend","ChartLegendContent"],"mappings":"idA+BO,SAASA,GAAgBC,MAC9BA,EAAAC,MACAA,EAAAC,WACAA,EAAAC,KACAA,EAAAC,YACAA,EAAAC,WACAA,EAAa,GAACC,OACdA,EAAAC,UACAA,IAEA,MAAMC,cAAEA,EAAAC,aAAeA,GAAiBC,EAAuBJ,GACzDK,EAAWC,OAAOC,KAAKT;AAE7B,OACEU,EAAAC,cAACC,EAAA,CAAKT,UAAWU,EAAG,gDAAiDV,mBACnEO,EAAAC,cAACG,EAAA,CAAWX,UAAU,yDACpBO,EAAAC,cAAC,MAAA,CAAIR,UAAU,+DACbO,EAAAC,cAAC,IAAA,CAAER,UAAU,kEAAiE,mCAC9EO,EAAAC,cAAC,MAAA,CAAIR,UAAU,0CACbO,EAAAC,cAAC,OAAA,CAAKR,UAAU,2CArBWY,EAqB4CnB,EArBxB,CAAA,mCAsB9CoB,EAAA,CAAWnB,QAAcC,iCAKhCY,EAAAC,cAACM,GAAYd,UAAU,sBACrBO,EAAAC,cAACO,EAAA,CAAeC,OAAQnB,EAAaG,UAAU,8BAC7CO,EAAAC,cAACS,GAAUrB,OAAYsB,OAAQ,CAAEC,IAAK,EAAGC,KAAM,GAAIC,MAAO,GAAIC,OAAQ,mBACpEf,EAAAC,cAACe,EAAA,CAAcC,YAAU,EAACC,UAAU,EAAOzB,UAAU,mCACrDO,EAAAC,cAACkB,EAAA,CACCC,QAAQ,OACRC,UAAU,EACVC,UAAU,EACVC,WAAY,EACZC,QAAS,CAAEX,KAAM,GAAIC,MAAO,IAC5BW,WAAY,GACZC,SAAS,mBACThC,gBACAiC,KAAM,EAAGC,IAAGC,IAAGC,UAASC,YACtB,MAAMC,EAAoB,IAAVD,EACVE,EAASF,IAAU1C,EAAK6C,OAAS,EACjCC,EAASH,EAAU,QAAUC,EAAS,MAAQ,SAC9CG,EAAQJ,EAAUJ,EAAI,GAAKK,EAASL,EAAI,GAAKA;AAEnD,OACE5B,EAAAC,cAAC,OAAA,CAAK2B,EAAGQ,EAAOP,IAAMQ,GAAI,GAAIC,WAAYH,EAAQ1C,UAAU,yBACzDC,EAAcoC,EAAQS,0BAK/BvC,EAAAC,cAACuC,EAAA,CACCC,QAAQ,EACRC,QAAS,EAAGC,SAAQb,UAASc,0BAC3B5C,EAAAC,cAAC4C,EAAA,CACCF,SACAb,UACAc,MAAOjD,EAAaiD,GACpBnD,UAAU,eAIfI,EAASiD,IAAKC,IACb,MAAMC,EAAWzD,EAAW0D,SAASF;AAErC,OACE/C,EAAAC,cAACiD,EAAA,CACCH,MACA3B,QAAS2B,EACTI,KAAK,WACLC,OAAQ,eAAeL,KACvBM,YAAa,EACbC,gBAAiBN,EAAW,WAAQ,EACpCO,IAAK,EAAGC,KAAIC,KAAIL,2BACdpD,EAAAC,cAAC,SAAA,CAAOuD,KAAQC,KAAQC,EAAG,EAAGC,KAAK,QAAQP,SAAgBC,YAAa,IAE1EO,UAAW,CAAEF,EAAG,EAAGL,YAAa,sBAItCrD,EAAAC,cAAC4D,EAAA,CAAYnB,uBAAS1C,EAAAC,cAAC6D,EAAA,WAMnC"}
@@ -1,14 +1,4 @@
1
- import React__default from 'react';
2
- import { Breadcrumb, BreadcrumbList, BreadcrumbItem, BreadcrumbLink, BreadcrumbPage, BreadcrumbEllipsis, BreadcrumbSeparator } from './ui/breadcrumb.js';
3
- import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from './ui/dropdown-menu.js';
4
-
5
- function AutoBreadcrumb({ path, maxChars = 20, LinkComponent, lastItemAsLink = true }) {
6
- return /* @__PURE__ */ React__default.createElement(Breadcrumb, null, /* @__PURE__ */ React__default.createElement(BreadcrumbList, null, path.map((node, index) => {
7
- const isLast = index === path.length - 1;
8
- const isLengthy = node.label.length > maxChars;
9
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, { key: `${index}-${node.href}` }, /* @__PURE__ */ React__default.createElement(BreadcrumbItem, null, isLast ? lastItemAsLink ? LinkComponent ? /* @__PURE__ */ React__default.createElement(BreadcrumbLink, { asChild: true }, /* @__PURE__ */ React__default.createElement(LinkComponent, { to: node.href, ...node.onClick && { onClick: node.onClick } }, node.label)) : /* @__PURE__ */ React__default.createElement(BreadcrumbLink, { href: node.href, ...node.onClick && { onClick: node.onClick } }, node.label) : /* @__PURE__ */ React__default.createElement(BreadcrumbPage, { className: "max-w-[200px] sm:max-w-[400px] truncate", title: node.label }, node.label) : isLengthy ? /* @__PURE__ */ React__default.createElement(DropdownMenu, null, /* @__PURE__ */ React__default.createElement(DropdownMenuTrigger, { className: "flex items-center gap-1" }, /* @__PURE__ */ React__default.createElement(BreadcrumbEllipsis, { className: "h-4 w-4" }), /* @__PURE__ */ React__default.createElement("span", { className: "sr-only" }, "Toggle ", node.label)), /* @__PURE__ */ React__default.createElement(DropdownMenuContent, { align: "start" }, LinkComponent ? /* @__PURE__ */ React__default.createElement(DropdownMenuItem, { asChild: true }, /* @__PURE__ */ React__default.createElement(LinkComponent, { to: node.href, ...node.onClick && { onClick: node.onClick } }, node.label)) : /* @__PURE__ */ React__default.createElement(DropdownMenuItem, null, /* @__PURE__ */ React__default.createElement("a", { href: node.href, ...node.onClick && { onClick: node.onClick } }, node.label)))) : LinkComponent ? /* @__PURE__ */ React__default.createElement(BreadcrumbLink, { asChild: true }, /* @__PURE__ */ React__default.createElement(LinkComponent, { to: node.href, ...node.onClick && { onClick: node.onClick } }, node.label)) : /* @__PURE__ */ React__default.createElement(BreadcrumbLink, { href: node.href, ...node.onClick && { onClick: node.onClick } }, node.label)), !isLast && /* @__PURE__ */ React__default.createElement(BreadcrumbSeparator, null));
10
- })));
11
- }
12
-
13
- export { AutoBreadcrumb };
1
+ import e from"react";import{Breadcrumb as l,BreadcrumbList as t,BreadcrumbItem as n,BreadcrumbLink as a,BreadcrumbPage as r,BreadcrumbEllipsis as c,BreadcrumbSeparator as m}from"./ui/breadcrumb.js";import{DropdownMenu as o,DropdownMenuTrigger as i,DropdownMenuContent as C,DropdownMenuItem as s}from"./ui/dropdown-menu.js";function k({path:k,maxChars:E=20,LinkComponent:h,lastItemAsLink:f=!0}){/* @__PURE__ */
2
+ return e.createElement(l,null,/* @__PURE__ */e.createElement(t,null,k.map((l,t)=>{const u=t===k.length-1,b=l.label.length>E;/* @__PURE__ */
3
+ return e.createElement(e.Fragment,{key:`${t}-${l.href}`},/* @__PURE__ */e.createElement(n,null,u?f?h?/* @__PURE__ */e.createElement(a,{asChild:!0},/* @__PURE__ */e.createElement(h,{to:l.href,...l.onClick&&{onClick:l.onClick}},l.label)):/* @__PURE__ */e.createElement(a,{href:l.href,...l.onClick&&{onClick:l.onClick}},l.label):/* @__PURE__ */e.createElement(r,{className:"max-w-[200px] sm:max-w-[400px] truncate",title:l.label},l.label):b?/* @__PURE__ */e.createElement(o,null,/* @__PURE__ */e.createElement(i,{className:"flex items-center gap-1"},/* @__PURE__ */e.createElement(c,{className:"h-4 w-4"}),/* @__PURE__ */e.createElement("span",{className:"sr-only"},"Toggle ",l.label)),/* @__PURE__ */e.createElement(C,{align:"start"},h?/* @__PURE__ */e.createElement(s,{asChild:!0},/* @__PURE__ */e.createElement(h,{to:l.href,...l.onClick&&{onClick:l.onClick}},l.label)):/* @__PURE__ */e.createElement(s,null,/* @__PURE__ */e.createElement("a",{href:l.href,...l.onClick&&{onClick:l.onClick}},l.label)))):h?/* @__PURE__ */e.createElement(a,{asChild:!0},/* @__PURE__ */e.createElement(h,{to:l.href,...l.onClick&&{onClick:l.onClick}},l.label)):/* @__PURE__ */e.createElement(a,{href:l.href,...l.onClick&&{onClick:l.onClick}},l.label)),!u&&/* @__PURE__ */e.createElement(m,null))})))}export{k as AutoBreadcrumb};
14
4
  //# sourceMappingURL=breadcrumbs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumbs.js","sources":["../../../src/components/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["import React from 'react';\n\nimport {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@/components/ui/breadcrumb';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nexport interface BreadcrumbNode {\n label: string;\n href: string;\n onClick?: () => void;\n}\n\n/** Props for an optional SPA link component (e.g. react-router `Link`). */\nexport type BreadcrumbLinkComponentProps = {\n to: string;\n className?: string;\n children?: React.ReactNode;\n onClick?: React.MouseEventHandler<HTMLElement>;\n};\n\ninterface DynamicBreadcrumbProps {\n path: BreadcrumbNode[];\n maxChars?: number;\n /** When set, uses this instead of `<a href>` for client-side routing. */\n LinkComponent?: React.ComponentType<BreadcrumbLinkComponentProps>;\n lastItemAsLink?: boolean;\n}\n\nexport function AutoBreadcrumb({ path, maxChars = 20, LinkComponent, lastItemAsLink = true }: DynamicBreadcrumbProps) {\n return (\n <Breadcrumb>\n <BreadcrumbList>\n {path.map((node, index) => {\n const isLast = index === path.length - 1;\n const isLengthy = node.label.length > maxChars;\n\n return (\n <React.Fragment key={`${index}-${node.href}`}>\n <BreadcrumbItem>\n {isLast ? (\n lastItemAsLink ? (\n LinkComponent ? (\n <BreadcrumbLink asChild>\n <LinkComponent to={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </LinkComponent>\n </BreadcrumbLink>\n ) : (\n <BreadcrumbLink href={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </BreadcrumbLink>\n )\n ) : (\n <BreadcrumbPage className=\"max-w-[200px] sm:max-w-[400px] truncate\" title={node.label}>\n {node.label}\n </BreadcrumbPage>\n )\n ) : isLengthy ? (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"flex items-center gap-1\">\n <BreadcrumbEllipsis className=\"h-4 w-4\" />\n <span className=\"sr-only\">Toggle {node.label}</span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {LinkComponent ? (\n <DropdownMenuItem asChild>\n <LinkComponent to={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </LinkComponent>\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem>\n <a href={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </a>\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : LinkComponent ? (\n <BreadcrumbLink asChild>\n <LinkComponent to={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </LinkComponent>\n </BreadcrumbLink>\n ) : (\n <BreadcrumbLink href={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </BreadcrumbLink>\n )}\n </BreadcrumbItem>\n {!isLast && <BreadcrumbSeparator />}\n </React.Fragment>\n );\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"breadcrumbs.js","sources":["../../../src/components/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["import React from 'react';\n\nimport {\n Breadcrumb,\n BreadcrumbEllipsis,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@/components/ui/breadcrumb';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nexport interface BreadcrumbNode {\n label: string;\n href: string;\n onClick?: () => void;\n}\n\n/** Props for an optional SPA link component (e.g. react-router `Link`). */\nexport type BreadcrumbLinkComponentProps = {\n to: string;\n className?: string;\n children?: React.ReactNode;\n onClick?: React.MouseEventHandler<HTMLElement>;\n};\n\ninterface DynamicBreadcrumbProps {\n path: BreadcrumbNode[];\n maxChars?: number;\n /** When set, uses this instead of `<a href>` for client-side routing. */\n LinkComponent?: React.ComponentType<BreadcrumbLinkComponentProps>;\n lastItemAsLink?: boolean;\n}\n\nexport function AutoBreadcrumb({ path, maxChars = 20, LinkComponent, lastItemAsLink = true }: DynamicBreadcrumbProps) {\n return (\n <Breadcrumb>\n <BreadcrumbList>\n {path.map((node, index) => {\n const isLast = index === path.length - 1;\n const isLengthy = node.label.length > maxChars;\n\n return (\n <React.Fragment key={`${index}-${node.href}`}>\n <BreadcrumbItem>\n {isLast ? (\n lastItemAsLink ? (\n LinkComponent ? (\n <BreadcrumbLink asChild>\n <LinkComponent to={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </LinkComponent>\n </BreadcrumbLink>\n ) : (\n <BreadcrumbLink href={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </BreadcrumbLink>\n )\n ) : (\n <BreadcrumbPage className=\"max-w-[200px] sm:max-w-[400px] truncate\" title={node.label}>\n {node.label}\n </BreadcrumbPage>\n )\n ) : isLengthy ? (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"flex items-center gap-1\">\n <BreadcrumbEllipsis className=\"h-4 w-4\" />\n <span className=\"sr-only\">Toggle {node.label}</span>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {LinkComponent ? (\n <DropdownMenuItem asChild>\n <LinkComponent to={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </LinkComponent>\n </DropdownMenuItem>\n ) : (\n <DropdownMenuItem>\n <a href={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </a>\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : LinkComponent ? (\n <BreadcrumbLink asChild>\n <LinkComponent to={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </LinkComponent>\n </BreadcrumbLink>\n ) : (\n <BreadcrumbLink href={node.href} {...(node.onClick && { onClick: node.onClick })}>\n {node.label}\n </BreadcrumbLink>\n )}\n </BreadcrumbItem>\n {!isLast && <BreadcrumbSeparator />}\n </React.Fragment>\n );\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n}\n"],"names":["AutoBreadcrumb","path","maxChars","LinkComponent","lastItemAsLink","React","createElement","Breadcrumb","BreadcrumbList","map","node","index","isLast","length","isLengthy","label","Fragment","key","href","BreadcrumbItem","BreadcrumbLink","asChild","to","onClick","BreadcrumbPage","className","title","DropdownMenu","DropdownMenuTrigger","BreadcrumbEllipsis","DropdownMenuContent","align","DropdownMenuItem","BreadcrumbSeparator"],"mappings":"mUAwCO,SAASA,GAAeC,KAAEA,EAAAC,SAAMA,EAAW,iBAAIC,EAAAC,eAAeA,GAAiB;AACpF,OACEC,EAAAC,cAACC,sBACCF,EAAAC,cAACE,EAAA,KACEP,EAAKQ,IAAI,CAACC,EAAMC,KACf,MAAMC,EAASD,IAAUV,EAAKY,OAAS,EACjCC,EAAYJ,EAAKK,MAAMF,OAASX;AAEtC,uBACGG,EAAMW,SAAN,CAAeC,IAAK,GAAGN,KAASD,EAAKQ,uCACnCC,EAAA,KACEP,EACCR,EACED,iBACEE,EAAAC,cAACc,GAAeC,SAAO,kBACrBhB,EAAAC,cAACH,EAAA,CAAcmB,GAAIZ,EAAKQ,QAAWR,EAAKa,SAAW,CAAEA,QAASb,EAAKa,UAChEb,EAAKK,uBAIVV,EAAAC,cAACc,EAAA,CAAeF,KAAMR,EAAKQ,QAAWR,EAAKa,SAAW,CAAEA,QAASb,EAAKa,UACnEb,EAAKK,sBAIVV,EAAAC,cAACkB,EAAA,CAAeC,UAAU,0CAA0CC,MAAOhB,EAAKK,OAC7EL,EAAKK,OAGRD,iBACFT,EAAAC,cAACqB,EAAA,oCACEC,EAAA,CAAoBH,UAAU,0CAC7BpB,EAAAC,cAACuB,EAAA,CAAmBJ,UAAU,2CAC7B,OAAA,CAAKA,UAAU,WAAU,UAAQf,EAAKK,uCAExCe,EAAA,CAAoBC,MAAM,SACxB5B,iCACE6B,EAAA,CAAiBX,SAAO,kBACvBhB,EAAAC,cAACH,EAAA,CAAcmB,GAAIZ,EAAKQ,QAAWR,EAAKa,SAAW,CAAEA,QAASb,EAAKa,UAChEb,EAAKK,uBAIVV,EAAAC,cAAC0B,sBACC3B,EAAAC,cAAC,IAAA,CAAEY,KAAMR,EAAKQ,QAAWR,EAAKa,SAAW,CAAEA,QAASb,EAAKa,UACtDb,EAAKK,UAMdZ,iBACFE,EAAAC,cAACc,GAAeC,SAAO,kCACpBlB,EAAA,CAAcmB,GAAIZ,EAAKQ,QAAWR,EAAKa,SAAW,CAAEA,QAASb,EAAKa,UAChEb,EAAKK,uBAIVV,EAAAC,cAACc,EAAA,CAAeF,KAAMR,EAAKQ,QAAWR,EAAKa,SAAW,CAAEA,QAASb,EAAKa,UACnEb,EAAKK,SAIVH,kBAAUP,EAAAC,cAAC2B,YAO3B"}
@@ -1,67 +1,7 @@
1
- import React__default from 'react';
2
- import { AreaChart, XAxis, Area } from 'recharts';
3
- import { Card, CardHeader, CardTitle, CardDescription, CardContent } from './ui/card.js';
4
- import { C as ChartContainer, a as ChartTooltip, b as ChartTooltipContent } from '../chunks/chart.4ZbtBMmR.js';
5
- import { u as useChartDateFormatters } from '../chunks/useChartDateFormatters.DS9ASgFO.js';
6
-
7
- const description = "A linear area chart";
8
- function ChartAreaLinear({ title, metric, data, chartConfig, locale }) {
9
- const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);
10
- return /* @__PURE__ */ React__default.createElement(Card, { className: "min-w-80 h-44 p-4 flex flex-col text-dark shadow-none" }, /* @__PURE__ */ React__default.createElement(CardHeader, { className: "p-0 space-y-0", "data-name": "header" }, /* @__PURE__ */ React__default.createElement(CardTitle, { className: "uppercase font-inter heading-xxxs tracking-normal" }, title), /* @__PURE__ */ React__default.createElement(CardDescription, { "data-name": "metric", className: "mt-0 text-[2rem] leading-10 text-dark font-inter" }, metric)), /* @__PURE__ */ React__default.createElement(CardContent, { "data-name": "content", className: "p-0 flex-1 min-h-0" }, /* @__PURE__ */ React__default.createElement(ChartContainer, { config: chartConfig, className: "h-full w-full" }, /* @__PURE__ */ React__default.createElement(
11
- AreaChart,
12
- {
13
- accessibilityLayer: true,
14
- data,
15
- margin: {
16
- top: 2,
17
- left: 14,
18
- right: 23
19
- }
20
- },
21
- /* @__PURE__ */ React__default.createElement("defs", null, /* @__PURE__ */ React__default.createElement("linearGradient", { id: "key1Gradient", x1: "0", y1: "0", x2: "0", y2: "1" }, /* @__PURE__ */ React__default.createElement("stop", { stopColor: "var(--color-key1)" }), /* @__PURE__ */ React__default.createElement("stop", { offset: "1", stopColor: "var(--color-key1)", stopOpacity: 0 }))),
22
- /* @__PURE__ */ React__default.createElement(
23
- XAxis,
24
- {
25
- dataKey: "date",
26
- tickLine: false,
27
- axisLine: false,
28
- tickMargin: 8,
29
- minTickGap: 20,
30
- interval: "preserveStartEnd",
31
- tickFormatter,
32
- tick: ({ x, y, payload }) => /* @__PURE__ */ React__default.createElement(
33
- "text",
34
- {
35
- x,
36
- y,
37
- dy: 12,
38
- textAnchor: "middle",
39
- className: "uppercase font-bold font-inter tracking-tight !fill-dark-900"
40
- },
41
- tickFormatter(payload.value)
42
- )
43
- }
44
- ),
45
- /* @__PURE__ */ React__default.createElement(
46
- ChartTooltip,
47
- {
48
- cursor: false,
49
- content: ({ active, payload, label }) => /* @__PURE__ */ React__default.createElement(ChartTooltipContent, { active, payload, hideIndicator: true, label: formatXLabel(label) })
50
- }
51
- ),
52
- /* @__PURE__ */ React__default.createElement(
53
- Area,
54
- {
55
- dataKey: "key1",
56
- type: "linear",
57
- fill: "url(#key1Gradient)",
58
- stroke: "var(--color-key1)",
59
- strokeLinecap: "round",
60
- strokeWidth: 3
61
- }
62
- )
63
- ))));
64
- }
65
-
66
- export { ChartAreaLinear, description };
1
+ import e from"react";import{AreaChart as t,XAxis as a,Area as r}from"recharts";import{Card as n,CardHeader as l,CardTitle as c,CardDescription as o,CardContent as i}from"./ui/card.js";import{C as m,a as s,b as d}from"../chunks/chart.BDL2tf-S.js";import{u as p}from"../chunks/useChartDateFormatters.Dx2h5AAm.js";const f="A linear area chart";function k({title:f,metric:k,data:y,chartConfig:h,locale:x}){const{tickFormatter:E,formatXLabel:u}=p(x);/* @__PURE__ */
2
+ return e.createElement(n,{className:"min-w-80 h-44 p-4 flex flex-col text-dark shadow-none"},/* @__PURE__ */e.createElement(l,{className:"p-0 space-y-0","data-name":"header"},/* @__PURE__ */e.createElement(c,{className:"uppercase font-inter heading-xxxs tracking-normal"},f),/* @__PURE__ */e.createElement(o,{"data-name":"metric",className:"mt-0 text-[2rem] leading-10 text-dark font-inter"},k)),/* @__PURE__ */e.createElement(i,{"data-name":"content",className:"p-0 flex-1 min-h-0"},/* @__PURE__ */e.createElement(m,{config:h,className:"h-full w-full"},/* @__PURE__ */e.createElement(t,{accessibilityLayer:!0,data:y,margin:{top:2,left:14,right:23}},
3
+ /* @__PURE__ */e.createElement("defs",null,/* @__PURE__ */e.createElement("linearGradient",{id:"key1Gradient",x1:"0",y1:"0",x2:"0",y2:"1"},/* @__PURE__ */e.createElement("stop",{stopColor:"var(--color-key1)"}),/* @__PURE__ */e.createElement("stop",{offset:"1",stopColor:"var(--color-key1)",stopOpacity:0}))),
4
+ /* @__PURE__ */e.createElement(a,{dataKey:"date",tickLine:!1,axisLine:!1,tickMargin:8,minTickGap:20,interval:"preserveStartEnd",tickFormatter:E,tick:({x:t,y:a,payload:r})=>/* @__PURE__ */e.createElement("text",{x:t,y:a,dy:12,textAnchor:"middle",className:"uppercase font-bold font-inter tracking-tight !fill-dark-900"},E(r.value))}),
5
+ /* @__PURE__ */e.createElement(s,{cursor:!1,content:({active:t,payload:a,label:r})=>/* @__PURE__ */e.createElement(d,{active:t,payload:a,hideIndicator:!0,label:u(r)})}),
6
+ /* @__PURE__ */e.createElement(r,{dataKey:"key1",type:"linear",fill:"url(#key1Gradient)",stroke:"var(--color-key1)",strokeLinecap:"round",strokeWidth:3})))))}export{k as ChartAreaLinear,f as description};
67
7
  //# sourceMappingURL=chart-area-linear.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chart-area-linear.js","sources":["../../../src/components/chart-area-linear/chart-area-linear.tsx"],"sourcesContent":["import React from 'react';\nimport { Area, AreaChart, XAxis } from 'recharts';\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';\nimport { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\nimport { useChartDateFormatters } from '@/lib/useChartDateFormatters';\n\nexport const description = 'A linear area chart';\n\nexport interface ChartAreaLinearProps {\n title: string;\n metric: string;\n data: {\n date: Date | string;\n key1: number;\n key2?: number;\n key3?: number;\n key4?: number;\n key5?: number;\n }[];\n chartConfig: ChartConfig;\n locale?: string;\n}\n\nexport function ChartAreaLinear({ title, metric, data, chartConfig, locale }: ChartAreaLinearProps) {\n const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);\n\n return (\n <Card className=\"min-w-80 h-44 p-4 flex flex-col text-dark shadow-none\">\n <CardHeader className=\"p-0 space-y-0\" data-name=\"header\">\n <CardTitle className=\"uppercase font-inter heading-xxxs tracking-normal\">{title}</CardTitle>\n <CardDescription data-name=\"metric\" className=\"mt-0 text-[2rem] leading-10 text-dark font-inter\">\n {metric}\n </CardDescription>\n </CardHeader>\n <CardContent data-name=\"content\" className=\"p-0 flex-1 min-h-0\">\n <ChartContainer config={chartConfig} className=\"h-full w-full\">\n <AreaChart\n accessibilityLayer\n data={data}\n margin={{\n top: 2,\n left: 14,\n right: 23,\n }}\n >\n <defs>\n <linearGradient id=\"key1Gradient\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop stopColor=\"var(--color-key1)\" />\n <stop offset=\"1\" stopColor=\"var(--color-key1)\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <XAxis\n dataKey=\"date\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n minTickGap={20}\n interval=\"preserveStartEnd\"\n tickFormatter={tickFormatter}\n tick={({ x, y, payload }) => (\n <text\n x={x}\n y={y}\n dy={12}\n textAnchor=\"middle\"\n className=\"uppercase font-bold font-inter tracking-tight !fill-dark-900\"\n >\n {tickFormatter(payload.value)}\n </text>\n )}\n />\n <ChartTooltip\n cursor={false}\n content={({ active, payload, label }) => (\n <ChartTooltipContent active={active} payload={payload} hideIndicator label={formatXLabel(label)} />\n )}\n />\n <Area\n dataKey=\"key1\"\n type=\"linear\"\n fill=\"url(#key1Gradient)\"\n stroke=\"var(--color-key1)\"\n strokeLinecap=\"round\"\n strokeWidth={3}\n />\n </AreaChart>\n </ChartContainer>\n </CardContent>\n </Card>\n );\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"chart-area-linear.js","sources":["../../../src/components/chart-area-linear/chart-area-linear.tsx"],"sourcesContent":["import React from 'react';\nimport { Area, AreaChart, XAxis } from 'recharts';\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';\nimport { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';\nimport { useChartDateFormatters } from '@/lib/useChartDateFormatters';\n\nexport const description = 'A linear area chart';\n\nexport interface ChartAreaLinearProps {\n title: string;\n metric: string;\n data: {\n date: Date | string;\n key1: number;\n key2?: number;\n key3?: number;\n key4?: number;\n key5?: number;\n }[];\n chartConfig: ChartConfig;\n locale?: string;\n}\n\nexport function ChartAreaLinear({ title, metric, data, chartConfig, locale }: ChartAreaLinearProps) {\n const { tickFormatter, formatXLabel } = useChartDateFormatters(locale);\n\n return (\n <Card className=\"min-w-80 h-44 p-4 flex flex-col text-dark shadow-none\">\n <CardHeader className=\"p-0 space-y-0\" data-name=\"header\">\n <CardTitle className=\"uppercase font-inter heading-xxxs tracking-normal\">{title}</CardTitle>\n <CardDescription data-name=\"metric\" className=\"mt-0 text-[2rem] leading-10 text-dark font-inter\">\n {metric}\n </CardDescription>\n </CardHeader>\n <CardContent data-name=\"content\" className=\"p-0 flex-1 min-h-0\">\n <ChartContainer config={chartConfig} className=\"h-full w-full\">\n <AreaChart\n accessibilityLayer\n data={data}\n margin={{\n top: 2,\n left: 14,\n right: 23,\n }}\n >\n <defs>\n <linearGradient id=\"key1Gradient\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop stopColor=\"var(--color-key1)\" />\n <stop offset=\"1\" stopColor=\"var(--color-key1)\" stopOpacity={0} />\n </linearGradient>\n </defs>\n <XAxis\n dataKey=\"date\"\n tickLine={false}\n axisLine={false}\n tickMargin={8}\n minTickGap={20}\n interval=\"preserveStartEnd\"\n tickFormatter={tickFormatter}\n tick={({ x, y, payload }) => (\n <text\n x={x}\n y={y}\n dy={12}\n textAnchor=\"middle\"\n className=\"uppercase font-bold font-inter tracking-tight !fill-dark-900\"\n >\n {tickFormatter(payload.value)}\n </text>\n )}\n />\n <ChartTooltip\n cursor={false}\n content={({ active, payload, label }) => (\n <ChartTooltipContent active={active} payload={payload} hideIndicator label={formatXLabel(label)} />\n )}\n />\n <Area\n dataKey=\"key1\"\n type=\"linear\"\n fill=\"url(#key1Gradient)\"\n stroke=\"var(--color-key1)\"\n strokeLinecap=\"round\"\n strokeWidth={3}\n />\n </AreaChart>\n </ChartContainer>\n </CardContent>\n </Card>\n );\n}\n"],"names":["description","ChartAreaLinear","title","metric","data","chartConfig","locale","tickFormatter","formatXLabel","useChartDateFormatters","Card","className","React","createElement","CardHeader","CardTitle","CardDescription","CardContent","ChartContainer","config","AreaChart","accessibilityLayer","margin","top","left","right","id","x1","y1","x2","y2","stopColor","offset","stopOpacity","XAxis","dataKey","tickLine","axisLine","tickMargin","minTickGap","interval","tick","x","y","payload","dy","textAnchor","value","ChartTooltip","cursor","content","active","label","ChartTooltipContent","hideIndicator","Area","type","fill","stroke","strokeLinecap","strokeWidth"],"mappings":"uTAOO,MAAMA,EAAc,sBAiBpB,SAASC,GAAgBC,MAAEA,EAAAC,OAAOA,OAAQC,EAAAC,YAAMA,EAAAC,OAAaA,IAClE,MAAMC,cAAEA,EAAAC,aAAeA,GAAiBC,EAAuBH;AAE/D,uBACGI,EAAA,CAAKC,UAAU,wEACdC,EAAAC,cAACC,GAAWH,UAAU,gBAAgB,YAAU,yCAC7CI,EAAA,CAAUJ,UAAU,qDAAqDT,kBAC1EU,EAAAC,cAACG,EAAA,CAAgB,YAAU,SAASL,UAAU,oDAC3CR,mCAGJc,EAAA,CAAY,YAAU,UAAUN,UAAU,qCACzCC,EAAAC,cAACK,EAAA,CAAeC,OAAQd,EAAaM,UAAU,gCAC7CC,EAAAC,cAACO,EAAA,CACCC,oBAAkB,EAClBjB,OACAkB,OAAQ,CACNC,IAAK,EACLC,KAAM,GACNC,MAAO;eAGTb,EAAAC,cAAC,OAAA,oBACCD,EAAAC,cAAC,iBAAA,CAAea,GAAG,eAAeC,GAAG,IAAIC,GAAG,IAAIC,GAAG,IAAIC,GAAG,oBACxDlB,EAAAC,cAAC,OAAA,CAAKkB,UAAU,qCAChBnB,EAAAC,cAAC,OAAA,CAAKmB,OAAO,IAAID,UAAU,oBAAoBE,YAAa;eAGhErB,EAAAC,cAACqB,EAAA,CACCC,QAAQ,OACRC,UAAU,EACVC,UAAU,EACVC,WAAY,EACZC,WAAY,GACZC,SAAS,mBACTjC,gBACAkC,KAAM,EAAGC,IAAGC,IAAGC,4BACbhC,EAAAC,cAAC,OAAA,CACC6B,IACAC,IACAE,GAAI,GACJC,WAAW,SACXnC,UAAU,gEAETJ,EAAcqC,EAAQG;eAI7BnC,EAAAC,cAACmC,EAAA,CACCC,QAAQ,EACRC,QAAS,EAAGC,SAAQP,UAASQ,0BAC3BxC,EAAAC,cAACwC,EAAA,CAAoBF,SAAgBP,UAAkBU,eAAa,EAACF,MAAO5C,EAAa4C;eAG7FxC,EAAAC,cAAC0C,EAAA,CACCpB,QAAQ,OACRqB,KAAK,SACLC,KAAK,qBACLC,OAAO,oBACPC,cAAc,QACdC,YAAa,OAO3B"}
@@ -1,49 +1,3 @@
1
- import React__default from 'react';
2
- import { RadialBarChart, PolarRadiusAxis, Label, RadialBar } from 'recharts';
3
- import { a as TrendValue } from '../chunks/trend-value.COSukPwk.js';
4
- import { f as formatNumber } from '../chunks/formatNumber.Bm2k8QrT.js';
5
- import { Card, CardHeader, CardTitle, CardContent } from './ui/card.js';
6
- import { C as ChartContainer, a as ChartTooltip, b as ChartTooltipContent } from '../chunks/chart.4ZbtBMmR.js';
7
- import { c as cn } from '../chunks/utils.Cwtlq8dh.js';
8
-
9
- function ChartRadialStacked({
10
- title,
11
- data,
12
- chartConfig,
13
- trend,
14
- trendValue,
15
- className
16
- }) {
17
- if (!data || data.length === 0) {
18
- return null;
19
- }
20
- const OUTER_RADIUS = 120;
21
- const INNER_RADIUS = 80;
22
- const metricLabel = Object.values(data[0]).reduce((a, b) => typeof b === "number" ? a + b : a, 0);
23
- const formattedMetricLabel = formatNumber(metricLabel);
24
- const sortedData = Object.entries(data[0]).sort((a, b) => b[1] - a[1]);
25
- return /* @__PURE__ */ React__default.createElement(Card, { className: cn("flex flex-col w-full min-w-60 p-4 shadow-none", className) }, /* @__PURE__ */ React__default.createElement(CardHeader, { className: "p-0 space-y-0", "data-name": "header" }, /* @__PURE__ */ React__default.createElement(CardTitle, { className: "uppercase font-inter heading-xxxs tracking-normal" }, title)), /* @__PURE__ */ React__default.createElement(CardContent, { "data-name": "content", className: "p-0 flex-1 min-h-0" }, /* @__PURE__ */ React__default.createElement(ChartContainer, { config: chartConfig, className: "mx-auto aspect-[2/1] w-full max-w-52" }, /* @__PURE__ */ React__default.createElement(RadialBarChart, { data, endAngle: 180, innerRadius: INNER_RADIUS, outerRadius: OUTER_RADIUS, cy: "100%" }, /* @__PURE__ */ React__default.createElement(ChartTooltip, { cursor: false, content: /* @__PURE__ */ React__default.createElement(ChartTooltipContent, { hideLabel: true }) }), /* @__PURE__ */ React__default.createElement(PolarRadiusAxis, { tick: false, tickLine: false, axisLine: false }, /* @__PURE__ */ React__default.createElement(
26
- Label,
27
- {
28
- content: ({ viewBox }) => {
29
- if (viewBox && "cx" in viewBox && "cy" in viewBox) {
30
- return /* @__PURE__ */ React__default.createElement("text", { x: viewBox.cx, y: viewBox.cy, textAnchor: "middle" }, /* @__PURE__ */ React__default.createElement("tspan", { x: viewBox.cx, y: (viewBox.cy || 0) - 16, className: "fill-foreground text-xl font-inter" }, formattedMetricLabel));
31
- }
32
- return null;
33
- }
34
- }
35
- )), sortedData.map(([key]) => /* @__PURE__ */ React__default.createElement(
36
- RadialBar,
37
- {
38
- key,
39
- dataKey: key,
40
- stackId: "a",
41
- cornerRadius: 4,
42
- fill: chartConfig[key]?.color || `var(--color-${key})`,
43
- className: "stroke-card stroke-2"
44
- }
45
- )))), trend && trendValue && /* @__PURE__ */ React__default.createElement(TrendValue, { variant: "long", trend, trendValue, className: "mt-4 justify-center" })));
46
- }
47
-
48
- export { ChartRadialStacked };
1
+ import e from"react";import{RadialBarChart as t,PolarRadiusAxis as a,Label as r,RadialBar as n}from"recharts";import{a as c}from"../chunks/trend-value.BPBDBsk2.js";import{f as l}from"../chunks/formatNumber.DhVn228t.js";import{Card as s,CardHeader as m,CardTitle as o,CardContent as i}from"./ui/card.js";import{C as u,a as d,b as f}from"../chunks/chart.BDL2tf-S.js";import{c as x}from"../chunks/utils.C6Qu-kwd.js";function p({title:p,data:h,chartConfig:E,trend:y,trendValue:k,className:N}){if(!h||0===h.length)return null;const g=Object.values(h[0]).reduce((e,t)=>"number"==typeof t?e+t:e,0),j=l(g),b=Object.entries(h[0]).sort((e,t)=>t[1]-e[1]);/* @__PURE__ */
2
+ return e.createElement(s,{className:x("flex flex-col w-full min-w-60 p-4 shadow-none",N)},/* @__PURE__ */e.createElement(m,{className:"p-0 space-y-0","data-name":"header"},/* @__PURE__ */e.createElement(o,{className:"uppercase font-inter heading-xxxs tracking-normal"},p)),/* @__PURE__ */e.createElement(i,{"data-name":"content",className:"p-0 flex-1 min-h-0"},/* @__PURE__ */e.createElement(u,{config:E,className:"mx-auto aspect-[2/1] w-full max-w-52"},/* @__PURE__ */e.createElement(t,{data:h,endAngle:180,innerRadius:80,outerRadius:120,cy:"100%"},/* @__PURE__ */e.createElement(d,{cursor:!1,content:/* @__PURE__ */e.createElement(f,{hideLabel:!0})}),/* @__PURE__ */e.createElement(a,{tick:!1,tickLine:!1,axisLine:!1},/* @__PURE__ */e.createElement(r,{content:({viewBox:t})=>t&&"cx"in t&&"cy"in t?/* @__PURE__ */e.createElement("text",{x:t.cx,y:t.cy,textAnchor:"middle"},/* @__PURE__ */e.createElement("tspan",{x:t.cx,y:(t.cy||0)-16,className:"fill-foreground text-xl font-inter"},j)):null})),b.map(([t])=>/* @__PURE__ */e.createElement(n,{key:t,dataKey:t,stackId:"a",cornerRadius:4,fill:E[t]?.color||`var(--color-${t})`,className:"stroke-card stroke-2"})))),y&&k&&/* @__PURE__ */e.createElement(c,{variant:"long",trend:y,trendValue:k,className:"mt-4 justify-center"})))}export{p as ChartRadialStacked};
49
3
  //# sourceMappingURL=chart-radial-stacked.js.map