basalt-ui 1.30.2 → 1.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +31 -0
  3. package/MIGRATING.md +172 -12
  4. package/agent/rules/basalt-controls.md +19 -19
  5. package/agent/rules/basalt-mantine.md +1 -1
  6. package/configs/oxlint-plugin.js +254 -4
  7. package/configs/oxlint-plugin.test.ts +145 -2
  8. package/configs/oxlint.json +2 -1
  9. package/dist/agent-chat/composer.d.ts.map +1 -1
  10. package/dist/agent-chat/composer.js +41 -43
  11. package/dist/agent-chat/thread-workspace.d.ts +2 -2
  12. package/dist/agent-chat/thread-workspace.d.ts.map +1 -1
  13. package/dist/agent-chat/thread-workspace.js +3 -4
  14. package/dist/agent-chat/use-keyboard-inset.d.ts +2 -0
  15. package/dist/agent-chat/use-keyboard-inset.d.ts.map +1 -0
  16. package/dist/agent-chat/use-keyboard-inset.js +34 -0
  17. package/dist/charts/cursor/touch-pin.d.ts +45 -0
  18. package/dist/charts/cursor/touch-pin.d.ts.map +1 -0
  19. package/dist/charts/cursor/touch-pin.js +79 -0
  20. package/dist/charts/hooks/use-discrete-cursor.d.ts +66 -0
  21. package/dist/charts/hooks/use-discrete-cursor.d.ts.map +1 -0
  22. package/dist/charts/hooks/use-discrete-cursor.js +198 -0
  23. package/dist/charts/hooks/use-hysteresis.d.ts +18 -0
  24. package/dist/charts/hooks/use-hysteresis.d.ts.map +1 -0
  25. package/dist/charts/hooks/use-hysteresis.js +12 -0
  26. package/dist/charts/hooks/useBandPlot.d.ts +7 -0
  27. package/dist/charts/hooks/useBandPlot.d.ts.map +1 -1
  28. package/dist/charts/hooks/useBandPlot.js +62 -18
  29. package/dist/charts/hooks/useChartCursor.d.ts +40 -11
  30. package/dist/charts/hooks/useChartCursor.d.ts.map +1 -1
  31. package/dist/charts/hooks/useChartCursor.js +102 -11
  32. package/dist/charts/index.d.ts +0 -1
  33. package/dist/charts/index.d.ts.map +1 -1
  34. package/dist/charts/index.js +0 -10
  35. package/dist/charts/kinds/BandStrip.d.ts.map +1 -1
  36. package/dist/charts/kinds/BandStrip.js +54 -41
  37. package/dist/charts/kinds/Donut.d.ts +9 -3
  38. package/dist/charts/kinds/Donut.d.ts.map +1 -1
  39. package/dist/charts/kinds/Donut.js +110 -48
  40. package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
  41. package/dist/charts/kinds/DualPanel.js +145 -131
  42. package/dist/charts/kinds/Heatmap.d.ts +7 -0
  43. package/dist/charts/kinds/Heatmap.d.ts.map +1 -1
  44. package/dist/charts/kinds/Heatmap.js +37 -16
  45. package/dist/charts/kinds/MirroredBars.d.ts.map +1 -1
  46. package/dist/charts/kinds/MirroredBars.js +83 -68
  47. package/dist/charts/kinds/donut-layout.d.ts +47 -0
  48. package/dist/charts/kinds/donut-layout.d.ts.map +1 -0
  49. package/dist/charts/kinds/donut-layout.js +52 -0
  50. package/dist/charts/layout/auto-margin.d.ts +7 -2
  51. package/dist/charts/layout/auto-margin.d.ts.map +1 -1
  52. package/dist/charts/layout/auto-margin.js +12 -3
  53. package/dist/charts/layout/end-labels.d.ts +64 -0
  54. package/dist/charts/layout/end-labels.d.ts.map +1 -0
  55. package/dist/charts/layout/end-labels.js +76 -0
  56. package/dist/charts/primitives/Axes.d.ts +32 -4
  57. package/dist/charts/primitives/Axes.d.ts.map +1 -1
  58. package/dist/charts/primitives/Axes.js +62 -16
  59. package/dist/charts/primitives/CartesianChart.d.ts +7 -6
  60. package/dist/charts/primitives/CartesianChart.d.ts.map +1 -1
  61. package/dist/charts/primitives/CartesianChart.js +271 -125
  62. package/dist/charts/primitives/ChartCard.d.ts +0 -14
  63. package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
  64. package/dist/charts/primitives/ChartCard.js +74 -21
  65. package/dist/charts/primitives/ChartFrame.d.ts +28 -22
  66. package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
  67. package/dist/charts/primitives/ChartFrame.js +133 -34
  68. package/dist/charts/primitives/ChartLegend.d.ts +19 -15
  69. package/dist/charts/primitives/ChartLegend.d.ts.map +1 -1
  70. package/dist/charts/primitives/ChartLegend.js +212 -71
  71. package/dist/charts/primitives/ChartTooltip.d.ts.map +1 -1
  72. package/dist/charts/primitives/ChartTooltip.js +4 -3
  73. package/dist/charts/primitives/Crosshair.js +2 -2
  74. package/dist/charts/primitives/HoverOverlay.d.ts +6 -1
  75. package/dist/charts/primitives/HoverOverlay.d.ts.map +1 -1
  76. package/dist/charts/primitives/HoverOverlay.js +37 -26
  77. package/dist/charts/primitives/HoverOverlay.module.css +13 -0
  78. package/dist/charts/primitives/HoverOverlay.module.css.d.ts +8 -0
  79. package/dist/charts/primitives/chart-card-context.d.ts +29 -0
  80. package/dist/charts/primitives/chart-card-context.d.ts.map +1 -0
  81. package/dist/charts/primitives/chart-card-context.js +13 -0
  82. package/dist/charts/primitives/chart-frame-layout.d.ts +93 -113
  83. package/dist/charts/primitives/chart-frame-layout.d.ts.map +1 -1
  84. package/dist/charts/primitives/chart-frame-layout.js +76 -29
  85. package/dist/charts/primitives/chart-layout.d.ts +112 -0
  86. package/dist/charts/primitives/chart-layout.d.ts.map +1 -0
  87. package/dist/charts/primitives/chart-layout.js +175 -0
  88. package/dist/charts/primitives/chart-tier.d.ts +13 -11
  89. package/dist/charts/primitives/chart-tier.d.ts.map +1 -1
  90. package/dist/charts/primitives/chart-tier.js +42 -13
  91. package/dist/charts/series.d.ts +4 -1
  92. package/dist/charts/series.d.ts.map +1 -1
  93. package/dist/charts/utils/ticks.d.ts +27 -8
  94. package/dist/charts/utils/ticks.d.ts.map +1 -1
  95. package/dist/charts/utils/ticks.js +35 -11
  96. package/dist/common/errors.d.ts +11 -1
  97. package/dist/common/errors.d.ts.map +1 -1
  98. package/dist/common/errors.js +16 -2
  99. package/dist/common/hit-floor.d.ts +10 -0
  100. package/dist/common/hit-floor.d.ts.map +1 -0
  101. package/dist/common/hit-floor.js +6 -0
  102. package/dist/{shell → common}/isomorphic-layout-effect.d.ts +4 -3
  103. package/dist/common/isomorphic-layout-effect.d.ts.map +1 -0
  104. package/dist/common/use-measured-widths.d.ts +37 -0
  105. package/dist/common/use-measured-widths.d.ts.map +1 -0
  106. package/dist/common/use-measured-widths.js +51 -0
  107. package/dist/common/use-media-query.d.ts +6 -0
  108. package/dist/common/use-media-query.d.ts.map +1 -0
  109. package/dist/common/use-media-query.js +40 -0
  110. package/dist/common/validate.d.ts +9 -0
  111. package/dist/common/validate.d.ts.map +1 -1
  112. package/dist/common/validate.js +9 -4
  113. package/dist/content/article-layout.d.ts +4 -2
  114. package/dist/content/article-layout.d.ts.map +1 -1
  115. package/dist/content/article-layout.js +43 -3
  116. package/dist/content/article-layout.module.css +45 -4
  117. package/dist/content/article-layout.module.css.d.ts +3 -0
  118. package/dist/content/code-block.d.ts.map +1 -1
  119. package/dist/content/code-block.js +40 -2
  120. package/dist/content/code-block.module.css +32 -2
  121. package/dist/content/prose.module.css +13 -8
  122. package/dist/controls/actions.d.ts +29 -6
  123. package/dist/controls/actions.d.ts.map +1 -1
  124. package/dist/controls/actions.js +158 -27
  125. package/dist/controls/actions.module.css +14 -1
  126. package/dist/controls/actions.module.css.d.ts +1 -0
  127. package/dist/controls/controls.module.css +8 -31
  128. package/dist/controls/enum-filter.js +2 -2
  129. package/dist/controls/filter-context.d.ts +10 -0
  130. package/dist/controls/filter-context.d.ts.map +1 -1
  131. package/dist/controls/filter-context.js +2 -0
  132. package/dist/controls/filter-pill.d.ts.map +1 -1
  133. package/dist/controls/filter-pill.js +1 -0
  134. package/dist/controls/index.d.ts +1 -1
  135. package/dist/controls/index.d.ts.map +1 -1
  136. package/dist/controls/index.js +0 -2
  137. package/dist/controls/multi-select-filter.js +2 -2
  138. package/dist/controls/sync-button.module.css +1 -1
  139. package/dist/dashboard/section.d.ts.map +1 -1
  140. package/dist/dashboard/section.js +1 -0
  141. package/dist/dashboard/section.module.css +1 -26
  142. package/dist/dashboard/stat-card.d.ts +1 -1
  143. package/dist/dashboard/stat-card.d.ts.map +1 -1
  144. package/dist/dashboard/stat-card.js +4 -1
  145. package/dist/dashboard/stat-card.module.css +6 -9
  146. package/dist/dashboard/stat-group.module.css +16 -4
  147. package/dist/dashboard/widget-grid.d.ts.map +1 -1
  148. package/dist/dashboard/widget-header.d.ts +14 -4
  149. package/dist/dashboard/widget-header.d.ts.map +1 -1
  150. package/dist/dashboard/widget-header.js +23 -6
  151. package/dist/dashboard/widget-header.module.css +145 -133
  152. package/dist/dashboard/widget-header.module.css.d.ts +2 -0
  153. package/dist/data/data-table.d.ts +23 -0
  154. package/dist/data/data-table.d.ts.map +1 -1
  155. package/dist/data/data-table.js +339 -141
  156. package/dist/data/data-table.module.css +94 -0
  157. package/dist/data/data-table.module.css.d.ts +11 -0
  158. package/dist/data/virtual-list.d.ts.map +1 -1
  159. package/dist/data/virtual-list.js +10 -0
  160. package/dist/forms/form-layout.d.ts.map +1 -1
  161. package/dist/forms/form-layout.js +3 -3
  162. package/dist/forms/form-layout.module.css +30 -5
  163. package/dist/forms/form-layout.module.css.d.ts +1 -0
  164. package/dist/guard/index.d.ts +8 -2
  165. package/dist/guard/index.d.ts.map +1 -1
  166. package/dist/guard/index.js +67 -2
  167. package/dist/guard/types.d.ts +3 -3
  168. package/dist/guard/types.d.ts.map +1 -1
  169. package/dist/index.d.ts +1 -1
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +3 -1
  172. package/dist/provider/index.d.ts +20 -1
  173. package/dist/provider/index.d.ts.map +1 -1
  174. package/dist/provider/index.js +22 -2
  175. package/dist/shell/app-brand.d.ts.map +1 -1
  176. package/dist/shell/app-brand.js +1 -0
  177. package/dist/shell/app-brand.module.css +2 -2
  178. package/dist/shell/app-header.module.css +18 -8
  179. package/dist/shell/app-main.module.css +54 -3
  180. package/dist/shell/app-main.module.css.d.ts +1 -0
  181. package/dist/shell/app-mobile-nav.module.css +16 -4
  182. package/dist/shell/app-sidebar.module.css +4 -6
  183. package/dist/shell/index.d.ts +12 -0
  184. package/dist/shell/index.d.ts.map +1 -1
  185. package/dist/shell/index.js +57 -16
  186. package/dist/shell/mobile-nav-model.d.ts +1 -1
  187. package/dist/shell/page-aside.d.ts +22 -3
  188. package/dist/shell/page-aside.d.ts.map +1 -1
  189. package/dist/shell/page-aside.js +27 -13
  190. package/dist/shell/page-bar.d.ts.map +1 -1
  191. package/dist/shell/page-bar.js +10 -5
  192. package/dist/shell/page-bar.module.css +10 -34
  193. package/dist/shell/use-breakpoint.d.ts +3 -4
  194. package/dist/shell/use-breakpoint.d.ts.map +1 -1
  195. package/dist/shell/use-breakpoint.js +3 -25
  196. package/dist/shell/use-size-class.d.ts +6 -0
  197. package/dist/shell/use-size-class.d.ts.map +1 -0
  198. package/dist/shell/use-size-class.js +19 -0
  199. package/dist/state/persisted-or-local.d.ts +4 -1
  200. package/dist/state/persisted-or-local.d.ts.map +1 -1
  201. package/dist/state/persisted-or-local.js +4 -3
  202. package/dist/state/persisted.d.ts +10 -0
  203. package/dist/state/persisted.d.ts.map +1 -1
  204. package/dist/state/persisted.js +44 -14
  205. package/dist/styles.css +41 -0
  206. package/dist/surfaces.d.ts +4 -4
  207. package/dist/surfaces.d.ts.map +1 -1
  208. package/dist/surfaces.js +11 -3
  209. package/dist/theme/controls.module.css +7 -0
  210. package/dist/theme/ctl-theme.d.ts +1 -0
  211. package/dist/theme/ctl-theme.d.ts.map +1 -1
  212. package/dist/theme/ctl-theme.js +12 -4
  213. package/dist/theme/floating.module.css +36 -0
  214. package/dist/theme/floating.module.css.d.ts +3 -0
  215. package/dist/theme/index.d.ts +2 -2
  216. package/dist/theme/index.d.ts.map +1 -1
  217. package/dist/theme/index.js +34 -5
  218. package/dist/theme/nav-link.module.css +7 -0
  219. package/dist/tokens/index.d.ts +7 -16
  220. package/dist/tokens/index.d.ts.map +1 -1
  221. package/dist/tokens/index.js +23 -28
  222. package/dist/tokens/palette.d.ts +5 -27
  223. package/dist/tokens/palette.d.ts.map +1 -1
  224. package/dist/tokens/palette.js +8 -30
  225. package/dist/tokens/size-classes.d.ts +40 -0
  226. package/dist/tokens/size-classes.d.ts.map +1 -0
  227. package/dist/tokens/size-classes.js +29 -0
  228. package/dist/tokens.css +8 -4
  229. package/llms.txt +3 -3
  230. package/package.json +17 -17
  231. package/src/agent-chat/composer.tsx +74 -47
  232. package/src/agent-chat/thread-workspace.tsx +8 -11
  233. package/src/agent-chat/use-keyboard-inset.ts +68 -0
  234. package/src/charts/cursor/touch-pin.ts +138 -0
  235. package/src/charts/hooks/use-discrete-cursor.ts +335 -0
  236. package/src/charts/hooks/use-hysteresis.ts +26 -0
  237. package/src/charts/hooks/useBandPlot.ts +90 -27
  238. package/src/charts/hooks/useChartCursor.ts +211 -26
  239. package/src/charts/index.ts +0 -8
  240. package/src/charts/kinds/BandStrip.tsx +11 -1
  241. package/src/charts/kinds/Donut.tsx +153 -62
  242. package/src/charts/kinds/DualPanel.tsx +19 -4
  243. package/src/charts/kinds/Heatmap.tsx +61 -22
  244. package/src/charts/kinds/MirroredBars.tsx +15 -3
  245. package/src/charts/kinds/donut-layout.ts +82 -0
  246. package/src/charts/layout/auto-margin.ts +24 -5
  247. package/src/charts/layout/end-labels.ts +135 -0
  248. package/src/charts/primitives/Axes.tsx +112 -21
  249. package/src/charts/primitives/CartesianChart.tsx +282 -68
  250. package/src/charts/primitives/ChartCard.tsx +141 -48
  251. package/src/charts/primitives/ChartFrame.tsx +243 -60
  252. package/src/charts/primitives/ChartLegend.tsx +257 -73
  253. package/src/charts/primitives/ChartTooltip.tsx +8 -3
  254. package/src/charts/primitives/Crosshair.tsx +2 -2
  255. package/src/charts/primitives/HoverOverlay.module.css +13 -0
  256. package/src/charts/primitives/HoverOverlay.module.css.d.ts +8 -0
  257. package/src/charts/primitives/HoverOverlay.tsx +15 -4
  258. package/src/charts/primitives/chart-card-context.ts +37 -0
  259. package/src/charts/primitives/chart-frame-layout.ts +214 -177
  260. package/src/charts/primitives/chart-layout.ts +318 -0
  261. package/src/charts/primitives/chart-tier.tsx +66 -21
  262. package/src/charts/series.ts +4 -1
  263. package/src/charts/utils/ticks.ts +95 -19
  264. package/src/common/errors.ts +25 -1
  265. package/src/common/hit-floor.ts +9 -0
  266. package/src/{shell → common}/isomorphic-layout-effect.ts +4 -3
  267. package/src/common/use-measured-widths.ts +88 -0
  268. package/src/common/use-media-query.ts +56 -0
  269. package/src/common/validate.ts +17 -4
  270. package/src/content/article-layout.module.css +45 -4
  271. package/src/content/article-layout.module.css.d.ts +3 -0
  272. package/src/content/article-layout.tsx +60 -5
  273. package/src/content/code-block.module.css +32 -2
  274. package/src/content/code-block.tsx +47 -3
  275. package/src/content/prose.module.css +13 -8
  276. package/src/controls/actions.module.css +14 -1
  277. package/src/controls/actions.module.css.d.ts +1 -0
  278. package/src/controls/actions.tsx +223 -75
  279. package/src/controls/controls.module.css +8 -31
  280. package/src/controls/enum-filter.tsx +2 -2
  281. package/src/controls/filter-context.tsx +11 -0
  282. package/src/controls/filter-pill.tsx +1 -0
  283. package/src/controls/index.ts +0 -1
  284. package/src/controls/multi-select-filter.tsx +2 -2
  285. package/src/controls/sync-button.module.css +1 -1
  286. package/src/dashboard/section.module.css +1 -26
  287. package/src/dashboard/section.tsx +1 -0
  288. package/src/dashboard/stat-card.module.css +6 -9
  289. package/src/dashboard/stat-card.tsx +6 -3
  290. package/src/dashboard/stat-group.module.css +16 -4
  291. package/src/dashboard/widget-grid.tsx +7 -6
  292. package/src/dashboard/widget-header.module.css +145 -133
  293. package/src/dashboard/widget-header.module.css.d.ts +2 -0
  294. package/src/dashboard/widget-header.tsx +45 -11
  295. package/src/data/data-table.module.css +94 -0
  296. package/src/data/data-table.module.css.d.ts +11 -0
  297. package/src/data/data-table.tsx +503 -164
  298. package/src/data/virtual-list.tsx +31 -0
  299. package/src/forms/form-layout.module.css +30 -5
  300. package/src/forms/form-layout.module.css.d.ts +1 -0
  301. package/src/forms/form-layout.tsx +12 -10
  302. package/src/guard/index.ts +183 -3
  303. package/src/guard/types.ts +3 -2
  304. package/src/index.ts +2 -0
  305. package/src/provider/index.tsx +53 -1
  306. package/src/shell/app-brand.module.css +2 -2
  307. package/src/shell/app-brand.tsx +1 -0
  308. package/src/shell/app-header.module.css +18 -8
  309. package/src/shell/app-main.module.css +54 -3
  310. package/src/shell/app-main.module.css.d.ts +1 -0
  311. package/src/shell/app-mobile-nav.module.css +16 -4
  312. package/src/shell/app-sidebar.module.css +4 -6
  313. package/src/shell/index.tsx +200 -129
  314. package/src/shell/mobile-nav-model.ts +1 -1
  315. package/src/shell/page-aside.tsx +70 -21
  316. package/src/shell/page-bar.module.css +10 -34
  317. package/src/shell/page-bar.tsx +10 -5
  318. package/src/shell/use-breakpoint.ts +9 -45
  319. package/src/shell/use-size-class.ts +31 -0
  320. package/src/state/persisted-or-local.ts +10 -4
  321. package/src/state/persisted.ts +76 -17
  322. package/src/styles.css +41 -0
  323. package/src/surfaces.ts +9 -1
  324. package/src/theme/controls.module.css +7 -0
  325. package/src/theme/ctl-theme.tsx +15 -3
  326. package/src/theme/floating.module.css +36 -0
  327. package/src/theme/floating.module.css.d.ts +3 -0
  328. package/src/theme/index.ts +46 -8
  329. package/src/theme/nav-link.module.css +7 -0
  330. package/src/tokens/index.ts +20 -30
  331. package/src/tokens/palette.ts +6 -28
  332. package/src/tokens/size-classes.ts +46 -0
  333. package/dist/shell/isomorphic-layout-effect.d.ts.map +0 -1
  334. /package/dist/{shell → common}/isomorphic-layout-effect.js +0 -0
