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,220 @@
|
|
|
1
|
+
import { instanceRange as e } from "./range.js";
|
|
2
|
+
import { WGSL_AREA as t, WGSL_BAR as n, WGSL_LINE as r, WGSL_SCATTER as i } from "./shaders.js";
|
|
3
|
+
//#region src/engine/renderers/webgpu.ts
|
|
4
|
+
var a = 64, o = async (o, s, c = !1) => {
|
|
5
|
+
let l = navigator.gpu;
|
|
6
|
+
if (!l) return null;
|
|
7
|
+
let u = await l.requestAdapter();
|
|
8
|
+
if (!u) return null;
|
|
9
|
+
let d = u;
|
|
10
|
+
if (c && (d.info?.isFallbackAdapter || d.isFallbackAdapter)) return null;
|
|
11
|
+
let f = await u.requestDevice(), p = o.getContext("webgpu");
|
|
12
|
+
if (!p) return f.destroy(), null;
|
|
13
|
+
let m = l.getPreferredCanvasFormat();
|
|
14
|
+
p.configure({
|
|
15
|
+
device: f,
|
|
16
|
+
format: m,
|
|
17
|
+
alphaMode: "premultiplied"
|
|
18
|
+
});
|
|
19
|
+
let h = !1;
|
|
20
|
+
f.lost.then(() => {
|
|
21
|
+
h || s();
|
|
22
|
+
});
|
|
23
|
+
let g = f.createBindGroupLayout({ entries: [{
|
|
24
|
+
binding: 0,
|
|
25
|
+
visibility: 3,
|
|
26
|
+
buffer: { type: "uniform" }
|
|
27
|
+
}] }), _ = f.createPipelineLayout({ bindGroupLayouts: [g] }), v = {
|
|
28
|
+
color: {
|
|
29
|
+
srcFactor: "one",
|
|
30
|
+
dstFactor: "one-minus-src-alpha",
|
|
31
|
+
operation: "add"
|
|
32
|
+
},
|
|
33
|
+
alpha: {
|
|
34
|
+
srcFactor: "one",
|
|
35
|
+
dstFactor: "one-minus-src-alpha",
|
|
36
|
+
operation: "add"
|
|
37
|
+
}
|
|
38
|
+
}, y = (e, t) => {
|
|
39
|
+
let n = f.createShaderModule({ code: e });
|
|
40
|
+
return f.createRenderPipeline({
|
|
41
|
+
layout: _,
|
|
42
|
+
vertex: {
|
|
43
|
+
module: n,
|
|
44
|
+
entryPoint: "vs",
|
|
45
|
+
buffers: t
|
|
46
|
+
},
|
|
47
|
+
fragment: {
|
|
48
|
+
module: n,
|
|
49
|
+
entryPoint: "fs",
|
|
50
|
+
targets: [{
|
|
51
|
+
format: m,
|
|
52
|
+
blend: v
|
|
53
|
+
}]
|
|
54
|
+
},
|
|
55
|
+
primitive: { topology: "triangle-strip" }
|
|
56
|
+
});
|
|
57
|
+
}, b = [{
|
|
58
|
+
arrayStride: 8,
|
|
59
|
+
stepMode: "instance",
|
|
60
|
+
attributes: [{
|
|
61
|
+
shaderLocation: 0,
|
|
62
|
+
offset: 0,
|
|
63
|
+
format: "float32x2"
|
|
64
|
+
}]
|
|
65
|
+
}, {
|
|
66
|
+
arrayStride: 8,
|
|
67
|
+
stepMode: "instance",
|
|
68
|
+
attributes: [{
|
|
69
|
+
shaderLocation: 1,
|
|
70
|
+
offset: 0,
|
|
71
|
+
format: "float32x2"
|
|
72
|
+
}]
|
|
73
|
+
}], x = {
|
|
74
|
+
line: y(r, b),
|
|
75
|
+
area: y(t, b),
|
|
76
|
+
bar: y(n, [{
|
|
77
|
+
arrayStride: 12,
|
|
78
|
+
stepMode: "instance",
|
|
79
|
+
attributes: [{
|
|
80
|
+
shaderLocation: 0,
|
|
81
|
+
offset: 0,
|
|
82
|
+
format: "float32x3"
|
|
83
|
+
}]
|
|
84
|
+
}]),
|
|
85
|
+
scatter: y(i, [{
|
|
86
|
+
arrayStride: 16,
|
|
87
|
+
stepMode: "instance",
|
|
88
|
+
attributes: [
|
|
89
|
+
{
|
|
90
|
+
shaderLocation: 0,
|
|
91
|
+
offset: 0,
|
|
92
|
+
format: "float32x2"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
shaderLocation: 1,
|
|
96
|
+
offset: 8,
|
|
97
|
+
format: "float32"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
shaderLocation: 2,
|
|
101
|
+
offset: 12,
|
|
102
|
+
format: "unorm8x4"
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}])
|
|
106
|
+
}, S = /* @__PURE__ */ new Map(), C = new Float32Array(a / 4), w = (e) => {
|
|
107
|
+
switch (e.kind) {
|
|
108
|
+
case "line":
|
|
109
|
+
case "area": return e.points.subarray(0, e.count * 2);
|
|
110
|
+
case "bar": return e.instances.subarray(0, e.count * 3);
|
|
111
|
+
default: return e.instances;
|
|
112
|
+
}
|
|
113
|
+
}, T = (e) => {
|
|
114
|
+
let t = S.get(e.key);
|
|
115
|
+
if (t && t.version === e.version && t.kind === e.kind) return t;
|
|
116
|
+
t?.vertex?.destroy();
|
|
117
|
+
let n = w(e), r = Math.max(16, Math.ceil(n.byteLength / 4) * 4), i = n.byteLength > 0 ? f.createBuffer({
|
|
118
|
+
size: r,
|
|
119
|
+
usage: 40
|
|
120
|
+
}) : null;
|
|
121
|
+
if (i && (n instanceof Float32Array ? f.queue.writeBuffer(i, 0, n.buffer, n.byteOffset, n.byteLength) : f.queue.writeBuffer(i, 0, n)), t) t.version = e.version, t.kind = e.kind, t.vertex = i;
|
|
122
|
+
else {
|
|
123
|
+
let n = f.createBuffer({
|
|
124
|
+
size: a,
|
|
125
|
+
usage: 72
|
|
126
|
+
});
|
|
127
|
+
t = {
|
|
128
|
+
version: e.version,
|
|
129
|
+
kind: e.kind,
|
|
130
|
+
vertex: i,
|
|
131
|
+
uniform: n,
|
|
132
|
+
bindGroup: f.createBindGroup({
|
|
133
|
+
layout: g,
|
|
134
|
+
entries: [{
|
|
135
|
+
binding: 0,
|
|
136
|
+
resource: { buffer: n }
|
|
137
|
+
}]
|
|
138
|
+
})
|
|
139
|
+
}, S.set(e.key, t);
|
|
140
|
+
}
|
|
141
|
+
return t;
|
|
142
|
+
}, E = (e, t) => {
|
|
143
|
+
switch (e.kind) {
|
|
144
|
+
case "line": return [
|
|
145
|
+
e.width * t.dpr / 2,
|
|
146
|
+
0,
|
|
147
|
+
0,
|
|
148
|
+
0
|
|
149
|
+
];
|
|
150
|
+
case "area": return [
|
|
151
|
+
e.baseline,
|
|
152
|
+
e.opacity,
|
|
153
|
+
0,
|
|
154
|
+
0
|
|
155
|
+
];
|
|
156
|
+
case "bar": return [
|
|
157
|
+
e.halfWidth,
|
|
158
|
+
e.radius,
|
|
159
|
+
0,
|
|
160
|
+
0
|
|
161
|
+
];
|
|
162
|
+
default: return [
|
|
163
|
+
e.opacity,
|
|
164
|
+
e.stroke,
|
|
165
|
+
0,
|
|
166
|
+
0
|
|
167
|
+
];
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
return {
|
|
171
|
+
kind: "webgpu",
|
|
172
|
+
canvas: o,
|
|
173
|
+
resize(e, t) {
|
|
174
|
+
o.width = Math.max(1, e), o.height = Math.max(1, t);
|
|
175
|
+
},
|
|
176
|
+
render(t, n) {
|
|
177
|
+
if (h) return;
|
|
178
|
+
let r = /* @__PURE__ */ new Set(), i = f.createCommandEncoder(), a = i.beginRenderPass({ colorAttachments: [{
|
|
179
|
+
view: p.getCurrentTexture().createView(),
|
|
180
|
+
clearValue: {
|
|
181
|
+
r: 0,
|
|
182
|
+
g: 0,
|
|
183
|
+
b: 0,
|
|
184
|
+
a: 0
|
|
185
|
+
},
|
|
186
|
+
loadOp: "clear",
|
|
187
|
+
storeOp: "store"
|
|
188
|
+
}] }), o = n.transform;
|
|
189
|
+
for (let i of t) {
|
|
190
|
+
r.add(i.key);
|
|
191
|
+
let [t, s] = e(i, n);
|
|
192
|
+
if (s <= 0) continue;
|
|
193
|
+
let c = T(i);
|
|
194
|
+
c.vertex && (C.set([
|
|
195
|
+
o.xScale,
|
|
196
|
+
o.xOffset,
|
|
197
|
+
o.yScale,
|
|
198
|
+
o.yOffset,
|
|
199
|
+
n.width,
|
|
200
|
+
n.height,
|
|
201
|
+
n.dpr,
|
|
202
|
+
0,
|
|
203
|
+
...i.color,
|
|
204
|
+
...E(i, n)
|
|
205
|
+
], 0), f.queue.writeBuffer(c.uniform, 0, C), a.setPipeline(x[i.kind]), a.setBindGroup(0, c.bindGroup), a.setVertexBuffer(0, c.vertex), (i.kind === "line" || i.kind === "area") && a.setVertexBuffer(1, c.vertex, 8), a.draw(4, s, 0, t));
|
|
206
|
+
}
|
|
207
|
+
a.end(), f.queue.submit([i.finish()]);
|
|
208
|
+
for (let [e, t] of S) r.has(e) || (t.vertex?.destroy(), t.uniform.destroy(), S.delete(e));
|
|
209
|
+
},
|
|
210
|
+
destroy() {
|
|
211
|
+
h = !0;
|
|
212
|
+
for (let e of S.values()) e.vertex?.destroy(), e.uniform.destroy();
|
|
213
|
+
S.clear(), p.unconfigure(), f.destroy();
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
//#endregion
|
|
218
|
+
export { o as createWebGpuRenderer };
|
|
219
|
+
|
|
220
|
+
//# sourceMappingURL=webgpu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgpu.js","names":["UNIFORM_SIZE","createWebGpuRenderer","gpu","adapter","fallback","requireHardware","device","context","canvas","format","destroyed","onLost","bindGroupLayout","layout","blend","pipeline","module","segment","pipelines","WGSL_LINE","WGSL_AREA","WGSL_BAR","WGSL_SCATTER","resources","uniformData","vertexData","item","upload","res","data","size","vertex","uniform","params","frame","width","height","seen","encoder","pass","t","items","first","instances","instanceRange","key"],"sources":["../../../../../charts/src/engine/renderers/webgpu.ts"],"sourcesContent":["// WebGPU backend: one instanced draw per series.\n\nimport type { ChartRendererKind } from \"../types\";\nimport { instanceRange } from \"./range\";\nimport { WGSL_AREA, WGSL_BAR, WGSL_LINE, WGSL_SCATTER } from \"./shaders\";\nimport {\n SCATTER_STRIDE,\n type ChartRenderer,\n type RenderFrame,\n type RenderItem,\n type RendererLostHandler,\n} from \"./types\";\n\n// lib.dom has the WebGPU interfaces but not these constant objects\nconst BUFFER_VERTEX = 0x20;\nconst BUFFER_UNIFORM = 0x40;\nconst BUFFER_COPY_DST = 0x08;\nconst STAGE_VERTEX = 0x1;\nconst STAGE_FRAGMENT = 0x2;\n\nconst UNIFORM_SIZE = 64;\n\ninterface ItemResources {\n version: number;\n kind: RenderItem[\"kind\"];\n vertex: GPUBuffer | null;\n uniform: GPUBuffer;\n bindGroup: GPUBindGroup;\n}\n\ntype GpuNavigator = Navigator & { gpu?: GPU };\n\n/** Whether `navigator.gpu` exists (an adapter may still be unavailable) */\nexport const hasWebGpu = (): boolean =>\n typeof navigator !== \"undefined\" && !!(navigator as GpuNavigator).gpu;\n\nexport const createWebGpuRenderer = async (\n canvas: HTMLCanvasElement,\n onLost: RendererLostHandler,\n /** Refuses fallback (software) adapters */\n requireHardware = false,\n): Promise<ChartRenderer | null> => {\n const gpu = (navigator as GpuNavigator).gpu;\n if (!gpu) return null;\n const adapter = await gpu.requestAdapter();\n if (!adapter) return null;\n const fallback = adapter as GPUAdapter & {\n isFallbackAdapter?: boolean;\n info?: { isFallbackAdapter?: boolean };\n };\n if (\n requireHardware &&\n (fallback.info?.isFallbackAdapter || fallback.isFallbackAdapter)\n ) {\n return null;\n }\n const device = await adapter.requestDevice();\n const context = canvas.getContext(\"webgpu\") as GPUCanvasContext | null;\n if (!context) {\n device.destroy();\n return null;\n }\n const format = gpu.getPreferredCanvasFormat();\n context.configure({ device, format, alphaMode: \"premultiplied\" });\n\n let destroyed = false;\n void device.lost.then(() => {\n if (!destroyed) onLost();\n });\n\n const bindGroupLayout = device.createBindGroupLayout({\n entries: [\n {\n binding: 0,\n visibility: STAGE_VERTEX | STAGE_FRAGMENT,\n buffer: { type: \"uniform\" },\n },\n ],\n });\n const layout = device.createPipelineLayout({\n bindGroupLayouts: [bindGroupLayout],\n });\n const blend: GPUBlendState = {\n color: {\n srcFactor: \"one\",\n dstFactor: \"one-minus-src-alpha\",\n operation: \"add\",\n },\n alpha: {\n srcFactor: \"one\",\n dstFactor: \"one-minus-src-alpha\",\n operation: \"add\",\n },\n };\n const pipeline = (code: string, buffers: GPUVertexBufferLayout[]) => {\n const module = device.createShaderModule({ code });\n return device.createRenderPipeline({\n layout,\n vertex: { module, entryPoint: \"vs\", buffers },\n fragment: {\n module,\n entryPoint: \"fs\",\n targets: [{ format, blend }],\n },\n primitive: { topology: \"triangle-strip\" },\n });\n };\n const segment: GPUVertexBufferLayout[] = [\n {\n arrayStride: 8,\n stepMode: \"instance\",\n attributes: [{ shaderLocation: 0, offset: 0, format: \"float32x2\" }],\n },\n {\n arrayStride: 8,\n stepMode: \"instance\",\n attributes: [{ shaderLocation: 1, offset: 0, format: \"float32x2\" }],\n },\n ];\n const pipelines = {\n line: pipeline(WGSL_LINE, segment),\n area: pipeline(WGSL_AREA, segment),\n bar: pipeline(WGSL_BAR, [\n {\n arrayStride: 12,\n stepMode: \"instance\",\n attributes: [{ shaderLocation: 0, offset: 0, format: \"float32x3\" }],\n },\n ]),\n scatter: pipeline(WGSL_SCATTER, [\n {\n arrayStride: SCATTER_STRIDE,\n stepMode: \"instance\",\n attributes: [\n { shaderLocation: 0, offset: 0, format: \"float32x2\" },\n { shaderLocation: 1, offset: 8, format: \"float32\" },\n { shaderLocation: 2, offset: 12, format: \"unorm8x4\" },\n ],\n },\n ]),\n };\n\n const resources = new Map<string, ItemResources>();\n const uniformData = new Float32Array(UNIFORM_SIZE / 4);\n\n const vertexData = (item: RenderItem): ArrayBuffer | Float32Array => {\n switch (item.kind) {\n case \"line\":\n case \"area\":\n return item.points.subarray(0, item.count * 2);\n case \"bar\":\n return item.instances.subarray(0, item.count * 3);\n default:\n return item.instances;\n }\n };\n\n const upload = (item: RenderItem): ItemResources => {\n let res = resources.get(item.key);\n if (res && res.version === item.version && res.kind === item.kind) {\n return res;\n }\n res?.vertex?.destroy();\n const data = vertexData(item);\n const size = Math.max(16, Math.ceil(data.byteLength / 4) * 4);\n const vertex =\n data.byteLength > 0\n ? device.createBuffer({ size, usage: BUFFER_VERTEX | BUFFER_COPY_DST })\n : null;\n if (vertex) {\n if (data instanceof Float32Array) {\n device.queue.writeBuffer(\n vertex,\n 0,\n data.buffer,\n data.byteOffset,\n data.byteLength,\n );\n } else {\n device.queue.writeBuffer(vertex, 0, data);\n }\n }\n if (!res) {\n const uniform = device.createBuffer({\n size: UNIFORM_SIZE,\n usage: BUFFER_UNIFORM | BUFFER_COPY_DST,\n });\n res = {\n version: item.version,\n kind: item.kind,\n vertex,\n uniform,\n bindGroup: device.createBindGroup({\n layout: bindGroupLayout,\n entries: [{ binding: 0, resource: { buffer: uniform } }],\n }),\n };\n resources.set(item.key, res);\n } else {\n res.version = item.version;\n res.kind = item.kind;\n res.vertex = vertex;\n }\n return res;\n };\n\n const params = (item: RenderItem, frame: RenderFrame): number[] => {\n switch (item.kind) {\n case \"line\":\n return [(item.width * frame.dpr) / 2, 0, 0, 0];\n case \"area\":\n return [item.baseline, item.opacity, 0, 0];\n case \"bar\":\n return [item.halfWidth, item.radius, 0, 0];\n default:\n return [item.opacity, item.stroke, 0, 0];\n }\n };\n\n const renderer: ChartRenderer = {\n kind: \"webgpu\" satisfies ChartRendererKind,\n canvas,\n resize(width, height) {\n canvas.width = Math.max(1, width);\n canvas.height = Math.max(1, height);\n },\n render(items, frame) {\n if (destroyed) return;\n const seen = new Set<string>();\n const encoder = device.createCommandEncoder();\n const pass = encoder.beginRenderPass({\n colorAttachments: [\n {\n view: context.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 0 },\n loadOp: \"clear\",\n storeOp: \"store\",\n },\n ],\n });\n const t = frame.transform;\n for (const item of items) {\n seen.add(item.key);\n const [first, instances] = instanceRange(item, frame);\n if (instances <= 0) continue;\n const res = upload(item);\n if (!res.vertex) continue;\n uniformData.set(\n [\n t.xScale,\n t.xOffset,\n t.yScale,\n t.yOffset,\n frame.width,\n frame.height,\n frame.dpr,\n 0,\n ...item.color,\n ...params(item, frame),\n ],\n 0,\n );\n device.queue.writeBuffer(res.uniform, 0, uniformData);\n pass.setPipeline(pipelines[item.kind]);\n pass.setBindGroup(0, res.bindGroup);\n pass.setVertexBuffer(0, res.vertex);\n if (item.kind === \"line\" || item.kind === \"area\") {\n pass.setVertexBuffer(1, res.vertex, 8);\n }\n pass.draw(4, instances, 0, first);\n }\n pass.end();\n device.queue.submit([encoder.finish()]);\n for (const [key, res] of resources) {\n if (!seen.has(key)) {\n res.vertex?.destroy();\n res.uniform.destroy();\n resources.delete(key);\n }\n }\n },\n destroy() {\n destroyed = true;\n for (const res of resources.values()) {\n res.vertex?.destroy();\n res.uniform.destroy();\n }\n resources.clear();\n context.unconfigure();\n device.destroy();\n },\n };\n return renderer;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=Math.sqrt(50),t=Math.sqrt(10),n=Math.sqrt(2),r=(r,i,a)=>{let o=Math.abs(i-r);if(!(o>0)||!Number.isFinite(o))return 0;let s=o/Math.max(1,a),c=10**Math.floor(Math.log10(s)),l=s/c;return(l>=e?10:l>=t?5:l>=n?2:1)*c},i=(e,t)=>{let n=Math.max(0,-Math.floor(Math.log10(t))+1);return n>0&&n<20?+e.toFixed(n):e},a=(e,t,n)=>{e>t&&([e,t]=[t,e]);let a=r(e,t,n);if(!a)return Number.isFinite(e)?[e]:[];let o=Math.ceil(e/a-1e-9),s=Math.floor(t/a+1e-9),c=[];for(let e=o;e<=s&&c.length<1e3;e++)c.push(i(e*a,a));return c},o=(e,t,n)=>{e>t&&([e,t]=[t,e]);let a=r(e,t,n);for(let o=0;o<3&&a;o++){let o=Math.floor(e/a)*a,s=Math.ceil(t/a)*a;e=i(o,a),t=i(s,a);let c=r(e,t,n);if(c===a)break;a=c}return[e,t]},s=(e,t,n=[0,1])=>{if(!Number.isFinite(e)||!Number.isFinite(t))return n;if(e>t&&([e,t]=[t,e]),t-e>0)return[e,t];let r=e===0?1:Math.abs(e)*.1;return[e-r,t+r]},c=e=>e>0&&Number.isFinite(e)?Math.min(12,Math.max(0,-Math.floor(Math.log10(e)+1e-9))):0;exports.ensureSpan=s,exports.linearTicks=a,exports.niceDomain=o,exports.stepDecimals=c,exports.tickStep=r;
|
|
2
|
+
//# sourceMappingURL=scale.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scale.cjs","names":["E10","E5","E2","tickStep","span","max","min","raw","count","base","error","roundTo","decimals","step","value","linearTicks","start","end","ticks","i","niceDomain","nextMin","nextMax","next","ensureSpan","fallback","pad","stepDecimals"],"sources":["../../../../charts/src/engine/scale.ts"],"sourcesContent":["// Numeric ticks and ranges.\n\nconst E10 = Math.sqrt(50);\nconst E5 = Math.sqrt(10);\nconst E2 = Math.sqrt(2);\n\n/** Tick step close to `(max - min) / count`, of the form 1, 2 or 5 × 10^k */\nexport const tickStep = (min: number, max: number, count: number): number => {\n const span = Math.abs(max - min);\n if (!(span > 0) || !Number.isFinite(span)) return 0;\n const raw = span / Math.max(1, count);\n const power = Math.floor(Math.log10(raw));\n const base = 10 ** power;\n const error = raw / base;\n const factor = error >= E10 ? 10 : error >= E5 ? 5 : error >= E2 ? 2 : 1;\n return factor * base;\n};\n\n/** Rounds a value computed from a step (avoids 0.30000000000000004) */\nconst roundTo = (value: number, step: number): number => {\n const decimals = Math.max(0, -Math.floor(Math.log10(step)) + 1);\n return decimals > 0 && decimals < 20 ? +value.toFixed(decimals) : value;\n};\n\n/** Tick values inside [min, max] */\nexport const linearTicks = (\n min: number,\n max: number,\n count: number,\n): number[] => {\n if (min > max) [min, max] = [max, min];\n const step = tickStep(min, max, count);\n if (!step) return Number.isFinite(min) ? [min] : [];\n const start = Math.ceil(min / step - 1e-9);\n const end = Math.floor(max / step + 1e-9);\n const ticks: number[] = [];\n // Guard against pathological ranges\n for (let i = start; i <= end && ticks.length < 1000; i++) {\n ticks.push(roundTo(i * step, step));\n }\n return ticks;\n};\n\n/** Extends [min, max] to tick boundaries */\nexport const niceDomain = (\n min: number,\n max: number,\n count: number,\n): [number, number] => {\n if (min > max) [min, max] = [max, min];\n let step = tickStep(min, max, count);\n for (let i = 0; i < 3 && step; i++) {\n const nextMin = Math.floor(min / step) * step;\n const nextMax = Math.ceil(max / step) * step;\n min = roundTo(nextMin, step);\n max = roundTo(nextMax, step);\n const next = tickStep(min, max, count);\n if (next === step) break;\n step = next;\n }\n return [min, max];\n};\n\n/**\n * Range covering [min, max] with a usable span: a single value (or no data)\n * becomes a small range around it.\n */\nexport const ensureSpan = (\n min: number,\n max: number,\n fallback: [number, number] = [0, 1],\n): [number, number] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return fallback;\n if (min > max) [min, max] = [max, min];\n if (max - min > 0) return [min, max];\n const pad = min === 0 ? 1 : Math.abs(min) * 0.1;\n return [min - pad, max + pad];\n};\n\n/** Number of decimals that keeps ticks distinct for a step */\nexport const stepDecimals = (step: number): number =>\n step > 0 && Number.isFinite(step)\n ? Math.min(12, Math.max(0, -Math.floor(Math.log10(step) + 1e-9)))\n : 0;\n"],"mappings":"AAEA,IAAMA,EAAM,KAAK,KAAK,EAAE,EAClBC,EAAK,KAAK,KAAK,EAAE,EACjBC,EAAK,KAAK,KAAK,CAAC,EAGTC,GAAY,EAAa,EAAa,IAA0B,CAC3E,IAAMC,EAAO,KAAK,IAAIC,EAAMC,CAAG,EAC/B,GAAI,EAAEF,EAAO,IAAM,CAAC,OAAO,SAASA,CAAI,EAAG,MAAO,GAClD,IAAMG,EAAMH,EAAO,KAAK,IAAI,EAAGI,CAAK,EAE9BC,EAAO,IADC,KAAK,MAAM,KAAK,MAAMF,CAAG,CACpB,EACbG,EAAQH,EAAME,EAEpB,OADeC,GAASV,EAAM,GAAKU,GAAST,EAAK,EAAIS,GAASR,EAAK,EAAI,GACvDO,CAClB,EAGME,GAAW,EAAe,IAAyB,CACvD,IAAMC,EAAW,KAAK,IAAI,EAAG,CAAC,KAAK,MAAM,KAAK,MAAMC,CAAI,CAAC,EAAI,CAAC,EAC9D,OAAOD,EAAW,GAAKA,EAAW,GAAK,CAACE,EAAM,QAAQF,CAAQ,EAAIE,CACpE,EAGaC,GACX,EACA,EACA,IACa,CACTT,EAAMD,IAAK,CAACC,EAAKD,GAAO,CAACA,EAAKC,CAAG,GACrC,IAAMO,EAAOV,EAASG,EAAKD,EAAKG,CAAK,EACrC,GAAI,CAACK,EAAM,OAAO,OAAO,SAASP,CAAG,EAAI,CAACA,CAAG,EAAI,CAAC,EAClD,IAAMU,EAAQ,KAAK,KAAKV,EAAMO,EAAO,IAAI,EACnCI,EAAM,KAAK,MAAMZ,EAAMQ,EAAO,IAAI,EAClCK,EAAkB,CAAC,EAEzB,IAAK,IAAIC,EAAIH,EAAOG,GAAKF,GAAOC,EAAM,OAAS,IAAM,IACnDA,EAAM,KAAKP,EAAQQ,EAAIN,EAAMA,CAAI,CAAC,EAEpC,OAAOK,CACT,EAGaE,GACX,EACA,EACA,IACqB,CACjBd,EAAMD,IAAK,CAACC,EAAKD,GAAO,CAACA,EAAKC,CAAG,GACrC,IAAIO,EAAOV,EAASG,EAAKD,EAAKG,CAAK,EACnC,IAAK,IAAIW,EAAI,EAAGA,EAAI,GAAKN,EAAM,IAAK,CAClC,IAAMQ,EAAU,KAAK,MAAMf,EAAMO,CAAI,EAAIA,EACnCS,EAAU,KAAK,KAAKjB,EAAMQ,CAAI,EAAIA,EACxC,EAAMF,EAAQU,EAASR,CAAI,EAC3B,EAAMF,EAAQW,EAAST,CAAI,EAC3B,IAAMU,EAAOpB,EAASG,EAAKD,EAAKG,CAAK,EACrC,GAAIe,IAASV,EAAM,MACnB,EAAOU,CACT,CACA,MAAO,CAACjB,EAAKD,CAAG,CAClB,EAMamB,GACX,EACA,EACA,EAA6B,CAAC,EAAG,CAAC,IACb,CACrB,GAAI,CAAC,OAAO,SAASlB,CAAG,GAAK,CAAC,OAAO,SAASD,CAAG,EAAG,OAAOoB,EAE3D,GADInB,EAAMD,IAAK,CAACC,EAAKD,GAAO,CAACA,EAAKC,CAAG,GACjCD,EAAMC,EAAM,EAAG,MAAO,CAACA,EAAKD,CAAG,EACnC,IAAMqB,EAAMpB,IAAQ,EAAI,EAAI,KAAK,IAAIA,CAAG,EAAI,GAC5C,MAAO,CAACA,EAAMoB,EAAKrB,EAAMqB,CAAG,CAC9B,EAGaC,EAAgB,GAC3Bd,EAAO,GAAK,OAAO,SAASA,CAAI,EAC5B,KAAK,IAAI,GAAI,KAAK,IAAI,EAAG,CAAC,KAAK,MAAM,KAAK,MAAMA,CAAI,EAAI,IAAI,CAAC,CAAC,EAC9D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Tick step close to `(max - min) / count`, of the form 1, 2 or 5 × 10^k */
|
|
2
|
+
export declare const tickStep: (min: number, max: number, count: number) => number;
|
|
3
|
+
/** Tick values inside [min, max] */
|
|
4
|
+
export declare const linearTicks: (min: number, max: number, count: number) => number[];
|
|
5
|
+
/** Extends [min, max] to tick boundaries */
|
|
6
|
+
export declare const niceDomain: (min: number, max: number, count: number) => [number, number];
|
|
7
|
+
/**
|
|
8
|
+
* Range covering [min, max] with a usable span: a single value (or no data)
|
|
9
|
+
* becomes a small range around it.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ensureSpan: (min: number, max: number, fallback?: [number, number]) => [number, number];
|
|
12
|
+
/** Number of decimals that keeps ticks distinct for a step */
|
|
13
|
+
export declare const stepDecimals: (step: number) => number;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Tick step close to `(max - min) / count`, of the form 1, 2 or 5 × 10^k */
|
|
2
|
+
export declare const tickStep: (min: number, max: number, count: number) => number;
|
|
3
|
+
/** Tick values inside [min, max] */
|
|
4
|
+
export declare const linearTicks: (min: number, max: number, count: number) => number[];
|
|
5
|
+
/** Extends [min, max] to tick boundaries */
|
|
6
|
+
export declare const niceDomain: (min: number, max: number, count: number) => [number, number];
|
|
7
|
+
/**
|
|
8
|
+
* Range covering [min, max] with a usable span: a single value (or no data)
|
|
9
|
+
* becomes a small range around it.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ensureSpan: (min: number, max: number, fallback?: [number, number]) => [number, number];
|
|
12
|
+
/** Number of decimals that keeps ticks distinct for a step */
|
|
13
|
+
export declare const stepDecimals: (step: number) => number;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//#region src/engine/scale.ts
|
|
2
|
+
var e = Math.sqrt(50), t = Math.sqrt(10), n = Math.sqrt(2), r = (r, i, a) => {
|
|
3
|
+
let o = Math.abs(i - r);
|
|
4
|
+
if (!(o > 0) || !Number.isFinite(o)) return 0;
|
|
5
|
+
let s = o / Math.max(1, a), c = 10 ** Math.floor(Math.log10(s)), l = s / c;
|
|
6
|
+
return (l >= e ? 10 : l >= t ? 5 : l >= n ? 2 : 1) * c;
|
|
7
|
+
}, i = (e, t) => {
|
|
8
|
+
let n = Math.max(0, -Math.floor(Math.log10(t)) + 1);
|
|
9
|
+
return n > 0 && n < 20 ? +e.toFixed(n) : e;
|
|
10
|
+
}, a = (e, t, n) => {
|
|
11
|
+
e > t && ([e, t] = [t, e]);
|
|
12
|
+
let a = r(e, t, n);
|
|
13
|
+
if (!a) return Number.isFinite(e) ? [e] : [];
|
|
14
|
+
let o = Math.ceil(e / a - 1e-9), s = Math.floor(t / a + 1e-9), c = [];
|
|
15
|
+
for (let e = o; e <= s && c.length < 1e3; e++) c.push(i(e * a, a));
|
|
16
|
+
return c;
|
|
17
|
+
}, o = (e, t, n) => {
|
|
18
|
+
e > t && ([e, t] = [t, e]);
|
|
19
|
+
let a = r(e, t, n);
|
|
20
|
+
for (let o = 0; o < 3 && a; o++) {
|
|
21
|
+
let o = Math.floor(e / a) * a, s = Math.ceil(t / a) * a;
|
|
22
|
+
e = i(o, a), t = i(s, a);
|
|
23
|
+
let c = r(e, t, n);
|
|
24
|
+
if (c === a) break;
|
|
25
|
+
a = c;
|
|
26
|
+
}
|
|
27
|
+
return [e, t];
|
|
28
|
+
}, s = (e, t, n = [0, 1]) => {
|
|
29
|
+
if (!Number.isFinite(e) || !Number.isFinite(t)) return n;
|
|
30
|
+
if (e > t && ([e, t] = [t, e]), t - e > 0) return [e, t];
|
|
31
|
+
let r = e === 0 ? 1 : Math.abs(e) * .1;
|
|
32
|
+
return [e - r, t + r];
|
|
33
|
+
}, c = (e) => e > 0 && Number.isFinite(e) ? Math.min(12, Math.max(0, -Math.floor(Math.log10(e) + 1e-9))) : 0;
|
|
34
|
+
//#endregion
|
|
35
|
+
export { s as ensureSpan, a as linearTicks, o as niceDomain, c as stepDecimals, r as tickStep };
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=scale.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scale.js","names":["E10","E5","E2","tickStep","span","max","min","raw","count","base","error","roundTo","decimals","step","value","linearTicks","start","end","ticks","i","niceDomain","nextMin","nextMax","next","ensureSpan","fallback","pad","stepDecimals"],"sources":["../../../../charts/src/engine/scale.ts"],"sourcesContent":["// Numeric ticks and ranges.\n\nconst E10 = Math.sqrt(50);\nconst E5 = Math.sqrt(10);\nconst E2 = Math.sqrt(2);\n\n/** Tick step close to `(max - min) / count`, of the form 1, 2 or 5 × 10^k */\nexport const tickStep = (min: number, max: number, count: number): number => {\n const span = Math.abs(max - min);\n if (!(span > 0) || !Number.isFinite(span)) return 0;\n const raw = span / Math.max(1, count);\n const power = Math.floor(Math.log10(raw));\n const base = 10 ** power;\n const error = raw / base;\n const factor = error >= E10 ? 10 : error >= E5 ? 5 : error >= E2 ? 2 : 1;\n return factor * base;\n};\n\n/** Rounds a value computed from a step (avoids 0.30000000000000004) */\nconst roundTo = (value: number, step: number): number => {\n const decimals = Math.max(0, -Math.floor(Math.log10(step)) + 1);\n return decimals > 0 && decimals < 20 ? +value.toFixed(decimals) : value;\n};\n\n/** Tick values inside [min, max] */\nexport const linearTicks = (\n min: number,\n max: number,\n count: number,\n): number[] => {\n if (min > max) [min, max] = [max, min];\n const step = tickStep(min, max, count);\n if (!step) return Number.isFinite(min) ? [min] : [];\n const start = Math.ceil(min / step - 1e-9);\n const end = Math.floor(max / step + 1e-9);\n const ticks: number[] = [];\n // Guard against pathological ranges\n for (let i = start; i <= end && ticks.length < 1000; i++) {\n ticks.push(roundTo(i * step, step));\n }\n return ticks;\n};\n\n/** Extends [min, max] to tick boundaries */\nexport const niceDomain = (\n min: number,\n max: number,\n count: number,\n): [number, number] => {\n if (min > max) [min, max] = [max, min];\n let step = tickStep(min, max, count);\n for (let i = 0; i < 3 && step; i++) {\n const nextMin = Math.floor(min / step) * step;\n const nextMax = Math.ceil(max / step) * step;\n min = roundTo(nextMin, step);\n max = roundTo(nextMax, step);\n const next = tickStep(min, max, count);\n if (next === step) break;\n step = next;\n }\n return [min, max];\n};\n\n/**\n * Range covering [min, max] with a usable span: a single value (or no data)\n * becomes a small range around it.\n */\nexport const ensureSpan = (\n min: number,\n max: number,\n fallback: [number, number] = [0, 1],\n): [number, number] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return fallback;\n if (min > max) [min, max] = [max, min];\n if (max - min > 0) return [min, max];\n const pad = min === 0 ? 1 : Math.abs(min) * 0.1;\n return [min - pad, max + pad];\n};\n\n/** Number of decimals that keeps ticks distinct for a step */\nexport const stepDecimals = (step: number): number =>\n step > 0 && Number.isFinite(step)\n ? Math.min(12, Math.max(0, -Math.floor(Math.log10(step) + 1e-9)))\n : 0;\n"],"mappings":";AAEA,IAAMA,IAAM,KAAK,KAAK,EAAE,GAClBC,IAAK,KAAK,KAAK,EAAE,GACjBC,IAAK,KAAK,KAAK,CAAC,GAGTC,KAAY,GAAa,GAAa,MAA0B;CAC3E,IAAMC,IAAO,KAAK,IAAIC,IAAMC,CAAG;CAC/B,IAAI,EAAEF,IAAO,MAAM,CAAC,OAAO,SAASA,CAAI,GAAG,OAAO;CAClD,IAAMG,IAAMH,IAAO,KAAK,IAAI,GAAGI,CAAK,GAE9BC,IAAO,MADC,KAAK,MAAM,KAAK,MAAMF,CAAG,CACpB,GACbG,IAAQH,IAAME;CAEpB,QADeC,KAASV,IAAM,KAAKU,KAAST,IAAK,IAAIS,KAASR,IAAK,IAAI,KACvDO;AAClB,GAGME,KAAW,GAAe,MAAyB;CACvD,IAAMC,IAAW,KAAK,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,MAAMC,CAAI,CAAC,IAAI,CAAC;CAC9D,OAAOD,IAAW,KAAKA,IAAW,KAAK,CAACE,EAAM,QAAQF,CAAQ,IAAIE;AACpE,GAGaC,KACX,GACA,GACA,MACa;CACb,AAAIT,IAAMD,MAAK,CAACC,GAAKD,KAAO,CAACA,GAAKC,CAAG;CACrC,IAAMO,IAAOV,EAASG,GAAKD,GAAKG,CAAK;CACrC,IAAI,CAACK,GAAM,OAAO,OAAO,SAASP,CAAG,IAAI,CAACA,CAAG,IAAI,CAAC;CAClD,IAAMU,IAAQ,KAAK,KAAKV,IAAMO,IAAO,IAAI,GACnCI,IAAM,KAAK,MAAMZ,IAAMQ,IAAO,IAAI,GAClCK,IAAkB,CAAC;CAEzB,KAAK,IAAIC,IAAIH,GAAOG,KAAKF,KAAOC,EAAM,SAAS,KAAM,KACnD,EAAM,KAAKP,EAAQQ,IAAIN,GAAMA,CAAI,CAAC;CAEpC,OAAOK;AACT,GAGaE,KACX,GACA,GACA,MACqB;CACrB,AAAId,IAAMD,MAAK,CAACC,GAAKD,KAAO,CAACA,GAAKC,CAAG;CACrC,IAAIO,IAAOV,EAASG,GAAKD,GAAKG,CAAK;CACnC,KAAK,IAAIW,IAAI,GAAGA,IAAI,KAAKN,GAAM,KAAK;EAClC,IAAMQ,IAAU,KAAK,MAAMf,IAAMO,CAAI,IAAIA,GACnCS,IAAU,KAAK,KAAKjB,IAAMQ,CAAI,IAAIA;EAExC,AADA,IAAMF,EAAQU,GAASR,CAAI,GAC3B,IAAMF,EAAQW,GAAST,CAAI;EAC3B,IAAMU,IAAOpB,EAASG,GAAKD,GAAKG,CAAK;EACrC,IAAIe,MAASV,GAAM;EACnB,IAAOU;CACT;CACA,OAAO,CAACjB,GAAKD,CAAG;AAClB,GAMamB,KACX,GACA,GACA,IAA6B,CAAC,GAAG,CAAC,MACb;CACrB,IAAI,CAAC,OAAO,SAASlB,CAAG,KAAK,CAAC,OAAO,SAASD,CAAG,GAAG,OAAOoB;CAE3D,IADInB,IAAMD,MAAK,CAACC,GAAKD,KAAO,CAACA,GAAKC,CAAG,IACjCD,IAAMC,IAAM,GAAG,OAAO,CAACA,GAAKD,CAAG;CACnC,IAAMqB,IAAMpB,MAAQ,IAAI,IAAI,KAAK,IAAIA,CAAG,IAAI;CAC5C,OAAO,CAACA,IAAMoB,GAAKrB,IAAMqB,CAAG;AAC9B,GAGaC,KAAgB,MAC3Bd,IAAO,KAAK,OAAO,SAASA,CAAI,IAC5B,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,MAAMA,CAAI,IAAI,IAAI,CAAC,CAAC,IAC9D"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./data.cjs"),t=require("./color.cjs"),n=require("./layout.cjs"),r=require("./model.cjs"),i=require("./axis.cjs");var a={top:12,right:16,bottom:4,left:4},o=(e,t)=>t,s=(e,n)=>{let r=n.resolve??o;return(e??[]).map(e=>{if(e.type===`rect`){let i=e.color?r(e.color,n.primary):n.primary;return{type:`rect`,x0:e.x0,x1:e.x1,y0:e.y0,y1:e.y1,color:i,opacity:e.opacity??.08,label:e.label,labelPosition:e.labelPosition??`top-left`,labelColor:e.labelColor?r(e.labelColor,i):t.mix(i,n.text,.2)}}return e.type===`text`?{type:`text`,x:e.x,y:e.y,text:e.text,anchor:e.anchor??`center`,color:e.color?r(e.color,n.textMuted):n.textMuted,weight:e.weight??500}:{type:`line`,axis:e.axis,value:e.value,color:e.color?r(e.color,n.textMuted):n.textMuted,width:e.width??1,dash:[...e.dash??[4,4]],label:e.label}})},c=e=>{let{model:t,view:r,theme:o,width:s,height:c,measure:l}=e,u=t.y.tickCount??(c>=220?5:Math.max(2,Math.round((c-48)/52))),d=i.axisTicks(t.y,r.y,u),f=0;if(t.y.visible)for(let e of d.labels)f=Math.max(f,l(e));let p=48;if(t.x.type===`category`){p=0;let e=Math.max(1,Math.floor(t.x.categories.length/200));for(let n=0;n<t.x.categories.length;n+=e)p=Math.max(p,l(t.x.categories[n]))}let m={...a,...e.padding},h=n.computePlot({width:s,height:c,padding:m,yLabelWidth:t.y.visible?Math.ceil(f):0,xAxisVisible:t.x.visible,xTitle:!!t.x.title&&t.x.visible,yTitle:!!t.y.title&&t.y.visible,fontSize:o.fontSize});e.top&&(h.y+=e.top);let g=t.x.type===`category`?Math.max(1,Math.floor(h.width/(p+14))):t.x.tickCount??Math.max(2,Math.floor(h.width/96)),_=i.axisTicks(t.x,r.x,g);return{plot:h,scales:n.createScales(h,r,t.x.reverse,t.y.reverse),xTicks:_,yTicks:d}},l=(e,t,n)=>{let r=[];for(let i of e.series){if(i.hidden||i.type!==`scatter`||!i.showLabels)continue;let{x:e,y:a,count:o,labels:s,size:c}=i.cols;if(s)for(let l=0;l<o&&r.length<300;l++){let o=s[l];if(!o)continue;let u=e[l],d=a[l];if(u<t.x[0]||u>t.x[1]||d<t.y[0]||d>t.y[1])continue;let f=c&&c[l]>0?c[l]:i.pointSize;r.push({x:n.xToPx(u),y:n.yToPx(d),r:f/2,text:o})}}return r},u=(e,t,n)=>{let r=e.cols.x[t]+(e.type===`bar`?e.barOffset:0),i=e.type===`bar`&&e.barTop?e.barTop[t]:e.cols.y[t];return{px:n.xToPx(r),py:n.yToPx(i)}},d=(e,t,n,r,i)=>{let a=u(e,t,i),o=!1;if(e.type===`bar`&&e.barBase){let s=e.barHalfWidth/i.xPerPx,c=i.yToPx(e.barBase[t]);o=Math.abs(n-a.px)<=s&&r>=Math.min(c,a.py)-2&&r<=Math.max(c,a.py)+2}return{series:e,index:t,px:a.px,py:a.py,dx:Math.abs(i.xToPx(e.cols.x[t])-n),dist:o?0:Math.hypot(a.px-n,a.py-r),inside:o}},f=(e,t)=>e.cols.size&&e.cols.size[t]>0?e.cols.size[t]:e.pointSize,p=(e,t,n,i,a)=>{let o=Math.max(e.pointSize/2+6,10)+a,s=i.pxToX(t),c=i.pxToY(n),l=o*i.xPerPx,u=o*i.yPerPx,d=-1,p=1/0,{x:m,y:h}=e.cols;return r.gridOf(e).query(s-l,s+l,c-u,c+u,r=>{let o=Math.hypot(i.xToPx(m[r])-t,i.yToPx(h[r])-n);o<=Math.max(f(e,r)/2+4,8)+a&&o<=p&&(p=o,d=r)}),d},m=(t,n)=>{let{x:r,y:i,count:a,sorted:o}=t.cols;if(o)return e.nearestIndex(r,i,a,n);let s=-1,c=1/0;for(let e=0;e<a;e++){if(!Number.isFinite(i[e]))continue;let t=Math.abs(r[e]-n);t<c&&(c=t,s=e)}return s},h=(e,n)=>{let r=e.pointColors?.[n],i=e.cols.labels?.[n];return{seriesIndex:e.index,seriesId:e.id,seriesName:e.name,index:n,x:e.cols.x[n],y:e.cols.y[n],color:r?t.toCss(r):e.colorCss,...i===void 0?{}:{label:i}}},g=(e,t)=>{if(!e.length)return null;e.sort((e,t)=>e.series.index-t.series.index);let n=e.map(e=>h(e.series,e.index)),r=n[0].x;return{items:n,x:r,xLabel:t?.formatValue(r)??String(r)}},_=(e,t,n,r,i,a=0)=>{let{plot:o}=t,s=6+a;if(r<o.x-s||r>o.x+o.width+s||i<o.y-s||i>o.y+o.height+s)return null;let c=t.pxToX(r),l=[],u=[];for(let n of e.series)if(!(n.hidden||n.cols.count===0)){if(n.type===`scatter`){let e=p(n,r,i,t,a);e>=0&&l.push(d(n,e,r,i,t))}else{let e=m(n,c);e>=0&&u.push(d(n,e,r,i,t))}}if(e.tooltipMode===`nearest`){let e=[...l,...u].filter(e=>e.inside||e.series.type===`scatter`||e.dist<=32+a);return e.length?g([e.reduce((e,t)=>t.dist<=e.dist?t:e)],n):null}if(!u.length)return l.length?g([l.reduce((e,t)=>t.dist<=e.dist?t:e)],n):null;let f=Math.min(...u.map(e=>e.dx)),_=e.x.type===`category`?.5/t.xPerPx:0,v=u.filter(e=>e.dx<=f+Math.max(1,_)),y=v.reduce((e,t)=>t.dx<e.dx?t:e),b=g([y,...v.filter(e=>e!==y),...l],n);return b&&(b.x=h(y.series,y.index).x,b.xLabel=n?.formatValue(b.x)??String(b.x)),b},v=(e,t)=>e===t||!!e&&!!t&&e.items.length===t.items.length&&e.items.every((e,n)=>e.index===t.items[n].index&&e.seriesIndex===t.items[n].seriesIndex),y=(e,t,n)=>{let r=n?.formatValue??String;if(t.items.every(t=>e.series[t.seriesIndex].type===`scatter`)&&t.items.length===1){let n=t.items[0],i=[{color:null,name:e.x.title??`x`,value:t.xLabel},{color:null,name:e.y.title??`y`,value:r(n.y)}];return n.label!==void 0&&e.series.length>1&&i.push({color:null,name:``,value:n.seriesName}),{title:n.label??n.seriesName,titleColor:n.color,rows:i}}return{title:t.xLabel,titleColor:null,rows:t.items.map(e=>({color:e.color,name:e.label?`${e.seriesName} · ${e.label}`:e.seriesName,value:r(e.y)}))}},b=(e,t,n)=>{let r=[],{plot:i}=t;for(let a of n.items){let n=e.series[a.seriesIndex];if(n.type===`bar`&&n.barBase&&n.barTop){let e=t.xToPx(a.x+n.barOffset),i=Math.max(n.barHalfWidth/t.xPerPx,1),o=t.yToPx(n.barBase[a.index]),s=t.yToPx(n.barTop[a.index]);r.push({kind:`bar`,x:e-i,y:Math.min(o,s),width:i*2,height:Math.max(1,Math.abs(o-s))});continue}let o=t.xToPx(a.x),s=t.yToPx(a.y);if(o<i.x-1||o>i.x+i.width+1||s<i.y-1||s>i.y+i.height+1)continue;let c=n.type===`scatter`?f(n,a.index)+6:Math.max(10,n.lineWidth*2+6);r.push({kind:`dot`,x:o,y:s,size:c,color:a.color})}return r},x=(e,t,n)=>n??(e.tooltipMode===`axis`&&t.items.some(t=>e.series[t.seriesIndex].type!==`scatter`));exports.DEFAULT_PADDING=a,exports.collectPointLabels=l,exports.dotSize=f,exports.fallbackResolve=o,exports.hitTest=_,exports.hoverItemOf=h,exports.hoverMarks=b,exports.layoutChart=c,exports.pointOf=u,exports.resolveAnnotations=s,exports.sameHover=v,exports.showsCrosshair=x,exports.tooltipContent=y;
|
|
2
|
+
//# sourceMappingURL=scene.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene.cjs","names":["mix","axisTicks","computePlot","createScales","nearestIndex","toCss","require_data","require_color","require_layout","require_model","require_axis","DEFAULT_PADDING","fallbackResolve","fallback","resolveAnnotations","resolve","theme","annotations","a","color","layoutChart","input","yCount","model","height","yTicks","view","yLabelWidth","label","measure","categoryWidth","step","i","padding","plot","xCount","xTicks","collectPointLabels","labels","series","texts","count","text","xi","x","yi","y","d","size","s","pointOf","xv","yv","sc","candidateOf","p","inside","half","base","px","py","dotSize","nearestScatter","radius","slop","rx","ry","best","bestDist","nearestX","sorted","bestD","hoverItemOf","pc","index","eventOf","candidates","b","items","c","hitTest","margin","scatter","others","all","bestDx","bandPx","aligned","first","event","sameHover","it","tooltipContent","yFormat","rows","hoverMarks","marks","cx","showsCrosshair","crosshair"],"sources":["../../../../charts/src/engine/scene.ts"],"sourcesContent":["// The DOM-free half of a chart: annotations, layout, point labels, hit\n// testing and tooltip content. Shared by createChart (DOM + GPU),\n// createCanvasChart (any 2D context) and the React Native views.\n\nimport { axisTicks, type AxisTicks } from \"./axis\";\nimport { mix, toCss, type Rgba } from \"./color\";\nimport { nearestIndex } from \"./data\";\nimport { computePlot, createScales, type Rect, type Scales } from \"./layout\";\nimport { gridOf, type ChartModel, type SeriesModel } from \"./model\";\nimport type { PointLabel, ResolvedAnnotation } from \"./overlay\";\nimport type { ChartTheme } from \"./theme\";\nimport type {\n ChartAnnotation,\n ChartHoverEvent,\n ChartHoverItem,\n ChartPadding,\n ChartView,\n} from \"./types\";\n\nexport const MAX_POINT_LABELS = 300;\nexport const DEFAULT_PADDING = { top: 12, right: 16, bottom: 4, left: 4 };\n\nexport const fallbackResolve = (_value: string, fallback: Rgba) => fallback;\n\n/** Annotation colors resolved against the theme */\nexport const resolveAnnotations = (\n annotations: readonly ChartAnnotation[] | undefined,\n theme: ChartTheme,\n): ResolvedAnnotation[] => {\n const resolve = theme.resolve ?? fallbackResolve;\n return (annotations ?? []).map((a) => {\n if (a.type === \"rect\") {\n const color = a.color ? resolve(a.color, theme.primary) : theme.primary;\n return {\n type: \"rect\",\n x0: a.x0,\n x1: a.x1,\n y0: a.y0,\n y1: a.y1,\n color,\n opacity: a.opacity ?? 0.08,\n label: a.label,\n labelPosition: a.labelPosition ?? \"top-left\",\n labelColor: a.labelColor\n ? resolve(a.labelColor, color)\n : mix(color, theme.text, 0.2),\n };\n }\n if (a.type === \"text\") {\n return {\n type: \"text\",\n x: a.x,\n y: a.y,\n text: a.text,\n anchor: a.anchor ?? \"center\",\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n weight: a.weight ?? 500,\n };\n }\n return {\n type: \"line\",\n axis: a.axis,\n value: a.value,\n color: a.color ? resolve(a.color, theme.textMuted) : theme.textMuted,\n width: a.width ?? 1,\n dash: [...(a.dash ?? [4, 4])],\n label: a.label,\n };\n });\n};\n\nexport interface ChartLayout {\n plot: Rect;\n scales: Scales;\n xTicks: AxisTicks;\n yTicks: AxisTicks;\n}\n\nexport interface LayoutInput {\n model: ChartModel;\n view: ChartView;\n theme: ChartTheme;\n /** Size of the drawing area (legend excluded), CSS pixels */\n width: number;\n height: number;\n padding?: ChartPadding;\n /** Offset of the drawing area (e.g. below a legend) */\n top?: number;\n /** Width of a tick label in the theme font */\n measure: (text: string) => number;\n}\n\n/** Ticks, room for the axes and the plot rectangle */\nexport const layoutChart = (input: LayoutInput): ChartLayout => {\n const { model, view, theme, width, height, measure } = input;\n // same count as the nice range of the model (its ends are then ticks),\n // fewer on short charts\n const yCount =\n model.y.tickCount ??\n (height >= 220 ? 5 : Math.max(2, Math.round((height - 48) / 52)));\n const yTicks = axisTicks(model.y, view.y, yCount);\n let yLabelWidth = 0;\n if (model.y.visible) {\n for (const label of yTicks.labels)\n yLabelWidth = Math.max(yLabelWidth, measure(label));\n }\n let categoryWidth = 48;\n if (model.x.type === \"category\") {\n categoryWidth = 0;\n const step = Math.max(1, Math.floor(model.x.categories.length / 200));\n for (let i = 0; i < model.x.categories.length; i += step) {\n categoryWidth = Math.max(categoryWidth, measure(model.x.categories[i]));\n }\n }\n const padding = { ...DEFAULT_PADDING, ...input.padding };\n const plot = computePlot({\n width,\n height,\n padding,\n yLabelWidth: model.y.visible ? Math.ceil(yLabelWidth) : 0,\n xAxisVisible: model.x.visible,\n xTitle: !!model.x.title && model.x.visible,\n yTitle: !!model.y.title && model.y.visible,\n fontSize: theme.fontSize,\n });\n if (input.top) plot.y += input.top;\n const xCount =\n model.x.type === \"category\"\n ? Math.max(1, Math.floor(plot.width / (categoryWidth + 14)))\n : (model.x.tickCount ?? Math.max(2, Math.floor(plot.width / 96)));\n const xTicks = axisTicks(model.x, view.x, xCount);\n const scales = createScales(plot, view, model.x.reverse, model.y.reverse);\n return { plot, scales, xTicks, yTicks };\n};\n\n/** Labels of the visible scatter points (`showLabels`) */\nexport const collectPointLabels = (\n model: ChartModel,\n view: ChartView,\n s: Scales,\n): PointLabel[] => {\n const labels: PointLabel[] = [];\n for (const series of model.series) {\n if (series.hidden || series.type !== \"scatter\" || !series.showLabels)\n continue;\n const { x, y, count, labels: texts, size } = series.cols;\n if (!texts) continue;\n for (let i = 0; i < count && labels.length < MAX_POINT_LABELS; i++) {\n const text = texts[i];\n if (!text) continue;\n const xi = x[i];\n const yi = y[i];\n if (xi < view.x[0] || xi > view.x[1] || yi < view.y[0] || yi > view.y[1])\n continue;\n const d = size && size[i] > 0 ? size[i] : series.pointSize;\n labels.push({ x: s.xToPx(xi), y: s.yToPx(yi), r: d / 2, text });\n }\n }\n return labels;\n};\n\n// ---------------------------------------------------------------- hit tests\n\ninterface Candidate {\n series: SeriesModel;\n index: number;\n /** Pixel position of the point */\n px: number;\n py: number;\n dx: number;\n dist: number;\n inside: boolean;\n}\n\n/** Pixel position of a point (the top of a bar) */\nexport const pointOf = (s: SeriesModel, i: number, sc: Scales) => {\n const xv = s.cols.x[i] + (s.type === \"bar\" ? s.barOffset : 0);\n const yv = s.type === \"bar\" && s.barTop ? s.barTop[i] : s.cols.y[i];\n return { px: sc.xToPx(xv), py: sc.yToPx(yv) };\n};\n\nconst candidateOf = (\n s: SeriesModel,\n i: number,\n px: number,\n py: number,\n sc: Scales,\n): Candidate => {\n const p = pointOf(s, i, sc);\n let inside = false;\n if (s.type === \"bar\" && s.barBase) {\n const half = s.barHalfWidth / sc.xPerPx;\n const base = sc.yToPx(s.barBase[i]);\n inside =\n Math.abs(px - p.px) <= half &&\n py >= Math.min(base, p.py) - 2 &&\n py <= Math.max(base, p.py) + 2;\n }\n return {\n series: s,\n index: i,\n px: p.px,\n py: p.py,\n dx: Math.abs(sc.xToPx(s.cols.x[i]) - px),\n dist: inside ? 0 : Math.hypot(p.px - px, p.py - py),\n inside,\n };\n};\n\n/** Diameter of a scatter dot */\nexport const dotSize = (s: SeriesModel, i: number) =>\n s.cols.size && s.cols.size[i] > 0 ? s.cols.size[i] : s.pointSize;\n\nconst nearestScatter = (\n s: SeriesModel,\n px: number,\n py: number,\n sc: Scales,\n slop: number,\n) => {\n const radius = Math.max(s.pointSize / 2 + 6, 10) + slop;\n const xv = sc.pxToX(px);\n const yv = sc.pxToY(py);\n const rx = radius * sc.xPerPx;\n const ry = radius * sc.yPerPx;\n let best = -1;\n let bestDist = Infinity;\n const { x, y } = s.cols;\n gridOf(s).query(xv - rx, xv + rx, yv - ry, yv + ry, (i) => {\n const d = Math.hypot(sc.xToPx(x[i]) - px, sc.yToPx(y[i]) - py);\n const reach = Math.max(dotSize(s, i) / 2 + 4, 8) + slop;\n if (d <= reach && d <= bestDist) {\n bestDist = d;\n best = i;\n }\n });\n return best;\n};\n\nconst nearestX = (s: SeriesModel, xv: number) => {\n const { x, y, count, sorted } = s.cols;\n if (sorted) return nearestIndex(x, y, count, xv);\n let best = -1;\n let bestD = Infinity;\n for (let i = 0; i < count; i++) {\n if (!Number.isFinite(y[i])) continue;\n const d = Math.abs(x[i] - xv);\n if (d < bestD) {\n bestD = d;\n best = i;\n }\n }\n return best;\n};\n\n/** Hover payload item of a point */\nexport const hoverItemOf = (s: SeriesModel, index: number): ChartHoverItem => {\n const pc = s.pointColors?.[index];\n const label = s.cols.labels?.[index];\n return {\n seriesIndex: s.index,\n seriesId: s.id,\n seriesName: s.name,\n index,\n x: s.cols.x[index],\n y: s.cols.y[index],\n color: pc ? toCss(pc) : s.colorCss,\n ...(label !== undefined ? { label } : {}),\n };\n};\n\nconst eventOf = (\n candidates: Candidate[],\n xTicks: AxisTicks | null,\n): ChartHoverEvent | null => {\n if (!candidates.length) return null;\n candidates.sort((a, b) => a.series.index - b.series.index);\n const items = candidates.map((c) => hoverItemOf(c.series, c.index));\n const x = items[0].x;\n return { items, x, xLabel: xTicks?.formatValue(x) ?? String(x) };\n};\n\n/**\n * Points under a pixel of the stage: the nearest point (scatter / `nearest`\n * tooltips) or every series at the nearest x (`axis` tooltips).\n * `slop` widens the reach of the dots (touch screens).\n */\nexport const hitTest = (\n model: ChartModel,\n sc: Scales,\n xTicks: AxisTicks | null,\n px: number,\n py: number,\n slop = 0,\n): ChartHoverEvent | null => {\n const { plot } = sc;\n const margin = 6 + slop;\n if (\n px < plot.x - margin ||\n px > plot.x + plot.width + margin ||\n py < plot.y - margin ||\n py > plot.y + plot.height + margin\n ) {\n return null;\n }\n const xv = sc.pxToX(px);\n const scatter: Candidate[] = [];\n const others: Candidate[] = [];\n for (const s of model.series) {\n if (s.hidden || s.cols.count === 0) continue;\n if (s.type === \"scatter\") {\n const i = nearestScatter(s, px, py, sc, slop);\n if (i >= 0) scatter.push(candidateOf(s, i, px, py, sc));\n } else {\n const i = nearestX(s, xv);\n if (i >= 0) others.push(candidateOf(s, i, px, py, sc));\n }\n }\n if (model.tooltipMode === \"nearest\") {\n const all = [...scatter, ...others].filter(\n (c) => c.inside || c.series.type === \"scatter\" || c.dist <= 32 + slop,\n );\n if (!all.length) return null;\n const best = all.reduce((a, b) => (b.dist <= a.dist ? b : a));\n return eventOf([best], xTicks);\n }\n if (!others.length) {\n if (!scatter.length) return null;\n return eventOf(\n [scatter.reduce((a, b) => (b.dist <= a.dist ? b : a))],\n xTicks,\n );\n }\n const bestDx = Math.min(...others.map((c) => c.dx));\n const bandPx = model.x.type === \"category\" ? 0.5 / sc.xPerPx : 0;\n const aligned = others.filter((c) => c.dx <= bestDx + Math.max(1, bandPx));\n const first = aligned.reduce((a, b) => (b.dx < a.dx ? b : a));\n const ordered = [first, ...aligned.filter((c) => c !== first), ...scatter];\n const event = eventOf(ordered, xTicks);\n if (event) {\n event.x = hoverItemOf(first.series, first.index).x;\n event.xLabel = xTicks?.formatValue(event.x) ?? String(event.x);\n }\n return event;\n};\n\n/** Whether two hover payloads point at the same points */\nexport const sameHover = (\n a: ChartHoverEvent | null,\n b: ChartHoverEvent | null,\n): boolean =>\n a === b ||\n (!!a &&\n !!b &&\n a.items.length === b.items.length &&\n a.items.every(\n (it, i) =>\n it.index === b.items[i].index &&\n it.seriesIndex === b.items[i].seriesIndex,\n ));\n\n// ------------------------------------------------------------------ tooltip\n\nexport interface TooltipRow {\n /** Swatch color (CSS) */\n color: string | null;\n name: string;\n value: string;\n}\n\nexport interface TooltipContent {\n title: string;\n /** Swatch of the title (single scatter point) */\n titleColor: string | null;\n rows: TooltipRow[];\n}\n\n/** Default tooltip content of a hover payload */\nexport const tooltipContent = (\n model: ChartModel,\n event: ChartHoverEvent,\n yTicks: AxisTicks | null,\n): TooltipContent => {\n const yFormat = yTicks?.formatValue ?? String;\n const scatterOnly = event.items.every(\n (it) => model.series[it.seriesIndex].type === \"scatter\",\n );\n if (scatterOnly && event.items.length === 1) {\n const it = event.items[0];\n const rows: TooltipRow[] = [\n { color: null, name: model.x.title ?? \"x\", value: event.xLabel },\n { color: null, name: model.y.title ?? \"y\", value: yFormat(it.y) },\n ];\n if (it.label !== undefined && model.series.length > 1)\n rows.push({ color: null, name: \"\", value: it.seriesName });\n return { title: it.label ?? it.seriesName, titleColor: it.color, rows };\n }\n return {\n title: event.xLabel,\n titleColor: null,\n rows: event.items.map((it) => ({\n color: it.color,\n name: it.label ? `${it.seriesName} · ${it.label}` : it.seriesName,\n value: yFormat(it.y),\n })),\n };\n};\n\n/** Shape of the hover marker of an item: a ring on a point, or a bar highlight */\nexport type HoverMark =\n | { kind: \"dot\"; x: number; y: number; size: number; color: string }\n | { kind: \"bar\"; x: number; y: number; width: number; height: number };\n\n/** Markers of the hovered points (pixels of the stage) */\nexport const hoverMarks = (\n model: ChartModel,\n sc: Scales,\n event: ChartHoverEvent,\n): HoverMark[] => {\n const marks: HoverMark[] = [];\n const { plot } = sc;\n for (const it of event.items) {\n const s = model.series[it.seriesIndex];\n if (s.type === \"bar\" && s.barBase && s.barTop) {\n const cx = sc.xToPx(it.x + s.barOffset);\n const half = Math.max(s.barHalfWidth / sc.xPerPx, 1);\n const a = sc.yToPx(s.barBase[it.index]);\n const b = sc.yToPx(s.barTop[it.index]);\n marks.push({\n kind: \"bar\",\n x: cx - half,\n y: Math.min(a, b),\n width: half * 2,\n height: Math.max(1, Math.abs(a - b)),\n });\n continue;\n }\n const px = sc.xToPx(it.x);\n const py = sc.yToPx(it.y);\n if (\n px < plot.x - 1 ||\n px > plot.x + plot.width + 1 ||\n py < plot.y - 1 ||\n py > plot.y + plot.height + 1\n ) {\n continue;\n }\n const size =\n s.type === \"scatter\"\n ? dotSize(s, it.index) + 6\n : Math.max(10, s.lineWidth * 2 + 6);\n marks.push({ kind: \"dot\", x: px, y: py, size, color: it.color });\n }\n return marks;\n};\n\n/** Whether the guide line follows the pointer */\nexport const showsCrosshair = (\n model: ChartModel,\n event: ChartHoverEvent,\n crosshair: boolean | undefined,\n) =>\n crosshair ??\n (model.tooltipMode === \"axis\" &&\n event.items.some((it) => model.series[it.seriesIndex].type !== \"scatter\"));\n"],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { AxisTicks } from './axis.cjs';
|
|
2
|
+
import { Rgba } from './color.cjs';
|
|
3
|
+
import { Rect, Scales } from './layout.cjs';
|
|
4
|
+
import { ChartModel, SeriesModel } from './model.cjs';
|
|
5
|
+
import { PointLabel, ResolvedAnnotation } from './overlay.cjs';
|
|
6
|
+
import { ChartTheme } from './theme.cjs';
|
|
7
|
+
import { ChartAnnotation, ChartHoverEvent, ChartHoverItem, ChartPadding, ChartView } from './types.cjs';
|
|
8
|
+
export declare const MAX_POINT_LABELS = 300;
|
|
9
|
+
export declare const DEFAULT_PADDING: {
|
|
10
|
+
top: number;
|
|
11
|
+
right: number;
|
|
12
|
+
bottom: number;
|
|
13
|
+
left: number;
|
|
14
|
+
};
|
|
15
|
+
export declare const fallbackResolve: (_value: string, fallback: Rgba) => Rgba;
|
|
16
|
+
/** Annotation colors resolved against the theme */
|
|
17
|
+
export declare const resolveAnnotations: (annotations: readonly ChartAnnotation[] | undefined, theme: ChartTheme) => ResolvedAnnotation[];
|
|
18
|
+
export interface ChartLayout {
|
|
19
|
+
plot: Rect;
|
|
20
|
+
scales: Scales;
|
|
21
|
+
xTicks: AxisTicks;
|
|
22
|
+
yTicks: AxisTicks;
|
|
23
|
+
}
|
|
24
|
+
export interface LayoutInput {
|
|
25
|
+
model: ChartModel;
|
|
26
|
+
view: ChartView;
|
|
27
|
+
theme: ChartTheme;
|
|
28
|
+
/** Size of the drawing area (legend excluded), CSS pixels */
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
padding?: ChartPadding;
|
|
32
|
+
/** Offset of the drawing area (e.g. below a legend) */
|
|
33
|
+
top?: number;
|
|
34
|
+
/** Width of a tick label in the theme font */
|
|
35
|
+
measure: (text: string) => number;
|
|
36
|
+
}
|
|
37
|
+
/** Ticks, room for the axes and the plot rectangle */
|
|
38
|
+
export declare const layoutChart: (input: LayoutInput) => ChartLayout;
|
|
39
|
+
/** Labels of the visible scatter points (`showLabels`) */
|
|
40
|
+
export declare const collectPointLabels: (model: ChartModel, view: ChartView, s: Scales) => PointLabel[];
|
|
41
|
+
/** Pixel position of a point (the top of a bar) */
|
|
42
|
+
export declare const pointOf: (s: SeriesModel, i: number, sc: Scales) => {
|
|
43
|
+
px: number;
|
|
44
|
+
py: number;
|
|
45
|
+
};
|
|
46
|
+
/** Diameter of a scatter dot */
|
|
47
|
+
export declare const dotSize: (s: SeriesModel, i: number) => number;
|
|
48
|
+
/** Hover payload item of a point */
|
|
49
|
+
export declare const hoverItemOf: (s: SeriesModel, index: number) => ChartHoverItem;
|
|
50
|
+
/**
|
|
51
|
+
* Points under a pixel of the stage: the nearest point (scatter / `nearest`
|
|
52
|
+
* tooltips) or every series at the nearest x (`axis` tooltips).
|
|
53
|
+
* `slop` widens the reach of the dots (touch screens).
|
|
54
|
+
*/
|
|
55
|
+
export declare const hitTest: (model: ChartModel, sc: Scales, xTicks: AxisTicks | null, px: number, py: number, slop?: number) => ChartHoverEvent | null;
|
|
56
|
+
/** Whether two hover payloads point at the same points */
|
|
57
|
+
export declare const sameHover: (a: ChartHoverEvent | null, b: ChartHoverEvent | null) => boolean;
|
|
58
|
+
export interface TooltipRow {
|
|
59
|
+
/** Swatch color (CSS) */
|
|
60
|
+
color: string | null;
|
|
61
|
+
name: string;
|
|
62
|
+
value: string;
|
|
63
|
+
}
|
|
64
|
+
export interface TooltipContent {
|
|
65
|
+
title: string;
|
|
66
|
+
/** Swatch of the title (single scatter point) */
|
|
67
|
+
titleColor: string | null;
|
|
68
|
+
rows: TooltipRow[];
|
|
69
|
+
}
|
|
70
|
+
/** Default tooltip content of a hover payload */
|
|
71
|
+
export declare const tooltipContent: (model: ChartModel, event: ChartHoverEvent, yTicks: AxisTicks | null) => TooltipContent;
|
|
72
|
+
/** Shape of the hover marker of an item: a ring on a point, or a bar highlight */
|
|
73
|
+
export type HoverMark = {
|
|
74
|
+
kind: "dot";
|
|
75
|
+
x: number;
|
|
76
|
+
y: number;
|
|
77
|
+
size: number;
|
|
78
|
+
color: string;
|
|
79
|
+
} | {
|
|
80
|
+
kind: "bar";
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
width: number;
|
|
84
|
+
height: number;
|
|
85
|
+
};
|
|
86
|
+
/** Markers of the hovered points (pixels of the stage) */
|
|
87
|
+
export declare const hoverMarks: (model: ChartModel, sc: Scales, event: ChartHoverEvent) => HoverMark[];
|
|
88
|
+
/** Whether the guide line follows the pointer */
|
|
89
|
+
export declare const showsCrosshair: (model: ChartModel, event: ChartHoverEvent, crosshair: boolean | undefined) => boolean;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { AxisTicks } from './axis.js';
|
|
2
|
+
import { Rgba } from './color.js';
|
|
3
|
+
import { Rect, Scales } from './layout.js';
|
|
4
|
+
import { ChartModel, SeriesModel } from './model.js';
|
|
5
|
+
import { PointLabel, ResolvedAnnotation } from './overlay.js';
|
|
6
|
+
import { ChartTheme } from './theme.js';
|
|
7
|
+
import { ChartAnnotation, ChartHoverEvent, ChartHoverItem, ChartPadding, ChartView } from './types.js';
|
|
8
|
+
export declare const MAX_POINT_LABELS = 300;
|
|
9
|
+
export declare const DEFAULT_PADDING: {
|
|
10
|
+
top: number;
|
|
11
|
+
right: number;
|
|
12
|
+
bottom: number;
|
|
13
|
+
left: number;
|
|
14
|
+
};
|
|
15
|
+
export declare const fallbackResolve: (_value: string, fallback: Rgba) => Rgba;
|
|
16
|
+
/** Annotation colors resolved against the theme */
|
|
17
|
+
export declare const resolveAnnotations: (annotations: readonly ChartAnnotation[] | undefined, theme: ChartTheme) => ResolvedAnnotation[];
|
|
18
|
+
export interface ChartLayout {
|
|
19
|
+
plot: Rect;
|
|
20
|
+
scales: Scales;
|
|
21
|
+
xTicks: AxisTicks;
|
|
22
|
+
yTicks: AxisTicks;
|
|
23
|
+
}
|
|
24
|
+
export interface LayoutInput {
|
|
25
|
+
model: ChartModel;
|
|
26
|
+
view: ChartView;
|
|
27
|
+
theme: ChartTheme;
|
|
28
|
+
/** Size of the drawing area (legend excluded), CSS pixels */
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
padding?: ChartPadding;
|
|
32
|
+
/** Offset of the drawing area (e.g. below a legend) */
|
|
33
|
+
top?: number;
|
|
34
|
+
/** Width of a tick label in the theme font */
|
|
35
|
+
measure: (text: string) => number;
|
|
36
|
+
}
|
|
37
|
+
/** Ticks, room for the axes and the plot rectangle */
|
|
38
|
+
export declare const layoutChart: (input: LayoutInput) => ChartLayout;
|
|
39
|
+
/** Labels of the visible scatter points (`showLabels`) */
|
|
40
|
+
export declare const collectPointLabels: (model: ChartModel, view: ChartView, s: Scales) => PointLabel[];
|
|
41
|
+
/** Pixel position of a point (the top of a bar) */
|
|
42
|
+
export declare const pointOf: (s: SeriesModel, i: number, sc: Scales) => {
|
|
43
|
+
px: number;
|
|
44
|
+
py: number;
|
|
45
|
+
};
|
|
46
|
+
/** Diameter of a scatter dot */
|
|
47
|
+
export declare const dotSize: (s: SeriesModel, i: number) => number;
|
|
48
|
+
/** Hover payload item of a point */
|
|
49
|
+
export declare const hoverItemOf: (s: SeriesModel, index: number) => ChartHoverItem;
|
|
50
|
+
/**
|
|
51
|
+
* Points under a pixel of the stage: the nearest point (scatter / `nearest`
|
|
52
|
+
* tooltips) or every series at the nearest x (`axis` tooltips).
|
|
53
|
+
* `slop` widens the reach of the dots (touch screens).
|
|
54
|
+
*/
|
|
55
|
+
export declare const hitTest: (model: ChartModel, sc: Scales, xTicks: AxisTicks | null, px: number, py: number, slop?: number) => ChartHoverEvent | null;
|
|
56
|
+
/** Whether two hover payloads point at the same points */
|
|
57
|
+
export declare const sameHover: (a: ChartHoverEvent | null, b: ChartHoverEvent | null) => boolean;
|
|
58
|
+
export interface TooltipRow {
|
|
59
|
+
/** Swatch color (CSS) */
|
|
60
|
+
color: string | null;
|
|
61
|
+
name: string;
|
|
62
|
+
value: string;
|
|
63
|
+
}
|
|
64
|
+
export interface TooltipContent {
|
|
65
|
+
title: string;
|
|
66
|
+
/** Swatch of the title (single scatter point) */
|
|
67
|
+
titleColor: string | null;
|
|
68
|
+
rows: TooltipRow[];
|
|
69
|
+
}
|
|
70
|
+
/** Default tooltip content of a hover payload */
|
|
71
|
+
export declare const tooltipContent: (model: ChartModel, event: ChartHoverEvent, yTicks: AxisTicks | null) => TooltipContent;
|
|
72
|
+
/** Shape of the hover marker of an item: a ring on a point, or a bar highlight */
|
|
73
|
+
export type HoverMark = {
|
|
74
|
+
kind: "dot";
|
|
75
|
+
x: number;
|
|
76
|
+
y: number;
|
|
77
|
+
size: number;
|
|
78
|
+
color: string;
|
|
79
|
+
} | {
|
|
80
|
+
kind: "bar";
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
width: number;
|
|
84
|
+
height: number;
|
|
85
|
+
};
|
|
86
|
+
/** Markers of the hovered points (pixels of the stage) */
|
|
87
|
+
export declare const hoverMarks: (model: ChartModel, sc: Scales, event: ChartHoverEvent) => HoverMark[];
|
|
88
|
+
/** Whether the guide line follows the pointer */
|
|
89
|
+
export declare const showsCrosshair: (model: ChartModel, event: ChartHoverEvent, crosshair: boolean | undefined) => boolean;
|