minerva-design 1.0.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +21 -19
- package/dist/charts/canvas.d.cts +7 -0
- package/dist/charts/canvas.d.ts +7 -0
- package/dist/charts/core.cjs +1 -0
- package/dist/charts/core.d.cts +7 -0
- package/dist/charts/core.d.ts +7 -0
- package/dist/charts/core.js +6 -0
- package/dist/charts/engine/axis.cjs +2 -0
- package/dist/charts/engine/axis.cjs.map +1 -0
- package/dist/charts/engine/axis.d.cts +13 -0
- package/dist/charts/engine/axis.d.ts +13 -0
- package/dist/charts/engine/axis.js +38 -0
- package/dist/charts/engine/axis.js.map +1 -0
- package/dist/charts/engine/canvas.cjs +2 -0
- package/dist/charts/engine/canvas.cjs.map +1 -0
- package/dist/charts/engine/canvas.d.cts +85 -0
- package/dist/charts/engine/canvas.d.ts +85 -0
- package/dist/charts/engine/canvas.js +165 -0
- package/dist/charts/engine/canvas.js.map +1 -0
- package/dist/charts/engine/chart.cjs +3 -0
- package/dist/charts/engine/chart.cjs.map +1 -0
- package/dist/charts/engine/chart.d.cts +6 -0
- package/dist/charts/engine/chart.d.ts +6 -0
- package/dist/charts/engine/chart.js +566 -0
- package/dist/charts/engine/chart.js.map +1 -0
- package/dist/charts/engine/color.cjs +2 -0
- package/dist/charts/engine/color.cjs.map +1 -0
- package/dist/charts/engine/color.d.cts +33 -0
- package/dist/charts/engine/color.d.ts +33 -0
- package/dist/charts/engine/color.js +167 -0
- package/dist/charts/engine/color.js.map +1 -0
- package/dist/charts/engine/controller.cjs +3 -0
- package/dist/charts/engine/controller.cjs.map +1 -0
- package/dist/charts/engine/controller.d.cts +182 -0
- package/dist/charts/engine/controller.d.ts +182 -0
- package/dist/charts/engine/controller.js +528 -0
- package/dist/charts/engine/controller.js.map +1 -0
- package/dist/charts/engine/data.cjs +2 -0
- package/dist/charts/engine/data.cjs.map +1 -0
- package/dist/charts/engine/data.d.cts +29 -0
- package/dist/charts/engine/data.d.ts +29 -0
- package/dist/charts/engine/data.js +104 -0
- package/dist/charts/engine/data.js.map +1 -0
- package/dist/charts/engine/decimate.cjs +2 -0
- package/dist/charts/engine/decimate.cjs.map +1 -0
- package/dist/charts/engine/decimate.d.cts +13 -0
- package/dist/charts/engine/decimate.d.ts +13 -0
- package/dist/charts/engine/decimate.js +28 -0
- package/dist/charts/engine/decimate.js.map +1 -0
- package/dist/charts/engine/dom.cjs +2 -0
- package/dist/charts/engine/dom.cjs.map +1 -0
- package/dist/charts/engine/dom.d.cts +21 -0
- package/dist/charts/engine/dom.d.ts +21 -0
- package/dist/charts/engine/dom.js +125 -0
- package/dist/charts/engine/dom.js.map +1 -0
- package/dist/charts/engine/format.cjs +2 -0
- package/dist/charts/engine/format.cjs.map +1 -0
- package/dist/charts/engine/format.d.cts +9 -0
- package/dist/charts/engine/format.d.ts +9 -0
- package/dist/charts/engine/format.js +34 -0
- package/dist/charts/engine/format.js.map +1 -0
- package/dist/charts/engine/items.cjs +2 -0
- package/dist/charts/engine/items.cjs.map +1 -0
- package/dist/charts/engine/items.d.cts +8 -0
- package/dist/charts/engine/items.d.ts +8 -0
- package/dist/charts/engine/items.js +91 -0
- package/dist/charts/engine/items.js.map +1 -0
- package/dist/charts/engine/layout.cjs +2 -0
- package/dist/charts/engine/layout.cjs.map +1 -0
- package/dist/charts/engine/layout.d.cts +37 -0
- package/dist/charts/engine/layout.d.ts +37 -0
- package/dist/charts/engine/layout.js +26 -0
- package/dist/charts/engine/layout.js.map +1 -0
- package/dist/charts/engine/model.cjs +2 -0
- package/dist/charts/engine/model.cjs.map +1 -0
- package/dist/charts/engine/model.d.cts +74 -0
- package/dist/charts/engine/model.d.ts +74 -0
- package/dist/charts/engine/model.js +175 -0
- package/dist/charts/engine/model.js.map +1 -0
- package/dist/charts/engine/overlay.cjs +2 -0
- package/dist/charts/engine/overlay.cjs.map +1 -0
- package/dist/charts/engine/overlay.d.cts +78 -0
- package/dist/charts/engine/overlay.d.ts +78 -0
- package/dist/charts/engine/overlay.js +137 -0
- package/dist/charts/engine/overlay.js.map +1 -0
- package/dist/charts/engine/presets.cjs +3 -0
- package/dist/charts/engine/presets.cjs.map +1 -0
- package/dist/charts/engine/presets.d.cts +103 -0
- package/dist/charts/engine/presets.d.ts +103 -0
- package/dist/charts/engine/presets.js +153 -0
- package/dist/charts/engine/presets.js.map +1 -0
- package/dist/charts/engine/renderers/canvas2d.cjs +2 -0
- package/dist/charts/engine/renderers/canvas2d.cjs.map +1 -0
- package/dist/charts/engine/renderers/canvas2d.d.cts +20 -0
- package/dist/charts/engine/renderers/canvas2d.d.ts +20 -0
- package/dist/charts/engine/renderers/canvas2d.js +193 -0
- package/dist/charts/engine/renderers/canvas2d.js.map +1 -0
- package/dist/charts/engine/renderers/detect.cjs +2 -0
- package/dist/charts/engine/renderers/detect.cjs.map +1 -0
- package/dist/charts/engine/renderers/detect.d.cts +12 -0
- package/dist/charts/engine/renderers/detect.d.ts +12 -0
- package/dist/charts/engine/renderers/detect.js +33 -0
- package/dist/charts/engine/renderers/detect.js.map +1 -0
- package/dist/charts/engine/renderers/range.cjs +2 -0
- package/dist/charts/engine/renderers/range.cjs.map +1 -0
- package/dist/charts/engine/renderers/range.d.cts +5 -0
- package/dist/charts/engine/renderers/range.d.ts +5 -0
- package/dist/charts/engine/renderers/range.js +32 -0
- package/dist/charts/engine/renderers/range.js.map +1 -0
- package/dist/charts/engine/renderers/shaders.cjs +266 -0
- package/dist/charts/engine/renderers/shaders.cjs.map +1 -0
- package/dist/charts/engine/renderers/shaders.d.cts +20 -0
- package/dist/charts/engine/renderers/shaders.d.ts +20 -0
- package/dist/charts/engine/renderers/shaders.js +251 -0
- package/dist/charts/engine/renderers/shaders.js.map +1 -0
- package/dist/charts/engine/renderers/types.cjs +2 -0
- package/dist/charts/engine/renderers/types.cjs.map +1 -0
- package/dist/charts/engine/renderers/types.d.cts +83 -0
- package/dist/charts/engine/renderers/types.d.ts +83 -0
- package/dist/charts/engine/renderers/types.js +6 -0
- package/dist/charts/engine/renderers/types.js.map +1 -0
- package/dist/charts/engine/renderers/webgl2.cjs +2 -0
- package/dist/charts/engine/renderers/webgl2.cjs.map +1 -0
- package/dist/charts/engine/renderers/webgl2.d.cts +5 -0
- package/dist/charts/engine/renderers/webgl2.d.ts +5 -0
- package/dist/charts/engine/renderers/webgl2.js +134 -0
- package/dist/charts/engine/renderers/webgl2.js.map +1 -0
- package/dist/charts/engine/renderers/webgpu.cjs +2 -0
- package/dist/charts/engine/renderers/webgpu.cjs.map +1 -0
- package/dist/charts/engine/renderers/webgpu.d.cts +6 -0
- package/dist/charts/engine/renderers/webgpu.d.ts +6 -0
- package/dist/charts/engine/renderers/webgpu.js +220 -0
- package/dist/charts/engine/renderers/webgpu.js.map +1 -0
- package/dist/charts/engine/scale.cjs +2 -0
- package/dist/charts/engine/scale.cjs.map +1 -0
- package/dist/charts/engine/scale.d.cts +13 -0
- package/dist/charts/engine/scale.d.ts +13 -0
- package/dist/charts/engine/scale.js +37 -0
- package/dist/charts/engine/scale.js.map +1 -0
- package/dist/charts/engine/scene.cjs +2 -0
- package/dist/charts/engine/scene.cjs.map +1 -0
- package/dist/charts/engine/scene.d.cts +89 -0
- package/dist/charts/engine/scene.d.ts +89 -0
- package/dist/charts/engine/scene.js +241 -0
- package/dist/charts/engine/scene.js.map +1 -0
- package/dist/charts/engine/spatial.cjs +2 -0
- package/dist/charts/engine/spatial.cjs.map +1 -0
- package/dist/charts/engine/spatial.d.cts +18 -0
- package/dist/charts/engine/spatial.d.ts +18 -0
- package/dist/charts/engine/spatial.js +53 -0
- package/dist/charts/engine/spatial.js.map +1 -0
- package/dist/charts/engine/theme.cjs +2 -0
- package/dist/charts/engine/theme.cjs.map +1 -0
- package/dist/charts/engine/theme.d.cts +45 -0
- package/dist/charts/engine/theme.d.ts +45 -0
- package/dist/charts/engine/theme.js +86 -0
- package/dist/charts/engine/theme.js.map +1 -0
- package/dist/charts/engine/time.cjs +2 -0
- package/dist/charts/engine/time.cjs.map +1 -0
- package/dist/charts/engine/time.d.cts +10 -0
- package/dist/charts/engine/time.d.ts +10 -0
- package/dist/charts/engine/time.js +189 -0
- package/dist/charts/engine/time.js.map +1 -0
- package/dist/charts/engine/types.d.cts +356 -0
- package/dist/charts/engine/types.d.ts +356 -0
- package/dist/charts/engine/viewport.cjs +2 -0
- package/dist/charts/engine/viewport.cjs.map +1 -0
- package/dist/charts/engine/viewport.d.cts +12 -0
- package/dist/charts/engine/viewport.d.ts +12 -0
- package/dist/charts/engine/viewport.js +15 -0
- package/dist/charts/engine/viewport.js.map +1 -0
- package/dist/charts/index.cjs +1 -0
- package/dist/charts/index.d.cts +4 -0
- package/dist/charts/index.d.ts +4 -0
- package/dist/charts/index.js +10 -0
- package/dist/charts/react/Chart.cjs +2 -0
- package/dist/charts/react/Chart.cjs.map +1 -0
- package/dist/charts/react/Chart.d.cts +35 -0
- package/dist/charts/react/Chart.d.ts +35 -0
- package/dist/charts/react/Chart.js +117 -0
- package/dist/charts/react/Chart.js.map +1 -0
- package/dist/charts/react/charts.cjs +2 -0
- package/dist/charts/react/charts.cjs.map +1 -0
- package/dist/charts/react/charts.d.cts +13 -0
- package/dist/charts/react/charts.d.ts +13 -0
- package/dist/charts/react/charts.js +133 -0
- package/dist/charts/react/charts.js.map +1 -0
- package/dist/charts/react/types.d.cts +136 -0
- package/dist/charts/react/types.d.ts +136 -0
- package/dist/native/charts/src/canvas.cjs +1 -0
- package/dist/native/charts/src/canvas.js +6 -0
- package/dist/native/charts/src/engine/axis.cjs +2 -0
- package/dist/native/charts/src/engine/axis.cjs.map +1 -0
- package/dist/native/charts/src/engine/axis.js +38 -0
- package/dist/native/charts/src/engine/axis.js.map +1 -0
- package/dist/native/charts/src/engine/canvas.cjs +1 -0
- package/dist/native/charts/src/engine/canvas.js +1 -0
- package/dist/native/charts/src/engine/color.cjs +2 -0
- package/dist/native/charts/src/engine/color.cjs.map +1 -0
- package/dist/native/charts/src/engine/color.js +130 -0
- package/dist/native/charts/src/engine/color.js.map +1 -0
- package/dist/native/charts/src/engine/controller.cjs +3 -0
- package/dist/native/charts/src/engine/controller.cjs.map +1 -0
- package/dist/native/charts/src/engine/controller.js +528 -0
- package/dist/native/charts/src/engine/controller.js.map +1 -0
- package/dist/native/charts/src/engine/data.cjs +2 -0
- package/dist/native/charts/src/engine/data.cjs.map +1 -0
- package/dist/native/charts/src/engine/data.js +104 -0
- package/dist/native/charts/src/engine/data.js.map +1 -0
- package/dist/native/charts/src/engine/decimate.cjs +2 -0
- package/dist/native/charts/src/engine/decimate.cjs.map +1 -0
- package/dist/native/charts/src/engine/decimate.js +28 -0
- package/dist/native/charts/src/engine/decimate.js.map +1 -0
- package/dist/native/charts/src/engine/format.cjs +2 -0
- package/dist/native/charts/src/engine/format.cjs.map +1 -0
- package/dist/native/charts/src/engine/format.js +34 -0
- package/dist/native/charts/src/engine/format.js.map +1 -0
- package/dist/native/charts/src/engine/layout.cjs +2 -0
- package/dist/native/charts/src/engine/layout.cjs.map +1 -0
- package/dist/native/charts/src/engine/layout.js +26 -0
- package/dist/native/charts/src/engine/layout.js.map +1 -0
- package/dist/native/charts/src/engine/model.cjs +2 -0
- package/dist/native/charts/src/engine/model.cjs.map +1 -0
- package/dist/native/charts/src/engine/model.js +175 -0
- package/dist/native/charts/src/engine/model.js.map +1 -0
- package/dist/native/charts/src/engine/overlay.cjs +2 -0
- package/dist/native/charts/src/engine/overlay.cjs.map +1 -0
- package/dist/native/charts/src/engine/overlay.js +49 -0
- package/dist/native/charts/src/engine/overlay.js.map +1 -0
- package/dist/native/charts/src/engine/presets.cjs +3 -0
- package/dist/native/charts/src/engine/presets.cjs.map +1 -0
- package/dist/native/charts/src/engine/presets.js +147 -0
- package/dist/native/charts/src/engine/presets.js.map +1 -0
- package/dist/native/charts/src/engine/scale.cjs +2 -0
- package/dist/native/charts/src/engine/scale.cjs.map +1 -0
- package/dist/native/charts/src/engine/scale.js +37 -0
- package/dist/native/charts/src/engine/scale.js.map +1 -0
- package/dist/native/charts/src/engine/scene.cjs +2 -0
- package/dist/native/charts/src/engine/scene.cjs.map +1 -0
- package/dist/native/charts/src/engine/scene.js +241 -0
- package/dist/native/charts/src/engine/scene.js.map +1 -0
- package/dist/native/charts/src/engine/spatial.cjs +2 -0
- package/dist/native/charts/src/engine/spatial.cjs.map +1 -0
- package/dist/native/charts/src/engine/spatial.js +53 -0
- package/dist/native/charts/src/engine/spatial.js.map +1 -0
- package/dist/native/charts/src/engine/theme.cjs +2 -0
- package/dist/native/charts/src/engine/theme.cjs.map +1 -0
- package/dist/native/charts/src/engine/theme.js +62 -0
- package/dist/native/charts/src/engine/theme.js.map +1 -0
- package/dist/native/charts/src/engine/time.cjs +2 -0
- package/dist/native/charts/src/engine/time.cjs.map +1 -0
- package/dist/native/charts/src/engine/time.js +189 -0
- package/dist/native/charts/src/engine/time.js.map +1 -0
- package/dist/native/charts/src/engine/viewport.cjs +2 -0
- package/dist/native/charts/src/engine/viewport.cjs.map +1 -0
- package/dist/native/charts/src/engine/viewport.js +12 -0
- package/dist/native/charts/src/engine/viewport.js.map +1 -0
- package/dist/native/components/Chart/ChartBase.cjs +2 -0
- package/dist/native/components/Chart/ChartBase.cjs.map +1 -0
- package/dist/native/components/Chart/ChartBase.d.cts +29 -0
- package/dist/native/components/Chart/ChartBase.d.ts +29 -0
- package/dist/native/components/Chart/ChartBase.js +287 -0
- package/dist/native/components/Chart/ChartBase.js.map +1 -0
- package/dist/native/components/Chart/charts.cjs +2 -0
- package/dist/native/components/Chart/charts.cjs.map +1 -0
- package/dist/native/components/Chart/charts.d.cts +19 -0
- package/dist/native/components/Chart/charts.d.ts +19 -0
- package/dist/native/components/Chart/charts.js +173 -0
- package/dist/native/components/Chart/charts.js.map +1 -0
- package/dist/native/components/Chart/index.cjs +1 -0
- package/dist/native/components/Chart/index.d.cts +2 -0
- package/dist/native/components/Chart/index.d.ts +2 -0
- package/dist/native/components/Chart/index.js +2 -0
- package/dist/native/components/Chart/measure.cjs +2 -0
- package/dist/native/components/Chart/measure.cjs.map +1 -0
- package/dist/native/components/Chart/measure.d.cts +5 -0
- package/dist/native/components/Chart/measure.d.ts +5 -0
- package/dist/native/components/Chart/measure.js +11 -0
- package/dist/native/components/Chart/measure.js.map +1 -0
- package/dist/native/components/Chart/scene.cjs +2 -0
- package/dist/native/components/Chart/scene.cjs.map +1 -0
- package/dist/native/components/Chart/scene.d.cts +41 -0
- package/dist/native/components/Chart/scene.d.ts +41 -0
- package/dist/native/components/Chart/scene.js +419 -0
- package/dist/native/components/Chart/scene.js.map +1 -0
- package/dist/native/components/Chart/theme.cjs +2 -0
- package/dist/native/components/Chart/theme.cjs.map +1 -0
- package/dist/native/components/Chart/theme.d.cts +10 -0
- package/dist/native/components/Chart/theme.d.ts +10 -0
- package/dist/native/components/Chart/theme.js +10 -0
- package/dist/native/components/Chart/theme.js.map +1 -0
- package/dist/native/components/Chart/types.d.cts +129 -0
- package/dist/native/components/Chart/types.d.ts +129 -0
- package/dist/native/index.cjs +1 -1
- package/dist/native/index.d.cts +1 -0
- package/dist/native/index.d.ts +1 -0
- package/dist/native/index.js +6 -4
- package/dist/native/manifest.d.cts +7 -0
- package/dist/native/manifest.d.ts +7 -0
- package/dist/native/source/components/Chart/ChartBase.tsx +545 -0
- package/dist/native/source/components/Chart/charts.tsx +291 -0
- package/dist/native/source/components/Chart/index.ts +8 -0
- package/dist/native/source/components/Chart/measure.ts +50 -0
- package/dist/native/source/components/Chart/scene.tsx +987 -0
- package/dist/native/source/components/Chart/theme.ts +16 -0
- package/dist/native/source/components/Chart/types.ts +194 -0
- package/dist/native/source/index.ts +1 -0
- package/dist/native/source/manifest.ts +14 -0
- package/dist/taro/charts.d.ts +144 -0
- package/dist/taro/index.d.ts +1 -0
- package/dist/taro/index.js +3064 -618
- package/dist/uni/BarChart.vue +75 -0
- package/dist/uni/BarChart.vue.d.ts +111 -0
- package/dist/uni/Chart.vue +68 -0
- package/dist/uni/Chart.vue.d.ts +100 -0
- package/dist/uni/LineChart.vue +75 -0
- package/dist/uni/LineChart.vue.d.ts +111 -0
- package/dist/uni/ProgressIndicator.vue.d.ts +1 -1
- package/dist/uni/QuadrantChart.vue +184 -0
- package/dist/uni/QuadrantChart.vue.d.ts +173 -0
- package/dist/uni/ScatterChart.vue +69 -0
- package/dist/uni/ScatterChart.vue.d.ts +100 -0
- package/dist/uni/chart-canvas.d.ts +68 -0
- package/dist/uni/chart-canvas.js +363 -0
- package/dist/uni/chart-types.d.ts +135 -0
- package/dist/uni/chart-types.js +84 -0
- package/dist/uni/charts-canvas.d.ts +1 -0
- package/dist/uni/charts-canvas.js +8 -0
- package/dist/uni/index.d.ts +6 -0
- package/dist/uni/index.js +6 -0
- package/dist/weapp/bar-chart/index.js +1 -0
- package/dist/weapp/bar-chart/index.json +1 -0
- package/dist/weapp/bar-chart/index.wxml +1 -0
- package/dist/weapp/bar-chart/index.wxss +1 -0
- package/dist/weapp/chart/index.js +1 -0
- package/dist/weapp/chart/index.json +1 -0
- package/dist/weapp/chart/index.wxml +1 -0
- package/dist/weapp/chart/index.wxss +1 -0
- package/dist/weapp/controls.js +4019 -266
- package/dist/weapp/line-chart/index.js +1 -0
- package/dist/weapp/line-chart/index.json +1 -0
- package/dist/weapp/line-chart/index.wxml +1 -0
- package/dist/weapp/line-chart/index.wxss +1 -0
- package/dist/weapp/quadrant-chart/index.js +1 -0
- package/dist/weapp/quadrant-chart/index.json +1 -0
- package/dist/weapp/quadrant-chart/index.wxml +1 -0
- package/dist/weapp/quadrant-chart/index.wxss +1 -0
- package/dist/weapp/scatter-chart/index.js +1 -0
- package/dist/weapp/scatter-chart/index.json +1 -0
- package/dist/weapp/scatter-chart/index.wxml +1 -0
- package/dist/weapp/scatter-chart/index.wxss +1 -0
- package/dist/weapp/types.d.ts +295 -0
- package/package.json +48 -2
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
import { toCss as e } from "./color.js";
|
|
2
|
+
import { lowerBound as t } from "./data.js";
|
|
3
|
+
import { decimateMinMax as n } from "./decimate.js";
|
|
4
|
+
import { createScales as r } from "./layout.js";
|
|
5
|
+
import { buildModel as i } from "./model.js";
|
|
6
|
+
import { font as a, placeLabels as o, textBox as s } from "./overlay.js";
|
|
7
|
+
import { collectPointLabels as c, dotSize as l, hitTest as u, hoverMarks as d, layoutChart as f, resolveAnnotations as p, sameHover as m, showsCrosshair as h, tooltipContent as g } from "./scene.js";
|
|
8
|
+
import { createTheme as _ } from "./theme.js";
|
|
9
|
+
import { clampRange as v, panRange as y, sameRange as b, zoomRange as x } from "./viewport.js";
|
|
10
|
+
//#region ../charts/src/engine/controller.ts
|
|
11
|
+
var S = (e) => ({
|
|
12
|
+
x: [e.x[0], e.x[1]],
|
|
13
|
+
y: [e.y[0], e.y[1]]
|
|
14
|
+
}), ee = 6, te = 10, ne = 320, C = 20, w = (e) => {
|
|
15
|
+
let t = e.options, n = e.theme, w = _(n, t.palette), T = /* @__PURE__ */ new Map(), E = /* @__PURE__ */ new Set(), D = {}, O, k = {
|
|
16
|
+
x: [0, 1],
|
|
17
|
+
y: [0, 1]
|
|
18
|
+
}, A = !1, j = 0, M = 0, N = [], P = null, F = !0, I = "", L = !1, R = null, z = /* @__PURE__ */ new Map(), B = null, V = {
|
|
19
|
+
time: 0,
|
|
20
|
+
x: 0,
|
|
21
|
+
y: 0
|
|
22
|
+
}, H = (e, t) => {
|
|
23
|
+
D[e]?.forEach((e) => e(t));
|
|
24
|
+
}, U = () => {
|
|
25
|
+
F = !0, L || e.onInvalidate?.();
|
|
26
|
+
}, re = () => {
|
|
27
|
+
let e = t.interaction;
|
|
28
|
+
if (e === !1) return null;
|
|
29
|
+
let n = typeof e == "object" ? e : {};
|
|
30
|
+
return {
|
|
31
|
+
pan: n.pan ?? !0,
|
|
32
|
+
dragPoints: n.dragPoints ?? !1
|
|
33
|
+
};
|
|
34
|
+
}, W = (t, n = w.fontSize, r = 400) => e.measureText(t, a(w, n, r)), G = () => {
|
|
35
|
+
O = i(t, w, E, T);
|
|
36
|
+
let { base: e, minSpan: n } = O;
|
|
37
|
+
A ? (k = {
|
|
38
|
+
x: O.zoom.x ? v(k.x, e.x, n.x) : [...e.x],
|
|
39
|
+
y: O.zoom.y ? v(k.y, e.y, n.y) : [...e.y]
|
|
40
|
+
}, A = !b(k.x, e.x) || !b(k.y, e.y)) : k = S(e), N = p(t.annotations, w), R && (R.event.items.every((e) => O.series[e.seriesIndex] && !O.series[e.seriesIndex].hidden && e.index < O.series[e.seriesIndex].cols.count) || J(null)), U();
|
|
41
|
+
}, ie = () => {
|
|
42
|
+
let e = t.legend, n = t.series.filter((e) => e.name).length;
|
|
43
|
+
if (!(e === void 0 ? n > 1 : e)) return null;
|
|
44
|
+
let r = typeof e == "object" ? e : {}, i = r.position === "bottom" ? "bottom" : "top", a = [], o = 4, s = 0;
|
|
45
|
+
for (let e of O.series) {
|
|
46
|
+
let t = 14 + W(e.name, 12) + 8;
|
|
47
|
+
o + t > j - 4 && o > 4 && (o = 4, s++), a.push({
|
|
48
|
+
id: e.id,
|
|
49
|
+
name: e.name,
|
|
50
|
+
color: e.colorCss,
|
|
51
|
+
shape: e.type === "scatter" ? "dot" : e.type === "line" ? "line" : "square",
|
|
52
|
+
hidden: e.hidden,
|
|
53
|
+
box: {
|
|
54
|
+
x: o,
|
|
55
|
+
y: s * C,
|
|
56
|
+
width: t,
|
|
57
|
+
height: C
|
|
58
|
+
}
|
|
59
|
+
}), o += t + 10;
|
|
60
|
+
}
|
|
61
|
+
let c = (s + 1) * C + 6;
|
|
62
|
+
if (i === "bottom") for (let e of a) e.box.y += M - c + 6;
|
|
63
|
+
return {
|
|
64
|
+
entries: a,
|
|
65
|
+
position: i,
|
|
66
|
+
toggle: r.toggle ?? !0,
|
|
67
|
+
height: c
|
|
68
|
+
};
|
|
69
|
+
}, ae = (e, n, r) => {
|
|
70
|
+
let i = t.tooltip;
|
|
71
|
+
if (i === !1) return null;
|
|
72
|
+
let a = typeof i == "object" ? i.render : void 0, o = null;
|
|
73
|
+
if (a) {
|
|
74
|
+
let t = a(e);
|
|
75
|
+
if (t === null || t === "") return null;
|
|
76
|
+
typeof t == "string" && (o = t.split("\n"));
|
|
77
|
+
}
|
|
78
|
+
let s = g(O, e, P?.layout.yTicks ?? null), c = 0, l;
|
|
79
|
+
if (o) {
|
|
80
|
+
for (let e of o) c = Math.max(c, W(e, 12));
|
|
81
|
+
l = o.length;
|
|
82
|
+
} else {
|
|
83
|
+
c = W(s.title, 12, 600) + (s.titleColor ? 14 : 0);
|
|
84
|
+
for (let e of s.rows) c = Math.max(c, (e.color ? 14 : 0) + W(e.name, 12) + 16 + W(e.value, 12, 600));
|
|
85
|
+
l = 1 + s.rows.length;
|
|
86
|
+
}
|
|
87
|
+
let u = Math.ceil(Math.max(c, 96) + 16 + 4), d = l * 18 + 16, f = n + 14;
|
|
88
|
+
f + u > j - 4 && (f = n - 14 - u), f = Math.max(4, Math.min(f, j - u - 4));
|
|
89
|
+
let p = Math.max(4, Math.min(r - d / 2, M - d - 4));
|
|
90
|
+
return {
|
|
91
|
+
content: s,
|
|
92
|
+
text: o,
|
|
93
|
+
box: {
|
|
94
|
+
x: f,
|
|
95
|
+
y: p,
|
|
96
|
+
width: u,
|
|
97
|
+
height: d
|
|
98
|
+
},
|
|
99
|
+
lineHeight: 18,
|
|
100
|
+
padding: 8
|
|
101
|
+
};
|
|
102
|
+
}, oe = () => {
|
|
103
|
+
if (j <= 0 || M <= 0) return null;
|
|
104
|
+
let e = ie(), n = e?.position === "top" ? e.height : 0, r = f({
|
|
105
|
+
model: O,
|
|
106
|
+
view: k,
|
|
107
|
+
theme: w,
|
|
108
|
+
width: j,
|
|
109
|
+
height: M - (e?.height ?? 0),
|
|
110
|
+
padding: t.padding,
|
|
111
|
+
top: n,
|
|
112
|
+
measure: (e) => W(e)
|
|
113
|
+
}), i = c(O, k, r.scales), a = [], u = w.fontSize + 4;
|
|
114
|
+
for (let e of N) {
|
|
115
|
+
if (e.type === "text" && e.text) {
|
|
116
|
+
a.push(s(e, r.scales, W(e.text, w.fontSize, e.weight), u));
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (e.type !== "rect" || !e.label) continue;
|
|
120
|
+
let t = r.scales, n = e.x0 === void 0 ? r.plot.x : t.xToPx(e.x0), i = e.x1 === void 0 ? r.plot.x + r.plot.width : t.xToPx(e.x1), o = e.y0 === void 0 ? r.plot.y + r.plot.height : t.yToPx(e.y0), c = e.y1 === void 0 ? r.plot.y : t.yToPx(e.y1), l = W(e.label, w.fontSize + 1, 600), d = Math.min(n, i), f = Math.max(n, i), p = Math.min(o, c), m = Math.max(o, c), h = e.labelPosition;
|
|
121
|
+
a.push({
|
|
122
|
+
x: h.endsWith("left") ? d + 10 : h.endsWith("right") ? f - 10 - l : (d + f - l) / 2,
|
|
123
|
+
y: h.startsWith("top") ? p + 10 : h.startsWith("bottom") ? m - 10 - u : (p + m - u) / 2,
|
|
124
|
+
width: l,
|
|
125
|
+
height: u
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
let p = o(i, r.plot, (e) => W(e), u - 2, a), m = {
|
|
129
|
+
width: j,
|
|
130
|
+
height: M,
|
|
131
|
+
theme: w,
|
|
132
|
+
model: O,
|
|
133
|
+
view: S(k),
|
|
134
|
+
layout: r,
|
|
135
|
+
annotations: N,
|
|
136
|
+
pointLabels: p,
|
|
137
|
+
legend: e,
|
|
138
|
+
hover: null,
|
|
139
|
+
dragging: null
|
|
140
|
+
};
|
|
141
|
+
if (P = m, R) {
|
|
142
|
+
let e = h(O, R.event, t.crosshair), n = r.scales.xToPx(R.event.items[0].x);
|
|
143
|
+
m.hover = {
|
|
144
|
+
event: R.event,
|
|
145
|
+
marks: d(O, r.scales, R.event),
|
|
146
|
+
crosshairX: e && n >= r.plot.x && n <= r.plot.x + r.plot.width ? n : null,
|
|
147
|
+
tooltip: B?.kind === "pan" || B?.kind === "point" ? null : ae(R.event, R.x, R.y)
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
if (B?.kind === "point") {
|
|
151
|
+
let e = O.series[B.item.seriesIndex];
|
|
152
|
+
m.dragging = {
|
|
153
|
+
x: B.x,
|
|
154
|
+
y: B.y,
|
|
155
|
+
color: B.item.color,
|
|
156
|
+
size: (e ? l(e, B.item.index) : 8) + 6
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
let g = r.plot, _ = `${g.x},${g.y},${g.width},${g.height}`;
|
|
160
|
+
return _ !== I && (I = _, H("layout", { ...g })), m;
|
|
161
|
+
}, K = () => ((F || !P) && (F = !1, P = oe()), P), q = () => K()?.layout.scales ?? null, J = (e) => {
|
|
162
|
+
let t = !m(R?.event ?? null, e?.event ?? null);
|
|
163
|
+
R = e, U(), t && H("hover", e ? e.event : null);
|
|
164
|
+
}, Y = (e, t, n) => {
|
|
165
|
+
let r = q();
|
|
166
|
+
return r ? u(O, r, P?.layout.xTicks ?? null, e, t, n ? 8 : 0) : null;
|
|
167
|
+
}, X = (e, t) => {
|
|
168
|
+
let n = q()?.plot;
|
|
169
|
+
return !!n && e >= n.x && e <= n.x + n.width && t >= n.y && t <= n.y + n.height;
|
|
170
|
+
}, Z = (e, t) => {
|
|
171
|
+
let n = q();
|
|
172
|
+
if (!n) return null;
|
|
173
|
+
let { plot: r } = n, i = Math.max(r.x, Math.min(r.x + r.width, e)), a = Math.max(r.y, Math.min(r.y + r.height, t));
|
|
174
|
+
return {
|
|
175
|
+
x: n.pxToX(i),
|
|
176
|
+
y: n.pxToY(a)
|
|
177
|
+
};
|
|
178
|
+
}, Q = (e, t) => {
|
|
179
|
+
let { base: n, minSpan: r } = O;
|
|
180
|
+
k = {
|
|
181
|
+
x: v(e.x, n.x, r.x),
|
|
182
|
+
y: v(e.y, n.y, r.y)
|
|
183
|
+
}, A = !b(k.x, n.x) || !b(k.y, n.y), t && H("zoom", S(k)), U();
|
|
184
|
+
}, se = (e, t, n) => {
|
|
185
|
+
let r = q();
|
|
186
|
+
if (!r || !O.zoom.x && !O.zoom.y) return;
|
|
187
|
+
let i = S(k);
|
|
188
|
+
O.zoom.x && (i.x = x(k.x, r.pxToX(e), n)), O.zoom.y && (i.y = x(k.y, r.pxToY(t), n)), Q(i, !0);
|
|
189
|
+
}, $ = () => {
|
|
190
|
+
A && Q(S(O.base), !0);
|
|
191
|
+
}, ce = (e, t) => K()?.legend?.entries.find((n) => e >= n.box.x && e <= n.box.x + n.box.width && t >= n.box.y && t <= n.box.y + n.box.height) ?? null, le = (e) => {
|
|
192
|
+
E.has(e) ? E.delete(e) : E.add(e), G();
|
|
193
|
+
}, ue = () => {
|
|
194
|
+
let [e, t] = [...z.values()];
|
|
195
|
+
B = {
|
|
196
|
+
kind: "pinch",
|
|
197
|
+
view: S(k),
|
|
198
|
+
distance: Math.max(1, Math.hypot(e.x - t.x, e.y - t.y)),
|
|
199
|
+
midX: (e.x + t.x) / 2,
|
|
200
|
+
midY: (e.y + t.y) / 2
|
|
201
|
+
}, J(null);
|
|
202
|
+
};
|
|
203
|
+
return O = i(t, w, E, T), G(), {
|
|
204
|
+
setOptions(e) {
|
|
205
|
+
if (L) return;
|
|
206
|
+
let r = (e.palette ?? []).join() !== (t.palette ?? []).join();
|
|
207
|
+
t = e, r && (w = _(n, t.palette)), G();
|
|
208
|
+
},
|
|
209
|
+
setTheme(e) {
|
|
210
|
+
L || (n = e, w = _(n, t.palette), G());
|
|
211
|
+
},
|
|
212
|
+
setSize(e, t) {
|
|
213
|
+
(e !== j || t !== M) && (j = Math.max(0, e), M = Math.max(0, t), U());
|
|
214
|
+
},
|
|
215
|
+
getScene: K,
|
|
216
|
+
pointerDown: (e, t, n = {}) => {
|
|
217
|
+
if (L) return;
|
|
218
|
+
let r = n.id ?? 0, i = !!n.touch;
|
|
219
|
+
z.set(r, {
|
|
220
|
+
x: e,
|
|
221
|
+
y: t,
|
|
222
|
+
startX: e,
|
|
223
|
+
startY: t,
|
|
224
|
+
touch: i,
|
|
225
|
+
moved: !1
|
|
226
|
+
});
|
|
227
|
+
let a = re();
|
|
228
|
+
if (z.size === 2) {
|
|
229
|
+
a && (O.zoom.x || O.zoom.y) && B?.kind !== "point" && ue();
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
if (z.size > 2 || !a) {
|
|
233
|
+
if (!a && i) {
|
|
234
|
+
let n = Y(e, t, !0);
|
|
235
|
+
J(n ? {
|
|
236
|
+
event: n,
|
|
237
|
+
x: e,
|
|
238
|
+
y: t
|
|
239
|
+
} : null);
|
|
240
|
+
}
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (a.dragPoints) {
|
|
244
|
+
let n = Y(e, t, i)?.items.find((e) => O.series[e.seriesIndex].type === "scatter");
|
|
245
|
+
if (n) {
|
|
246
|
+
B = {
|
|
247
|
+
kind: "point",
|
|
248
|
+
item: n,
|
|
249
|
+
x: e,
|
|
250
|
+
y: t
|
|
251
|
+
};
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (A && a.pan && X(e, t)) {
|
|
256
|
+
B = {
|
|
257
|
+
kind: "pan",
|
|
258
|
+
view: S(k),
|
|
259
|
+
x: e,
|
|
260
|
+
y: t
|
|
261
|
+
};
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
if (B = null, i) {
|
|
265
|
+
let n = Y(e, t, !0);
|
|
266
|
+
J(n ? {
|
|
267
|
+
event: n,
|
|
268
|
+
x: e,
|
|
269
|
+
y: t
|
|
270
|
+
} : null);
|
|
271
|
+
}
|
|
272
|
+
},
|
|
273
|
+
pointerMove: (e, t, n = {}) => {
|
|
274
|
+
if (L) return;
|
|
275
|
+
let i = n.id ?? 0, a = z.get(i);
|
|
276
|
+
if (a && (a.x = e, a.y = t, !a.moved && Math.hypot(e - a.startX, t - a.startY) > (a.touch ? te : ee) && (a.moved = !0)), B?.kind === "pinch" && z.size >= 2) {
|
|
277
|
+
let [e, t] = [...z.values()], n = Math.max(1, Math.hypot(e.x - t.x, e.y - t.y)), i = (e.x + t.x) / 2, a = (e.y + t.y) / 2, o = q();
|
|
278
|
+
if (!o) return;
|
|
279
|
+
let s = r(o.plot, B.view, O.x.reverse, O.y.reverse), c = B.distance / n, l = S(B.view);
|
|
280
|
+
if (O.zoom.x) {
|
|
281
|
+
l.x = x(B.view.x, s.pxToX(B.midX), c);
|
|
282
|
+
let e = (i - B.midX) * s.xPerPx * c;
|
|
283
|
+
l.x = y(l.x, O.x.reverse ? e : -e);
|
|
284
|
+
}
|
|
285
|
+
if (O.zoom.y) {
|
|
286
|
+
l.y = x(B.view.y, s.pxToY(B.midY), c);
|
|
287
|
+
let e = (a - B.midY) * s.yPerPx * c;
|
|
288
|
+
l.y = y(l.y, O.y.reverse ? -e : e);
|
|
289
|
+
}
|
|
290
|
+
Q(l, !0);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
if (B?.kind === "point" && a) {
|
|
294
|
+
if (!a.moved) return;
|
|
295
|
+
B.x = e, B.y = t;
|
|
296
|
+
let n = Z(e, t);
|
|
297
|
+
U(), n && H("drag", {
|
|
298
|
+
item: B.item,
|
|
299
|
+
x: n.x,
|
|
300
|
+
y: n.y
|
|
301
|
+
});
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
if (B?.kind === "pan" && a) {
|
|
305
|
+
if (!a.moved) return;
|
|
306
|
+
let n = q();
|
|
307
|
+
if (!n) return;
|
|
308
|
+
let r = e - B.x, i = t - B.y, o = S(B.view);
|
|
309
|
+
O.zoom.x && (o.x = y(B.view.x, -r * n.xPerPx * (O.x.reverse ? -1 : 1))), O.zoom.y && (o.y = y(B.view.y, i * n.yPerPx * (O.y.reverse ? -1 : 1))), Q(o, !0);
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (!(z.size > 1) && (!a || a.touch || !n.touch)) {
|
|
313
|
+
let r = Y(e, t, !!a?.touch || !!n.touch);
|
|
314
|
+
(r || !a?.touch) && J(r ? {
|
|
315
|
+
event: r,
|
|
316
|
+
x: e,
|
|
317
|
+
y: t
|
|
318
|
+
} : null);
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
pointerUp: (e, t, n = {}) => {
|
|
322
|
+
if (L) return;
|
|
323
|
+
let r = n.id ?? 0, i = z.get(r);
|
|
324
|
+
z.delete(r);
|
|
325
|
+
let a = B;
|
|
326
|
+
if (a?.kind === "pinch") {
|
|
327
|
+
z.size < 2 && (B = null);
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
if (B = null, !i) return;
|
|
331
|
+
if (a?.kind === "point") {
|
|
332
|
+
if (i.moved) {
|
|
333
|
+
let n = Z(e, t);
|
|
334
|
+
U(), n && H("drop", {
|
|
335
|
+
item: a.item,
|
|
336
|
+
x: n.x,
|
|
337
|
+
y: n.y
|
|
338
|
+
});
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
} else if (a?.kind === "pan" && i.moved) {
|
|
342
|
+
U();
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
if (i.moved) {
|
|
346
|
+
i.touch && U();
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
let o = Date.now();
|
|
350
|
+
if (i.touch && o - V.time < ne && Math.hypot(e - V.x, t - V.y) < 24 && A) {
|
|
351
|
+
V = {
|
|
352
|
+
time: 0,
|
|
353
|
+
x: e,
|
|
354
|
+
y: t
|
|
355
|
+
}, $();
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
V = {
|
|
359
|
+
time: o,
|
|
360
|
+
x: e,
|
|
361
|
+
y: t
|
|
362
|
+
};
|
|
363
|
+
let s = ce(e, t);
|
|
364
|
+
if (s) {
|
|
365
|
+
K()?.legend?.toggle && le(s.id);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
let c = Y(e, t, i.touch);
|
|
369
|
+
if (c) {
|
|
370
|
+
i.touch && J({
|
|
371
|
+
event: c,
|
|
372
|
+
x: e,
|
|
373
|
+
y: t
|
|
374
|
+
}), H("click", c);
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
if (i.touch && J(null), X(e, t)) {
|
|
378
|
+
let n = Z(e, t);
|
|
379
|
+
n && H("plotClick", n);
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
pointerCancel: (e = {}) => {
|
|
383
|
+
z.delete(e.id ?? 0), (B?.kind === "point" || z.size < 2) && (B = null), U();
|
|
384
|
+
},
|
|
385
|
+
pointerLeave() {
|
|
386
|
+
!B && R && J(null);
|
|
387
|
+
},
|
|
388
|
+
zoomAt: se,
|
|
389
|
+
resetZoom: $,
|
|
390
|
+
getView: () => S(k),
|
|
391
|
+
setView(e) {
|
|
392
|
+
L || Q({
|
|
393
|
+
x: e.x ?? k.x,
|
|
394
|
+
y: e.y ?? k.y
|
|
395
|
+
}, !1);
|
|
396
|
+
},
|
|
397
|
+
toggleSeries: le,
|
|
398
|
+
clearHover() {
|
|
399
|
+
R && J(null);
|
|
400
|
+
},
|
|
401
|
+
getPlotRect() {
|
|
402
|
+
let e = K()?.layout.plot;
|
|
403
|
+
return e ? { ...e } : null;
|
|
404
|
+
},
|
|
405
|
+
toPixel(e, t) {
|
|
406
|
+
let n = q();
|
|
407
|
+
return n ? {
|
|
408
|
+
x: n.xToPx(e),
|
|
409
|
+
y: n.yToPx(t)
|
|
410
|
+
} : null;
|
|
411
|
+
},
|
|
412
|
+
fromPixel(e, t) {
|
|
413
|
+
let n = q();
|
|
414
|
+
return n ? {
|
|
415
|
+
x: n.pxToX(e),
|
|
416
|
+
y: n.pxToY(t)
|
|
417
|
+
} : null;
|
|
418
|
+
},
|
|
419
|
+
on(e, t) {
|
|
420
|
+
let n = D[e];
|
|
421
|
+
return n || (n = /* @__PURE__ */ new Set(), D[e] = n), n.add(t), () => {
|
|
422
|
+
n.delete(t);
|
|
423
|
+
};
|
|
424
|
+
},
|
|
425
|
+
destroy() {
|
|
426
|
+
L = !0, z.clear();
|
|
427
|
+
for (let e of Object.keys(D)) delete D[e];
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
}, T = (e, n, r, i) => {
|
|
431
|
+
if (!r) return [0, n];
|
|
432
|
+
let [a, o] = i[0] <= i[1] ? i : [i[1], i[0]];
|
|
433
|
+
return [Math.max(0, t(e, n, a) - 1), Math.min(n, t(e, n, o) + 1)];
|
|
434
|
+
}, E = (t, r = {}) => {
|
|
435
|
+
let { model: i, view: a, layout: o } = t, s = o.scales, { plot: c } = o, u = r.maxDots ?? 4e3, d = r.maxBars ?? 2e3, f = Math.max(1, r.columnWidth ?? 1), p = {
|
|
436
|
+
area: 0,
|
|
437
|
+
bar: 1,
|
|
438
|
+
line: 2,
|
|
439
|
+
scatter: 3
|
|
440
|
+
}, m = [], h = i.series.filter((e) => !e.hidden && e.cols.count > 0).sort((e, t) => p[e.type] - p[t.type] || e.index - t.index);
|
|
441
|
+
for (let t of h) {
|
|
442
|
+
let { x: o, y: p, count: h, sorted: g } = t.cols;
|
|
443
|
+
if (t.type === "line" || t.type === "area") {
|
|
444
|
+
let [e, r] = T(o, h, g, a.x), l = new Float64Array((r - e) * 2);
|
|
445
|
+
for (let t = e; t < r; t++) l[(t - e) * 2] = o[t], l[(t - e) * 2 + 1] = p[t];
|
|
446
|
+
let u = r - e, d = g && u > c.width * 2 / f ? n(l, 0, u, (e) => s.xToPx(e) / f) : {
|
|
447
|
+
points: l,
|
|
448
|
+
length: u
|
|
449
|
+
}, _ = [], v = [];
|
|
450
|
+
for (let e = 0; e < d.length; e++) {
|
|
451
|
+
let t = d.points[e * 2], n = d.points[e * 2 + 1];
|
|
452
|
+
if (!Number.isFinite(t) || !Number.isFinite(n)) {
|
|
453
|
+
v.length && _.push(v), v = [];
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
v.push(s.xToPx(t), s.yToPx(n));
|
|
457
|
+
}
|
|
458
|
+
v.length && _.push(v), t.type === "area" && m.push({
|
|
459
|
+
kind: "area",
|
|
460
|
+
seriesIndex: t.index,
|
|
461
|
+
color: t.colorCss,
|
|
462
|
+
opacity: t.opacity,
|
|
463
|
+
baseline: s.yToPx(i.baseline),
|
|
464
|
+
segments: _
|
|
465
|
+
}), m.push({
|
|
466
|
+
kind: "line",
|
|
467
|
+
seriesIndex: t.index,
|
|
468
|
+
color: t.colorCss,
|
|
469
|
+
width: t.type === "area" ? Math.min(t.lineWidth, 2) : t.lineWidth,
|
|
470
|
+
segments: _
|
|
471
|
+
});
|
|
472
|
+
continue;
|
|
473
|
+
}
|
|
474
|
+
if (t.type === "bar" && t.barBase && t.barTop) {
|
|
475
|
+
let [e, n] = T(o, h, g, a.x), r = Math.max(t.barHalfWidth / s.xPerPx, .5), i = [], l = n - e > d, u = NaN;
|
|
476
|
+
for (let a = e; a < n; a++) {
|
|
477
|
+
let e = t.barBase[a], n = t.barTop[a];
|
|
478
|
+
if (!Number.isFinite(e) || !Number.isFinite(n)) continue;
|
|
479
|
+
let d = s.xToPx(o[a] + t.barOffset);
|
|
480
|
+
if (d + r < c.x || d - r > c.x + c.width) continue;
|
|
481
|
+
let f = s.yToPx(e), p = s.yToPx(n), m = Math.min(f, p), h = Math.max(1, Math.abs(f - p)), g = Math.floor(d);
|
|
482
|
+
if (l && g === u && i.length) {
|
|
483
|
+
let e = i.length - 4, t = Math.max(i[e + 1] + i[e + 3], m + h);
|
|
484
|
+
i[e + 1] = Math.min(i[e + 1], m), i[e + 3] = t - i[e + 1];
|
|
485
|
+
continue;
|
|
486
|
+
}
|
|
487
|
+
u = g, i.push(d - r, m, r * 2, h);
|
|
488
|
+
}
|
|
489
|
+
m.push({
|
|
490
|
+
kind: "bars",
|
|
491
|
+
seriesIndex: t.index,
|
|
492
|
+
color: t.colorCss,
|
|
493
|
+
rects: i
|
|
494
|
+
});
|
|
495
|
+
continue;
|
|
496
|
+
}
|
|
497
|
+
let _ = [], v = [], y = (n) => {
|
|
498
|
+
let r = t.pointColors?.[n];
|
|
499
|
+
return r ? e(r) : t.colorCss;
|
|
500
|
+
}, b = [];
|
|
501
|
+
for (let e = 0; e < h; e++) {
|
|
502
|
+
let t = o[e], n = p[e];
|
|
503
|
+
if (!Number.isFinite(t) || !Number.isFinite(n)) continue;
|
|
504
|
+
let r = s.xToPx(t), i = s.yToPx(n);
|
|
505
|
+
r < c.x || r > c.x + c.width || i < c.y || i > c.y + c.height || b.push(e);
|
|
506
|
+
}
|
|
507
|
+
if (b.length > u) {
|
|
508
|
+
let e = Math.max(2, r.dotCell ?? t.pointSize * .8), n = Math.ceil(c.width / e) + 1, i = /* @__PURE__ */ new Map();
|
|
509
|
+
for (let t of b) {
|
|
510
|
+
let r = Math.floor((s.xToPx(o[t]) - c.x) / e), a = Math.floor((s.yToPx(p[t]) - c.y) / e);
|
|
511
|
+
i.set(a * n + r, t);
|
|
512
|
+
}
|
|
513
|
+
for (let [t, r] of i) _.push(c.x + (t % n + .5) * e, c.y + (Math.floor(t / n) + .5) * e, e), v.push(y(r));
|
|
514
|
+
} else for (let e of b) _.push(s.xToPx(o[e]), s.yToPx(p[e]), l(t, e)), v.push(y(e));
|
|
515
|
+
m.push({
|
|
516
|
+
kind: "dots",
|
|
517
|
+
seriesIndex: t.index,
|
|
518
|
+
opacity: t.opacity,
|
|
519
|
+
dots: _,
|
|
520
|
+
colors: v
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
return m;
|
|
524
|
+
};
|
|
525
|
+
//#endregion
|
|
526
|
+
export { w as createChartController, E as scenePrimitives };
|
|
527
|
+
|
|
528
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","names":["copyView","v","TAP_SLOP","TOUCH_SLOP","DOUBLE_TAP_MS","LEGEND_ROW","createChartController","options","config","themeInput","theme","createTheme","cache","hidden","listeners","model","view","zoomed","width","height","annotations","scene","sceneDirty","lastPlot","destroyed","hover","pointers","gesture","lastTap","emit","type","listener","event","invalidate","interaction","value","o","measure","text","font","size","weight","rebuild","buildModel","clampRange","base","minSpan","sameRange","resolveAnnotations","it","setHover","legendLayout","option","named","s","cfg","position","entries","x","row","w","legendHeight","tooltipLayout","tooltip","custom","result","content","tooltipContent","lines","line","boxW","boxH","left","anchorX","top","anchorY","computeScene","legend","legendTop","layout","layoutChart","labels","collectPointLabels","occupied","labelHeight","a","textBox","x0","x1","y0","y1","right","bottom","pos","pointLabels","placeLabels","t","next","crosshair","showsCrosshair","cx","hoverMarks","dotSize","rect","key","getScene","scales","changed","sameHover","hitAt","sc","hitTest","y","touch","inPlot","p","dataAt","plot","cy","setViewInternal","notify","zoomAt","zoomRange","factor","resetZoom","legendAt","e","toggleSeries","id","startPinch","b","paletteChanged","h","item","i","distance","midX","midY","start","createScales","shift","panRange","at","dx","dy","current","now","hit","set","visibleRange","sorted","count","range","lowerBound","scenePrimitives","maxDots","limits","maxBars","column","order","out","series","end","interleaved","n","decimateMinMax","segments","run","xv","yv","half","rects","merge","lastCol","ya","yb","col","k","dots","colors","colorOf","c","toCss","visible","px","py","cell","cols","owner"],"sources":["../../../../../../charts/src/engine/controller.ts"],"sourcesContent":["// createChartController: the platform-free chart. It owns the options, the\n// theme, the model, the visible range and the interactions (pointer / touch\n// gestures fed by the host) and describes what to draw (`getScene`). Hosts\n// only draw: createCanvasChart on any 2D context, the React Native charts\n// with views.\n\nimport { toCss } from \"./color\";\nimport { lowerBound } from \"./data\";\nimport { decimateMinMax } from \"./decimate\";\nimport { createScales, type Rect } from \"./layout\";\nimport { buildModel, type ChartModel, type DataCache } from \"./model\";\nimport {\n font,\n placeLabels,\n textBox,\n type PointLabel,\n type ResolvedAnnotation,\n} from \"./overlay\";\nimport {\n collectPointLabels,\n dotSize,\n hitTest,\n hoverMarks,\n layoutChart,\n resolveAnnotations,\n sameHover,\n showsCrosshair,\n tooltipContent,\n type ChartLayout,\n type HoverMark,\n type TooltipContent,\n} from \"./scene\";\nimport { createTheme, type ChartTheme, type ChartThemeInput } from \"./theme\";\nimport type {\n ChartEventMap,\n ChartHoverEvent,\n ChartHoverItem,\n ChartOptions,\n ChartPlotClickEvent,\n ChartRect,\n ChartView,\n} from \"./types\";\nimport {\n clampRange,\n panRange,\n sameRange,\n zoomRange,\n type Range,\n} from \"./viewport\";\n\n/** Events of a controller (no renderer events: hosts draw themselves) */\nexport type ChartControllerEventMap = Omit<ChartEventMap, \"renderer\">;\n\nexport interface ChartControllerConfig {\n options: ChartOptions;\n /** Colors and fonts (Minerva variables); light defaults when omitted */\n theme?: ChartThemeInput;\n /** Width in pixels of `text` drawn with the CSS `font` */\n measureText: (text: string, font: string) => number;\n /** Called when the scene changed and must be drawn again */\n onInvalidate?: () => void;\n}\n\nexport interface ChartLegendEntry {\n id: string;\n name: string;\n /** CSS color */\n color: string;\n shape: \"dot\" | \"line\" | \"square\";\n hidden: boolean;\n /** Hit / draw box of the entry, pixels of the chart */\n box: Rect;\n}\n\nexport interface ChartLegendLayout {\n entries: ChartLegendEntry[];\n position: \"top\" | \"bottom\";\n /** Whether a tap toggles the series */\n toggle: boolean;\n /** Height taken by the legend */\n height: number;\n}\n\nexport interface ChartTooltipLayout {\n /** Default content (`text` is set instead when `tooltip.render` returns a string) */\n content: TooltipContent;\n /** Lines of a custom string tooltip */\n text: string[] | null;\n /** Box of the tooltip, pixels of the chart */\n box: Rect;\n /** Line height used to lay the box out */\n lineHeight: number;\n padding: number;\n}\n\nexport interface ChartHoverLayout {\n event: ChartHoverEvent;\n marks: HoverMark[];\n /** X pixel of the guide line (`null` when hidden) */\n crosshairX: number | null;\n tooltip: ChartTooltipLayout | null;\n}\n\n/** Everything a host draws, in CSS pixels of the chart */\nexport interface ChartScene {\n width: number;\n height: number;\n theme: ChartTheme;\n model: ChartModel;\n view: ChartView;\n layout: ChartLayout;\n annotations: ResolvedAnnotation[];\n /** Labels of the dots that found a free slot */\n pointLabels: { label: PointLabel; box: Rect }[];\n legend: ChartLegendLayout | null;\n hover: ChartHoverLayout | null;\n /** Point being dragged (`interaction.dragPoints`) */\n dragging: { x: number; y: number; color: string; size: number } | null;\n}\n\nexport interface ChartPointerOptions {\n /** Pointer id (touch identifier); 0 by default */\n id?: number;\n /** Touch input: the tooltip follows the finger and stays after a tap */\n touch?: boolean;\n}\n\nexport interface ChartController {\n setOptions(options: ChartOptions): void;\n setTheme(theme: ChartThemeInput | undefined): void;\n /** Size of the chart in CSS pixels */\n setSize(width: number, height: number): void;\n /** What to draw (`null` until the size is known) */\n getScene(): ChartScene | null;\n pointerDown(x: number, y: number, options?: ChartPointerOptions): void;\n pointerMove(x: number, y: number, options?: ChartPointerOptions): void;\n pointerUp(x: number, y: number, options?: ChartPointerOptions): void;\n pointerCancel(options?: ChartPointerOptions): void;\n /** The mouse left the chart */\n pointerLeave(): void;\n /** Zooms around a pixel (factor < 1 zooms in) */\n zoomAt(x: number, y: number, factor: number): void;\n resetZoom(): void;\n getView(): ChartView;\n setView(view: Partial<ChartView>): void;\n /** Shows / hides a series (like a legend click) */\n toggleSeries(id: string): void;\n /** Hides the tooltip */\n clearHover(): void;\n getPlotRect(): ChartRect | null;\n toPixel(x: number, y: number): { x: number; y: number } | null;\n fromPixel(x: number, y: number): { x: number; y: number } | null;\n on<K extends keyof ChartControllerEventMap>(\n type: K,\n listener: (event: ChartControllerEventMap[K]) => void,\n ): () => void;\n destroy(): void;\n}\n\nconst copyView = (v: ChartView): ChartView => ({\n x: [v.x[0], v.x[1]],\n y: [v.y[0], v.y[1]],\n});\n\nconst TAP_SLOP = 6;\nconst TOUCH_SLOP = 10;\nconst DOUBLE_TAP_MS = 320;\nconst LEGEND_ROW = 20;\n\ninterface PointerState {\n x: number;\n y: number;\n startX: number;\n startY: number;\n touch: boolean;\n moved: boolean;\n}\n\nexport const createChartController = (\n config: ChartControllerConfig,\n): ChartController => {\n let options = config.options;\n let themeInput = config.theme;\n let theme = createTheme(themeInput, options.palette);\n const cache: DataCache = new Map();\n const hidden = new Set<string>();\n const listeners: {\n [K in keyof ChartControllerEventMap]?: Set<\n (event: ChartControllerEventMap[K]) => void\n >;\n } = {};\n let model: ChartModel;\n let view: ChartView = { x: [0, 1], y: [0, 1] };\n let zoomed = false;\n let width = 0;\n let height = 0;\n let annotations: ResolvedAnnotation[] = [];\n let scene: ChartScene | null = null;\n let sceneDirty = true;\n let lastPlot = \"\";\n let destroyed = false;\n\n let hover: { event: ChartHoverEvent; x: number; y: number } | null = null;\n const pointers = new Map<number, PointerState>();\n let gesture:\n | { kind: \"pan\"; view: ChartView; x: number; y: number }\n | {\n kind: \"pinch\";\n view: ChartView;\n distance: number;\n midX: number;\n midY: number;\n }\n | { kind: \"point\"; item: ChartHoverItem; x: number; y: number }\n | null = null;\n let lastTap = { time: 0, x: 0, y: 0 };\n\n const emit = <K extends keyof ChartControllerEventMap>(\n type: K,\n event: ChartControllerEventMap[K],\n ) => {\n listeners[type]?.forEach((listener) => listener(event));\n };\n\n const invalidate = () => {\n sceneDirty = true;\n if (!destroyed) config.onInvalidate?.();\n };\n\n const interaction = () => {\n const value = options.interaction;\n if (value === false) return null;\n const o = typeof value === \"object\" ? value : {};\n return {\n pan: o.pan ?? true,\n dragPoints: o.dragPoints ?? false,\n };\n };\n\n const measure = (text: string, size = theme.fontSize, weight = 400) =>\n config.measureText(text, font(theme, size, weight));\n\n const rebuild = () => {\n model = buildModel(options, theme, hidden, cache);\n const { base, minSpan } = model;\n if (!zoomed) {\n view = copyView(base);\n } else {\n view = {\n x: model.zoom.x ? clampRange(view.x, base.x, minSpan.x) : [...base.x],\n y: model.zoom.y ? clampRange(view.y, base.y, minSpan.y) : [...base.y],\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n }\n annotations = resolveAnnotations(options.annotations, theme);\n if (hover) {\n const stillThere = hover.event.items.every(\n (it) =>\n model.series[it.seriesIndex] &&\n !model.series[it.seriesIndex].hidden &&\n it.index < model.series[it.seriesIndex].cols.count,\n );\n if (!stillThere) setHover(null);\n }\n invalidate();\n };\n\n // --------------------------------------------------------------- legend\n\n const legendLayout = (): ChartLegendLayout | null => {\n const option = options.legend;\n const named = options.series.filter((s) => s.name).length;\n const show = option === undefined ? named > 1 : !!option;\n if (!show) return null;\n const cfg = typeof option === \"object\" ? option : {};\n const position = cfg.position === \"bottom\" ? \"bottom\" : \"top\";\n const entries: ChartLegendEntry[] = [];\n let x = 4;\n let row = 0;\n for (const s of model.series) {\n const w = 14 + measure(s.name, 12) + 8;\n if (x + w > width - 4 && x > 4) {\n x = 4;\n row++;\n }\n entries.push({\n id: s.id,\n name: s.name,\n color: s.colorCss,\n shape:\n s.type === \"scatter\" ? \"dot\" : s.type === \"line\" ? \"line\" : \"square\",\n hidden: s.hidden,\n box: { x, y: row * LEGEND_ROW, width: w, height: LEGEND_ROW },\n });\n x += w + 10;\n }\n const legendHeight = (row + 1) * LEGEND_ROW + 6;\n if (position === \"bottom\") {\n for (const e of entries) e.box.y += height - legendHeight + 6;\n }\n return {\n entries,\n position,\n toggle: cfg.toggle ?? true,\n height: legendHeight,\n };\n };\n\n // ---------------------------------------------------------------- scene\n\n const tooltipLayout = (\n event: ChartHoverEvent,\n anchorX: number,\n anchorY: number,\n ): ChartTooltipLayout | null => {\n const tooltip = options.tooltip;\n if (tooltip === false) return null;\n const custom = typeof tooltip === \"object\" ? tooltip.render : undefined;\n let text: string[] | null = null;\n if (custom) {\n const result = custom(event);\n if (result === null || result === \"\") return null;\n if (typeof result === \"string\") text = result.split(\"\\n\");\n }\n const content = tooltipContent(model, event, scene?.layout.yTicks ?? null);\n const lineHeight = 18;\n const padding = 8;\n let w = 0;\n let lines: number;\n if (text) {\n for (const line of text) w = Math.max(w, measure(line, 12));\n lines = text.length;\n } else {\n w = measure(content.title, 12, 600) + (content.titleColor ? 14 : 0);\n for (const row of content.rows) {\n w = Math.max(\n w,\n (row.color ? 14 : 0) +\n measure(row.name, 12) +\n 16 +\n measure(row.value, 12, 600),\n );\n }\n lines = 1 + content.rows.length;\n }\n const boxW = Math.ceil(Math.max(w, 96) + padding * 2 + 4);\n const boxH = lines * lineHeight + padding * 2;\n let left = anchorX + 14;\n if (left + boxW > width - 4) left = anchorX - 14 - boxW;\n left = Math.max(4, Math.min(left, width - boxW - 4));\n const top = Math.max(4, Math.min(anchorY - boxH / 2, height - boxH - 4));\n return {\n content,\n text,\n box: { x: left, y: top, width: boxW, height: boxH },\n lineHeight,\n padding,\n };\n };\n\n const computeScene = (): ChartScene | null => {\n if (width <= 0 || height <= 0) return null;\n const legend = legendLayout();\n const legendTop = legend?.position === \"top\" ? legend.height : 0;\n const layout = layoutChart({\n model,\n view,\n theme,\n width,\n height: height - (legend?.height ?? 0),\n padding: options.padding,\n top: legendTop,\n measure: (text) => measure(text),\n });\n const labels = collectPointLabels(model, view, layout.scales);\n const occupied: Rect[] = [];\n const labelHeight = theme.fontSize + 4;\n for (const a of annotations) {\n if (a.type === \"text\" && a.text) {\n occupied.push(\n textBox(\n a,\n layout.scales,\n measure(a.text, theme.fontSize, a.weight),\n labelHeight,\n ),\n );\n continue;\n }\n if (a.type !== \"rect\" || !a.label) continue;\n // keep the dot labels off the area titles (drawForeground does the same)\n const s = layout.scales;\n const x0 = a.x0 === undefined ? layout.plot.x : s.xToPx(a.x0);\n const x1 =\n a.x1 === undefined ? layout.plot.x + layout.plot.width : s.xToPx(a.x1);\n const y0 =\n a.y0 === undefined ? layout.plot.y + layout.plot.height : s.yToPx(a.y0);\n const y1 = a.y1 === undefined ? layout.plot.y : s.yToPx(a.y1);\n const w = measure(a.label, theme.fontSize + 1, 600);\n const left = Math.min(x0, x1);\n const right = Math.max(x0, x1);\n const top = Math.min(y0, y1);\n const bottom = Math.max(y0, y1);\n const pos = a.labelPosition;\n occupied.push({\n x: pos.endsWith(\"left\")\n ? left + 10\n : pos.endsWith(\"right\")\n ? right - 10 - w\n : (left + right - w) / 2,\n y: pos.startsWith(\"top\")\n ? top + 10\n : pos.startsWith(\"bottom\")\n ? bottom - 10 - labelHeight\n : (top + bottom - labelHeight) / 2,\n width: w,\n height: labelHeight,\n });\n }\n const pointLabels = placeLabels(\n labels,\n layout.plot,\n (t) => measure(t),\n labelHeight - 2,\n occupied,\n );\n const next: ChartScene = {\n width,\n height,\n theme,\n model,\n view: copyView(view),\n layout,\n annotations,\n pointLabels,\n legend,\n hover: null,\n dragging: null,\n };\n scene = next;\n if (hover) {\n const crosshair = showsCrosshair(model, hover.event, options.crosshair);\n const cx = layout.scales.xToPx(hover.event.items[0].x);\n next.hover = {\n event: hover.event,\n marks: hoverMarks(model, layout.scales, hover.event),\n crosshairX:\n crosshair &&\n cx >= layout.plot.x &&\n cx <= layout.plot.x + layout.plot.width\n ? cx\n : null,\n tooltip:\n gesture?.kind === \"pan\" || gesture?.kind === \"point\"\n ? null\n : tooltipLayout(hover.event, hover.x, hover.y),\n };\n }\n if (gesture?.kind === \"point\") {\n const s = model.series[gesture.item.seriesIndex];\n next.dragging = {\n x: gesture.x,\n y: gesture.y,\n color: gesture.item.color,\n size: (s ? dotSize(s, gesture.item.index) : 8) + 6,\n };\n }\n const rect = layout.plot;\n const key = `${rect.x},${rect.y},${rect.width},${rect.height}`;\n if (key !== lastPlot) {\n lastPlot = key;\n emit(\"layout\", { ...rect });\n }\n return next;\n };\n\n const getScene = () => {\n if (sceneDirty || !scene) {\n sceneDirty = false;\n scene = computeScene();\n }\n return scene;\n };\n\n // ---------------------------------------------------------- interaction\n\n const scales = () => getScene()?.layout.scales ?? null;\n\n const setHover = (\n next: { event: ChartHoverEvent; x: number; y: number } | null,\n ) => {\n const changed = !sameHover(hover?.event ?? null, next?.event ?? null);\n hover = next;\n invalidate();\n if (changed) emit(\"hover\", next ? next.event : null);\n };\n\n const hitAt = (x: number, y: number, touch: boolean) => {\n const sc = scales();\n return sc\n ? hitTest(model, sc, scene?.layout.xTicks ?? null, x, y, touch ? 8 : 0)\n : null;\n };\n\n const inPlot = (x: number, y: number) => {\n const p = scales()?.plot;\n return (\n !!p && x >= p.x && x <= p.x + p.width && y >= p.y && y <= p.y + p.height\n );\n };\n\n const dataAt = (x: number, y: number) => {\n const sc = scales();\n if (!sc) return null;\n const { plot } = sc;\n const cx = Math.max(plot.x, Math.min(plot.x + plot.width, x));\n const cy = Math.max(plot.y, Math.min(plot.y + plot.height, y));\n return { x: sc.pxToX(cx), y: sc.pxToY(cy) };\n };\n\n const setViewInternal = (next: ChartView, notify: boolean) => {\n const { base, minSpan } = model;\n view = {\n x: clampRange(next.x, base.x, minSpan.x),\n y: clampRange(next.y, base.y, minSpan.y),\n };\n zoomed = !sameRange(view.x, base.x) || !sameRange(view.y, base.y);\n if (notify) emit(\"zoom\", copyView(view));\n invalidate();\n };\n\n const zoomAt = (x: number, y: number, factor: number) => {\n const sc = scales();\n if (!sc || (!model.zoom.x && !model.zoom.y)) return;\n const next = copyView(view);\n if (model.zoom.x) next.x = zoomRange(view.x, sc.pxToX(x), factor);\n if (model.zoom.y) next.y = zoomRange(view.y, sc.pxToY(y), factor);\n setViewInternal(next, true);\n };\n\n const resetZoom = () => {\n if (!zoomed) return;\n setViewInternal(copyView(model.base), true);\n };\n\n const legendAt = (x: number, y: number) =>\n getScene()?.legend?.entries.find(\n (e) =>\n x >= e.box.x &&\n x <= e.box.x + e.box.width &&\n y >= e.box.y &&\n y <= e.box.y + e.box.height,\n ) ?? null;\n\n const toggleSeries = (id: string) => {\n if (hidden.has(id)) hidden.delete(id);\n else hidden.add(id);\n rebuild();\n };\n\n const startPinch = () => {\n const [a, b] = [...pointers.values()];\n gesture = {\n kind: \"pinch\",\n view: copyView(view),\n distance: Math.max(1, Math.hypot(a.x - b.x, a.y - b.y)),\n midX: (a.x + b.x) / 2,\n midY: (a.y + b.y) / 2,\n };\n setHover(null);\n };\n\n const pointerDown = (x: number, y: number, o: ChartPointerOptions = {}) => {\n if (destroyed) return;\n const id = o.id ?? 0;\n const touch = !!o.touch;\n pointers.set(id, { x, y, startX: x, startY: y, touch, moved: false });\n const it = interaction();\n if (pointers.size === 2) {\n if (it && (model.zoom.x || model.zoom.y) && gesture?.kind !== \"point\")\n startPinch();\n return;\n }\n if (pointers.size > 2 || !it) {\n if (!it && touch) {\n const event = hitAt(x, y, true);\n setHover(event ? { event, x, y } : null);\n }\n return;\n }\n if (it.dragPoints) {\n const item = hitAt(x, y, touch)?.items.find(\n (i) => model.series[i.seriesIndex].type === \"scatter\",\n );\n if (item) {\n gesture = { kind: \"point\", item, x, y };\n return;\n }\n }\n if (zoomed && it.pan && inPlot(x, y)) {\n gesture = { kind: \"pan\", view: copyView(view), x, y };\n return;\n }\n gesture = null;\n if (touch) {\n const event = hitAt(x, y, true);\n setHover(event ? { event, x, y } : null);\n }\n };\n\n const pointerMove = (x: number, y: number, o: ChartPointerOptions = {}) => {\n if (destroyed) return;\n const id = o.id ?? 0;\n const p = pointers.get(id);\n if (p) {\n p.x = x;\n p.y = y;\n if (\n !p.moved &&\n Math.hypot(x - p.startX, y - p.startY) >\n (p.touch ? TOUCH_SLOP : TAP_SLOP)\n )\n p.moved = true;\n }\n if (gesture?.kind === \"pinch\" && pointers.size >= 2) {\n const [a, b] = [...pointers.values()];\n const distance = Math.max(1, Math.hypot(a.x - b.x, a.y - b.y));\n const midX = (a.x + b.x) / 2;\n const midY = (a.y + b.y) / 2;\n const sc = scales();\n if (!sc) return;\n const start = createScales(\n sc.plot,\n gesture.view,\n model.x.reverse,\n model.y.reverse,\n );\n const factor = gesture.distance / distance;\n const next = copyView(gesture.view);\n if (model.zoom.x) {\n next.x = zoomRange(gesture.view.x, start.pxToX(gesture.midX), factor);\n const shift = (midX - gesture.midX) * start.xPerPx * factor;\n next.x = panRange(next.x, model.x.reverse ? shift : -shift);\n }\n if (model.zoom.y) {\n next.y = zoomRange(gesture.view.y, start.pxToY(gesture.midY), factor);\n const shift = (midY - gesture.midY) * start.yPerPx * factor;\n next.y = panRange(next.y, model.y.reverse ? -shift : shift);\n }\n setViewInternal(next, true);\n return;\n }\n if (gesture?.kind === \"point\" && p) {\n if (!p.moved) return;\n gesture.x = x;\n gesture.y = y;\n const at = dataAt(x, y);\n invalidate();\n if (at) emit(\"drag\", { item: gesture.item, x: at.x, y: at.y });\n return;\n }\n if (gesture?.kind === \"pan\" && p) {\n if (!p.moved) return;\n const sc = scales();\n if (!sc) return;\n const dx = x - gesture.x;\n const dy = y - gesture.y;\n const next = copyView(gesture.view);\n if (model.zoom.x)\n next.x = panRange(\n gesture.view.x,\n -dx * sc.xPerPx * (model.x.reverse ? -1 : 1),\n );\n if (model.zoom.y)\n next.y = panRange(\n gesture.view.y,\n dy * sc.yPerPx * (model.y.reverse ? -1 : 1),\n );\n setViewInternal(next, true);\n return;\n }\n if (pointers.size > 1) return;\n // mouse hover, or a finger scrubbing along the data\n if (!p || p.touch || !o.touch) {\n const event = hitAt(x, y, !!p?.touch || !!o.touch);\n if (event || !p?.touch) setHover(event ? { event, x, y } : null);\n }\n };\n\n const pointerUp = (x: number, y: number, o: ChartPointerOptions = {}) => {\n if (destroyed) return;\n const id = o.id ?? 0;\n const p = pointers.get(id);\n pointers.delete(id);\n const current = gesture;\n if (current?.kind === \"pinch\") {\n if (pointers.size < 2) gesture = null;\n return;\n }\n gesture = null;\n if (!p) return;\n if (current?.kind === \"point\") {\n if (p.moved) {\n const at = dataAt(x, y);\n invalidate();\n if (at) emit(\"drop\", { item: current.item, x: at.x, y: at.y });\n return;\n }\n } else if (current?.kind === \"pan\" && p.moved) {\n invalidate();\n return;\n }\n if (p.moved) {\n if (p.touch) invalidate();\n return;\n }\n // tap / click\n const now = Date.now();\n if (\n p.touch &&\n now - lastTap.time < DOUBLE_TAP_MS &&\n Math.hypot(x - lastTap.x, y - lastTap.y) < 24 &&\n zoomed\n ) {\n lastTap = { time: 0, x, y };\n resetZoom();\n return;\n }\n lastTap = { time: now, x, y };\n const legend = legendAt(x, y);\n if (legend) {\n if (getScene()?.legend?.toggle) toggleSeries(legend.id);\n return;\n }\n const hit = hitAt(x, y, p.touch);\n if (hit) {\n if (p.touch) setHover({ event: hit, x, y });\n emit(\"click\", hit);\n return;\n }\n if (p.touch) setHover(null);\n if (inPlot(x, y)) {\n const at = dataAt(x, y);\n if (at) emit(\"plotClick\", at as ChartPlotClickEvent);\n }\n };\n\n const pointerCancel = (o: ChartPointerOptions = {}) => {\n pointers.delete(o.id ?? 0);\n if (gesture?.kind === \"point\" || pointers.size < 2) gesture = null;\n invalidate();\n };\n\n model = buildModel(options, theme, hidden, cache);\n rebuild();\n\n return {\n setOptions(next) {\n if (destroyed) return;\n const paletteChanged =\n (next.palette ?? []).join() !== (options.palette ?? []).join();\n options = next;\n if (paletteChanged) theme = createTheme(themeInput, options.palette);\n rebuild();\n },\n setTheme(next) {\n if (destroyed) return;\n themeInput = next;\n theme = createTheme(themeInput, options.palette);\n rebuild();\n },\n setSize(w, h) {\n if (w === width && h === height) return;\n width = Math.max(0, w);\n height = Math.max(0, h);\n invalidate();\n },\n getScene,\n pointerDown,\n pointerMove,\n pointerUp,\n pointerCancel,\n pointerLeave() {\n if (!gesture && hover) setHover(null);\n },\n zoomAt,\n resetZoom,\n getView: () => copyView(view),\n setView(next) {\n if (destroyed) return;\n setViewInternal({ x: next.x ?? view.x, y: next.y ?? view.y }, false);\n },\n toggleSeries,\n clearHover() {\n if (hover) setHover(null);\n },\n getPlotRect() {\n const p = getScene()?.layout.plot;\n return p ? { ...p } : null;\n },\n toPixel(x, y) {\n const sc = scales();\n return sc ? { x: sc.xToPx(x), y: sc.yToPx(y) } : null;\n },\n fromPixel(x, y) {\n const sc = scales();\n return sc ? { x: sc.pxToX(x), y: sc.pxToY(y) } : null;\n },\n on(type, listener) {\n let set = listeners[type] as Set<typeof listener> | undefined;\n if (!set) {\n set = new Set();\n (listeners as Record<string, unknown>)[type] = set;\n }\n set.add(listener);\n return () => {\n set.delete(listener);\n };\n },\n destroy() {\n destroyed = true;\n pointers.clear();\n for (const key of Object.keys(listeners))\n delete (listeners as Record<string, unknown>)[key];\n },\n };\n};\n\n// ------------------------------------------------------------- primitives\n\n/** A polyline (pixels of the chart): interleaved x, y */\nexport interface ChartLinePrimitive {\n kind: \"line\";\n seriesIndex: number;\n color: string;\n width: number;\n /** Runs of points without gaps */\n segments: number[][];\n}\n\nexport interface ChartAreaPrimitive {\n kind: \"area\";\n seriesIndex: number;\n color: string;\n opacity: number;\n /** Y pixel of the baseline */\n baseline: number;\n segments: number[][];\n}\n\nexport interface ChartBarPrimitive {\n kind: \"bars\";\n seriesIndex: number;\n color: string;\n /** Interleaved x, y, width, height */\n rects: number[];\n}\n\nexport interface ChartDotPrimitive {\n kind: \"dots\";\n seriesIndex: number;\n opacity: number;\n /** Interleaved x, y, diameter */\n dots: number[];\n /** CSS color of every dot */\n colors: string[];\n}\n\nexport type ChartPrimitive =\n | ChartLinePrimitive\n | ChartAreaPrimitive\n | ChartBarPrimitive\n | ChartDotPrimitive;\n\nexport interface ChartPrimitiveOptions {\n /**\n * Upper bound of the dots drawn per series: above it the dots are merged\n * into one per occupied cell of their size\n * @default 4000\n */\n maxDots?: number;\n /**\n * Upper bound of the bars drawn per series: above it neighboring bars\n * sharing a pixel column are merged\n * @default 2000\n */\n maxBars?: number;\n /**\n * Width in pixels of the columns lines are decimated to (at most four\n * points per column); larger values mean fewer shapes\n * @default 1\n */\n columnWidth?: number;\n /** Size of the cells dots are merged into (the dot size by default) */\n dotCell?: number;\n}\n\nconst visibleRange = (\n x: Float64Array,\n count: number,\n sorted: boolean,\n range: Range,\n): [number, number] => {\n if (!sorted) return [0, count];\n const [a, b] = range[0] <= range[1] ? range : [range[1], range[0]];\n return [\n Math.max(0, lowerBound(x, count, a) - 1),\n Math.min(count, lowerBound(x, count, b) + 1),\n ];\n};\n\n/**\n * Data of a scene as simple shapes in pixels of the chart, for hosts\n * without a canvas (React Native views, SVG): lines are decimated to a few\n * points per pixel column and large point sets are merged per cell, so the\n * number of shapes stays bounded by the size of the chart.\n */\nexport const scenePrimitives = (\n scene: ChartScene,\n limits: ChartPrimitiveOptions = {},\n): ChartPrimitive[] => {\n const { model, view, layout } = scene;\n const sc = layout.scales;\n const { plot } = layout;\n const maxDots = limits.maxDots ?? 4000;\n const maxBars = limits.maxBars ?? 2000;\n const column = Math.max(1, limits.columnWidth ?? 1);\n const order = { area: 0, bar: 1, line: 2, scatter: 3 } as const;\n const out: ChartPrimitive[] = [];\n const series = model.series\n .filter((s) => !s.hidden && s.cols.count > 0)\n .sort((a, b) => order[a.type] - order[b.type] || a.index - b.index);\n for (const s of series) {\n const { x, y, count, sorted } = s.cols;\n if (s.type === \"line\" || s.type === \"area\") {\n const [start, end] = visibleRange(x, count, sorted, view.x);\n const interleaved = new Float64Array((end - start) * 2);\n for (let i = start; i < end; i++) {\n interleaved[(i - start) * 2] = x[i];\n interleaved[(i - start) * 2 + 1] = y[i];\n }\n const n = end - start;\n const line =\n sorted && n > (plot.width * 2) / column\n ? decimateMinMax(interleaved, 0, n, (v) => sc.xToPx(v) / column)\n : { points: interleaved, length: n };\n const segments: number[][] = [];\n let run: number[] = [];\n for (let i = 0; i < line.length; i++) {\n const xv = line.points[i * 2];\n const yv = line.points[i * 2 + 1];\n if (!Number.isFinite(xv) || !Number.isFinite(yv)) {\n if (run.length) segments.push(run);\n run = [];\n continue;\n }\n run.push(sc.xToPx(xv), sc.yToPx(yv));\n }\n if (run.length) segments.push(run);\n if (s.type === \"area\") {\n out.push({\n kind: \"area\",\n seriesIndex: s.index,\n color: s.colorCss,\n opacity: s.opacity,\n baseline: sc.yToPx(model.baseline),\n segments,\n });\n }\n out.push({\n kind: \"line\",\n seriesIndex: s.index,\n color: s.colorCss,\n width: s.type === \"area\" ? Math.min(s.lineWidth, 2) : s.lineWidth,\n segments,\n });\n continue;\n }\n if (s.type === \"bar\" && s.barBase && s.barTop) {\n const [start, end] = visibleRange(x, count, sorted, view.x);\n const half = Math.max(s.barHalfWidth / sc.xPerPx, 0.5);\n const rects: number[] = [];\n const merge = end - start > maxBars;\n let lastCol = NaN;\n for (let i = start; i < end; i++) {\n const a = s.barBase[i];\n const b = s.barTop[i];\n if (!Number.isFinite(a) || !Number.isFinite(b)) continue;\n const cx = sc.xToPx(x[i] + s.barOffset);\n if (cx + half < plot.x || cx - half > plot.x + plot.width) continue;\n const ya = sc.yToPx(a);\n const yb = sc.yToPx(b);\n const top = Math.min(ya, yb);\n const h = Math.max(1, Math.abs(ya - yb));\n const col = Math.floor(cx);\n if (merge && col === lastCol && rects.length) {\n // widen the previous bar of the same pixel column vertically\n const k = rects.length - 4;\n const bottom = Math.max(rects[k + 1] + rects[k + 3], top + h);\n rects[k + 1] = Math.min(rects[k + 1], top);\n rects[k + 3] = bottom - rects[k + 1];\n continue;\n }\n lastCol = col;\n rects.push(cx - half, top, half * 2, h);\n }\n out.push({\n kind: \"bars\",\n seriesIndex: s.index,\n color: s.colorCss,\n rects,\n });\n continue;\n }\n // scatter\n const dots: number[] = [];\n const colors: string[] = [];\n const colorOf = (i: number) => {\n const c = s.pointColors?.[i];\n return c ? toCss(c) : s.colorCss;\n };\n const visible: number[] = [];\n for (let i = 0; i < count; i++) {\n const xv = x[i];\n const yv = y[i];\n if (!Number.isFinite(xv) || !Number.isFinite(yv)) continue;\n const px = sc.xToPx(xv);\n const py = sc.yToPx(yv);\n if (\n px < plot.x ||\n px > plot.x + plot.width ||\n py < plot.y ||\n py > plot.y + plot.height\n )\n continue;\n visible.push(i);\n }\n if (visible.length > maxDots) {\n const cell = Math.max(2, limits.dotCell ?? s.pointSize * 0.8);\n const cols = Math.ceil(plot.width / cell) + 1;\n const owner = new Map<number, number>();\n for (const i of visible) {\n const cx = Math.floor((sc.xToPx(x[i]) - plot.x) / cell);\n const cy = Math.floor((sc.yToPx(y[i]) - plot.y) / cell);\n owner.set(cy * cols + cx, i);\n }\n for (const [key, i] of owner) {\n dots.push(\n plot.x + ((key % cols) + 0.5) * cell,\n plot.y + (Math.floor(key / cols) + 0.5) * cell,\n cell,\n );\n colors.push(colorOf(i));\n }\n } else {\n for (const i of visible) {\n dots.push(sc.xToPx(x[i]), sc.yToPx(y[i]), dotSize(s, i));\n colors.push(colorOf(i));\n }\n }\n out.push({\n kind: \"dots\",\n seriesIndex: s.index,\n opacity: s.opacity,\n dots,\n colors,\n });\n }\n return out;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=e=>typeof e==`object`&&!!e&&!(`length`in e)&&`y`in e,t=(e,t)=>(n,r)=>{if(typeof n==`number`)return n;if(n instanceof Date)return n.getTime();if(typeof n==`string`){if(e===`category`)return t(n);if(e===`time`)return Date.parse(n);let i=Number(n);return Number.isNaN(i)?r:i}return r},n=e=>typeof e==`number`?e:e==null?NaN:Number(e),r=t=>{let n=new Set,r=e=>{typeof e==`string`&&n.add(e)};for(let n of t){if(e(n)){let e=n.x;if(e&&!ArrayBuffer.isView(e))for(let t=0;t<e.length;t++)r(e[t]);continue}let t=n;for(let e=0;e<t.length;e++){let n=t[e];Array.isArray(n)?r(n[0]):n&&typeof n==`object`&&r(n.x)}}return[...n]},i=(e,t,n,r)=>{let i=1/0,a=-1/0,o=1/0,s=-1/0,c=!0,l=-1/0;for(let r=0;r<n;r++){let n=e[r];if(!Number.isFinite(n)){t[r]=NaN;continue}n<l&&(c=!1),l=n;let u=t[r];Number.isFinite(u)&&(n<i&&(i=n),n>a&&(a=n),u<o&&(o=u),u>s&&(s=u))}let u=i>a;return{x:e,y:t,count:n,sorted:c,xMin:u?NaN:i,xMax:u?NaN:a,yMin:u?NaN:o,yMax:u?NaN:s,...r}},a=(t,r)=>{let a={size:null,colors:null,labels:null};if(e(t)){let e=t.y.length,o=new Float64Array(e),s=new Float64Array(e),c=t.x;for(let i=0;i<e;i++)s[i]=n(t.y[i]),o[i]=c?r(c[i],i):i;let l=null;if(t.size){l=new Float32Array(e);for(let r=0;r<e;r++)l[r]=n(t.size[r])}return i(o,s,e,{...a,size:l})}let o=t,s=o.length,c=new Float64Array(s),l=new Float64Array(s),u=null,d=null,f=null;for(let e=0;e<s;e++){let t=o[e];if(t==null||typeof t==`number`)c[e]=e,l[e]=n(t);else if(Array.isArray(t))c[e]=r(t[0],e),l[e]=n(t[1]);else if(typeof t==`object`){let i=t;c[e]=i.x===void 0?e:r(i.x,e),l[e]=n(i.y),i.size!==void 0&&(u??(u=new Float32Array(s).fill(NaN)),u[e]=i.size),i.color!==void 0&&(d??(d=Array(s)),d[e]=i.color),i.label!==void 0&&(f??(f=Array(s)),f[e]=i.label)}else c[e]=e,l[e]=NaN}return i(c,l,s,{size:u,colors:d,labels:f})},o=(e,t,n)=>{let r=0,i=t;for(;r<i;){let t=r+i>>>1;e[t]<n?r=t+1:i=t}return r},s=(e,t,n,r)=>{if(n===0)return-1;let i=o(e,n,r),a=i-1,s=i;for(;a>=0&&!Number.isFinite(t[a]);)a--;for(;s<n&&!Number.isFinite(t[s]);)s++;return a<0?s<n?s:-1:s>=n||r-e[a]<=e[s]-r?a:s};exports.collectCategories=r,exports.lowerBound=o,exports.nearestIndex=s,exports.normalizeData=a,exports.xResolver=t;
|
|
2
|
+
//# sourceMappingURL=data.cjs.map
|