@stackframe/dashboard-ui-components 2.8.84 → 2.8.86

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 (229) hide show
  1. package/dist/components/analytics-chart/analytics-chart-pie.d.ts +67 -0
  2. package/dist/components/analytics-chart/analytics-chart-pie.d.ts.map +1 -0
  3. package/dist/components/analytics-chart/analytics-chart-pie.js +253 -0
  4. package/dist/components/analytics-chart/analytics-chart-pie.js.map +1 -0
  5. package/dist/components/analytics-chart/analytics-chart.d.ts +554 -0
  6. package/dist/components/analytics-chart/analytics-chart.d.ts.map +1 -0
  7. package/dist/components/analytics-chart/analytics-chart.js +1021 -0
  8. package/dist/components/analytics-chart/analytics-chart.js.map +1 -0
  9. package/dist/components/analytics-chart/default-analytics-chart-tooltip.d.ts +66 -0
  10. package/dist/components/analytics-chart/default-analytics-chart-tooltip.d.ts.map +1 -0
  11. package/dist/components/analytics-chart/default-analytics-chart-tooltip.js +179 -0
  12. package/dist/components/analytics-chart/default-analytics-chart-tooltip.js.map +1 -0
  13. package/dist/components/analytics-chart/format.d.ts +13 -0
  14. package/dist/components/analytics-chart/format.d.ts.map +1 -0
  15. package/dist/components/analytics-chart/format.js +138 -0
  16. package/dist/components/analytics-chart/format.js.map +1 -0
  17. package/dist/components/analytics-chart/index.d.ts +8 -0
  18. package/dist/components/analytics-chart/index.js +184 -0
  19. package/dist/components/analytics-chart/palette.d.ts +15 -0
  20. package/dist/components/analytics-chart/palette.d.ts.map +1 -0
  21. package/dist/components/analytics-chart/palette.js +60 -0
  22. package/dist/components/analytics-chart/palette.js.map +1 -0
  23. package/dist/components/analytics-chart/render-data-series.d.ts +28 -0
  24. package/dist/components/analytics-chart/render-data-series.d.ts.map +1 -0
  25. package/dist/components/analytics-chart/render-data-series.js +109 -0
  26. package/dist/components/analytics-chart/render-data-series.js.map +1 -0
  27. package/dist/components/analytics-chart/state.d.ts +54 -0
  28. package/dist/components/analytics-chart/state.d.ts.map +1 -0
  29. package/dist/components/analytics-chart/state.js +142 -0
  30. package/dist/components/analytics-chart/state.js.map +1 -0
  31. package/dist/components/analytics-chart/strings.d.ts +33 -0
  32. package/dist/components/analytics-chart/strings.d.ts.map +1 -0
  33. package/dist/components/analytics-chart/strings.js +37 -0
  34. package/dist/components/analytics-chart/strings.js.map +1 -0
  35. package/dist/components/analytics-chart/types.d.ts +157 -0
  36. package/dist/components/analytics-chart/types.d.ts.map +1 -0
  37. package/dist/components/analytics-chart/types.js +21 -0
  38. package/dist/components/analytics-chart/types.js.map +1 -0
  39. package/dist/components/badge.d.ts +16 -0
  40. package/dist/components/badge.d.ts.map +1 -1
  41. package/dist/components/badge.js +16 -0
  42. package/dist/components/badge.js.map +1 -1
  43. package/dist/components/button.d.ts +15 -1
  44. package/dist/components/button.d.ts.map +1 -1
  45. package/dist/components/button.js +14 -0
  46. package/dist/components/button.js.map +1 -1
  47. package/dist/components/card.d.ts +28 -0
  48. package/dist/components/card.d.ts.map +1 -1
  49. package/dist/components/card.js +28 -0
  50. package/dist/components/card.js.map +1 -1
  51. package/dist/components/chart-card.d.ts +29 -0
  52. package/dist/components/chart-card.d.ts.map +1 -1
  53. package/dist/components/chart-card.js +29 -0
  54. package/dist/components/chart-card.js.map +1 -1
  55. package/dist/components/chart-legend.d.ts +1 -2
  56. package/dist/components/chart-legend.d.ts.map +1 -1
  57. package/dist/components/chart-legend.js +0 -4
  58. package/dist/components/chart-legend.js.map +1 -1
  59. package/dist/components/data-grid/data-grid-sizing.d.ts +11 -0
  60. package/dist/components/data-grid/data-grid-sizing.d.ts.map +1 -0
  61. package/dist/components/data-grid/data-grid-sizing.js +34 -0
  62. package/dist/components/data-grid/data-grid-sizing.js.map +1 -0
  63. package/dist/components/data-grid/data-grid-toolbar.d.ts +31 -0
  64. package/dist/components/data-grid/data-grid-toolbar.d.ts.map +1 -0
  65. package/dist/components/data-grid/data-grid-toolbar.js +226 -0
  66. package/dist/components/data-grid/data-grid-toolbar.js.map +1 -0
  67. package/dist/components/data-grid/data-grid.d.ts +233 -0
  68. package/dist/components/data-grid/data-grid.d.ts.map +1 -0
  69. package/dist/components/data-grid/data-grid.js +871 -0
  70. package/dist/components/data-grid/data-grid.js.map +1 -0
  71. package/dist/components/data-grid/index.d.ts +7 -0
  72. package/dist/components/data-grid/index.js +176 -0
  73. package/dist/components/data-grid/state.d.ts +91 -0
  74. package/dist/components/data-grid/state.d.ts.map +1 -0
  75. package/dist/components/data-grid/state.js +329 -0
  76. package/dist/components/data-grid/state.js.map +1 -0
  77. package/dist/components/data-grid/strings.d.ts +8 -0
  78. package/dist/components/data-grid/strings.d.ts.map +1 -0
  79. package/dist/components/data-grid/strings.js +42 -0
  80. package/dist/components/data-grid/strings.js.map +1 -0
  81. package/dist/components/data-grid/types.d.ts +242 -0
  82. package/dist/components/data-grid/types.d.ts.map +1 -0
  83. package/dist/components/data-grid/types.js +0 -0
  84. package/dist/components/data-grid/use-data-source.d.ts +79 -0
  85. package/dist/components/data-grid/use-data-source.d.ts.map +1 -0
  86. package/dist/components/data-grid/use-data-source.js +236 -0
  87. package/dist/components/data-grid/use-data-source.js.map +1 -0
  88. package/dist/components/empty-state.d.ts +16 -0
  89. package/dist/components/empty-state.d.ts.map +1 -1
  90. package/dist/components/empty-state.js +16 -0
  91. package/dist/components/empty-state.js.map +1 -1
  92. package/dist/components/metric-card.d.ts +24 -0
  93. package/dist/components/metric-card.d.ts.map +1 -1
  94. package/dist/components/metric-card.js +24 -0
  95. package/dist/components/metric-card.js.map +1 -1
  96. package/dist/components/progress-bar.d.ts +10 -0
  97. package/dist/components/progress-bar.d.ts.map +1 -1
  98. package/dist/components/progress-bar.js +10 -0
  99. package/dist/components/progress-bar.js.map +1 -1
  100. package/dist/components/separator.d.ts +9 -0
  101. package/dist/components/separator.d.ts.map +1 -1
  102. package/dist/components/separator.js +9 -0
  103. package/dist/components/separator.js.map +1 -1
  104. package/dist/components/skeleton.d.ts +12 -0
  105. package/dist/components/skeleton.d.ts.map +1 -1
  106. package/dist/components/skeleton.js +12 -0
  107. package/dist/components/skeleton.js.map +1 -1
  108. package/dist/components/table.d.ts +25 -0
  109. package/dist/components/table.d.ts.map +1 -1
  110. package/dist/components/table.js +25 -0
  111. package/dist/components/table.js.map +1 -1
  112. package/dist/dashboard-ui-components.global.js +8562 -2857
  113. package/dist/dashboard-ui-components.global.js.map +4 -4
  114. package/dist/esm/components/analytics-chart/analytics-chart-pie.d.ts +67 -0
  115. package/dist/esm/components/analytics-chart/analytics-chart-pie.d.ts.map +1 -0
  116. package/dist/esm/components/analytics-chart/analytics-chart-pie.js +251 -0
  117. package/dist/esm/components/analytics-chart/analytics-chart-pie.js.map +1 -0
  118. package/dist/esm/components/analytics-chart/analytics-chart.d.ts +554 -0
  119. package/dist/esm/components/analytics-chart/analytics-chart.d.ts.map +1 -0
  120. package/dist/esm/components/analytics-chart/analytics-chart.js +1019 -0
  121. package/dist/esm/components/analytics-chart/analytics-chart.js.map +1 -0
  122. package/dist/esm/components/analytics-chart/default-analytics-chart-tooltip.d.ts +66 -0
  123. package/dist/esm/components/analytics-chart/default-analytics-chart-tooltip.d.ts.map +1 -0
  124. package/dist/esm/components/analytics-chart/default-analytics-chart-tooltip.js +176 -0
  125. package/dist/esm/components/analytics-chart/default-analytics-chart-tooltip.js.map +1 -0
  126. package/dist/esm/components/analytics-chart/format.d.ts +13 -0
  127. package/dist/esm/components/analytics-chart/format.d.ts.map +1 -0
  128. package/dist/esm/components/analytics-chart/format.js +133 -0
  129. package/dist/esm/components/analytics-chart/format.js.map +1 -0
  130. package/dist/esm/components/analytics-chart/index.d.ts +8 -0
  131. package/dist/esm/components/analytics-chart/index.js +9 -0
  132. package/dist/esm/components/analytics-chart/palette.d.ts +15 -0
  133. package/dist/esm/components/analytics-chart/palette.d.ts.map +1 -0
  134. package/dist/esm/components/analytics-chart/palette.js +55 -0
  135. package/dist/esm/components/analytics-chart/palette.js.map +1 -0
  136. package/dist/esm/components/analytics-chart/render-data-series.d.ts +28 -0
  137. package/dist/esm/components/analytics-chart/render-data-series.d.ts.map +1 -0
  138. package/dist/esm/components/analytics-chart/render-data-series.js +107 -0
  139. package/dist/esm/components/analytics-chart/render-data-series.js.map +1 -0
  140. package/dist/esm/components/analytics-chart/state.d.ts +54 -0
  141. package/dist/esm/components/analytics-chart/state.d.ts.map +1 -0
  142. package/dist/esm/components/analytics-chart/state.js +126 -0
  143. package/dist/esm/components/analytics-chart/state.js.map +1 -0
  144. package/dist/esm/components/analytics-chart/strings.d.ts +33 -0
  145. package/dist/esm/components/analytics-chart/strings.d.ts.map +1 -0
  146. package/dist/esm/components/analytics-chart/strings.js +34 -0
  147. package/dist/esm/components/analytics-chart/strings.js.map +1 -0
  148. package/dist/esm/components/analytics-chart/types.d.ts +157 -0
  149. package/dist/esm/components/analytics-chart/types.d.ts.map +1 -0
  150. package/dist/esm/components/analytics-chart/types.js +18 -0
  151. package/dist/esm/components/analytics-chart/types.js.map +1 -0
  152. package/dist/esm/components/badge.d.ts +16 -0
  153. package/dist/esm/components/badge.d.ts.map +1 -1
  154. package/dist/esm/components/badge.js +16 -0
  155. package/dist/esm/components/badge.js.map +1 -1
  156. package/dist/esm/components/button.d.ts +14 -0
  157. package/dist/esm/components/button.d.ts.map +1 -1
  158. package/dist/esm/components/button.js +14 -0
  159. package/dist/esm/components/button.js.map +1 -1
  160. package/dist/esm/components/card.d.ts +28 -0
  161. package/dist/esm/components/card.d.ts.map +1 -1
  162. package/dist/esm/components/card.js +28 -0
  163. package/dist/esm/components/card.js.map +1 -1
  164. package/dist/esm/components/chart-card.d.ts +29 -0
  165. package/dist/esm/components/chart-card.d.ts.map +1 -1
  166. package/dist/esm/components/chart-card.js +29 -0
  167. package/dist/esm/components/chart-card.js.map +1 -1
  168. package/dist/esm/components/chart-legend.d.ts +1 -2
  169. package/dist/esm/components/chart-legend.d.ts.map +1 -1
  170. package/dist/esm/components/chart-legend.js +1 -3
  171. package/dist/esm/components/chart-legend.js.map +1 -1
  172. package/dist/esm/components/data-grid/data-grid-sizing.d.ts +11 -0
  173. package/dist/esm/components/data-grid/data-grid-sizing.d.ts.map +1 -0
  174. package/dist/esm/components/data-grid/data-grid-sizing.js +29 -0
  175. package/dist/esm/components/data-grid/data-grid-sizing.js.map +1 -0
  176. package/dist/esm/components/data-grid/data-grid-toolbar.d.ts +31 -0
  177. package/dist/esm/components/data-grid/data-grid-toolbar.d.ts.map +1 -0
  178. package/dist/esm/components/data-grid/data-grid-toolbar.js +223 -0
  179. package/dist/esm/components/data-grid/data-grid-toolbar.js.map +1 -0
  180. package/dist/esm/components/data-grid/data-grid.d.ts +233 -0
  181. package/dist/esm/components/data-grid/data-grid.d.ts.map +1 -0
  182. package/dist/esm/components/data-grid/data-grid.js +868 -0
  183. package/dist/esm/components/data-grid/data-grid.js.map +1 -0
  184. package/dist/esm/components/data-grid/index.d.ts +7 -0
  185. package/dist/esm/components/data-grid/index.js +7 -0
  186. package/dist/esm/components/data-grid/state.d.ts +91 -0
  187. package/dist/esm/components/data-grid/state.d.ts.map +1 -0
  188. package/dist/esm/components/data-grid/state.js +305 -0
  189. package/dist/esm/components/data-grid/state.js.map +1 -0
  190. package/dist/esm/components/data-grid/strings.d.ts +8 -0
  191. package/dist/esm/components/data-grid/strings.d.ts.map +1 -0
  192. package/dist/esm/components/data-grid/strings.js +39 -0
  193. package/dist/esm/components/data-grid/strings.js.map +1 -0
  194. package/dist/esm/components/data-grid/types.d.ts +242 -0
  195. package/dist/esm/components/data-grid/types.d.ts.map +1 -0
  196. package/dist/esm/components/data-grid/types.js +1 -0
  197. package/dist/esm/components/data-grid/use-data-source.d.ts +79 -0
  198. package/dist/esm/components/data-grid/use-data-source.d.ts.map +1 -0
  199. package/dist/esm/components/data-grid/use-data-source.js +234 -0
  200. package/dist/esm/components/data-grid/use-data-source.js.map +1 -0
  201. package/dist/esm/components/empty-state.d.ts +16 -0
  202. package/dist/esm/components/empty-state.d.ts.map +1 -1
  203. package/dist/esm/components/empty-state.js +16 -0
  204. package/dist/esm/components/empty-state.js.map +1 -1
  205. package/dist/esm/components/metric-card.d.ts +24 -0
  206. package/dist/esm/components/metric-card.d.ts.map +1 -1
  207. package/dist/esm/components/metric-card.js +24 -0
  208. package/dist/esm/components/metric-card.js.map +1 -1
  209. package/dist/esm/components/progress-bar.d.ts +10 -0
  210. package/dist/esm/components/progress-bar.d.ts.map +1 -1
  211. package/dist/esm/components/progress-bar.js +10 -0
  212. package/dist/esm/components/progress-bar.js.map +1 -1
  213. package/dist/esm/components/separator.d.ts +9 -0
  214. package/dist/esm/components/separator.d.ts.map +1 -1
  215. package/dist/esm/components/separator.js +9 -0
  216. package/dist/esm/components/separator.js.map +1 -1
  217. package/dist/esm/components/skeleton.d.ts +12 -0
  218. package/dist/esm/components/skeleton.d.ts.map +1 -1
  219. package/dist/esm/components/skeleton.js +12 -0
  220. package/dist/esm/components/skeleton.js.map +1 -1
  221. package/dist/esm/components/table.d.ts +25 -0
  222. package/dist/esm/components/table.d.ts.map +1 -1
  223. package/dist/esm/components/table.js +25 -0
  224. package/dist/esm/components/table.js.map +1 -1
  225. package/dist/esm/index.d.ts +4 -2
  226. package/dist/esm/index.js +6 -2
  227. package/dist/index.d.ts +15 -2
  228. package/dist/index.js +16 -7
  229. package/package.json +4 -3
