@bzync/rui 0.0.3

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 (263) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +115 -0
  3. package/dist/autocomplete-CaysJRpk.cjs +1 -0
  4. package/dist/autocomplete-CfbfpcO4.js +453 -0
  5. package/dist/calendar-Bnld4G59.cjs +1 -0
  6. package/dist/calendar-CdICOROs.js +573 -0
  7. package/dist/charts-CxEy2c3M.js +1248 -0
  8. package/dist/charts-UDqS1BH1.cjs +1 -0
  9. package/dist/cn-BdjraxxU.cjs +1 -0
  10. package/dist/cn-DpgY2leY.js +1736 -0
  11. package/dist/component-styles-Ce56hn9T.js +16 -0
  12. package/dist/component-styles-TkZ7v6Ef.cjs +1 -0
  13. package/dist/components/accordion.cjs +1 -0
  14. package/dist/components/accordion.d.ts +22 -0
  15. package/dist/components/accordion.js +122 -0
  16. package/dist/components/alert.cjs +1 -0
  17. package/dist/components/alert.d.ts +13 -0
  18. package/dist/components/alert.js +165 -0
  19. package/dist/components/auth-backdrop.cjs +1 -0
  20. package/dist/components/auth-backdrop.d.ts +7 -0
  21. package/dist/components/auth-backdrop.js +10 -0
  22. package/dist/components/autocomplete/dropdown.d.ts +21 -0
  23. package/dist/components/autocomplete/icons.d.ts +8 -0
  24. package/dist/components/autocomplete/multi-trigger.d.ts +25 -0
  25. package/dist/components/autocomplete/single-trigger.d.ts +21 -0
  26. package/dist/components/autocomplete/types.d.ts +34 -0
  27. package/dist/components/autocomplete.cjs +1 -0
  28. package/dist/components/autocomplete.d.ts +5 -0
  29. package/dist/components/autocomplete.js +3 -0
  30. package/dist/components/avatar.cjs +1 -0
  31. package/dist/components/avatar.d.ts +17 -0
  32. package/dist/components/avatar.js +56 -0
  33. package/dist/components/badge.cjs +1 -0
  34. package/dist/components/badge.d.ts +12 -0
  35. package/dist/components/badge.js +32 -0
  36. package/dist/components/billing-interval-toggle.cjs +1 -0
  37. package/dist/components/billing-interval-toggle.d.ts +18 -0
  38. package/dist/components/billing-interval-toggle.js +39 -0
  39. package/dist/components/breadcrumb.cjs +1 -0
  40. package/dist/components/breadcrumb.d.ts +11 -0
  41. package/dist/components/breadcrumb.js +52 -0
  42. package/dist/components/button.cjs +1 -0
  43. package/dist/components/button.d.ts +17 -0
  44. package/dist/components/button.js +90 -0
  45. package/dist/components/calendar/month-view.d.ts +17 -0
  46. package/dist/components/calendar/types.d.ts +54 -0
  47. package/dist/components/calendar/week-view.d.ts +17 -0
  48. package/dist/components/calendar.cjs +1 -0
  49. package/dist/components/calendar.d.ts +3 -0
  50. package/dist/components/calendar.js +3 -0
  51. package/dist/components/callout.cjs +1 -0
  52. package/dist/components/callout.d.ts +9 -0
  53. package/dist/components/callout.js +131 -0
  54. package/dist/components/card.cjs +1 -0
  55. package/dist/components/card.d.ts +17 -0
  56. package/dist/components/card.js +59 -0
  57. package/dist/components/charts/bar-chart.d.ts +16 -0
  58. package/dist/components/charts/donut-chart.d.ts +10 -0
  59. package/dist/components/charts/funnel-chart.d.ts +8 -0
  60. package/dist/components/charts/gantt-chart.d.ts +15 -0
  61. package/dist/components/charts/heatmap-chart.d.ts +10 -0
  62. package/dist/components/charts/index.d.ts +11 -0
  63. package/dist/components/charts/line-chart.d.ts +16 -0
  64. package/dist/components/charts/multi-line-chart.d.ts +18 -0
  65. package/dist/components/charts/radar-chart.d.ts +13 -0
  66. package/dist/components/charts/scatter-chart.d.ts +24 -0
  67. package/dist/components/charts/shared.d.ts +15 -0
  68. package/dist/components/charts/waterfall-chart.d.ts +14 -0
  69. package/dist/components/charts.cjs +1 -0
  70. package/dist/components/charts.d.ts +2 -0
  71. package/dist/components/charts.js +2 -0
  72. package/dist/components/checkbox.cjs +1 -0
  73. package/dist/components/checkbox.d.ts +9 -0
  74. package/dist/components/checkbox.js +135 -0
  75. package/dist/components/code.cjs +7 -0
  76. package/dist/components/code.d.ts +23 -0
  77. package/dist/components/code.js +276 -0
  78. package/dist/components/command.cjs +1 -0
  79. package/dist/components/command.d.ts +29 -0
  80. package/dist/components/command.js +208 -0
  81. package/dist/components/confirm-dialog.cjs +1 -0
  82. package/dist/components/confirm-dialog.d.ts +14 -0
  83. package/dist/components/confirm-dialog.js +69 -0
  84. package/dist/components/copy-button.cjs +1 -0
  85. package/dist/components/copy-button.d.ts +8 -0
  86. package/dist/components/copy-button.js +87 -0
  87. package/dist/components/datatable/pagination-footer.d.ts +10 -0
  88. package/dist/components/datatable/rows-dropdown.d.ts +5 -0
  89. package/dist/components/datatable/skeleton-row.d.ts +3 -0
  90. package/dist/components/datatable/sort-icon.d.ts +4 -0
  91. package/dist/components/datatable/types.d.ts +30 -0
  92. package/dist/components/datatable.cjs +1 -0
  93. package/dist/components/datatable.d.ts +9 -0
  94. package/dist/components/datatable.js +3 -0
  95. package/dist/components/datepicker.cjs +1 -0
  96. package/dist/components/datepicker.d.ts +14 -0
  97. package/dist/components/datepicker.js +267 -0
  98. package/dist/components/drawer.cjs +1 -0
  99. package/dist/components/drawer.d.ts +18 -0
  100. package/dist/components/drawer.js +3 -0
  101. package/dist/components/dropdown-menu.cjs +1 -0
  102. package/dist/components/dropdown-menu.d.ts +26 -0
  103. package/dist/components/dropdown-menu.js +122 -0
  104. package/dist/components/empty-state.cjs +1 -0
  105. package/dist/components/empty-state.d.ts +10 -0
  106. package/dist/components/empty-state.js +68 -0
  107. package/dist/components/error-state.cjs +1 -0
  108. package/dist/components/error-state.d.ts +10 -0
  109. package/dist/components/error-state.js +80 -0
  110. package/dist/components/file-upload.cjs +1 -0
  111. package/dist/components/file-upload.d.ts +10 -0
  112. package/dist/components/file-upload.js +173 -0
  113. package/dist/components/form-field.cjs +1 -0
  114. package/dist/components/form-field.d.ts +10 -0
  115. package/dist/components/form-field.js +36 -0
  116. package/dist/components/info-button.cjs +1 -0
  117. package/dist/components/info-button.d.ts +4 -0
  118. package/dist/components/info-button.js +32 -0
  119. package/dist/components/input.cjs +1 -0
  120. package/dist/components/input.d.ts +19 -0
  121. package/dist/components/input.js +117 -0
  122. package/dist/components/kbd.cjs +1 -0
  123. package/dist/components/kbd.d.ts +6 -0
  124. package/dist/components/kbd.js +16 -0
  125. package/dist/components/label.cjs +1 -0
  126. package/dist/components/label.d.ts +6 -0
  127. package/dist/components/label.js +31 -0
  128. package/dist/components/layout.cjs +1 -0
  129. package/dist/components/layout.d.ts +51 -0
  130. package/dist/components/layout.js +117 -0
  131. package/dist/components/link.cjs +1 -0
  132. package/dist/components/link.d.ts +9 -0
  133. package/dist/components/link.js +48 -0
  134. package/dist/components/list.cjs +1 -0
  135. package/dist/components/list.d.ts +13 -0
  136. package/dist/components/list.js +46 -0
  137. package/dist/components/modal.cjs +1 -0
  138. package/dist/components/modal.d.ts +31 -0
  139. package/dist/components/modal.js +219 -0
  140. package/dist/components/navigation.cjs +1 -0
  141. package/dist/components/navigation.d.ts +42 -0
  142. package/dist/components/navigation.js +127 -0
  143. package/dist/components/number-input.cjs +1 -0
  144. package/dist/components/number-input.d.ts +16 -0
  145. package/dist/components/number-input.js +142 -0
  146. package/dist/components/otp-input.cjs +1 -0
  147. package/dist/components/otp-input.d.ts +13 -0
  148. package/dist/components/otp-input.js +71 -0
  149. package/dist/components/pagination.cjs +1 -0
  150. package/dist/components/pagination.d.ts +8 -0
  151. package/dist/components/pagination.js +77 -0
  152. package/dist/components/popover.cjs +1 -0
  153. package/dist/components/popover.d.ts +16 -0
  154. package/dist/components/popover.js +115 -0
  155. package/dist/components/progressbar.cjs +1 -0
  156. package/dist/components/progressbar.d.ts +15 -0
  157. package/dist/components/progressbar.js +108 -0
  158. package/dist/components/radio.cjs +1 -0
  159. package/dist/components/radio.d.ts +22 -0
  160. package/dist/components/radio.js +96 -0
  161. package/dist/components/richtext.cjs +1 -0
  162. package/dist/components/richtext.d.ts +10 -0
  163. package/dist/components/richtext.js +370 -0
  164. package/dist/components/select/option-list.d.ts +16 -0
  165. package/dist/components/select/select-multi.d.ts +2 -0
  166. package/dist/components/select/select-single.d.ts +2 -0
  167. package/dist/components/select/types.d.ts +54 -0
  168. package/dist/components/select/utils.d.ts +10 -0
  169. package/dist/components/select.cjs +1 -0
  170. package/dist/components/select.d.ts +3 -0
  171. package/dist/components/select.js +2 -0
  172. package/dist/components/seo.cjs +1 -0
  173. package/dist/components/seo.d.ts +45 -0
  174. package/dist/components/seo.js +64 -0
  175. package/dist/components/separator.cjs +1 -0
  176. package/dist/components/separator.d.ts +6 -0
  177. package/dist/components/separator.js +25 -0
  178. package/dist/components/skeleton.cjs +1 -0
  179. package/dist/components/skeleton.d.ts +37 -0
  180. package/dist/components/skeleton.js +146 -0
  181. package/dist/components/slider.cjs +1 -0
  182. package/dist/components/slider.d.ts +12 -0
  183. package/dist/components/slider.js +72 -0
  184. package/dist/components/snackbar.cjs +1 -0
  185. package/dist/components/snackbar.d.ts +35 -0
  186. package/dist/components/snackbar.js +220 -0
  187. package/dist/components/spinner.cjs +1 -0
  188. package/dist/components/spinner.d.ts +7 -0
  189. package/dist/components/spinner.js +31 -0
  190. package/dist/components/stat.cjs +1 -0
  191. package/dist/components/stat.d.ts +18 -0
  192. package/dist/components/stat.js +90 -0
  193. package/dist/components/status-dot.cjs +1 -0
  194. package/dist/components/status-dot.d.ts +10 -0
  195. package/dist/components/status-dot.js +29 -0
  196. package/dist/components/stepper.cjs +1 -0
  197. package/dist/components/stepper.d.ts +11 -0
  198. package/dist/components/stepper.js +67 -0
  199. package/dist/components/switch.cjs +1 -0
  200. package/dist/components/switch.d.ts +8 -0
  201. package/dist/components/switch.js +79 -0
  202. package/dist/components/table.cjs +1 -0
  203. package/dist/components/table.d.ts +12 -0
  204. package/dist/components/table.js +54 -0
  205. package/dist/components/tabs.cjs +1 -0
  206. package/dist/components/tabs.d.ts +22 -0
  207. package/dist/components/tabs.js +120 -0
  208. package/dist/components/tag.cjs +1 -0
  209. package/dist/components/tag.d.ts +12 -0
  210. package/dist/components/tag.js +58 -0
  211. package/dist/components/terminal/fs.d.ts +10 -0
  212. package/dist/components/terminal/shell-commands-sim.d.ts +5 -0
  213. package/dist/components/terminal/shell-commands.d.ts +16 -0
  214. package/dist/components/terminal/shell-run.d.ts +11 -0
  215. package/dist/components/terminal/terminal-block.d.ts +13 -0
  216. package/dist/components/terminal/terminal-emulator.d.ts +10 -0
  217. package/dist/components/terminal/types.d.ts +35 -0
  218. package/dist/components/terminal.cjs +1 -0
  219. package/dist/components/terminal.d.ts +2 -0
  220. package/dist/components/terminal.js +2 -0
  221. package/dist/components/textarea.cjs +1 -0
  222. package/dist/components/textarea.d.ts +13 -0
  223. package/dist/components/textarea.js +54 -0
  224. package/dist/components/theme-provider.cjs +1 -0
  225. package/dist/components/theme-provider.d.ts +89 -0
  226. package/dist/components/theme-provider.js +93 -0
  227. package/dist/components/theme-toggle.cjs +1 -0
  228. package/dist/components/theme-toggle.d.ts +9 -0
  229. package/dist/components/theme-toggle.js +4 -0
  230. package/dist/components/timeline.cjs +1 -0
  231. package/dist/components/timeline.d.ts +14 -0
  232. package/dist/components/timeline.js +54 -0
  233. package/dist/components/tooltip.cjs +1 -0
  234. package/dist/components/tooltip.d.ts +11 -0
  235. package/dist/components/tooltip.js +84 -0
  236. package/dist/components/tree.cjs +1 -0
  237. package/dist/components/tree.d.ts +16 -0
  238. package/dist/components/tree.js +92 -0
  239. package/dist/createLucideIcon-DDY8HuQR.js +42 -0
  240. package/dist/createLucideIcon-b_X_3fj-.cjs +1 -0
  241. package/dist/datatable-BB3v__r5.cjs +1 -0
  242. package/dist/datatable-DlBhUhuO.js +316 -0
  243. package/dist/drawer-Cbuh6qdL.cjs +1 -0
  244. package/dist/drawer-CqkVZT9Y.js +189 -0
  245. package/dist/focus-Dk1YWVPN.js +42 -0
  246. package/dist/focus-DmG6Ge7X.cjs +1 -0
  247. package/dist/index.cjs +1 -0
  248. package/dist/index.d.ts +70 -0
  249. package/dist/index.js +215 -0
  250. package/dist/lib/cn.d.ts +2 -0
  251. package/dist/lib/component-styles.d.ts +10 -0
  252. package/dist/select-Ch5fp1GT.js +461 -0
  253. package/dist/select-q0YCMhBP.cjs +1 -0
  254. package/dist/styles.css +3 -0
  255. package/dist/terminal-BOR2cFi1.js +1060 -0
  256. package/dist/terminal-CpraMs50.cjs +77 -0
  257. package/dist/theme-toggle-CnoiorKV.js +71 -0
  258. package/dist/theme-toggle-Dp1-24zH.cjs +1 -0
  259. package/dist/use-event-callback-DGkfO_uu.js +10 -0
  260. package/dist/use-event-callback-Du9_9eAi.cjs +1 -0
  261. package/dist/utils-CQ8pvCtk.js +72 -0
  262. package/dist/utils-DOFJTw8o.cjs +1 -0
  263. package/package.json +88 -0