@@ -3,24 +3,35 @@ import { GridRows } from "@visx/grid";
3
3
  import { Group } from "@visx/group";
4
4
  import { scaleLinear, scaleLog, scalePoint } from "@visx/scale";
5
5
  import { useMemo, useRef, useState } from "react";
6
- import { VX } from "../../tokens/index.js";
6
+ import { VX, alpha } from "../../tokens/index.js";
7
+ import { classifyDomain } from "../cursor/resolve.js";
7
8
  import { useChartCursor } from "../hooks/useChartCursor.js";
8
9
  import { autoMargin, probeAxisLabels } from "../layout/auto-margin.js";
10
+ import { END_LABEL_GAP, planEndLabels } from "../layout/end-labels.js";
9
11
  import { logTickValues, niceLogDomain } from "../layout/log-ticks.js";
10
12
  import { deriveLegend, deriveTooltipRows } from "../series.js";
11
13
  import { padAutoLower, padAutoUpper } from "../utils/domain.js";
12
14
  import { fmtAxisDate } from "../utils/format.js";
13
- import { autoXLabelRotate, smartTicks, smartTicksEvery, xLabelPxFor } from "../utils/ticks.js";
14
- import { AxisBottomDate, AxisLeftNumeric, AxisRightNumeric } from "./Axes.js";
15
+ import { rotatedXLabelPx, smartTicks, smartTicksEvery, xLabelPxFor } from "../utils/ticks.js";
16
+ import { AxisBottomDate, AxisLeftNumeric, AxisRightNumeric, TICK_FONT_FAMILY } from "./Axes.js";
15
17
  import { ChartFrame, resolveLegend } from "./ChartFrame.js";