@@ -0,0 +1,8 @@
1
+ import { ANALYTICS_CHART_DEFAULT_STRINGS, AnalyticsChartStrings, resolveAnalyticsChartStrings } from "./strings";
2
+ import { AnalyticsChartAnnotationsLayer, AnalyticsChartAreaLayer, AnalyticsChartBarLayer, AnalyticsChartDataLayer, AnalyticsChartDelta, AnalyticsChartLayer, AnalyticsChartLayerType, AnalyticsChartLayers, AnalyticsChartLineLayer, AnalyticsChartPalette, AnalyticsChartPieProps, AnalyticsChartPieState, AnalyticsChartSegmentRamp, AnalyticsChartSeries, AnalyticsChartState, AnalyticsChartStrokeStyle, AnalyticsChartTimeseriesState, AnalyticsChartView, Annotation, FormatKind, FormatKindCurrency, FormatKindDatetime, FormatKindDuration, FormatKindNumeric, FormatKindPercent, FormatKindShort, FormatKindType, Point, pointValue } from "./types";
3
+ import { AnalyticsChartTooltipContext, AnalyticsChartTooltipLayerView, AnalyticsChartTooltipSegmentRow, DefaultAnalyticsChartTooltip, DefaultAnalyticsChartTooltipProps, TrendPill } from "./default-analytics-chart-tooltip";
4
+ import { AnalyticsChart, AnalyticsChartProps, Margin } from "./analytics-chart";
5
+ import { DEFAULT_FORMAT_KIND, FORMAT_KIND_TYPES, formatDelta, formatValue } from "./format";
6
+ import { ANALYTICS_CHART_DEFAULT_PALETTE, buildRampColors, buildSegmentThemeMap, resolveAnalyticsChartPalette } from "./palette";
7
+ import { ANALYTICS_CHART_DEFAULT_LAYERS, ANALYTICS_CHART_DEFAULT_STATE, EMPTY_MATRIX, EMPTY_SERIES, ResolvedDataLayerStyle, STROKE_DASHARRAY, computeLocalInProgressIdx, findAnnotationsLayer, findCompareLayer, findLayerById, findPrimaryLayer, isAnalyticsChartDataLayer, isTimeseriesState, patchLayerById, resolveDataLayerStyle, setLayerById } from "./state";
8
+ export { ANALYTICS_CHART_DEFAULT_LAYERS, ANALYTICS_CHART_DEFAULT_PALETTE, ANALYTICS_CHART_DEFAULT_STATE, ANALYTICS_CHART_DEFAULT_STRINGS, AnalyticsChart, type AnalyticsChartAnnotationsLayer, type AnalyticsChartAreaLayer, type AnalyticsChartBarLayer, type AnalyticsChartDataLayer, type AnalyticsChartDelta, type AnalyticsChartLayer, type AnalyticsChartLayerType, type AnalyticsChartLayers, type AnalyticsChartLineLayer, type AnalyticsChartPalette, type AnalyticsChartPieProps, type AnalyticsChartPieState, type AnalyticsChartProps, type AnalyticsChartSegmentRamp, type AnalyticsChartSeries, type AnalyticsChartState, type AnalyticsChartStrings, type AnalyticsChartStrokeStyle, type AnalyticsChartTimeseriesState, type AnalyticsChartTooltipContext, type AnalyticsChartTooltipLayerView, type AnalyticsChartTooltipSegmentRow, type AnalyticsChartView, type Annotation, DEFAULT_FORMAT_KIND, DefaultAnalyticsChartTooltip, type DefaultAnalyticsChartTooltipProps, EMPTY_MATRIX, EMPTY_SERIES, FORMAT_KIND_TYPES, type FormatKind, type FormatKindCurrency, type FormatKindDatetime, type FormatKindDuration, type FormatKindNumeric, type FormatKindPercent, type FormatKindShort, type FormatKindType, type Margin, type Point, type ResolvedDataLayerStyle, STROKE_DASHARRAY, TrendPill, buildRampColors, buildSegmentThemeMap, computeLocalInProgressIdx, findAnnotationsLayer, findCompareLayer, findLayerById, findPrimaryLayer, formatDelta, formatValue, isAnalyticsChartDataLayer, isTimeseriesState, patchLayerById, pointValue, resolveAnalyticsChartPalette, resolveAnalyticsChartStrings, resolveDataLayerStyle, setLayerById };
@@ -0,0 +1,9 @@
1
+ import { DefaultAnalyticsChartTooltip, TrendPill } from "./default-analytics-chart-tooltip.js";
2
+ import { DEFAULT_FORMAT_KIND, FORMAT_KIND_TYPES, formatDelta, formatValue } from "./format.js";
3
+ import { pointValue } from "./types.js";
4
+ import { ANALYTICS_CHART_DEFAULT_PALETTE, buildRampColors, buildSegmentThemeMap, resolveAnalyticsChartPalette } from "./palette.js";
5
+ import { ANALYTICS_CHART_DEFAULT_LAYERS, ANALYTICS_CHART_DEFAULT_STATE, EMPTY_MATRIX, EMPTY_SERIES, STROKE_DASHARRAY, computeLocalInProgressIdx, findAnnotationsLayer, findCompareLayer, findLayerById, findPrimaryLayer, isAnalyticsChartDataLayer, isTimeseriesState, patchLayerById, resolveDataLayerStyle, setLayerById } from "./state.js";
6
+ import { ANALYTICS_CHART_DEFAULT_STRINGS, resolveAnalyticsChartStrings } from "./strings.js";
7
+ import { AnalyticsChart } from "./analytics-chart.js";
8
+
9
+ export { ANALYTICS_CHART_DEFAULT_LAYERS, ANALYTICS_CHART_DEFAULT_PALETTE, ANALYTICS_CHART_DEFAULT_STATE, ANALYTICS_CHART_DEFAULT_STRINGS, AnalyticsChart, DEFAULT_FORMAT_KIND, DefaultAnalyticsChartTooltip, EMPTY_MATRIX, EMPTY_SERIES, FORMAT_KIND_TYPES, STROKE_DASHARRAY, TrendPill, buildRampColors, buildSegmentThemeMap, computeLocalInProgressIdx, findAnnotationsLayer, findCompareLayer, findLayerById, findPrimaryLayer, formatDelta, formatValue, isAnalyticsChartDataLayer, isTimeseriesState, patchLayerById, pointValue, resolveAnalyticsChartPalette, resolveAnalyticsChartStrings, resolveDataLayerStyle, setLayerById };
@@ -0,0 +1,15 @@
1
+ import { AnalyticsChartPalette, AnalyticsChartSegmentRamp, AnalyticsChartSeries } from "./types";
2
+
3
+ //#region src/components/analytics-chart/palette.d.ts
4
+ declare const ANALYTICS_CHART_DEFAULT_PALETTE: AnalyticsChartPalette;
5
+ declare function resolveAnalyticsChartPalette(override: Partial<AnalyticsChartPalette> | undefined): AnalyticsChartPalette;
6
+ /** Expand a ramp into N colors for a given theme. */
7
+ declare function buildRampColors(ramp: AnalyticsChartSegmentRamp, count: number, theme: "light" | "dark"): string[];
8
+ /** Per-segment light/dark colors for `ChartConfig.theme` (SVG only; siblings use inline vars). */
9
+ declare function buildSegmentThemeMap(series: readonly AnalyticsChartSeries[], ramp: AnalyticsChartSegmentRamp): Record<string, {
10
+ light: string;
11
+ dark: string;
12
+ }>;
13
+ //#endregion
14
+ export { ANALYTICS_CHART_DEFAULT_PALETTE, buildRampColors, buildSegmentThemeMap, resolveAnalyticsChartPalette };
15
+ //# sourceMappingURL=palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palette.d.ts","names":[],"sources":["../../../../src/components/analytics-chart/palette.ts"],"mappings":";;;cAMa,+BAAA,EAAiC,qBAAA;AAAA,iBAiB9B,4BAAA,CACd,QAAA,EAAU,OAAA,CAAQ,qBAAA,gBACjB,qBAAA;AAnBH;AAAA,iBA4BgB,eAAA,CACd,IAAA,EAAM,yBAAA,EACN,KAAA,UACA,KAAA;;iBAmBc,oBAAA,CACd,MAAA,WAAiB,oBAAA,IACjB,IAAA,EAAM,yBAAA,GACL,MAAA;EAAiB,KAAA;EAAe,IAAA;AAAA"}
@@ -0,0 +1,55 @@
1
+ //#region src/components/analytics-chart/palette.ts
2
+ const ANALYTICS_CHART_DEFAULT_PALETTE = {
3
+ primary: {
4
+ kind: "procedural",
5
+ hue: 220,
6
+ sat: 78,
7
+ shadeRangeLight: [28, 62],
8
+ shadeRangeDark: [52, 82]
9
+ },
10
+ compare: {
11
+ kind: "procedural",
12
+ hue: 38,
13
+ sat: 92,
14
+ shadeRangeLight: [28, 62],
15
+ shadeRangeDark: [52, 82]
16
+ }
17
+ };
18
+ function resolveAnalyticsChartPalette(override) {
19
+ if (!override) return ANALYTICS_CHART_DEFAULT_PALETTE;
20
+ return {
21
+ primary: override.primary ?? ANALYTICS_CHART_DEFAULT_PALETTE.primary,
22
+ compare: override.compare ?? ANALYTICS_CHART_DEFAULT_PALETTE.compare
23
+ };
24
+ }
25
+ /** Expand a ramp into N colors for a given theme. */
26
+ function buildRampColors(ramp, count, theme) {
27
+ if (ramp.kind === "explicit") {
28
+ const list = theme === "light" ? ramp.light : ramp.dark;
29
+ if (list.length === 0) return Array.from({ length: count }, () => "#888");
30
+ return Array.from({ length: count }, (_, i) => list[i < list.length ? i : list.length - 1]);
31
+ }
32
+ const range = theme === "light" ? ramp.shadeRangeLight : ramp.shadeRangeDark;
33
+ return Array.from({ length: count }, (_, i) => {
34
+ const t = count <= 1 ? .5 : i / (count - 1);
35
+ const l = range[0] + t * (range[1] - range[0]);
36
+ return `hsl(${ramp.hue} ${ramp.sat}% ${l.toFixed(1)}%)`;
37
+ });
38
+ }
39
+ /** Per-segment light/dark colors for `ChartConfig.theme` (SVG only; siblings use inline vars). */
40
+ function buildSegmentThemeMap(series, ramp) {
41
+ const light = buildRampColors(ramp, series.length, "light");
42
+ const dark = buildRampColors(ramp, series.length, "dark");
43
+ const out = {};
44
+ series.forEach((s, i) => {
45
+ out[s.key] = {
46
+ light: light[i],
47
+ dark: dark[i]
48
+ };
49
+ });
50
+ return out;
51
+ }
52
+
53
+ //#endregion
54
+ export { ANALYTICS_CHART_DEFAULT_PALETTE, buildRampColors, buildSegmentThemeMap, resolveAnalyticsChartPalette };
55
+ //# sourceMappingURL=palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palette.js","names":[],"sources":["../../../../src/components/analytics-chart/palette.ts"],"sourcesContent":["import type {\n AnalyticsChartPalette,\n AnalyticsChartSegmentRamp,\n AnalyticsChartSeries,\n} from \"./types\";\n\nexport const ANALYTICS_CHART_DEFAULT_PALETTE: AnalyticsChartPalette = {\n primary: {\n kind: \"procedural\",\n hue: 220,\n sat: 78,\n shadeRangeLight: [28, 62],\n shadeRangeDark: [52, 82],\n },\n compare: {\n kind: \"procedural\",\n hue: 38,\n sat: 92,\n shadeRangeLight: [28, 62],\n shadeRangeDark: [52, 82],\n },\n};\n\nexport function resolveAnalyticsChartPalette(\n override: Partial<AnalyticsChartPalette> | undefined,\n): AnalyticsChartPalette {\n if (!override) return ANALYTICS_CHART_DEFAULT_PALETTE;\n return {\n primary: override.primary ?? ANALYTICS_CHART_DEFAULT_PALETTE.primary,\n compare: override.compare ?? ANALYTICS_CHART_DEFAULT_PALETTE.compare,\n };\n}\n\n/** Expand a ramp into N colors for a given theme. */\nexport function buildRampColors(\n ramp: AnalyticsChartSegmentRamp,\n count: number,\n theme: \"light\" | \"dark\",\n): string[] {\n if (ramp.kind === \"explicit\") {\n const list = theme === \"light\" ? ramp.light : ramp.dark;\n if (list.length === 0) return Array.from({ length: count }, () => \"#888\");\n return Array.from(\n { length: count },\n (_, i) => list[i < list.length ? i : list.length - 1]!,\n );\n }\n const range = theme === \"light\" ? ramp.shadeRangeLight : ramp.shadeRangeDark;\n return Array.from({ length: count }, (_, i) => {\n const t = count <= 1 ? 0.5 : i / (count - 1);\n const l = range[0] + t * (range[1] - range[0]);\n return `hsl(${ramp.hue} ${ramp.sat}% ${l.toFixed(1)}%)`;\n });\n}\n\n/** Per-segment light/dark colors for `ChartConfig.theme` (SVG only; siblings use inline vars). */\nexport function buildSegmentThemeMap(\n series: readonly AnalyticsChartSeries[],\n ramp: AnalyticsChartSegmentRamp,\n): Record<string, { light: string, dark: string }> {\n const light = buildRampColors(ramp, series.length, \"light\");\n const dark = buildRampColors(ramp, series.length, \"dark\");\n const out: Record<string, { light: string, dark: string }> = {};\n series.forEach((s, i) => {\n out[s.key] = { light: light[i]!, dark: dark[i]! };\n });\n return out;\n}\n"],"mappings":";AAMA,MAAa,kCAAyD;CACpE,SAAS;EACP,MAAM;EACN,KAAK;EACL,KAAK;EACL,iBAAiB,CAAC,IAAI,GAAG;EACzB,gBAAgB,CAAC,IAAI,GAAG;EACzB;CACD,SAAS;EACP,MAAM;EACN,KAAK;EACL,KAAK;EACL,iBAAiB,CAAC,IAAI,GAAG;EACzB,gBAAgB,CAAC,IAAI,GAAG;EACzB;CACF;AAED,SAAgB,6BACd,UACuB;AACvB,KAAI,CAAC,SAAU,QAAO;AACtB,QAAO;EACL,SAAS,SAAS,WAAW,gCAAgC;EAC7D,SAAS,SAAS,WAAW,gCAAgC;EAC9D;;;AAIH,SAAgB,gBACd,MACA,OACA,OACU;AACV,KAAI,KAAK,SAAS,YAAY;EAC5B,MAAM,OAAO,UAAU,UAAU,KAAK,QAAQ,KAAK;AACnD,MAAI,KAAK,WAAW,EAAG,QAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,OAAO;AACzE,SAAO,MAAM,KACX,EAAE,QAAQ,OAAO,GAChB,GAAG,MAAM,KAAK,IAAI,KAAK,SAAS,IAAI,KAAK,SAAS,GACpD;;CAEH,MAAM,QAAQ,UAAU,UAAU,KAAK,kBAAkB,KAAK;AAC9D,QAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,GAAG,GAAG,MAAM;EAC7C,MAAM,IAAI,SAAS,IAAI,KAAM,KAAK,QAAQ;EAC1C,MAAM,IAAI,MAAM,KAAK,KAAK,MAAM,KAAK,MAAM;AAC3C,SAAO,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;GACpD;;;AAIJ,SAAgB,qBACd,QACA,MACiD;CACjD,MAAM,QAAQ,gBAAgB,MAAM,OAAO,QAAQ,QAAQ;CAC3D,MAAM,OAAO,gBAAgB,MAAM,OAAO,QAAQ,OAAO;CACzD,MAAM,MAAuD,EAAE;AAC/D,QAAO,SAAS,GAAG,MAAM;AACvB,MAAI,EAAE,OAAO;GAAE,OAAO,MAAM;GAAK,MAAM,KAAK;GAAK;GACjD;AACF,QAAO"}
@@ -0,0 +1,28 @@
1
+ import { ReactNode } from "react";
2
+ import { AnalyticsChartDataLayer, AnalyticsChartSeries } from "./types";
3
+
4
+ //#region src/components/analytics-chart/render-data-series.d.ts
5
+ /** Area layers use fill-only `<Area>` plus `<Line>` for the top edge (not Recharts' closed-path stroke). */
6
+ type RenderDataSeriesArgs = {
7
+ layer: AnalyticsChartDataLayer;
8
+ segmented: boolean;
9
+ segmentSeries: readonly AnalyticsChartSeries[];
10
+ segKey: (segKey: string) => string;
11
+ stackId: string;
12
+ strokeDasharray: string | undefined;
13
+ segmentedStrokeDasharray: string | undefined;
14
+ fillOpacity: number;
15
+ segmentedFillOpacity: number;
16
+ baseOpacity?: number;
17
+ strokeWidth: number;
18
+ segmentedStrokeWidth: number;
19
+ inProgressKeys: {
20
+ solid: string;
21
+ dashed: string;
22
+ } | null;
23
+ };
24
+ /** Return value must be spread into `<ComposedChart>` as siblings — do not wrap in `<Fragment>`. */
25
+ declare function renderDataSeries(args: RenderDataSeriesArgs): ReactNode[];
26
+ //#endregion
27
+ export { RenderDataSeriesArgs, renderDataSeries };
28
+ //# sourceMappingURL=render-data-series.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-data-series.d.ts","names":[],"sources":["../../../../src/components/analytics-chart/render-data-series.tsx"],"mappings":";;;;;KAQY,oBAAA;EACV,KAAA,EAAO,uBAAA;EACP,SAAA;EACA,aAAA,WAAwB,oBAAA;EACxB,MAAA,GAAS,MAAA;EACT,OAAA;EACA,eAAA;EACA,wBAAA;EACA,WAAA;EACA,oBAAA;EACA,WAAA;EACA,WAAA;EACA,oBAAA;EACA,cAAA;IAAkB,KAAA;IAAe,MAAA;EAAA;AAAA;;iBAInB,gBAAA,CAAiB,IAAA,EAAM,oBAAA,GAAuB,SAAA"}
@@ -0,0 +1,107 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Area, Bar, Line } from "recharts";
3
+
4
+ //#region src/components/analytics-chart/render-data-series.tsx
5
+ /** Return value must be spread into `<ComposedChart>` as siblings — do not wrap in `<Fragment>`. */
6
+ function renderDataSeries(args) {
7
+ const { layer, segmented, segmentSeries, segKey, stackId, strokeDasharray, segmentedStrokeDasharray, fillOpacity, segmentedFillOpacity, baseOpacity = 1, strokeWidth, segmentedStrokeWidth, inProgressKeys } = args;
8
+ const nodes = [];
9
+ if (segmented) {
10
+ segmentSeries.forEach((s, sIdx) => {
11
+ const key = segKey(s.key);
12
+ const nodeKey = `${layer.id}_seg_${s.key}`;
13
+ if (layer.type === "bar") {
14
+ const isTop = sIdx === segmentSeries.length - 1;
15
+ nodes.push(/* @__PURE__ */ jsx(Bar, {
16
+ dataKey: key,
17
+ stackId,
18
+ fill: `var(--color-${key})`,
19
+ radius: isTop ? [
20
+ 2,
21
+ 2,
22
+ 0,
23
+ 0
24
+ ] : 0,
25
+ isAnimationActive: false,
26
+ opacity: baseOpacity
27
+ }, nodeKey));
28
+ } else if (layer.type === "area") nodes.push(/* @__PURE__ */ jsx(Area, {
29
+ dataKey: key,
30
+ stackId,
31
+ type: "linear",
32
+ fill: `var(--color-${key})`,
33
+ fillOpacity: segmentedFillOpacity,
34
+ stroke: `var(--color-${key})`,
35
+ strokeWidth: segmentedStrokeWidth,
36
+ strokeDasharray: segmentedStrokeDasharray,
37
+ isAnimationActive: false,
38
+ opacity: baseOpacity
39
+ }, nodeKey));
40
+ else nodes.push(/* @__PURE__ */ jsx(Line, {
41
+ dataKey: key,
42
+ type: "linear",
43
+ stroke: `var(--color-${key})`,
44
+ strokeWidth,
45
+ strokeDasharray: segmentedStrokeDasharray,
46
+ dot: false,
47
+ isAnimationActive: false,
48
+ opacity: baseOpacity
49
+ }, nodeKey));
50
+ });
51
+ return nodes;
52
+ }
53
+ if (layer.type === "bar") {
54
+ nodes.push(/* @__PURE__ */ jsx(Bar, {
55
+ dataKey: layer.id,
56
+ fill: `var(--color-${layer.id})`,
57
+ radius: 2,
58
+ isAnimationActive: false
59
+ }, `${layer.id}_main`));
60
+ return nodes;
61
+ }
62
+ if (layer.type === "area") nodes.push(/* @__PURE__ */ jsx(Area, {
63
+ dataKey: layer.id,
64
+ type: "linear",
65
+ fill: `var(--color-${layer.id})`,
66
+ fillOpacity,
67
+ stroke: "none",
68
+ isAnimationActive: false
69
+ }, `${layer.id}_area`));
70
+ if (inProgressKeys) {
71
+ nodes.push(/* @__PURE__ */ jsx(Line, {
72
+ dataKey: inProgressKeys.solid,
73
+ type: "linear",
74
+ stroke: `var(--color-${layer.id})`,
75
+ strokeWidth,
76
+ strokeDasharray,
77
+ dot: false,
78
+ isAnimationActive: false,
79
+ connectNulls: true
80
+ }, `${layer.id}_solid`));
81
+ nodes.push(/* @__PURE__ */ jsx(Line, {
82
+ dataKey: inProgressKeys.dashed,
83
+ type: "linear",
84
+ stroke: `var(--color-${layer.id})`,
85
+ strokeWidth,
86
+ strokeDasharray: "4 4",
87
+ dot: false,
88
+ isAnimationActive: false,
89
+ connectNulls: true,
90
+ opacity: .85
91
+ }, `${layer.id}_dashed`));
92
+ } else nodes.push(/* @__PURE__ */ jsx(Line, {
93
+ dataKey: layer.id,
94
+ type: "linear",
95
+ stroke: `var(--color-${layer.id})`,
96
+ strokeWidth,
97
+ strokeDasharray,
98
+ dot: false,
99
+ isAnimationActive: false,
100
+ opacity: baseOpacity
101
+ }, `${layer.id}_line`));
102
+ return nodes;
103
+ }
104
+
105
+ //#endregion
106
+ export { renderDataSeries };
107
+ //# sourceMappingURL=render-data-series.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-data-series.js","names":[],"sources":["../../../../src/components/analytics-chart/render-data-series.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Area, Bar, Line } from \"recharts\";\nimport type {\n AnalyticsChartDataLayer,\n AnalyticsChartSeries,\n} from \"./types\";\n\n/** Area layers use fill-only `<Area>` plus `<Line>` for the top edge (not Recharts' closed-path stroke). */\nexport type RenderDataSeriesArgs = {\n layer: AnalyticsChartDataLayer,\n segmented: boolean,\n segmentSeries: readonly AnalyticsChartSeries[],\n segKey: (segKey: string) => string,\n stackId: string,\n strokeDasharray: string | undefined,\n segmentedStrokeDasharray: string | undefined,\n fillOpacity: number,\n segmentedFillOpacity: number,\n baseOpacity?: number,\n strokeWidth: number,\n segmentedStrokeWidth: number,\n inProgressKeys: { solid: string, dashed: string } | null,\n};\n\n/** Return value must be spread into `<ComposedChart>` as siblings — do not wrap in `<Fragment>`. */\nexport function renderDataSeries(args: RenderDataSeriesArgs): ReactNode[] {\n const {\n layer,\n segmented,\n segmentSeries,\n segKey,\n stackId,\n strokeDasharray,\n segmentedStrokeDasharray,\n fillOpacity,\n segmentedFillOpacity,\n baseOpacity = 1,\n strokeWidth,\n segmentedStrokeWidth,\n inProgressKeys,\n } = args;\n\n const nodes: ReactNode[] = [];\n\n if (segmented) {\n segmentSeries.forEach((s, sIdx) => {\n const key = segKey(s.key);\n const nodeKey = `${layer.id}_seg_${s.key}`;\n if (layer.type === \"bar\") {\n const isTop = sIdx === segmentSeries.length - 1;\n nodes.push(\n <Bar\n key={nodeKey}\n dataKey={key}\n stackId={stackId}\n fill={`var(--color-${key})`}\n radius={isTop ? [2, 2, 0, 0] : 0}\n isAnimationActive={false}\n opacity={baseOpacity}\n />,\n );\n } else if (layer.type === \"area\") {\n nodes.push(\n <Area\n key={nodeKey}\n dataKey={key}\n stackId={stackId}\n type=\"linear\"\n fill={`var(--color-${key})`}\n fillOpacity={segmentedFillOpacity}\n stroke={`var(--color-${key})`}\n strokeWidth={segmentedStrokeWidth}\n strokeDasharray={segmentedStrokeDasharray}\n isAnimationActive={false}\n opacity={baseOpacity}\n />,\n );\n } else {\n nodes.push(\n <Line\n key={nodeKey}\n dataKey={key}\n type=\"linear\"\n stroke={`var(--color-${key})`}\n strokeWidth={strokeWidth}\n strokeDasharray={segmentedStrokeDasharray}\n dot={false}\n isAnimationActive={false}\n opacity={baseOpacity}\n />,\n );\n }\n });\n return nodes;\n }\n\n if (layer.type === \"bar\") {\n nodes.push(\n <Bar\n key={`${layer.id}_main`}\n dataKey={layer.id}\n fill={`var(--color-${layer.id})`}\n radius={2}\n isAnimationActive={false}\n />,\n );\n return nodes;\n }\n\n if (layer.type === \"area\") {\n nodes.push(\n <Area\n key={`${layer.id}_area`}\n dataKey={layer.id}\n type=\"linear\"\n fill={`var(--color-${layer.id})`}\n fillOpacity={fillOpacity}\n stroke=\"none\"\n isAnimationActive={false}\n />,\n );\n }\n\n if (inProgressKeys) {\n nodes.push(\n <Line\n key={`${layer.id}_solid`}\n dataKey={inProgressKeys.solid}\n type=\"linear\"\n stroke={`var(--color-${layer.id})`}\n strokeWidth={strokeWidth}\n strokeDasharray={strokeDasharray}\n dot={false}\n isAnimationActive={false}\n connectNulls\n />,\n );\n nodes.push(\n <Line\n key={`${layer.id}_dashed`}\n dataKey={inProgressKeys.dashed}\n type=\"linear\"\n stroke={`var(--color-${layer.id})`}\n strokeWidth={strokeWidth}\n strokeDasharray=\"4 4\"\n dot={false}\n isAnimationActive={false}\n connectNulls\n opacity={0.85}\n />,\n );\n } else {\n nodes.push(\n <Line\n key={`${layer.id}_line`}\n dataKey={layer.id}\n type=\"linear\"\n stroke={`var(--color-${layer.id})`}\n strokeWidth={strokeWidth}\n strokeDasharray={strokeDasharray}\n dot={false}\n isAnimationActive={false}\n opacity={baseOpacity}\n />,\n );\n }\n\n return nodes;\n}\n"],"mappings":";;;;;AAyBA,SAAgB,iBAAiB,MAAyC;CACxE,MAAM,EACJ,OACA,WACA,eACA,QACA,SACA,iBACA,0BACA,aACA,sBACA,cAAc,GACd,aACA,sBACA,mBACE;CAEJ,MAAM,QAAqB,EAAE;AAE7B,KAAI,WAAW;AACb,gBAAc,SAAS,GAAG,SAAS;GACjC,MAAM,MAAM,OAAO,EAAE,IAAI;GACzB,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,EAAE;AACrC,OAAI,MAAM,SAAS,OAAO;IACxB,MAAM,QAAQ,SAAS,cAAc,SAAS;AAC9C,UAAM,KACJ,oBAAC;KAEC,SAAS;KACA;KACT,MAAM,eAAe,IAAI;KACzB,QAAQ,QAAQ;MAAC;MAAG;MAAG;MAAG;MAAE,GAAG;KAC/B,mBAAmB;KACnB,SAAS;OANJ,QAOL,CACH;cACQ,MAAM,SAAS,OACxB,OAAM,KACJ,oBAAC;IAEC,SAAS;IACA;IACT,MAAK;IACL,MAAM,eAAe,IAAI;IACzB,aAAa;IACb,QAAQ,eAAe,IAAI;IAC3B,aAAa;IACb,iBAAiB;IACjB,mBAAmB;IACnB,SAAS;MAVJ,QAWL,CACH;OAED,OAAM,KACJ,oBAAC;IAEC,SAAS;IACT,MAAK;IACL,QAAQ,eAAe,IAAI;IACd;IACb,iBAAiB;IACjB,KAAK;IACL,mBAAmB;IACnB,SAAS;MARJ,QASL,CACH;IAEH;AACF,SAAO;;AAGT,KAAI,MAAM,SAAS,OAAO;AACxB,QAAM,KACJ,oBAAC;GAEC,SAAS,MAAM;GACf,MAAM,eAAe,MAAM,GAAG;GAC9B,QAAQ;GACR,mBAAmB;KAJd,GAAG,MAAM,GAAG,OAKjB,CACH;AACD,SAAO;;AAGT,KAAI,MAAM,SAAS,OACjB,OAAM,KACJ,oBAAC;EAEC,SAAS,MAAM;EACf,MAAK;EACL,MAAM,eAAe,MAAM,GAAG;EACjB;EACb,QAAO;EACP,mBAAmB;IANd,GAAG,MAAM,GAAG,OAOjB,CACH;AAGH,KAAI,gBAAgB;AAClB,QAAM,KACJ,oBAAC;GAEC,SAAS,eAAe;GACxB,MAAK;GACL,QAAQ,eAAe,MAAM,GAAG;GACnB;GACI;GACjB,KAAK;GACL,mBAAmB;GACnB;KARK,GAAG,MAAM,GAAG,QASjB,CACH;AACD,QAAM,KACJ,oBAAC;GAEC,SAAS,eAAe;GACxB,MAAK;GACL,QAAQ,eAAe,MAAM,GAAG;GACnB;GACb,iBAAgB;GAChB,KAAK;GACL,mBAAmB;GACnB;GACA,SAAS;KATJ,GAAG,MAAM,GAAG,SAUjB,CACH;OAED,OAAM,KACJ,oBAAC;EAEC,SAAS,MAAM;EACf,MAAK;EACL,QAAQ,eAAe,MAAM,GAAG;EACnB;EACI;EACjB,KAAK;EACL,mBAAmB;EACnB,SAAS;IARJ,GAAG,MAAM,GAAG,OASjB,CACH;AAGH,QAAO"}
@@ -0,0 +1,54 @@
1
+ import { AnalyticsChartAnnotationsLayer, AnalyticsChartDataLayer, AnalyticsChartLayer, AnalyticsChartLayerType, AnalyticsChartLayers, AnalyticsChartSeries, AnalyticsChartState, AnalyticsChartStrokeStyle, AnalyticsChartTimeseriesState } from "./types";
2
+
3
+ //#region src/components/analytics-chart/state.d.ts
4
+ declare const STROKE_DASHARRAY: Record<AnalyticsChartStrokeStyle, string | undefined>;
5
+ declare const EMPTY_SERIES: readonly AnalyticsChartSeries[];
6
+ declare const EMPTY_MATRIX: readonly (readonly number[])[];
7
+ /** Generic non-segmented defaults; demos swap in segment data. */
8
+ declare const ANALYTICS_CHART_DEFAULT_LAYERS: AnalyticsChartLayers;
9
+ /**
10
+ * Default state for `AnalyticsChart`. ALWAYS spread from this when
11
+ * initializing state; never build the state object by hand. Ships with
12
+ * three pre-configured layers (primary, compare, annotations) — map over
13
+ * `layers` to override individual ones.
14
+ *
15
+ * ```tsx
16
+ * const [state, setState] = React.useState({
17
+ * ...ANALYTICS_CHART_DEFAULT_STATE,
18
+ * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l =>
19
+ * l.kind === "compare" ? { ...l, visible: false } : l
20
+ * ),
21
+ * });
22
+ * ```
23
+ *
24
+ * See the JSDoc on `AnalyticsChart` for the full contract, examples, and
25
+ * the segment data format.
26
+ */
27
+ declare const ANALYTICS_CHART_DEFAULT_STATE: AnalyticsChartState;
28
+ declare function findPrimaryLayer(layers: AnalyticsChartLayers): AnalyticsChartDataLayer | undefined;
29
+ declare function findCompareLayer(layers: AnalyticsChartLayers): AnalyticsChartDataLayer | undefined;
30
+ declare function findAnnotationsLayer(layers: AnalyticsChartLayers): AnalyticsChartAnnotationsLayer | undefined;
31
+ declare function findLayerById(layers: AnalyticsChartLayers, id: string): AnalyticsChartLayer | undefined;
32
+ declare function isAnalyticsChartDataLayer(l: AnalyticsChartLayer): l is AnalyticsChartDataLayer;
33
+ declare function isTimeseriesState(state: AnalyticsChartState): state is AnalyticsChartTimeseriesState;
34
+ /** Replace a single layer (looked up by id) with a new layer object. */
35
+ declare function setLayerById(layers: AnalyticsChartLayers, id: string, next: AnalyticsChartLayer): AnalyticsChartLayers;
36
+ /** Shallow-patch fields on a layer by id. The patch type is deliberately
37
+ * loose — callers are trusted to supply only fields the layer's
38
+ * `kind`/`type` actually owns. */
39
+ declare function patchLayerById(layers: AnalyticsChartLayers, id: string, patch: Record<string, unknown>): AnalyticsChartLayers;
40
+ type ResolvedDataLayerStyle = {
41
+ color: string;
42
+ type: AnalyticsChartLayerType;
43
+ strokeStyle: AnalyticsChartStrokeStyle;
44
+ fillOpacity: number;
45
+ };
46
+ declare function resolveDataLayerStyle(layer: AnalyticsChartDataLayer): ResolvedDataLayerStyle;
47
+ /** Translate a layer's absolute `inProgressFromIndex` into a local index
48
+ * inside the visible window. Returns `null` when the marker sits beyond
49
+ * the visible window, `0` when it sits before the window (whole window
50
+ * is dashed), or the clamped local index otherwise. */
51
+ declare function computeLocalInProgressIdx(absIdx: number | null | undefined, visibleStart: number, visibleEnd: number): number | null;
52
+ //#endregion
53
+ export { ANALYTICS_CHART_DEFAULT_LAYERS, ANALYTICS_CHART_DEFAULT_STATE, EMPTY_MATRIX, EMPTY_SERIES, ResolvedDataLayerStyle, STROKE_DASHARRAY, computeLocalInProgressIdx, findAnnotationsLayer, findCompareLayer, findLayerById, findPrimaryLayer, isAnalyticsChartDataLayer, isTimeseriesState, patchLayerById, resolveDataLayerStyle, setLayerById };
54
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","names":[],"sources":["../../../../src/components/analytics-chart/state.ts"],"mappings":";;;cAaa,gBAAA,EAAkB,MAAA,CAAO,yBAAA;AAAA,cAMzB,YAAA,WAAuB,oBAAA;AAAA,cACvB,YAAA;;cAGA,8BAAA,EAAgC,oBAAA;;;AAJ7C;;;;;AACA;;;;;AAGA;;;;;AA6CA;cAAa,6BAAA,EAA+B,mBAAA;AAAA,iBAY5B,gBAAA,CAAiB,MAAA,EAAQ,oBAAA,GAAuB,uBAAA;AAAA,iBAIhD,gBAAA,CAAiB,MAAA,EAAQ,oBAAA,GAAuB,uBAAA;AAAA,iBAIhD,oBAAA,CAAqB,MAAA,EAAQ,oBAAA,GAAuB,8BAAA;AAAA,iBAKpD,aAAA,CACd,MAAA,EAAQ,oBAAA,EACR,EAAA,WACC,mBAAA;AAAA,iBAIa,yBAAA,CAA0B,CAAA,EAAG,mBAAA,GAAsB,CAAA,IAAK,uBAAA;AAAA,iBAIxD,iBAAA,CACd,KAAA,EAAO,mBAAA,GACN,KAAA,IAAS,6BAAA;;iBAKI,YAAA,CACd,MAAA,EAAQ,oBAAA,EACR,EAAA,UACA,IAAA,EAAM,mBAAA,GACL,oBAAA;;;;iBAOa,cAAA,CACd,MAAA,EAAQ,oBAAA,EACR,EAAA,UACA,KAAA,EAAO,MAAA,oBACN,oBAAA;AAAA,KAIS,sBAAA;EACV,KAAA;EACA,IAAA,EAAM,uBAAA;EACN,WAAA,EAAa,yBAAA;EACb,WAAA;AAAA;AAAA,iBAGc,qBAAA,CACd,KAAA,EAAO,uBAAA,GACN,sBAAA;;;AAnDH;;iBAkEgB,yBAAA,CACd,MAAA,6BACA,YAAA,UACA,UAAA"}
@@ -0,0 +1,126 @@
1
+ import { DEFAULT_FORMAT_KIND } from "./format.js";
2
+
3
+ //#region src/components/analytics-chart/state.ts
4
+ const STROKE_DASHARRAY = {
5
+ solid: void 0,
6
+ dashed: "5 4",
7
+ dotted: "1 4"
8
+ };
9
+ const EMPTY_SERIES = [];
10
+ const EMPTY_MATRIX = [];
11
+ /** Generic non-segmented defaults; demos swap in segment data. */
12
+ const ANALYTICS_CHART_DEFAULT_LAYERS = [
13
+ {
14
+ id: "primary",
15
+ kind: "primary",
16
+ label: "Current",
17
+ visible: true,
18
+ color: "#2563eb",
19
+ segmented: false,
20
+ type: "area",
21
+ strokeStyle: "solid",
22
+ fillOpacity: .22,
23
+ inProgressFromIndex: null
24
+ },
25
+ {
26
+ id: "compare",
27
+ kind: "compare",
28
+ label: "Previous period",
29
+ visible: true,
30
+ color: "#f59e0b",
31
+ segmented: false,
32
+ type: "line",
33
+ strokeStyle: "dashed",
34
+ inProgressFromIndex: null
35
+ },
36
+ {
37
+ id: "annotations",
38
+ kind: "annotations",
39
+ label: "Annotations",
40
+ visible: true,
41
+ color: "#f59e0b"
42
+ }
43
+ ];
44
+ /**
45
+ * Default state for `AnalyticsChart`. ALWAYS spread from this when
46
+ * initializing state; never build the state object by hand. Ships with
47
+ * three pre-configured layers (primary, compare, annotations) — map over
48
+ * `layers` to override individual ones.
49
+ *
50
+ * ```tsx
51
+ * const [state, setState] = React.useState({
52
+ * ...ANALYTICS_CHART_DEFAULT_STATE,
53
+ * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l =>
54
+ * l.kind === "compare" ? { ...l, visible: false } : l
55
+ * ),
56
+ * });
57
+ * ```
58
+ *
59
+ * See the JSDoc on `AnalyticsChart` for the full contract, examples, and
60
+ * the segment data format.
61
+ */
62
+ const ANALYTICS_CHART_DEFAULT_STATE = {
63
+ view: "timeseries",
64
+ layers: ANALYTICS_CHART_DEFAULT_LAYERS,
65
+ xFormatKind: DEFAULT_FORMAT_KIND.datetime,
66
+ yFormatKind: DEFAULT_FORMAT_KIND.short,
67
+ showGrid: true,
68
+ showXAxis: true,
69
+ showYAxis: true,
70
+ zoomRange: null,
71
+ pinnedIndex: null
72
+ };
73
+ function findPrimaryLayer(layers) {
74
+ return layers.find((x) => x.kind === "primary");
75
+ }
76
+ function findCompareLayer(layers) {
77
+ return layers.find((x) => x.kind === "compare");
78
+ }
79
+ function findAnnotationsLayer(layers) {
80
+ return layers.find((x) => x.kind === "annotations");
81
+ }
82
+ function findLayerById(layers, id) {
83
+ return layers.find((l) => l.id === id);
84
+ }
85
+ function isAnalyticsChartDataLayer(l) {
86
+ return l.kind === "primary" || l.kind === "compare";
87
+ }
88
+ function isTimeseriesState(state) {
89
+ return state.view === "timeseries";
90
+ }
91
+ /** Replace a single layer (looked up by id) with a new layer object. */
92
+ function setLayerById(layers, id, next) {
93
+ return layers.map((l) => l.id === id ? next : l);
94
+ }
95
+ /** Shallow-patch fields on a layer by id. The patch type is deliberately
96
+ * loose — callers are trusted to supply only fields the layer's
97
+ * `kind`/`type` actually owns. */
98
+ function patchLayerById(layers, id, patch) {
99
+ return layers.map((l) => l.id === id ? {
100
+ ...l,
101
+ ...patch
102
+ } : l);
103
+ }
104
+ function resolveDataLayerStyle(layer) {
105
+ return {
106
+ color: layer.color,
107
+ type: layer.type,
108
+ strokeStyle: layer.type === "bar" ? "solid" : layer.strokeStyle,
109
+ fillOpacity: layer.type === "line" ? 0 : layer.fillOpacity
110
+ };
111
+ }
112
+ /** Translate a layer's absolute `inProgressFromIndex` into a local index
113
+ * inside the visible window. Returns `null` when the marker sits beyond
114
+ * the visible window, `0` when it sits before the window (whole window
115
+ * is dashed), or the clamped local index otherwise. */
116
+ function computeLocalInProgressIdx(absIdx, visibleStart, visibleEnd) {
117
+ if (absIdx == null) return null;
118
+ const local = absIdx - visibleStart;
119
+ if (local >= visibleEnd - visibleStart + 1) return null;
120
+ if (local < 0) return 0;
121
+ return local;
122
+ }
123
+
124
+ //#endregion
125
+ export { ANALYTICS_CHART_DEFAULT_LAYERS, ANALYTICS_CHART_DEFAULT_STATE, EMPTY_MATRIX, EMPTY_SERIES, STROKE_DASHARRAY, computeLocalInProgressIdx, findAnnotationsLayer, findCompareLayer, findLayerById, findPrimaryLayer, isAnalyticsChartDataLayer, isTimeseriesState, patchLayerById, resolveDataLayerStyle, setLayerById };
126
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","names":[],"sources":["../../../../src/components/analytics-chart/state.ts"],"sourcesContent":["import { DEFAULT_FORMAT_KIND } from \"./format\";\nimport type {\n AnalyticsChartAnnotationsLayer,\n AnalyticsChartDataLayer,\n AnalyticsChartLayer,\n AnalyticsChartLayers,\n AnalyticsChartLayerType,\n AnalyticsChartSeries,\n AnalyticsChartState,\n AnalyticsChartStrokeStyle,\n AnalyticsChartTimeseriesState,\n} from \"./types\";\n\nexport const STROKE_DASHARRAY: Record<AnalyticsChartStrokeStyle, string | undefined> = {\n solid: undefined,\n dashed: \"5 4\",\n dotted: \"1 4\",\n};\n\nexport const EMPTY_SERIES: readonly AnalyticsChartSeries[] = [];\nexport const EMPTY_MATRIX: readonly (readonly number[])[] = [];\n\n/** Generic non-segmented defaults; demos swap in segment data. */\nexport const ANALYTICS_CHART_DEFAULT_LAYERS: AnalyticsChartLayers = [\n {\n id: \"primary\",\n kind: \"primary\",\n label: \"Current\",\n visible: true,\n color: \"#2563eb\",\n segmented: false,\n type: \"area\",\n strokeStyle: \"solid\",\n fillOpacity: 0.22,\n inProgressFromIndex: null,\n },\n {\n id: \"compare\",\n kind: \"compare\",\n label: \"Previous period\",\n visible: true,\n color: \"#f59e0b\",\n segmented: false,\n type: \"line\",\n strokeStyle: \"dashed\",\n inProgressFromIndex: null,\n },\n { id: \"annotations\", kind: \"annotations\", label: \"Annotations\", visible: true, color: \"#f59e0b\" },\n];\n\n/**\n * Default state for `AnalyticsChart`. ALWAYS spread from this when\n * initializing state; never build the state object by hand. Ships with\n * three pre-configured layers (primary, compare, annotations) — map over\n * `layers` to override individual ones.\n *\n * ```tsx\n * const [state, setState] = React.useState({\n * ...ANALYTICS_CHART_DEFAULT_STATE,\n * layers: ANALYTICS_CHART_DEFAULT_STATE.layers.map(l =>\n * l.kind === \"compare\" ? { ...l, visible: false } : l\n * ),\n * });\n * ```\n *\n * See the JSDoc on `AnalyticsChart` for the full contract, examples, and\n * the segment data format.\n */\nexport const ANALYTICS_CHART_DEFAULT_STATE: AnalyticsChartState = {\n view: \"timeseries\",\n layers: ANALYTICS_CHART_DEFAULT_LAYERS,\n xFormatKind: DEFAULT_FORMAT_KIND.datetime,\n yFormatKind: DEFAULT_FORMAT_KIND.short,\n showGrid: true,\n showXAxis: true,\n showYAxis: true,\n zoomRange: null,\n pinnedIndex: null,\n};\n\nexport function findPrimaryLayer(layers: AnalyticsChartLayers): AnalyticsChartDataLayer | undefined {\n const l = layers.find((x) => x.kind === \"primary\");\n return l as AnalyticsChartDataLayer | undefined;\n}\nexport function findCompareLayer(layers: AnalyticsChartLayers): AnalyticsChartDataLayer | undefined {\n const l = layers.find((x) => x.kind === \"compare\");\n return l as AnalyticsChartDataLayer | undefined;\n}\nexport function findAnnotationsLayer(layers: AnalyticsChartLayers): AnalyticsChartAnnotationsLayer | undefined {\n const l = layers.find((x) => x.kind === \"annotations\");\n return l as AnalyticsChartAnnotationsLayer | undefined;\n}\n\nexport function findLayerById(\n layers: AnalyticsChartLayers,\n id: string,\n): AnalyticsChartLayer | undefined {\n return layers.find((l) => l.id === id);\n}\n\nexport function isAnalyticsChartDataLayer(l: AnalyticsChartLayer): l is AnalyticsChartDataLayer {\n return l.kind === \"primary\" || l.kind === \"compare\";\n}\n\nexport function isTimeseriesState(\n state: AnalyticsChartState,\n): state is AnalyticsChartTimeseriesState {\n return state.view === \"timeseries\";\n}\n\n/** Replace a single layer (looked up by id) with a new layer object. */\nexport function setLayerById(\n layers: AnalyticsChartLayers,\n id: string,\n next: AnalyticsChartLayer,\n): AnalyticsChartLayers {\n return layers.map((l) => (l.id === id ? next : l));\n}\n\n/** Shallow-patch fields on a layer by id. The patch type is deliberately\n * loose — callers are trusted to supply only fields the layer's\n * `kind`/`type` actually owns. */\nexport function patchLayerById(\n layers: AnalyticsChartLayers,\n id: string,\n patch: Record<string, unknown>,\n): AnalyticsChartLayers {\n return layers.map((l) => (l.id === id ? ({ ...l, ...patch } as AnalyticsChartLayer) : l));\n}\n\nexport type ResolvedDataLayerStyle = {\n color: string,\n type: AnalyticsChartLayerType,\n strokeStyle: AnalyticsChartStrokeStyle,\n fillOpacity: number,\n};\n\nexport function resolveDataLayerStyle(\n layer: AnalyticsChartDataLayer,\n): ResolvedDataLayerStyle {\n return {\n color: layer.color,\n type: layer.type,\n // Bars have no stroke pattern — default to solid for the underline.\n strokeStyle: layer.type === \"bar\" ? \"solid\" : layer.strokeStyle,\n // Lines have no fill — default to 0 so gradient overlays sit flat.\n fillOpacity: layer.type === \"line\" ? 0 : layer.fillOpacity,\n };\n}\n\n/** Translate a layer's absolute `inProgressFromIndex` into a local index\n * inside the visible window. Returns `null` when the marker sits beyond\n * the visible window, `0` when it sits before the window (whole window\n * is dashed), or the clamped local index otherwise. */\nexport function computeLocalInProgressIdx(\n absIdx: number | null | undefined,\n visibleStart: number,\n visibleEnd: number,\n): number | null {\n if (absIdx == null) return null;\n const local = absIdx - visibleStart;\n if (local >= visibleEnd - visibleStart + 1) return null; // beyond window\n if (local < 0) return 0; // before window — whole window is dashed\n return local;\n}\n"],"mappings":";;;AAaA,MAAa,mBAA0E;CACrF,OAAO;CACP,QAAQ;CACR,QAAQ;CACT;AAED,MAAa,eAAgD,EAAE;AAC/D,MAAa,eAA+C,EAAE;;AAG9D,MAAa,iCAAuD;CAClE;EACE,IAAI;EACJ,MAAM;EACN,OAAO;EACP,SAAS;EACT,OAAO;EACP,WAAW;EACX,MAAM;EACN,aAAa;EACb,aAAa;EACb,qBAAqB;EACtB;CACD;EACE,IAAI;EACJ,MAAM;EACN,OAAO;EACP,SAAS;EACT,OAAO;EACP,WAAW;EACX,MAAM;EACN,aAAa;EACb,qBAAqB;EACtB;CACD;EAAE,IAAI;EAAe,MAAM;EAAe,OAAO;EAAe,SAAS;EAAM,OAAO;EAAW;CAClG;;;;;;;;;;;;;;;;;;;AAoBD,MAAa,gCAAqD;CAChE,MAAM;CACN,QAAQ;CACR,aAAa,oBAAoB;CACjC,aAAa,oBAAoB;CACjC,UAAU;CACV,WAAW;CACX,WAAW;CACX,WAAW;CACX,aAAa;CACd;AAED,SAAgB,iBAAiB,QAAmE;AAElG,QADU,OAAO,MAAM,MAAM,EAAE,SAAS,UAAU;;AAGpD,SAAgB,iBAAiB,QAAmE;AAElG,QADU,OAAO,MAAM,MAAM,EAAE,SAAS,UAAU;;AAGpD,SAAgB,qBAAqB,QAA0E;AAE7G,QADU,OAAO,MAAM,MAAM,EAAE,SAAS,cAAc;;AAIxD,SAAgB,cACd,QACA,IACiC;AACjC,QAAO,OAAO,MAAM,MAAM,EAAE,OAAO,GAAG;;AAGxC,SAAgB,0BAA0B,GAAsD;AAC9F,QAAO,EAAE,SAAS,aAAa,EAAE,SAAS;;AAG5C,SAAgB,kBACd,OACwC;AACxC,QAAO,MAAM,SAAS;;;AAIxB,SAAgB,aACd,QACA,IACA,MACsB;AACtB,QAAO,OAAO,KAAK,MAAO,EAAE,OAAO,KAAK,OAAO,EAAG;;;;;AAMpD,SAAgB,eACd,QACA,IACA,OACsB;AACtB,QAAO,OAAO,KAAK,MAAO,EAAE,OAAO,KAAM;EAAE,GAAG;EAAG,GAAG;EAAO,GAA2B,EAAG;;AAU3F,SAAgB,sBACd,OACwB;AACxB,QAAO;EACL,OAAO,MAAM;EACb,MAAM,MAAM;EAEZ,aAAa,MAAM,SAAS,QAAQ,UAAU,MAAM;EAEpD,aAAa,MAAM,SAAS,SAAS,IAAI,MAAM;EAChD;;;;;;AAOH,SAAgB,0BACd,QACA,cACA,YACe;AACf,KAAI,UAAU,KAAM,QAAO;CAC3B,MAAM,QAAQ,SAAS;AACvB,KAAI,SAAS,aAAa,eAAe,EAAG,QAAO;AACnD,KAAI,QAAQ,EAAG,QAAO;AACtB,QAAO"}
@@ -0,0 +1,33 @@
1
+ //#region src/components/analytics-chart/strings.d.ts
2
+ type AnalyticsChartStrings = {
3
+ /** Reset-zoom badge in the top-right corner when `state.zoomRange` is set. */resetZoom: string; /** Header label above the timestamps in the live range-brush popup. */
4
+ rangeLabel: string; /** Formatted day-count suffix used by the brush + action-bar. */
5
+ daysShort: (days: number) => string; /** "Zoom in" button inside the committed-range action bar. */
6
+ zoomIn: string; /** "Annotate" button inside the committed-range action bar. */
7
+ annotate: string; /** Placeholder for the annotation label input. */
8
+ annotationPlaceholder: string; /** `aria-label` for the annotation label input. */
9
+ annotationLabelAria: string; /** Save button in the annotation form. */
10
+ save: string; /** Cancel button in the annotation form. */
11
+ cancel: string; /** `aria-label` for the X button that clears the committed range. */
12
+ clearSelection: string; /** Pinned badge shown in the tooltip header when the tooltip is pinned. */
13
+ pinnedBadge: string; /** "Δ vs prev" row label in the tooltip (both segmented and flat modes). */
14
+ deltaVsPrev: string;
15
+ /** Suffix appended to a layer's label in the per-layer totals section
16
+ * (e.g. "Sign-ups" → "Sign-ups total"). */
17
+ layerTotalSuffix: string; /** Hint row shown in the tooltip while it is floating (not pinned). */
18
+ hintClickToPin: string; /** Hint row shown in the tooltip while it is pinned. */
19
+ hintClickAnywhereUnpin: string; /** Center-stat heading shown in the pie when no segment is hovered. */
20
+ pieTotalCenter: string; /** Label on the TrendPill in the pie center. */
21
+ pieVsPrev: string; /** `aria-label` for the PieChart SVG. */
22
+ pieAriaLabel: (ctx: {
23
+ segmentCount: number;
24
+ windowDays: number;
25
+ }) => string; /** Percentage-of-total caption shown under an active pie slice. */
26
+ piePercentOfTotal: (pct: number) => string;
27
+ };
28
+ declare const ANALYTICS_CHART_DEFAULT_STRINGS: AnalyticsChartStrings;
29
+ /** Shallow merge — every field is a primitive or a flat function. */
30
+ declare function resolveAnalyticsChartStrings(override: Partial<AnalyticsChartStrings> | undefined): AnalyticsChartStrings;
31
+ //#endregion
32
+ export { ANALYTICS_CHART_DEFAULT_STRINGS, AnalyticsChartStrings, resolveAnalyticsChartStrings };
33
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","names":[],"sources":["../../../../src/components/analytics-chart/strings.ts"],"mappings":";KAAY,qBAAA;EAAA,8EAEV,SAAA;EAEA,UAAA,UAFA;EAIA,SAAA,GAAY,IAAA,qBAAZ;EAEA,MAAA;EAEA,QAAA,UAEA;EAAA,qBAAA,UAIA;EAFA,mBAAA,UAMA;EAJA,IAAA,UAQA;EANA,MAAA,UAWA;EATA,cAAA,UAaA;EAXA,WAAA,UAeA;EAbA,WAAA;EAa4C;;EAV5C,gBAAA,UAYoB;EAVpB,cAAA,UAU+B;EAR/B,sBAAA,UAgCD;EA9BC,cAAA,UAS4C;EAP5C,SAAA,UA+Bc;EA7Bd,YAAA,GAAe,GAAA;IAAO,YAAA;IAAsB,UAAA;EAAA,cA+B3C;EA7BD,iBAAA,GAAoB,GAAA;AAAA;AAAA,cAGT,+BAAA,EAAiC,qBAAA;;iBAwB9B,4BAAA,CACd,QAAA,EAAU,OAAA,CAAQ,qBAAA,gBACjB,qBAAA"}
@@ -0,0 +1,34 @@
1
+ //#region src/components/analytics-chart/strings.ts
2
+ const ANALYTICS_CHART_DEFAULT_STRINGS = {
3
+ resetZoom: "Reset zoom",
4
+ rangeLabel: "Range",
5
+ daysShort: (days) => `${days}d`,
6
+ zoomIn: "Zoom in",
7
+ annotate: "Annotate",
8
+ annotationPlaceholder: "Label this range…",
9
+ annotationLabelAria: "Annotation label",
10
+ save: "Save",
11
+ cancel: "Cancel",
12
+ clearSelection: "Clear selection",
13
+ pinnedBadge: "Pinned",
14
+ deltaVsPrev: "Δ vs prev",
15
+ layerTotalSuffix: " total",
16
+ hintClickToPin: "Click to pin this point",
17
+ hintClickAnywhereUnpin: "Click anywhere · Esc\xA0to unpin",
18
+ pieTotalCenter: "Total",
19
+ pieVsPrev: "vs prev",
20
+ pieAriaLabel: ({ segmentCount, windowDays }) => `${segmentCount} segment share-of-total over the visible ${windowDays}-day range`,
21
+ piePercentOfTotal: (pct) => `${(pct * 100).toFixed(1)}% of total`
22
+ };
23
+ /** Shallow merge — every field is a primitive or a flat function. */
24
+ function resolveAnalyticsChartStrings(override) {
25
+ if (!override) return ANALYTICS_CHART_DEFAULT_STRINGS;
26
+ return {
27
+ ...ANALYTICS_CHART_DEFAULT_STRINGS,
28
+ ...override
29
+ };
30
+ }
31
+
32
+ //#endregion
33
+ export { ANALYTICS_CHART_DEFAULT_STRINGS, resolveAnalyticsChartStrings };
34
+ //# sourceMappingURL=strings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.js","names":[],"sources":["../../../../src/components/analytics-chart/strings.ts"],"sourcesContent":["export type AnalyticsChartStrings = {\n /** Reset-zoom badge in the top-right corner when `state.zoomRange` is set. */\n resetZoom: string,\n /** Header label above the timestamps in the live range-brush popup. */\n rangeLabel: string,\n /** Formatted day-count suffix used by the brush + action-bar. */\n daysShort: (days: number) => string,\n /** \"Zoom in\" button inside the committed-range action bar. */\n zoomIn: string,\n /** \"Annotate\" button inside the committed-range action bar. */\n annotate: string,\n /** Placeholder for the annotation label input. */\n annotationPlaceholder: string,\n /** `aria-label` for the annotation label input. */\n annotationLabelAria: string,\n /** Save button in the annotation form. */\n save: string,\n /** Cancel button in the annotation form. */\n cancel: string,\n /** `aria-label` for the X button that clears the committed range. */\n clearSelection: string,\n /** Pinned badge shown in the tooltip header when the tooltip is pinned. */\n pinnedBadge: string,\n /** \"Δ vs prev\" row label in the tooltip (both segmented and flat modes). */\n deltaVsPrev: string,\n /** Suffix appended to a layer's label in the per-layer totals section\n * (e.g. \"Sign-ups\" → \"Sign-ups total\"). */\n layerTotalSuffix: string,\n /** Hint row shown in the tooltip while it is floating (not pinned). */\n hintClickToPin: string,\n /** Hint row shown in the tooltip while it is pinned. */\n hintClickAnywhereUnpin: string,\n /** Center-stat heading shown in the pie when no segment is hovered. */\n pieTotalCenter: string,\n /** Label on the TrendPill in the pie center. */\n pieVsPrev: string,\n /** `aria-label` for the PieChart SVG. */\n pieAriaLabel: (ctx: { segmentCount: number, windowDays: number }) => string,\n /** Percentage-of-total caption shown under an active pie slice. */\n piePercentOfTotal: (pct: number) => string,\n};\n\nexport const ANALYTICS_CHART_DEFAULT_STRINGS: AnalyticsChartStrings = {\n resetZoom: \"Reset zoom\",\n rangeLabel: \"Range\",\n daysShort: (days) => `${days}d`,\n zoomIn: \"Zoom in\",\n annotate: \"Annotate\",\n annotationPlaceholder: \"Label this range…\",\n annotationLabelAria: \"Annotation label\",\n save: \"Save\",\n cancel: \"Cancel\",\n clearSelection: \"Clear selection\",\n pinnedBadge: \"Pinned\",\n deltaVsPrev: \"Δ vs prev\",\n layerTotalSuffix: \" total\",\n hintClickToPin: \"Click to pin this point\",\n hintClickAnywhereUnpin: \"Click anywhere · Esc\\u00A0to unpin\",\n pieTotalCenter: \"Total\",\n pieVsPrev: \"vs prev\",\n pieAriaLabel: ({ segmentCount, windowDays }) =>\n `${segmentCount} segment share-of-total over the visible ${windowDays}-day range`,\n piePercentOfTotal: (pct) => `${(pct * 100).toFixed(1)}% of total`,\n};\n\n/** Shallow merge — every field is a primitive or a flat function. */\nexport function resolveAnalyticsChartStrings(\n override: Partial<AnalyticsChartStrings> | undefined,\n): AnalyticsChartStrings {\n if (!override) return ANALYTICS_CHART_DEFAULT_STRINGS;\n return { ...ANALYTICS_CHART_DEFAULT_STRINGS, ...override };\n}\n"],"mappings":";AA0CA,MAAa,kCAAyD;CACpE,WAAW;CACX,YAAY;CACZ,YAAY,SAAS,GAAG,KAAK;CAC7B,QAAQ;CACR,UAAU;CACV,uBAAuB;CACvB,qBAAqB;CACrB,MAAM;CACN,QAAQ;CACR,gBAAgB;CAChB,aAAa;CACb,aAAa;CACb,kBAAkB;CAClB,gBAAgB;CAChB,wBAAwB;CACxB,gBAAgB;CAChB,WAAW;CACX,eAAe,EAAE,cAAc,iBAC7B,GAAG,aAAa,2CAA2C,WAAW;CACxE,oBAAoB,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;CACvD;;AAGD,SAAgB,6BACd,UACuB;AACvB,KAAI,CAAC,SAAU,QAAO;AACtB,QAAO;EAAE,GAAG;EAAiC,GAAG;EAAU"}