@@ -0,0 +1,1248 @@
1
+ import { t as e } from "./cn-DpgY2leY.js";
2
+ import { motion as t } from "framer-motion";
3
+ import { useEffect as n, useId as r, useState as i } from "react";
4
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
+ import { createPortal as s } from "react-dom";
6
+ //#region src/components/charts/shared.tsx
7
+ function c(e, t) {
8
+ let n = e <= t ? 1 : Math.ceil(e / t);
9
+ return (t) => t % n === 0 || t === e - 1;
10
+ }
11
+ function l({ tooltip: e }) {
12
+ return !e || typeof document > "u" ? null : s(/* @__PURE__ */ a("div", {
13
+ className: "pointer-events-none fixed z-[9999] px-3 py-2 rounded-lg border border-black/10 dark:border-white/10 bg-slate-50 dark:bg-navy-700 shadow-xl shadow-black/30 text-sm text-slate-700 dark:text-slate-200 whitespace-nowrap",
14
+ style: {
15
+ left: e.x + 14,
16
+ top: e.y - 10
17
+ },
18
+ children: e.content
19
+ }), document.body);
20
+ }
21
+ //#endregion
22
+ //#region src/components/charts/bar-chart.tsx
23
+ function u({ data: t, height: s = 220, color: c = "var(--color-accent-500)", showValues: u = !1, gridLines: f = 4, orientation: p = "vertical", className: m, formatValue: h = String }) {
24
+ let [g, _] = i(null), [v, y] = i(null), [b, x] = i(!1), S = r().replace(/:/g, ""), C = Math.max(...t.map((e) => e.value), 1);
25
+ if (n(() => {
26
+ let e = requestAnimationFrame(() => x(!0));
27
+ return () => cancelAnimationFrame(e);
28
+ }, []), p === "horizontal") return /* @__PURE__ */ a(d, {
29
+ data: t,
30
+ height: s,
31
+ color: c,
32
+ showValues: u,
33
+ gridLines: f,
34
+ className: m,
35
+ formatValue: h
36
+ });
37
+ let w = 100 / t.length, T = w * .18, E = w - T * 2, D = (e) => e / 100 * s;
38
+ return /* @__PURE__ */ o("div", {
39
+ className: e("relative w-full select-none", m),
40
+ style: { height: s },
41
+ children: [
42
+ /* @__PURE__ */ o("svg", {
43
+ viewBox: "0 0 100 100",
44
+ preserveAspectRatio: "none",
45
+ className: "absolute inset-0 w-full h-full text-black dark:text-white",
46
+ children: [
47
+ /* @__PURE__ */ a("defs", { children: t.map((e, t) => {
48
+ let n = e.color ?? c;
49
+ return /* @__PURE__ */ o("linearGradient", {
50
+ id: `${S}-bcg-${t}`,
51
+ x1: "0",
52
+ y1: "0",
53
+ x2: "0",
54
+ y2: "1",
55
+ children: [/* @__PURE__ */ a("stop", {
56
+ offset: "0%",
57
+ stopColor: n,
58
+ stopOpacity: "1"
59
+ }), /* @__PURE__ */ a("stop", {
60
+ offset: "100%",
61
+ stopColor: n,
62
+ stopOpacity: "0.45"
63
+ })]
64
+ }, t);
65
+ }) }),
66
+ Array.from({ length: f + 1 }).map((e, t) => {
67
+ let n = 6 + t / f * 82;
68
+ return /* @__PURE__ */ a("line", {
69
+ x1: "0",
70
+ y1: n,
71
+ x2: "100",
72
+ y2: n,
73
+ stroke: "currentColor",
74
+ strokeOpacity: "0.07",
75
+ strokeWidth: "0.35"
76
+ }, t);
77
+ }),
78
+ t.map((e, t) => {
79
+ let n = Math.max(e.value / C * 82, e.value > 0 ? .5 : 0), r = t * w + T, i = 88 - n, s = .45, c = t * .05;
80
+ return /* @__PURE__ */ a("rect", {
81
+ x: r,
82
+ width: E,
83
+ rx: "1.2",
84
+ y: b ? i : 88,
85
+ height: b ? n : 0,
86
+ onMouseEnter: () => y(t),
87
+ onMouseMove: (t) => _({
88
+ x: t.clientX,
89
+ y: t.clientY,
90
+ content: /* @__PURE__ */ o("span", { children: [/* @__PURE__ */ a("span", {
91
+ className: "text-slate-500 dark:text-slate-400 mr-2",
92
+ children: e.label
93
+ }), /* @__PURE__ */ a("span", {
94
+ className: "font-semibold text-gray-900 dark:text-white",
95
+ children: h(e.value)
96
+ })] })
97
+ }),
98
+ onMouseLeave: () => {
99
+ y(null), _(null);
100
+ },
101
+ className: "cursor-pointer",
102
+ style: {
103
+ fill: `url(#${S}-bcg-${t})`,
104
+ fillOpacity: v !== null && v !== t ? .35 : 1,
105
+ transition: b ? `y ${s}s ${c}s cubic-bezier(0.25,0.46,0.45,0.94), height ${s}s ${c}s cubic-bezier(0.25,0.46,0.45,0.94), fill-opacity 0.12s` : "none"
106
+ }
107
+ }, t);
108
+ }),
109
+ /* @__PURE__ */ a("line", {
110
+ x1: "0",
111
+ y1: 88,
112
+ x2: "100",
113
+ y2: 88,
114
+ stroke: "currentColor",
115
+ strokeOpacity: "0.1",
116
+ strokeWidth: "0.35"
117
+ })
118
+ ]
119
+ }),
120
+ /* @__PURE__ */ a("div", {
121
+ className: "absolute bottom-0 left-0 right-0 flex",
122
+ style: { height: 20 },
123
+ children: t.map((e, t) => /* @__PURE__ */ a("div", {
124
+ className: "flex-1 text-center text-xs text-slate-500 truncate px-1 leading-5",
125
+ children: e.label
126
+ }, t))
127
+ }),
128
+ u && /* @__PURE__ */ a("div", {
129
+ className: "absolute inset-x-0 top-0 pointer-events-none",
130
+ style: { bottom: 20 },
131
+ children: t.map((e, n) => {
132
+ let r = e.value / C, i = D(6 + (1 - r) * 82);
133
+ return /* @__PURE__ */ a("div", {
134
+ className: "absolute flex justify-center",
135
+ style: {
136
+ left: `${n / t.length * 100}%`,
137
+ width: `${100 / t.length}%`,
138
+ top: i,
139
+ transform: "translateY(calc(-100% - 4px))"
140
+ },
141
+ children: /* @__PURE__ */ a("span", {
142
+ className: "text-xs font-semibold text-slate-500 dark:text-slate-400 leading-none tabular-nums",
143
+ children: h(e.value)
144
+ })
145
+ }, n);
146
+ })
147
+ }),
148
+ /* @__PURE__ */ a(l, { tooltip: g })
149
+ ]
150
+ });
151
+ }
152
+ function d({ data: t, color: r, showValues: s, className: c, formatValue: u = String }) {
153
+ let [d, f] = i(null), [p, m] = i(null), [h, g] = i(!1), _ = Math.max(...t.map((e) => e.value), 1);
154
+ return n(() => {
155
+ let e = requestAnimationFrame(() => g(!0));
156
+ return () => cancelAnimationFrame(e);
157
+ }, []), /* @__PURE__ */ o("div", {
158
+ className: e("w-full select-none flex flex-col gap-2.5", c),
159
+ children: [t.map((e, t) => {
160
+ let n = e.value / _ * 100, i = e.color ?? r ?? "var(--color-accent-500)", c = p === t;
161
+ return /* @__PURE__ */ o("div", {
162
+ className: "flex items-center gap-3",
163
+ children: [/* @__PURE__ */ a("span", {
164
+ className: "text-xs text-slate-600 dark:text-slate-300 text-right shrink-0 leading-none",
165
+ style: { width: 64 },
166
+ children: e.label
167
+ }), /* @__PURE__ */ o("div", {
168
+ className: "flex-1 h-8 relative rounded-md bg-black/5 dark:bg-white/5 overflow-hidden",
169
+ children: [/* @__PURE__ */ a("div", {
170
+ className: "absolute left-0 top-0 bottom-0 rounded-md cursor-pointer",
171
+ style: {
172
+ width: h ? `${n}%` : 0,
173
+ background: `linear-gradient(90deg, ${i}70, ${i})`,
174
+ opacity: p !== null && !c ? .35 : 1,
175
+ outline: c ? `1.5px solid ${i}` : "none",
176
+ outlineOffset: -1,
177
+ transition: h ? `width 0.45s ${t * .05}s cubic-bezier(0.25,0.46,0.45,0.94), opacity 0.12s` : "none"
178
+ },
179
+ onMouseEnter: () => m(t),
180
+ onMouseMove: (t) => f({
181
+ x: t.clientX,
182
+ y: t.clientY,
183
+ content: /* @__PURE__ */ o("span", { children: [/* @__PURE__ */ a("span", {
184
+ className: "text-slate-500 dark:text-slate-400 mr-2",
185
+ children: e.label
186
+ }), /* @__PURE__ */ a("span", {
187
+ className: "font-semibold text-gray-900 dark:text-white",
188
+ children: u(e.value)
189
+ })] })
190
+ }),
191
+ onMouseLeave: () => {
192
+ m(null), f(null);
193
+ }
194
+ }), s && /* @__PURE__ */ a("div", {
195
+ className: "absolute top-0 bottom-0 flex items-center pointer-events-none",
196
+ style: {
197
+ left: `${n}%`,
198
+ paddingLeft: 8
199
+ },
200
+ children: /* @__PURE__ */ a("span", {
201
+ className: "text-xs font-semibold text-slate-600 dark:text-slate-300 tabular-nums whitespace-nowrap",
202
+ children: u(e.value)
203
+ })
204
+ })]
205
+ })]
206
+ }, t);
207
+ }), /* @__PURE__ */ a(l, { tooltip: d })]
208
+ });
209
+ }
210
+ //#endregion
211
+ //#region src/components/charts/line-chart.tsx
212
+ function f({ data: n, height: s = 220, color: u = "var(--color-accent-500)", area: d = !0, dots: f = !0, gridLines: p = 4, className: m, formatValue: h = String, smooth: g = !0, showXLabels: _ = !0, maxLabels: v = 8 }) {
213
+ let [y, b] = i(null), x = r().replace(/:/g, ""), S = Math.max(...n.map((e) => e.value), 1), C = Math.min(...n.map((e) => e.value), 0), w = S - C || 1, T = n.length, E = n.map((e, t) => ({
214
+ x: T === 1 ? 50 : t / (T - 1) * 92 + 4,
215
+ y: 90 - (e.value - C) / w * 80,
216
+ d: e
217
+ }));
218
+ function D(e) {
219
+ if (e.length === 0) return "";
220
+ if (!g || e.length < 3) return e.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ");
221
+ let t = `M${e[0].x},${e[0].y}`;
222
+ for (let n = 0; n < e.length - 1; n++) {
223
+ let r = e[n], i = e[n + 1], a = (r.x + i.x) / 2;
224
+ t += ` C${a},${r.y} ${a},${i.y} ${i.x},${i.y}`;
225
+ }
226
+ return t;
227
+ }
228
+ let O = D(E), k = O ? `${O} L${E[E.length - 1].x},92 L${E[0].x},92 Z` : "", A = c(T, v);
229
+ return /* @__PURE__ */ o("div", {
230
+ className: e("relative w-full select-none", m),
231
+ style: { height: s },
232
+ children: [
233
+ /* @__PURE__ */ o("svg", {
234
+ viewBox: "0 0 100 100",
235
+ preserveAspectRatio: "none",
236
+ className: "absolute inset-0 w-full h-full overflow-visible text-black dark:text-white",
237
+ children: [
238
+ /* @__PURE__ */ a("defs", { children: /* @__PURE__ */ o("linearGradient", {
239
+ id: `${x}-ag`,
240
+ x1: "0",
241
+ y1: "0",
242
+ x2: "0",
243
+ y2: "1",
244
+ children: [/* @__PURE__ */ a("stop", {
245
+ offset: "0%",
246
+ stopColor: u,
247
+ stopOpacity: "0.25"
248
+ }), /* @__PURE__ */ a("stop", {
249
+ offset: "100%",
250
+ stopColor: u,
251
+ stopOpacity: "0.02"
252
+ })]
253
+ }) }),
254
+ Array.from({ length: p + 1 }).map((e, t) => {
255
+ let n = t / p * 84 + 4;
256
+ return /* @__PURE__ */ a("line", {
257
+ x1: "4",
258
+ y1: n,
259
+ x2: "96",
260
+ y2: n,
261
+ stroke: "currentColor",
262
+ strokeOpacity: "0.07",
263
+ strokeWidth: "0.3"
264
+ }, t);
265
+ }),
266
+ d && k && /* @__PURE__ */ a("path", {
267
+ d: k,
268
+ fill: `url(#${x}-ag)`,
269
+ style: { pointerEvents: "none" }
270
+ }),
271
+ O && /* @__PURE__ */ a(t.path, {
272
+ d: O,
273
+ fill: "none",
274
+ strokeWidth: "1.2",
275
+ strokeLinecap: "round",
276
+ strokeLinejoin: "round",
277
+ initial: {
278
+ pathLength: 0,
279
+ opacity: 0
280
+ },
281
+ animate: {
282
+ pathLength: 1,
283
+ opacity: 1
284
+ },
285
+ transition: {
286
+ duration: .8,
287
+ ease: "easeOut"
288
+ },
289
+ style: {
290
+ stroke: u,
291
+ pointerEvents: "none"
292
+ }
293
+ }),
294
+ f && E.map((e, n) => /* @__PURE__ */ o("g", { children: [/* @__PURE__ */ a(t.circle, {
295
+ cx: e.x,
296
+ cy: e.y,
297
+ r: "1.2",
298
+ style: {
299
+ fill: u,
300
+ pointerEvents: "none"
301
+ },
302
+ initial: { opacity: 0 },
303
+ animate: { opacity: 1 },
304
+ transition: {
305
+ delay: .6 + n * .03,
306
+ duration: .2
307
+ }
308
+ }), /* @__PURE__ */ a("circle", {
309
+ cx: e.x,
310
+ cy: e.y,
311
+ r: "5",
312
+ fill: "transparent",
313
+ className: "cursor-pointer",
314
+ onMouseMove: (t) => b({
315
+ x: t.clientX,
316
+ y: t.clientY,
317
+ content: /* @__PURE__ */ o("span", { children: [/* @__PURE__ */ a("span", {
318
+ className: "text-slate-500 dark:text-slate-400 mr-2",
319
+ children: e.d.label
320
+ }), /* @__PURE__ */ a("span", {
321
+ className: "font-semibold text-gray-900 dark:text-white",
322
+ children: h(e.d.value)
323
+ })] })
324
+ }),
325
+ onMouseLeave: () => b(null)
326
+ })] }, n))
327
+ ]
328
+ }),
329
+ _ && /* @__PURE__ */ a("div", {
330
+ className: "absolute bottom-0 left-0 right-0",
331
+ style: { height: 20 },
332
+ children: n.map((e, t) => e.label && A(t) ? /* @__PURE__ */ a("span", {
333
+ className: "absolute text-xs text-slate-600 dark:text-slate-400 whitespace-nowrap leading-5 select-none",
334
+ style: {
335
+ left: `${T === 1 ? 50 : t / (T - 1) * 92 + 4}%`,
336
+ transform: "translateX(-50%)"
337
+ },
338
+ children: e.label
339
+ }, t) : null)
340
+ }),
341
+ /* @__PURE__ */ a(l, { tooltip: y })
342
+ ]
343
+ });
344
+ }
345
+ //#endregion
346
+ //#region src/components/charts/multi-line-chart.tsx
347
+ var p = [
348
+ "var(--color-accent-500)",
349
+ "#10b981",
350
+ "#f59e0b",
351
+ "#f43f5e",
352
+ "#8b5cf6"
353
+ ];
354
+ function m({ labels: n, series: s, height: u = 220, area: d = !0, dots: f = !0, gridLines: m = 4, className: h, formatValue: g = String, maxLabels: _ = 8 }) {
355
+ let [v, y] = i(null), b = r().replace(/:/g, ""), x = s.flatMap((e) => e.data), S = Math.max(...x, 1), C = Math.min(...x, 0), w = S - C || 1, T = n.length, E = c(T, _);
356
+ function D(e) {
357
+ return e.map((e, t) => ({
358
+ x: T === 1 ? 50 : t / (T - 1) * 92 + 4,
359
+ y: 90 - (e - C) / w * 80
360
+ }));
361
+ }
362
+ function O(e) {
363
+ if (e.length < 2) return "";
364
+ let t = `M${e[0].x},${e[0].y}`;
365
+ for (let n = 0; n < e.length - 1; n++) {
366
+ let r = e[n], i = e[n + 1], a = (r.x + i.x) / 2;
367
+ t += ` C${a},${r.y} ${a},${i.y} ${i.x},${i.y}`;
368
+ }
369
+ return t;
370
+ }
371
+ return /* @__PURE__ */ o("div", {
372
+ className: e("relative w-full select-none", h),
373
+ style: { height: u },
374
+ children: [
375
+ /* @__PURE__ */ o("svg", {
376
+ viewBox: "0 0 100 100",
377
+ preserveAspectRatio: "none",
378
+ className: "absolute inset-0 w-full h-full overflow-visible text-black dark:text-white",
379
+ children: [
380
+ /* @__PURE__ */ a("defs", { children: s.map((e, t) => {
381
+ let n = e.color ?? p[t % p.length];
382
+ return /* @__PURE__ */ o("linearGradient", {
383
+ id: `${b}-mlg-${t}`,
384
+ x1: "0",
385
+ y1: "0",
386
+ x2: "0",
387
+ y2: "1",
388
+ children: [/* @__PURE__ */ a("stop", {
389
+ offset: "0%",
390
+ stopColor: n,
391
+ stopOpacity: "0.2"
392
+ }), /* @__PURE__ */ a("stop", {
393
+ offset: "100%",
394
+ stopColor: n,
395
+ stopOpacity: "0.01"
396
+ })]
397
+ }, t);
398
+ }) }),
399
+ Array.from({ length: m + 1 }).map((e, t) => /* @__PURE__ */ a("line", {
400
+ x1: "4",
401
+ y1: t / m * 84 + 4,
402
+ x2: "96",
403
+ y2: t / m * 84 + 4,
404
+ stroke: "currentColor",
405
+ strokeOpacity: "0.07",
406
+ strokeWidth: "0.3"
407
+ }, t)),
408
+ s.map((e, r) => {
409
+ let i = e.color ?? p[r % p.length], s = D(e.data), c = O(s), l = c ? `${c} L${s[s.length - 1].x},92 L${s[0].x},92 Z` : "";
410
+ return /* @__PURE__ */ o("g", { children: [
411
+ d && l && /* @__PURE__ */ a("path", {
412
+ d: l,
413
+ fill: `url(#${b}-mlg-${r})`,
414
+ style: { pointerEvents: "none" }
415
+ }),
416
+ c && /* @__PURE__ */ a(t.path, {
417
+ d: c,
418
+ fill: "none",
419
+ strokeWidth: "1.2",
420
+ strokeLinecap: "round",
421
+ strokeLinejoin: "round",
422
+ initial: {
423
+ pathLength: 0,
424
+ opacity: 0
425
+ },
426
+ animate: {
427
+ pathLength: 1,
428
+ opacity: 1
429
+ },
430
+ transition: {
431
+ delay: r * .1,
432
+ duration: .7,
433
+ ease: "easeOut"
434
+ },
435
+ style: {
436
+ stroke: i,
437
+ pointerEvents: "none"
438
+ }
439
+ }),
440
+ f && s.map((s, c) => /* @__PURE__ */ o("g", { children: [/* @__PURE__ */ a(t.circle, {
441
+ cx: s.x,
442
+ cy: s.y,
443
+ r: "1.2",
444
+ style: {
445
+ fill: i,
446
+ pointerEvents: "none"
447
+ },
448
+ initial: { opacity: 0 },
449
+ animate: { opacity: 1 },
450
+ transition: { delay: .7 + r * .1 + c * .02 }
451
+ }), /* @__PURE__ */ a("circle", {
452
+ cx: s.x,
453
+ cy: s.y,
454
+ r: "5",
455
+ fill: "transparent",
456
+ className: "cursor-pointer",
457
+ onMouseMove: (t) => y({
458
+ x: t.clientX,
459
+ y: t.clientY,
460
+ content: /* @__PURE__ */ o("span", { children: [/* @__PURE__ */ o("span", {
461
+ className: "text-slate-500 dark:text-slate-400 mr-2",
462
+ children: [
463
+ n[c],
464
+ " · ",
465
+ e.label
466
+ ]
467
+ }), /* @__PURE__ */ a("span", {
468
+ className: "font-semibold",
469
+ style: { color: i },
470
+ children: g(e.data[c])
471
+ })] })
472
+ }),
473
+ onMouseLeave: () => y(null)
474
+ })] }, c))
475
+ ] }, r);
476
+ })
477
+ ]
478
+ }),
479
+ /* @__PURE__ */ a("div", {
480
+ className: "absolute bottom-0 left-0 right-0",
481
+ style: { height: 20 },
482
+ children: n.map((e, t) => e && E(t) ? /* @__PURE__ */ a("span", {
483
+ className: "absolute text-xs text-slate-600 dark:text-slate-400 whitespace-nowrap leading-5 select-none",
484
+ style: {
485
+ left: `${T === 1 ? 50 : t / (T - 1) * 92 + 4}%`,
486
+ transform: "translateX(-50%)"
487
+ },
488
+ children: e
489
+ }, t) : null)
490
+ }),
491
+ /* @__PURE__ */ a(l, { tooltip: v })
492
+ ]
493
+ });
494
+ }
495
+ //#endregion
496
+ //#region src/components/charts/donut-chart.tsx
497
+ var h = [
498
+ "var(--color-accent-500)",
499
+ "#10b981",
500
+ "#f59e0b",
501
+ "#f43f5e",
502
+ "#8b5cf6",
503
+ "#06b6d4"
504
+ ];
505
+ function g({ data: n, size: r = 190, thickness: s = 28, centerLabel: c, className: u }) {
506
+ let [d, f] = i(null), [p, m] = i(null), g = n.reduce((e, t) => e + t.value, 0) || 1, _ = 50 - s / 2, v = 2 * Math.PI * _, y = 0, b = n.map((e, t) => {
507
+ let n = e.value / g, r = y;
508
+ return y += n, {
509
+ ...e,
510
+ frac: n,
511
+ offset: r,
512
+ color: e.color ?? h[t % h.length]
513
+ };
514
+ });
515
+ return /* @__PURE__ */ o("div", {
516
+ className: e("inline-flex flex-col items-center gap-5", u),
517
+ children: [
518
+ /* @__PURE__ */ o("div", {
519
+ className: "relative",
520
+ style: {
521
+ width: r,
522
+ height: r
523
+ },
524
+ children: [/* @__PURE__ */ o("svg", {
525
+ viewBox: "0 0 100 100",
526
+ className: "w-full h-full -rotate-90 text-black dark:text-white",
527
+ children: [/* @__PURE__ */ a("circle", {
528
+ cx: 50,
529
+ cy: 50,
530
+ r: _,
531
+ fill: "none",
532
+ stroke: "currentColor",
533
+ strokeOpacity: "0.07",
534
+ strokeWidth: s / 2
535
+ }), b.map((e, n) => {
536
+ let r = e.frac * v, i = v - r, c = e.offset * 360;
537
+ return /* @__PURE__ */ a(t.circle, {
538
+ cx: 50,
539
+ cy: 50,
540
+ r: _,
541
+ fill: "none",
542
+ stroke: e.color,
543
+ strokeWidth: p === n ? s / 2 + 1.5 : s / 2,
544
+ strokeDasharray: `${r} ${i}`,
545
+ strokeDashoffset: 0,
546
+ transform: `rotate(${c} 50 50)`,
547
+ style: {
548
+ strokeOpacity: p !== null && p !== n ? .35 : .9,
549
+ transition: "stroke-opacity 0.15s, stroke-width 0.15s",
550
+ pointerEvents: "all"
551
+ },
552
+ initial: { strokeDasharray: `0 ${v}` },
553
+ animate: { strokeDasharray: `${r} ${i}` },
554
+ transition: {
555
+ delay: n * .08,
556
+ duration: .5,
557
+ ease: "easeOut"
558
+ },
559
+ onMouseMove: (t) => {
560
+ m(n), f({
561
+ x: t.clientX,
562
+ y: t.clientY,
563
+ content: /* @__PURE__ */ o("span", { children: [
564
+ /* @__PURE__ */ a("span", {
565
+ className: "text-slate-500 dark:text-slate-400 mr-2",
566
+ children: e.label
567
+ }),
568
+ /* @__PURE__ */ a("span", {
569
+ className: "font-semibold text-gray-900 dark:text-white",
570
+ children: e.value
571
+ }),
572
+ /* @__PURE__ */ o("span", {
573
+ className: "text-slate-500 ml-1.5",
574
+ children: [
575
+ "(",
576
+ (e.frac * 100).toFixed(1),
577
+ "%)"
578
+ ]
579
+ })
580
+ ] })
581
+ });
582
+ },
583
+ onMouseLeave: () => {
584
+ m(null), f(null);
585
+ },
586
+ className: "cursor-pointer"
587
+ }, n);
588
+ })]
589
+ }), c && /* @__PURE__ */ a("div", {
590
+ className: "absolute inset-0 flex items-center justify-center pointer-events-none",
591
+ children: c
592
+ })]
593
+ }),
594
+ /* @__PURE__ */ a("div", {
595
+ className: "flex flex-wrap justify-center gap-x-5 gap-y-2",
596
+ children: b.map((e, t) => /* @__PURE__ */ o("div", {
597
+ className: "flex items-center gap-2",
598
+ children: [/* @__PURE__ */ a("span", {
599
+ className: "w-2.5 h-2.5 rounded-full shrink-0",
600
+ style: { backgroundColor: e.color }
601
+ }), /* @__PURE__ */ a("span", {
602
+ className: "text-sm text-slate-500",
603
+ children: e.label
604
+ })]
605
+ }, t))
606
+ }),
607
+ /* @__PURE__ */ a(l, { tooltip: d })
608
+ ]
609
+ });
610
+ }
611
+ //#endregion
612
+ //#region src/components/charts/scatter-chart.tsx
613
+ var _ = [
614
+ "var(--color-accent-500)",
615
+ "#10b981",
616
+ "#f59e0b",
617
+ "#f43f5e",
618
+ "#8b5cf6"
619
+ ];
620
+ function v({ series: t, height: n = 260, xLabel: r, gridLines: s = 4, className: c, formatX: u = String, formatY: d = String }) {
621
+ let [f, p] = i(null), [m, h] = i(null), g = t.flatMap((e) => e.data.map((e) => e.x)), v = t.flatMap((e) => e.data.map((e) => e.y)), y = Math.min(...g), b = Math.max(...g), x = Math.min(...v), S = Math.max(...v), C = b - y || 1, w = S - x || 1, T = (e, t) => ({
622
+ left: 8 + (e - y) / C * 88,
623
+ top: 6 + (S - t) / w * 82
624
+ });
625
+ return /* @__PURE__ */ o("div", {
626
+ className: e("relative w-full select-none", c),
627
+ style: { height: n },
628
+ children: [
629
+ /* @__PURE__ */ o("svg", {
630
+ viewBox: "0 0 100 100",
631
+ preserveAspectRatio: "none",
632
+ className: "absolute inset-0 w-full h-full text-black dark:text-white",
633
+ children: [
634
+ Array.from({ length: s + 1 }).map((e, t) => {
635
+ let n = 6 + t / s * 82, r = 8 + t / s * 88;
636
+ return /* @__PURE__ */ o("g", { children: [/* @__PURE__ */ a("line", {
637
+ x1: 8,
638
+ y1: n,
639
+ x2: 96,
640
+ y2: n,
641
+ stroke: "currentColor",
642
+ strokeOpacity: "0.07",
643
+ strokeWidth: "0.35"
644
+ }), /* @__PURE__ */ a("line", {
645
+ x1: r,
646
+ y1: 6,
647
+ x2: r,
648
+ y2: 88,
649
+ stroke: "currentColor",
650
+ strokeOpacity: "0.07",
651
+ strokeWidth: "0.35"
652
+ })] }, t);
653
+ }),
654
+ /* @__PURE__ */ a("line", {
655
+ x1: 8,
656
+ y1: 88,
657
+ x2: 96,
658
+ y2: 88,
659
+ stroke: "currentColor",
660
+ strokeOpacity: "0.12",
661
+ strokeWidth: "0.4"
662
+ }),
663
+ /* @__PURE__ */ a("line", {
664
+ x1: 8,
665
+ y1: 6,
666
+ x2: 8,
667
+ y2: 88,
668
+ stroke: "currentColor",
669
+ strokeOpacity: "0.12",
670
+ strokeWidth: "0.4"
671
+ })
672
+ ]
673
+ }),
674
+ t.map((e, t) => {
675
+ let n = e.color ?? _[t % _.length];
676
+ return e.data.map((r, i) => {
677
+ let { left: s, top: c } = T(r.x, r.y), l = (r.r ?? 1) * 10, f = `${t}-${i}`, g = m === f;
678
+ return /* @__PURE__ */ a("div", {
679
+ style: {
680
+ position: "absolute",
681
+ left: `${s}%`,
682
+ top: `${c}%`,
683
+ width: l,
684
+ height: l,
685
+ borderRadius: "50%",
686
+ transform: "translate(-50%, -50%)",
687
+ backgroundColor: r.color ?? n,
688
+ opacity: m && !g ? .2 : .85,
689
+ outline: g ? "2px solid rgba(255,255,255,0.55)" : "none",
690
+ outlineOffset: 2,
691
+ cursor: "pointer",
692
+ transition: "opacity 0.12s",
693
+ zIndex: g ? 10 : 1
694
+ },
695
+ onMouseEnter: () => h(f),
696
+ onMouseMove: (t) => p({
697
+ x: t.clientX,
698
+ y: t.clientY,
699
+ content: /* @__PURE__ */ o("span", { children: [(r.label || e.label) && /* @__PURE__ */ a("span", {
700
+ className: "text-slate-500 dark:text-slate-400 mr-2",
701
+ children: r.label ?? e.label
702
+ }), /* @__PURE__ */ o("span", {
703
+ className: "font-semibold text-gray-900 dark:text-white",
704
+ children: [
705
+ "(",
706
+ u(r.x),
707
+ ", ",
708
+ d(r.y),
709
+ ")"
710
+ ]
711
+ })] })
712
+ }),
713
+ onMouseLeave: () => {
714
+ h(null), p(null);
715
+ }
716
+ }, f);
717
+ });
718
+ }),
719
+ r && /* @__PURE__ */ a("div", {
720
+ className: "absolute bottom-0 left-0 right-0 text-center pointer-events-none",
721
+ children: /* @__PURE__ */ a("span", {
722
+ className: "text-xs text-slate-600 dark:text-slate-400",
723
+ children: r
724
+ })
725
+ }),
726
+ t.length > 1 && /* @__PURE__ */ a("div", {
727
+ className: "absolute top-2 right-2 flex flex-col gap-2 pointer-events-none",
728
+ children: t.map((e, t) => /* @__PURE__ */ o("div", {
729
+ className: "flex items-center gap-2",
730
+ children: [/* @__PURE__ */ a("span", {
731
+ className: "w-2.5 h-2.5 rounded-full shrink-0",
732
+ style: { backgroundColor: e.color ?? _[t % _.length] }
733
+ }), /* @__PURE__ */ a("span", {
734
+ className: "text-xs text-slate-500",
735
+ children: e.label
736
+ })]
737
+ }, t))
738
+ }),
739
+ /* @__PURE__ */ a(l, { tooltip: f })
740
+ ]
741
+ });
742
+ }
743
+ //#endregion
744
+ //#region src/components/charts/gantt-chart.tsx
745
+ var y = [
746
+ "var(--color-accent-500)",
747
+ "#10b981",
748
+ "#f59e0b",
749
+ "#f43f5e",
750
+ "#8b5cf6",
751
+ "#06b6d4"
752
+ ];
753
+ function b({ tasks: t, total: r, xLabels: s, rowHeight: c = 42, className: u }) {
754
+ let [d, f] = i(null), [p, m] = i(null), [h, g] = i(!1);
755
+ n(() => {
756
+ let e = requestAnimationFrame(() => g(!0));
757
+ return () => cancelAnimationFrame(e);
758
+ }, []);
759
+ let _ = r ?? Math.max(...t.map((e) => e.end), 1), v = t.length * c + 28;
760
+ return /* @__PURE__ */ o("div", {
761
+ className: e("relative w-full select-none overflow-x-auto", u),
762
+ children: [/* @__PURE__ */ o("div", {
763
+ style: {
764
+ height: v,
765
+ minWidth: 360
766
+ },
767
+ className: "relative",
768
+ children: [
769
+ /* @__PURE__ */ a("div", {
770
+ className: "absolute inset-0 flex pointer-events-none",
771
+ style: { bottom: 28 },
772
+ children: Array.from({ length: _ + 1 }).map((e, t) => /* @__PURE__ */ a("div", {
773
+ className: "h-full border-l border-black/6 dark:border-white/6 flex-shrink-0",
774
+ style: { width: `${100 / _}%` }
775
+ }, t))
776
+ }),
777
+ t.map((e, t) => {
778
+ let n = e.color ?? y[t % y.length], r = e.start / _ * 100, i = (e.end - e.start) / _ * 100, s = p === e.id;
779
+ return /* @__PURE__ */ a("div", {
780
+ className: "absolute left-0 right-0 flex items-center",
781
+ style: {
782
+ top: t * c,
783
+ height: c
784
+ },
785
+ children: /* @__PURE__ */ a("div", {
786
+ className: "absolute rounded-md flex items-center px-2.5 cursor-pointer",
787
+ style: {
788
+ left: `${r}%`,
789
+ width: h ? `${i}%` : 0,
790
+ top: "18%",
791
+ height: "64%",
792
+ backgroundColor: n,
793
+ opacity: p && !s ? .35 : .85,
794
+ outline: s ? `1.5px solid ${n}` : "none",
795
+ outlineOffset: 2,
796
+ transition: h ? "width 0.45s cubic-bezier(0.25,0.46,0.45,0.94), opacity 0.12s" : "none"
797
+ },
798
+ onMouseEnter: () => m(e.id),
799
+ onMouseMove: (t) => f({
800
+ x: t.clientX,
801
+ y: t.clientY,
802
+ content: /* @__PURE__ */ o("span", { children: [/* @__PURE__ */ a("span", {
803
+ className: "font-semibold text-gray-900 dark:text-white mr-2",
804
+ children: e.label
805
+ }), /* @__PURE__ */ o("span", {
806
+ className: "text-slate-500 dark:text-slate-400",
807
+ children: [
808
+ e.start,
809
+ "–",
810
+ e.end
811
+ ]
812
+ })] })
813
+ }),
814
+ onMouseLeave: () => {
815
+ m(null), f(null);
816
+ },
817
+ children: /* @__PURE__ */ a("span", {
818
+ className: "text-xs font-medium text-gray-900 dark:text-white/90 truncate leading-none select-none",
819
+ children: e.label
820
+ })
821
+ })
822
+ }, e.id);
823
+ }),
824
+ /* @__PURE__ */ a("div", {
825
+ className: "absolute bottom-0 left-0 right-0 flex border-t border-black/[0.07] dark:border-white/[0.07]",
826
+ style: { height: 28 },
827
+ children: (s ?? Array.from({ length: _ }, (e, t) => String(t + 1))).map((e, t) => /* @__PURE__ */ a("div", {
828
+ className: "flex-1 flex items-center justify-center text-xs text-slate-600 dark:text-slate-400 truncate",
829
+ children: e
830
+ }, t))
831
+ })
832
+ ]
833
+ }), /* @__PURE__ */ a(l, { tooltip: d })]
834
+ });
835
+ }
836
+ //#endregion
837
+ //#region src/components/charts/heatmap-chart.tsx
838
+ function x({ data: t, rowLabels: n, colLabels: r, color: s = "var(--color-accent-500)", cellSize: c = 34, className: u, formatValue: d = String }) {
839
+ let [f, p] = i(null), m = t.flat(), h = Math.min(...m), g = Math.max(...m, 1) - h || 1, _ = (e) => .08 + (e - h) / g * .88, v = n ? 56 : 0;
840
+ return /* @__PURE__ */ o("div", {
841
+ className: e("select-none overflow-x-auto", u),
842
+ children: [/* @__PURE__ */ o("div", {
843
+ style: {
844
+ display: "inline-flex",
845
+ flexDirection: "column",
846
+ gap: 3
847
+ },
848
+ children: [r && /* @__PURE__ */ a("div", {
849
+ style: {
850
+ display: "flex",
851
+ gap: 3,
852
+ paddingLeft: v + 3
853
+ },
854
+ children: r.map((e, t) => /* @__PURE__ */ a("div", {
855
+ style: {
856
+ width: c,
857
+ flexShrink: 0
858
+ },
859
+ className: "text-center text-xs text-slate-600 dark:text-slate-400 leading-none truncate",
860
+ children: e
861
+ }, t))
862
+ }), t.map((e, t) => /* @__PURE__ */ o("div", {
863
+ style: {
864
+ display: "flex",
865
+ alignItems: "center",
866
+ gap: 3
867
+ },
868
+ children: [n && /* @__PURE__ */ a("div", {
869
+ style: {
870
+ width: v,
871
+ flexShrink: 0
872
+ },
873
+ className: "text-xs text-slate-600 dark:text-slate-400 text-right pr-2 leading-none truncate",
874
+ children: n[t]
875
+ }), e.map((e, i) => /* @__PURE__ */ a("div", {
876
+ "data-heatmap-cell": "",
877
+ style: {
878
+ width: c,
879
+ height: c,
880
+ flexShrink: 0,
881
+ backgroundColor: s,
882
+ opacity: _(e),
883
+ borderRadius: 5,
884
+ cursor: "pointer",
885
+ transition: "background-color 0.12s, opacity 0.12s"
886
+ },
887
+ onMouseMove: (s) => p({
888
+ x: s.clientX,
889
+ y: s.clientY,
890
+ content: /* @__PURE__ */ o("span", { children: [
891
+ n?.[t] && /* @__PURE__ */ a("span", {
892
+ className: "text-slate-500 dark:text-slate-400 mr-1.5",
893
+ children: n[t]
894
+ }),
895
+ r?.[i] && /* @__PURE__ */ a("span", {
896
+ className: "text-slate-500 dark:text-slate-400 mr-2",
897
+ children: r[i]
898
+ }),
899
+ /* @__PURE__ */ a("span", {
900
+ className: "font-semibold text-gray-900 dark:text-white",
901
+ children: d(e)
902
+ })
903
+ ] })
904
+ }),
905
+ onMouseLeave: () => p(null)
906
+ }, i))]
907
+ }, t))]
908
+ }), /* @__PURE__ */ a(l, { tooltip: f })]
909
+ });
910
+ }
911
+ //#endregion
912
+ //#region src/components/charts/radar-chart.tsx
913
+ var S = [
914
+ "var(--color-accent-500)",
915
+ "#10b981",
916
+ "#f59e0b",
917
+ "#f43f5e",
918
+ "#8b5cf6"
919
+ ];
920
+ function C({ axes: t, series: n, size: r = 240, gridLines: s = 4, className: c }) {
921
+ let [u, d] = i(null), f = t.length, p = (e) => Math.PI * 2 * e / f - Math.PI / 2, m = (e, t) => ({
922
+ x: 50 + e * Math.cos(p(t)),
923
+ y: 50 + e * Math.sin(p(t))
924
+ }), h = Math.max(...n.flatMap((e) => e.data), 1), g = (e) => e.map((e, t) => {
925
+ let { x: n, y: r } = m(e / h * 38, t);
926
+ return `${t === 0 ? "M" : "L"}${n},${r}`;
927
+ }).join(" ") + "Z";
928
+ return /* @__PURE__ */ o("div", {
929
+ className: e("inline-flex flex-col items-center gap-4", c),
930
+ children: [
931
+ /* @__PURE__ */ o("svg", {
932
+ viewBox: "0 0 100 100",
933
+ style: {
934
+ width: r,
935
+ height: r
936
+ },
937
+ className: "text-black dark:text-white",
938
+ children: [
939
+ Array.from({ length: s }).map((e, t) => {
940
+ let n = 38 * ((t + 1) / s), r = Array.from({ length: f }, (e, t) => m(n, t)).map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`).join(" ") + "Z";
941
+ return /* @__PURE__ */ a("path", {
942
+ d: r,
943
+ fill: "none",
944
+ stroke: "currentColor",
945
+ strokeOpacity: "0.08",
946
+ strokeWidth: "0.4"
947
+ }, t);
948
+ }),
949
+ t.map((e, t) => {
950
+ let { x: n, y: r } = m(38, t);
951
+ return /* @__PURE__ */ a("line", {
952
+ x1: 50,
953
+ y1: 50,
954
+ x2: n,
955
+ y2: r,
956
+ stroke: "currentColor",
957
+ strokeOpacity: "0.1",
958
+ strokeWidth: "0.4"
959
+ }, t);
960
+ }),
961
+ n.map((e, n) => {
962
+ let r = e.color ?? S[n % S.length];
963
+ return /* @__PURE__ */ o("g", { children: [/* @__PURE__ */ a("path", {
964
+ d: g(e.data),
965
+ fill: r,
966
+ fillOpacity: "0.12",
967
+ style: {
968
+ stroke: r,
969
+ strokeWidth: 1.2,
970
+ strokeOpacity: .85,
971
+ strokeLinejoin: "round"
972
+ }
973
+ }), e.data.map((e, n) => {
974
+ let { x: i, y: s } = m(e / h * 38, n);
975
+ return /* @__PURE__ */ a("circle", {
976
+ cx: i,
977
+ cy: s,
978
+ r: "1.5",
979
+ style: {
980
+ fill: r,
981
+ fillOpacity: .9,
982
+ cursor: "pointer"
983
+ },
984
+ onMouseMove: (i) => d({
985
+ x: i.clientX,
986
+ y: i.clientY,
987
+ content: /* @__PURE__ */ o("span", { children: [/* @__PURE__ */ a("span", {
988
+ className: "text-slate-500 dark:text-slate-400 mr-2",
989
+ children: t[n]
990
+ }), /* @__PURE__ */ a("span", {
991
+ className: "font-semibold",
992
+ style: { color: r },
993
+ children: e
994
+ })] })
995
+ }),
996
+ onMouseLeave: () => d(null)
997
+ }, n);
998
+ })] }, n);
999
+ }),
1000
+ t.map((e, t) => {
1001
+ let { x: n, y: r } = m(46, t);
1002
+ return /* @__PURE__ */ a("text", {
1003
+ x: n,
1004
+ y: r,
1005
+ textAnchor: n < 48 ? "end" : n > 52 ? "start" : "middle",
1006
+ dominantBaseline: "middle",
1007
+ fontSize: "5.5",
1008
+ fill: "currentColor",
1009
+ className: "text-slate-600 dark:text-slate-400",
1010
+ children: e
1011
+ }, t);
1012
+ })
1013
+ ]
1014
+ }),
1015
+ n.length > 1 && /* @__PURE__ */ a("div", {
1016
+ className: "flex items-center gap-5",
1017
+ children: n.map((e, t) => /* @__PURE__ */ o("div", {
1018
+ className: "flex items-center gap-2",
1019
+ children: [/* @__PURE__ */ a("span", {
1020
+ className: "w-2.5 h-2.5 rounded-full shrink-0",
1021
+ style: { backgroundColor: e.color ?? S[t % S.length] }
1022
+ }), /* @__PURE__ */ a("span", {
1023
+ className: "text-sm text-slate-600 dark:text-slate-300",
1024
+ children: e.label
1025
+ })]
1026
+ }, t))
1027
+ }),
1028
+ /* @__PURE__ */ a(l, { tooltip: u })
1029
+ ]
1030
+ });
1031
+ }
1032
+ //#endregion
1033
+ //#region src/components/charts/funnel-chart.tsx
1034
+ var w = [
1035
+ "var(--color-accent-500)",
1036
+ "#6366f1",
1037
+ "#8b5cf6",
1038
+ "#a855f7",
1039
+ "#c084fc"
1040
+ ];
1041
+ function T({ data: t, className: r, formatValue: s = String }) {
1042
+ let [c, u] = i(null), [d, f] = i(null), [p, m] = i(!1);
1043
+ n(() => {
1044
+ let e = requestAnimationFrame(() => m(!0));
1045
+ return () => cancelAnimationFrame(e);
1046
+ }, []);
1047
+ let h = Math.max(...t.map((e) => e.value), 1);
1048
+ return /* @__PURE__ */ o("div", {
1049
+ className: e("w-full select-none flex flex-col gap-2", r),
1050
+ children: [t.map((e, n) => {
1051
+ let r = 18 + e.value / h * 82, i = e.color ?? w[n % w.length], c = d === n, l = n > 0 ? (e.value / t[0].value * 100).toFixed(0) : null;
1052
+ return /* @__PURE__ */ o("div", {
1053
+ className: "flex items-center gap-3",
1054
+ children: [
1055
+ /* @__PURE__ */ a("span", {
1056
+ className: "text-sm text-slate-800 dark:text-slate-100 font-[500] text-right shrink-0 leading-none truncate",
1057
+ style: { width: 80 },
1058
+ children: e.label
1059
+ }),
1060
+ /* @__PURE__ */ a("div", {
1061
+ className: "flex-1 flex justify-center",
1062
+ children: /* @__PURE__ */ a("div", {
1063
+ className: "relative h-10 rounded-md flex items-center justify-center cursor-pointer",
1064
+ style: {
1065
+ width: p ? `${r}%` : "18%",
1066
+ backgroundColor: i,
1067
+ opacity: d !== null && !c ? .3 : c ? 1 : .78,
1068
+ boxShadow: c ? `0 0 0 2px ${i}88` : "none",
1069
+ transition: p ? `width 0.45s ${n * .06}s cubic-bezier(0.25,0.46,0.45,0.94), opacity 0.12s, box-shadow 0.12s` : "none"
1070
+ },
1071
+ onMouseEnter: () => f(n),
1072
+ onMouseMove: (t) => u({
1073
+ x: t.clientX,
1074
+ y: t.clientY,
1075
+ content: /* @__PURE__ */ o("span", { children: [
1076
+ /* @__PURE__ */ a("span", {
1077
+ className: "text-slate-500 dark:text-slate-400 mr-2",
1078
+ children: e.label
1079
+ }),
1080
+ /* @__PURE__ */ a("span", {
1081
+ className: "font-semibold text-gray-900 dark:text-white",
1082
+ children: s(e.value)
1083
+ }),
1084
+ l && /* @__PURE__ */ o("span", {
1085
+ className: "text-slate-500 dark:text-slate-400 ml-2",
1086
+ children: [l, "% of total"]
1087
+ })
1088
+ ] })
1089
+ }),
1090
+ onMouseLeave: () => {
1091
+ f(null), u(null);
1092
+ }
1093
+ })
1094
+ }),
1095
+ /* @__PURE__ */ o("div", {
1096
+ className: "shrink-0 text-right",
1097
+ style: { width: 80 },
1098
+ children: [/* @__PURE__ */ a("span", {
1099
+ className: "text-sm font-semibold text-slate-800 dark:text-slate-100 tabular-nums leading-none",
1100
+ children: s(e.value)
1101
+ }), l && /* @__PURE__ */ o("span", {
1102
+ className: "ml-2 text-xs text-slate-500 dark:text-slate-400 tabular-nums",
1103
+ children: [l, "%"]
1104
+ })]
1105
+ })
1106
+ ]
1107
+ }, n);
1108
+ }), /* @__PURE__ */ a(l, { tooltip: c })]
1109
+ });
1110
+ }
1111
+ //#endregion
1112
+ //#region src/components/charts/waterfall-chart.tsx
1113
+ function E({ data: t, height: s = 240, className: c, formatValue: u = String }) {
1114
+ let [d, f] = i(null), [p, m] = i(null), [h, g] = i(!1), _ = r().replace(/:/g, "");
1115
+ n(() => {
1116
+ let e = requestAnimationFrame(() => g(!0));
1117
+ return () => cancelAnimationFrame(e);
1118
+ }, []);
1119
+ let v = 0, y = t.map((e) => {
1120
+ let t = e.total ? 0 : v;
1121
+ e.total || (v += e.value);
1122
+ let n = e.total ? v : t + e.value;
1123
+ return {
1124
+ ...e,
1125
+ base: t,
1126
+ end: n,
1127
+ color: e.color ?? (e.total ? "var(--color-slate-500)" : e.value >= 0 ? "#10b981" : "#f43f5e")
1128
+ };
1129
+ }), b = y.flatMap((e) => [e.base, e.end]), x = Math.min(...b, 0), S = Math.max(...b, 1), C = S - x || 1, w = (e) => 6 + (S - e) / C * 82, T = 100 / y.length, E = T * .2, D = T - E * 2;
1130
+ return /* @__PURE__ */ o("div", {
1131
+ className: e("relative w-full select-none", c),
1132
+ style: { height: s },
1133
+ children: [
1134
+ /* @__PURE__ */ o("svg", {
1135
+ viewBox: "0 0 100 100",
1136
+ preserveAspectRatio: "none",
1137
+ className: "absolute inset-0 w-full h-full text-slate-900 dark:text-white",
1138
+ children: [
1139
+ /* @__PURE__ */ a("defs", { children: y.map((e, t) => /* @__PURE__ */ o("linearGradient", {
1140
+ id: `${_}-wf-${t}`,
1141
+ x1: "0",
1142
+ y1: "0",
1143
+ x2: "0",
1144
+ y2: "1",
1145
+ children: [/* @__PURE__ */ a("stop", {
1146
+ offset: "0%",
1147
+ stopColor: e.color,
1148
+ stopOpacity: "1"
1149
+ }), /* @__PURE__ */ a("stop", {
1150
+ offset: "100%",
1151
+ stopColor: e.color,
1152
+ stopOpacity: "0.5"
1153
+ })]
1154
+ }, t)) }),
1155
+ x < 0 && /* @__PURE__ */ a("line", {
1156
+ x1: "0",
1157
+ y1: w(0),
1158
+ x2: "100",
1159
+ y2: w(0),
1160
+ stroke: "currentColor",
1161
+ strokeOpacity: "0.15",
1162
+ strokeWidth: "0.4",
1163
+ strokeDasharray: "2 2"
1164
+ }),
1165
+ [
1166
+ .25,
1167
+ .5,
1168
+ .75
1169
+ ].map((e, t) => /* @__PURE__ */ a("line", {
1170
+ x1: "0",
1171
+ y1: 6 + e * 82,
1172
+ x2: "100",
1173
+ y2: 6 + e * 82,
1174
+ stroke: "currentColor",
1175
+ strokeOpacity: "0.07",
1176
+ strokeWidth: "0.35"
1177
+ }, t)),
1178
+ y.map((e, t) => {
1179
+ if (t === y.length - 1) return null;
1180
+ let n = (t + 1) * T + E, r = t * T + E + D, i = w(e.end);
1181
+ return /* @__PURE__ */ a("line", {
1182
+ x1: r,
1183
+ y1: i,
1184
+ x2: n,
1185
+ y2: i,
1186
+ stroke: "currentColor",
1187
+ strokeOpacity: "0.2",
1188
+ strokeWidth: "0.35",
1189
+ strokeDasharray: "1.5 1"
1190
+ }, t);
1191
+ }),
1192
+ y.map((e, t) => {
1193
+ let n = w(Math.max(e.base, e.end)), r = w(Math.min(e.base, e.end)), i = Math.max(r - n, .5), s = t * T + E, c = .4, l = t * .05;
1194
+ return /* @__PURE__ */ a("rect", {
1195
+ x: s,
1196
+ width: D,
1197
+ rx: "1.2",
1198
+ y: h ? n : r,
1199
+ height: h ? i : 0,
1200
+ onMouseEnter: () => m(t),
1201
+ onMouseMove: (t) => f({
1202
+ x: t.clientX,
1203
+ y: t.clientY,
1204
+ content: /* @__PURE__ */ o("span", { children: [/* @__PURE__ */ a("span", {
1205
+ className: "text-slate-500 dark:text-slate-400 mr-2",
1206
+ children: e.label
1207
+ }), /* @__PURE__ */ o("span", {
1208
+ className: "font-semibold",
1209
+ style: { color: e.color },
1210
+ children: [e.value >= 0 && !e.total ? "+" : "", u(e.value)]
1211
+ })] })
1212
+ }),
1213
+ onMouseLeave: () => {
1214
+ m(null), f(null);
1215
+ },
1216
+ className: "cursor-pointer",
1217
+ style: {
1218
+ fill: `url(#${_}-wf-${t})`,
1219
+ fillOpacity: p !== null && p !== t ? .35 : 1,
1220
+ transition: h ? `y ${c}s ${l}s cubic-bezier(0.25,0.46,0.45,0.94), height ${c}s ${l}s cubic-bezier(0.25,0.46,0.45,0.94), fill-opacity 0.12s` : "none"
1221
+ }
1222
+ }, t);
1223
+ }),
1224
+ /* @__PURE__ */ a("line", {
1225
+ x1: "0",
1226
+ y1: 88,
1227
+ x2: "100",
1228
+ y2: 88,
1229
+ stroke: "currentColor",
1230
+ strokeOpacity: "0.1",
1231
+ strokeWidth: "0.35"
1232
+ })
1233
+ ]
1234
+ }),
1235
+ /* @__PURE__ */ a("div", {
1236
+ className: "absolute bottom-0 left-0 right-0 flex",
1237
+ style: { height: 20 },
1238
+ children: y.map((t, n) => /* @__PURE__ */ a("div", {
1239
+ className: e("flex-1 text-center text-xs truncate px-1 leading-5", t.total ? "text-slate-500 dark:text-slate-400 font-medium" : "text-slate-500"),
1240
+ children: t.label
1241
+ }, n))
1242
+ }),
1243
+ /* @__PURE__ */ a(l, { tooltip: d })
1244
+ ]
1245
+ });
1246
+ }
1247
+ //#endregion
1248
+ export { b as a, m as c, x as i, f as l, T as n, v as o, C as r, g as s, E as t, u };