16
- import { useChartTierMetrics } from "./chart-tier.js";
18
+ import {
19
+ compactNumber,
20
+ isTightClass,
21
+ planXLabels,
22
+ resolveMarginFloor,
23
+ resolveYPlacement,
24
+ shouldCompactYLabels,
25
+ yTickCount
26
+ } from "./chart-layout.js";
27
+ import { useChartContainerClass, useChartMetrics } from "./chart-tier.js";
17
28
  import { ChartTooltipFloat, TooltipBody, TooltipHeader, TooltipRow } from "./ChartTooltip.js";
18
29
  import { Crosshair, SeriesDot } from "./Crosshair.js";
19
30
  import { HoverOverlay } from "./HoverOverlay.js";
20
31
  import { XZoneRects } from "./XZoneRects.js";
21
32
  import { ZoneRects } from "./ZoneRects.js";
22
- const DEFAULT_TICKS = 5;
23
33
  const DEFAULT_AUTO_PAD = 1.1;
34
+ const AXIS_TINT_ALPHA = 0.8;
24
35
  function resolveAxisDomain(cfg, data, series, extraBounds = []) {
25
36
  const domain = cfg?.domain ?? "auto";
26
37
  if (Array.isArray(domain)) return domain;
@@ -57,6 +68,30 @@ function resolveAxisDomain(cfg, data, series, extraBounds = []) {
57
68
  if (lower === upper) return [Math.min(lower, 0), upper === 0 ? 1 : upper * pad];
58
69
  return [lower, upper];
59
70
  }
71
+ function probeYAxis(opts) {
72
+ const { domain, ticks, nice, scale, format } = opts;
73
+ const base = probeAxisLabels({
74
+ domain,
75
+ ticks,
76
+ nice,
77
+ ...scale !== void 0 && { scale },
78
+ ...format !== void 0 && { format }
79
+ });
80
+ if (format !== void 0 || !shouldCompactYLabels(base.labels)) {
81
+ return base;
82
+ }
83
+ const compact = (v) => compactNumber(v) ?? base.format(v);
84
+ return {
85
+ labels: probeAxisLabels({
86
+ domain,
87
+ ticks,
88
+ nice,
89
+ format: compact,
90
+ ...scale !== void 0 && { scale }
91
+ }).labels,
92
+ format: compact
93
+ };
94
+ }
60
95
  function buildYScale(cfg, domain, yMax, ticks) {
61
96
  if (cfg?.scale === "log") {
62
97
  const scale = scaleLog({
@@ -74,6 +109,17 @@ function buildYScale(cfg, domain, yMax, ticks) {
74
109
  ...cfg?.nice === true && { nice: true }
75
110
  });
76
111
  }
112
+ function resolveTickLabelPx(input) {
113
+ const { rotate, wrapWidth, xLabels, axisFont, flatLabelPx, wrappedLabelPx } = input;
114
+ if (rotate === 45) return rotatedXLabelPx(xLabels, axisFont);
115
+ return wrapWidth === void 0 ? flatLabelPx : wrappedLabelPx;
116
+ }
117
+ function resolveBaseMargin(input) {
118
+ const { rotate, wrapWidth, flatMargin, rotated45Margin, marginInput, xPlanLines } = input;
119
+ if (rotate === 45) return rotated45Margin;
120
+ if (rotate === 90) return autoMargin({ ...marginInput, rotate });
121
+ return wrapWidth === void 0 ? flatMargin : autoMargin({ ...marginInput, bottomLines: xPlanLines });
122
+ }
77
123
  function CartesianChart({
78
124
  data,
79
125
  chartId,
@@ -175,7 +221,9 @@ function CartesianPlot({
175
221
  children
176
222
  }) {
177
223
  const { hidden } = plot;
178
- const tier = useChartTierMetrics();
224
+ const tier = useChartMetrics();
225
+ const containerClass = useChartContainerClass();
226
+ const tight = isTightClass(containerClass);
179
227
  const visible = useMemo(() => series.filter((s) => !hidden.has(s.key)), [series, hidden]);
180
228
  const leftSeries = useMemo(() => visible.filter((s) => s.axis !== "right"), [visible]);
181
229
  const rightSeries = useMemo(() => visible.filter((s) => s.axis === "right"), [visible]);
@@ -195,84 +243,148 @@ function CartesianPlot({
195
243
  () => y2 === void 0 ? null : resolveAxisDomain(y2, data, rightSeries, rightBounds),
196
244
  [y2, data, rightSeries, rightBounds]
197
245
  );
198
- const leftTicks = y?.ticks ?? DEFAULT_TICKS;
199
- const rightTicks = y2?.ticks ?? DEFAULT_TICKS;
246
+ const estimatedPlotHeight = plot.height - tier.margin.top - tier.margin.bottom;
247
+ const leftTicks = y?.ticks ?? yTickCount(estimatedPlotHeight);
248
+ const rightTicks = y2?.ticks ?? yTickCount(estimatedPlotHeight);
200
249
  const { labels: leftLabels, format: leftFormat } = useMemo(
201
- () => probeAxisLabels({
250
+ () => probeYAxis({
202
251
  domain: leftDomain,
203
252
  ticks: leftTicks,
204
253
  nice: y?.nice ?? false,
205
- ...y?.scale !== void 0 && { scale: y.scale },
206
- ...y?.format !== void 0 && { format: y.format }
254
+ scale: y?.scale,
255
+ format: y?.format
207
256
  }),
208
257
  [leftDomain, leftTicks, y?.format, y?.nice, y?.scale]
209
258
  );
210
259
  const { labels: rightLabels, format: rightFormat } = useMemo(
211
- () => rightDomain === null ? { labels: [], format: (v) => String(v) } : probeAxisLabels({
260
+ () => rightDomain === null ? { labels: [], format: (v) => String(v) } : probeYAxis({
212
261
  domain: rightDomain,
213
262
  ticks: rightTicks,
214
263
  nice: y2?.nice ?? false,
215
- ...y2?.scale !== void 0 && { scale: y2.scale },
216
- ...y2?.format !== void 0 && { format: y2.format }
264
+ scale: y2?.scale,
265
+ format: y2?.format
217
266
  }),
218
267
  [rightDomain, rightTicks, y2?.format, y2?.nice, y2?.scale]
219
268
  );
220
269
  const xLabels = useMemo(() => keys.map(formatX), [keys, formatX]);
270
+ const yPlacement = resolveYPlacement(containerClass, { marginOverrideLeft: marginOverride?.left });
271
+ const categorical = tight && classifyDomain(keys) === "band";
221
272
  const xLabelPx = useMemo(() => xLabelPxFor(xLabels, tier.axisFont), [xLabels, tier.axisFont]);
222
273
  const marginInput = useMemo(
223
274
  () => ({
224
- left: leftLabels,
275
+ left: yPlacement === "outside" ? leftLabels : [],
225
276
  right: rightLabels,
226
277
  bottom: xLabels,
227
278
  fontPx: tier.axisFont,
228
- floor: tier.margin,
279
+ // An inside-placed y label paints IN the plot, so the left gutter it used to reserve
280
+ // (the phone tier's own margin floor) is dead space — only the inside-label floor applies.
281
+ floor: resolveMarginFloor(yPlacement, tier.margin),
282
+ anchorTerminals: tight,
229
283
  ...marginOverride !== void 0 && { override: marginOverride }
230
284
  }),
231
- [leftLabels, rightLabels, xLabels, tier.axisFont, tier.margin, marginOverride]
285
+ [
286
+ leftLabels,
287
+ rightLabels,
288
+ xLabels,
289
+ tier.axisFont,
290
+ tier.margin,
291
+ marginOverride,
292
+ tight,
293
+ yPlacement
294
+ ]
232
295
  );
233
296
  const flatMargin = useMemo(() => autoMargin(marginInput), [marginInput]);
234
297
  const rotated45Margin = useMemo(() => autoMargin({ ...marginInput, rotate: 45 }), [marginInput]);
235
- const rotate = xLabelRotate ?? autoXLabelRotate({
236
- tier: tier.tier,
237
- xMax: Math.max(plot.width - flatMargin.left - flatMargin.right, 0),
238
- labelPx: xLabelPx,
239
- rotatedXMax: Math.max(plot.width - rotated45Margin.left - rotated45Margin.right, 0)
298
+ const flatXMax = Math.max(plot.width - flatMargin.left - flatMargin.right, 0);
299
+ const xPlan = useMemo(
300
+ () => planXLabels({ labels: xLabels, plotWidth: flatXMax, fontPx: tier.axisFont, categorical }),
301
+ [xLabels, flatXMax, tier.axisFont, categorical]
302
+ );
303
+ const rotate = xLabelRotate ?? (categorical ? xPlan.rotate : 0);
304
+ const wrapWidth = rotate === 0 && xPlan.wrap ? xPlan.wrapPx : void 0;
305
+ const tickLabelPx = resolveTickLabelPx({
306
+ rotate,
307
+ wrapWidth,
308
+ xLabels,
309
+ axisFont: tier.axisFont,
310
+ flatLabelPx: xLabelPx,
311
+ wrappedLabelPx: xPlan.labelPx
240
312
  });
313
+ const baseMargin = useMemo(
314
+ () => resolveBaseMargin({
315
+ rotate,
316
+ wrapWidth,
317
+ flatMargin,
318
+ rotated45Margin,
319
+ marginInput,
320
+ xPlanLines: xPlan.lines
321
+ }),
322
+ [flatMargin, rotated45Margin, marginInput, rotate, wrapWidth, xPlan.lines]
323
+ );
324
+ const yMax = Math.max(plot.height - baseMargin.top - baseMargin.bottom, 0);
325
+ const yScale = useMemo(
326
+ () => buildYScale(y, leftDomain, yMax, leftTicks),
327
+ [y, leftDomain, yMax, leftTicks]
328
+ );
329
+ const endPlan = useMemo(
330
+ () => planEndLabels({
331
+ containerClass,
332
+ hasY2: y2 !== void 0,
333
+ hasMarginRight: marginOverride?.right !== void 0,
334
+ hasHeaderLegend: plot.legendInHeader,
335
+ visible,
336
+ data,
337
+ yScale,
338
+ yMax,
339
+ fontPx: tier.axisFont,
340
+ plotWidth: plot.width - baseMargin.left - baseMargin.right
341
+ }),
342
+ [
343
+ containerClass,
344
+ y2,
345
+ marginOverride?.right,
346
+ plot.legendInHeader,
347
+ visible,
348
+ data,
349
+ yScale,
350
+ yMax,
351
+ tier.axisFont,
352
+ plot.width,
353
+ baseMargin.left,
354
+ baseMargin.right
355
+ ]
356
+ );
357
+ const endLabels = endPlan?.labels ?? [];
241
358
  const margin = useMemo(
242
- () => rotate === 0 ? flatMargin : rotate === 45 ? rotated45Margin : autoMargin({ ...marginInput, rotate }),
243
- [flatMargin, rotated45Margin, marginInput, rotate]
359
+ () => endPlan === null ? baseMargin : { ...baseMargin, right: baseMargin.right + endPlan.gutter },
360
+ [baseMargin, endPlan]
244
361
  );
245
362
  const xMax = Math.max(plot.width - margin.left - margin.right, 0);
246
- const yMax = Math.max(plot.height - margin.top - margin.bottom, 0);
247
363
  const xScale = useMemo(
248
364
  () => scalePoint({ domain: keys, range: [0, xMax], padding: 0.5 }),
249
365
  [keys, xMax]
250
366
  );
251
- const yScale = useMemo(
252
- () => buildYScale(y, leftDomain, yMax, leftTicks),
253
- [y, leftDomain, yMax, leftTicks]
254
- );
255
367
  const y2Scale = useMemo(
256
368
  () => rightDomain === null ? null : buildYScale(y2, rightDomain, yMax, rightTicks),
257
369
  [y2, rightDomain, yMax, rightTicks]
258
370
  );
259
- const tickValues = useMemo(
260
- () => xTickValues !== void 0 ? [...xTickValues(keys, xMax)] : xTicks === void 0 ? (
261
- // A rotated label stacks diagonally instead of beside its neighbour, so its WIDTH no
262
- // longer governs tick spacing — the constant floor takes over, exactly as before.
263
- smartTicks(keys, xMax, rotate === 0 ? xLabelPx : void 0)
264
- ) : smartTicksEvery(keys, xTicks),
265
- [keys, xMax, xTicks, xTickValues, xLabelPx, rotate]
266
- );
371
+ const tickValues = useMemo(() => {
372
+ if (xTickValues !== void 0) return [...xTickValues(keys, xMax)];
373
+ if (xTicks !== void 0) return smartTicksEvery(keys, xTicks);
374
+ if (containerClass === "micro")
375
+ return keys.length > 1 ? [keys[0], keys[keys.length - 1]] : keys;
376
+ return smartTicks(keys, xMax, rotate === 0 || rotate === 45 ? tickLabelPx : void 0, tight);
377
+ }, [keys, xMax, xTicks, xTickValues, tickLabelPx, rotate, containerClass, tight]);
378
+ const svgRef = useRef(null);
267
379
  const cursor = useChartCursor({
268
380
  data,
269
381
  chartId,
270
382
  getKey: getX,
271
383
  xScale,
272
384
  marginLeft: margin.left,
385
+ boundaryRef: svgRef,
273
386
  ...cursorResolution !== void 0 && { resolution: cursorResolution }
274
387
  });
275
- const svgRef = useRef(null);
276
388
  const tooltipEnabled = tooltip !== false;
277
389
  const tooltipCfg = tooltip === false ? void 0 : tooltip;
278
390
  const point = cursor.point;
@@ -285,10 +397,13 @@ function CartesianPlot({
285
397
  ),
286
398
  [visible, leftFormat, rightFormat]
287
399
  );
400
+ const tintAxes = y2 !== void 0 && leftSeries.length === 1 && rightSeries.length === 1;
401
+ const leftTint = tintAxes ? alpha(leftSeries[0].color, AXIS_TINT_ALPHA) : void 0;
402
+ const rightTint = tintAxes ? alpha(rightSeries[0].color, AXIS_TINT_ALPHA) : void 0;
288
403
  const rows = tooltipEnabled && point !== null ? deriveTooltipRows(tooltipSeries, point, leftFormat) : [];
289
404
  const isFollowerRender = !cursor.isSource && tooltipCfg?.onFollow === true;
290
405
  const showTooltip = tooltipEnabled && point !== null && (cursor.isSource || isFollowerRender);
291
- const useAnchoredPosition = tooltipCfg?.follow === false || isFollowerRender;
406
+ const useAnchoredPosition = tooltipCfg?.follow === false || tooltipCfg?.follow === void 0 && cursor.isTouch || isFollowerRender;
292
407
  const anchorX = useAnchoredPosition && point !== null && cursorX !== null ? cursorX : null;
293
408
  const svgRect = anchorX === null ? void 0 : svgRef.current?.getBoundingClientRect();
294
409
  const tooltipAnchor = svgRect === void 0 || anchorX === null ? cursor.anchor : { x: svgRect.left + margin.left + anchorX, y: svgRect.top + margin.top };
@@ -306,94 +421,125 @@ function CartesianPlot({
306
421
  highlighted
307
422
  };
308
423
  return /* @__PURE__ */ jsxs(Fragment, { children: [
309
- /* @__PURE__ */ jsx("svg", { ref: svgRef, width: plot.width, height: plot.height, children: /* @__PURE__ */ jsxs(Group, { left: margin.left, top: margin.top, children: [
310
- (y?.grid ?? true) && /* @__PURE__ */ jsx(GridRows, { scale: yScale, width: xMax, stroke: VX.grid, numTicks: leftTicks }),
311
- xZones !== void 0 && /* @__PURE__ */ jsx(XZoneRects, { zones: xZones, height: yMax, xScale }),
312
- zones !== void 0 && /* @__PURE__ */ jsx(ZoneRects, { zones, width: xMax, leftScale: yScale, rightScale: y2Scale }),
313
- children(ctx),
314
- refLines?.map((line, i) => {
315
- const scale = line.axis === "right" && y2Scale !== null ? y2Scale : yScale;
316
- return /* @__PURE__ */ jsx(
317
- "line",
318
- {
319
- x1: 0,
320
- x2: xMax,
321
- y1: scale(line.value),
322
- y2: scale(line.value),
323
- stroke: line.color,
324
- strokeWidth: 1,
325
- strokeDasharray: line.dashed === true ? VX.dashArray : void 0
326
- },
327
- `${line.axis ?? "left"}-${line.value}-${i}`
328
- );
329
- }),
330
- tooltipEnabled && point !== null && cursorX !== null && /* @__PURE__ */ jsxs(Fragment, { children: [
331
- /* @__PURE__ */ jsx(Crosshair, { x: cursorX, top: 0, bottom: yMax }),
332
- visible.map((s) => {
333
- if (s.mark === "bar") return null;
334
- const value = cursorValue === void 0 ? s.getValue(point) : cursorValue(point, s, visible);
335
- if (value === null) return null;
336
- const scale = s.axis === "right" && y2Scale !== null ? y2Scale : yScale;
337
- const cy = scale(value);
338
- if (!Number.isFinite(cy)) return null;
339
- const marker = s.getMarker?.(point);
340
- return /* @__PURE__ */ jsx(
341
- SeriesDot,
424
+ /* @__PURE__ */ jsx(
425
+ "svg",
426
+ {
427
+ ref: svgRef,
428
+ width: plot.width,
429
+ height: plot.height,
430
+ style: { touchAction: "pan-y" },
431
+ children: /* @__PURE__ */ jsxs(Group, { left: margin.left, top: margin.top, children: [
432
+ (y?.grid ?? true) && /* @__PURE__ */ jsx(GridRows, { scale: yScale, width: xMax, stroke: VX.grid, numTicks: leftTicks }),
433
+ xZones !== void 0 && /* @__PURE__ */ jsx(XZoneRects, { zones: xZones, height: yMax, xScale }),
434
+ zones !== void 0 && /* @__PURE__ */ jsx(ZoneRects, { zones, width: xMax, leftScale: yScale, rightScale: y2Scale }),
435
+ children(ctx),
436
+ refLines?.map((line, i) => {
437
+ const scale = line.axis === "right" && y2Scale !== null ? y2Scale : yScale;
438
+ return /* @__PURE__ */ jsx(
439
+ "line",
440
+ {
441
+ x1: 0,
442
+ x2: xMax,
443
+ y1: scale(line.value),
444
+ y2: scale(line.value),
445
+ stroke: line.color,
446
+ strokeWidth: 1,
447
+ strokeDasharray: line.dashed === true ? VX.dashArray : void 0
448
+ },
449
+ `${line.axis ?? "left"}-${line.value}-${i}`
450
+ );
451
+ }),
452
+ tooltipEnabled && point !== null && cursorX !== null && /* @__PURE__ */ jsxs(Fragment, { children: [
453
+ /* @__PURE__ */ jsx(Crosshair, { x: cursorX, top: 0, bottom: yMax }),
454
+ visible.map((s) => {
455
+ if (s.mark === "bar") return null;
456
+ const value = cursorValue === void 0 ? s.getValue(point) : cursorValue(point, s, visible);
457
+ if (value === null) return null;
458
+ const scale = s.axis === "right" && y2Scale !== null ? y2Scale : yScale;
459
+ const cy = scale(value);
460
+ if (!Number.isFinite(cy)) return null;
461
+ const marker = s.getMarker?.(point);
462
+ return /* @__PURE__ */ jsx(
463
+ SeriesDot,
464
+ {
465
+ cx: cursorX,
466
+ cy,
467
+ color: marker?.color ?? s.color,
468
+ ...marker?.r !== void 0 && { r: marker.r }
469
+ },
470
+ s.key
471
+ );
472
+ })
473
+ ] }),
474
+ yPlacement !== "none" && /* @__PURE__ */ jsx(
475
+ AxisLeftNumeric,
476
+ {
477
+ scale: yScale,
478
+ numTicks: leftTicks,
479
+ tickFormat: (v) => leftFormat(Number(v)),
480
+ inside: yPlacement === "inside",
481
+ ...leftTint !== void 0 && { tickColor: leftTint }
482
+ }
483
+ ),
484
+ y2Scale !== null && /* @__PURE__ */ jsx(
485
+ AxisRightNumeric,
486
+ {
487
+ scale: y2Scale,
488
+ left: xMax,
489
+ numTicks: rightTicks,
490
+ tickFormat: (v) => rightFormat(Number(v)),
491
+ ...rightTint !== void 0 && { tickColor: rightTint }
492
+ }
493
+ ),
494
+ /* @__PURE__ */ jsx(
495
+ AxisBottomDate,
496
+ {
497
+ top: yMax,
498
+ scale: xScale,
499
+ tickValues,
500
+ tickFormat: (v) => formatX(String(v)),
501
+ ...rotate !== 0 && { rotate },
502
+ anchorTerminals: tight && rotate === 0,
503
+ ...wrapWidth !== void 0 && { wrapWidth }
504
+ }
505
+ ),
506
+ endLabels.map(({ series: s, y: labelY }) => /* @__PURE__ */ jsx(
507
+ "text",
342
508
  {
343
- cx: cursorX,
344
- cy,
345
- color: marker?.color ?? s.color,
346
- ...marker?.r !== void 0 && { r: marker.r }
509
+ x: xMax + END_LABEL_GAP,
510
+ y: labelY,
511
+ dy: "0.35em",
512
+ fill: s.color,
513
+ fontFamily: TICK_FONT_FAMILY,
514
+ fontSize: tier.axisFont,
515
+ opacity: highlighted === null || s.key === highlighted || s.parent === highlighted ? 1 : 0.25,
516
+ pointerEvents: "none",
517
+ children: s.label
347
518
  },
348
- s.key
349
- );
350
- })
351
- ] }),
352
- /* @__PURE__ */ jsx(
353
- AxisLeftNumeric,
354
- {
355
- scale: yScale,
356
- numTicks: leftTicks,
357
- tickFormat: (v) => leftFormat(Number(v))
358
- }
359
- ),
360
- y2Scale !== null && /* @__PURE__ */ jsx(
361
- AxisRightNumeric,
362
- {
363
- scale: y2Scale,
364
- left: xMax,
365
- numTicks: rightTicks,
366
- tickFormat: (v) => rightFormat(Number(v))
367
- }
368
- ),
369
- /* @__PURE__ */ jsx(
370
- AxisBottomDate,
371
- {
372
- top: yMax,
373
- scale: xScale,
374
- tickValues,
375
- tickFormat: (v) => formatX(String(v)),
376
- ...rotate !== 0 && { rotate }
377
- }
378
- ),
379
- /* @__PURE__ */ jsx(
380
- HoverOverlay,
381
- {
382
- width: xMax,
383
- height: yMax,
384
- onMove: cursor.onPointerMove,
385
- onLeave: cursor.onPointerLeave,
386
- onKeyDown: cursor.onKeyDown,
387
- onBlur: cursor.onBlur,
388
- valueMax: Math.max(data.length - 1, 0),
389
- ...point !== null && {
390
- valueNow: data.indexOf(point),
391
- valueText: formatX(getX(point))
392
- },
393
- ...ariaLabel !== void 0 && { ariaLabel }
394
- }
395
- )
396
- ] }) }),
519
+ `end-${s.key}`
520
+ )),
521
+ /* @__PURE__ */ jsx(
522
+ HoverOverlay,
523
+ {
524
+ width: xMax,
525
+ height: yMax,
526
+ onMove: cursor.onPointerMove,
527
+ onDown: cursor.onPointerDown,
528
+ onUp: cursor.onPointerUp,
529
+ onLeave: cursor.onPointerLeave,
530
+ onKeyDown: cursor.onKeyDown,
531
+ onBlur: cursor.onBlur,
532
+ valueMax: Math.max(data.length - 1, 0),
533
+ ...point !== null && {
534
+ valueNow: data.indexOf(point),
535
+ valueText: formatX(getX(point))
536
+ },
537
+ ...ariaLabel !== void 0 && { ariaLabel }
538
+ }
539
+ )
540
+ ] })
541
+ }
542
+ ),
397
543
  showTooltip && /* @__PURE__ */ jsxs(ChartTooltipFloat, { anchor: tooltipAnchor, ariaLive: cursor.isSource, children: [
398
544
  /* @__PURE__ */ jsx(
399
545
  TooltipHeader,
@@ -1,17 +1,3 @@
1
- /**
2
- * Standard wrapper for every visx chart (docs/CONTROLS-SPEC.md §2.2) — card with a `WidgetHeader
3
- * tier="widget"` title row (icon/info/value/delta/count/actions) plus an optional subtitle, over a
4
- * clipped chart body. Do not wrap visx charts in bare divs.
5
- *
6
- * `WidgetHeader` lives in `src/dashboard/` and is itself Mantine-free, so composing it here
7
- * keeps `./charts` resolving with no `@mantine/*` installed (`check-dist-layering.mjs`,
8
- * `basalt/token-layer-boundary`). The `actions` slot cannot mount `CtlSlot` (Mantine-coupled) for
9
- * the same reason — it carries only `data-basalt-tier="widget"`; a basalt control placed there
10
- * sizes itself (`size="ctl"` internally), and a raw Mantine element is not auto-tiered.
11
- *
12
- * The header renders only when at least one of title/info/value/actions/icon/count is set — ending
13
- * the `''`-as-hidden-header sentinel a consumer used to reach for otherwise.
14
- */
15
1
  import type { ReactNode } from 'react';
16
2
  import type { BasaltProps, SlotStylesProps } from '../../common/props.js';
17
3
  import type { DeltaPolarity } from '../../dashboard/delta-badge.js';
@@ -1 +1 @@
1
- {"version":3,"file":"ChartCard.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartCard.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AA0ChD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEtD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GACtC,eAAe,CAAC,aAAa,CAAC,GAAG;IAC/B,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;8FAC0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;kEAC8D;IAC9D,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;sDACkD;IAClD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB;oGACgG;IAChG,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAEH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,KAAK,EACL,OAAO,EACP,KAAK,EACL,iBAAuB,EACvB,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,cAAc,+BAgEhB"}
1
+ {"version":3,"file":"ChartCard.d.ts","sourceRoot":"","sources":["../../../src/charts/primitives/ChartCard.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAKhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAuFhD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEtD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GACtC,eAAe,CAAC,aAAa,CAAC,GAAG;IAC/B,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,gGAAgG;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;8FAC0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;kEAC8D;IAC9D,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;sDACkD;IAClD,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB;oGACgG;IAChG,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,CAAA;AAEH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,KAAK,EACL,KAAK,EACL,WAAW,EACX,aAAa,EACb,KAAK,EACL,OAAO,EACP,KAAK,EACL,iBAAuB,EACvB,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,cAAc,+BA4GhB"}