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 @@
|
|
|
1
|
+
{"version":3,"file":"items.cjs","names":["GAP","packColor","require_color","require_types","rel","value","origin","points","out","count","i","x","o","y","DRAW_ORDER","buildItems","items","outlines","ordered","model","s","a","b","pts","base","top","instances","valid","buffer","f","u","seriesColor","sizes","size","pc"],"sources":["../../../../charts/src/engine/items.ts"],"sourcesContent":["// Chart model -> GPU-ready buffers (positions relative to an origin).\n\nimport { packColor } from \"./color\";\nimport type { ChartModel } from \"./model\";\nimport { GAP, SCATTER_STRIDE, type RenderItem } from \"./renderers/types\";\n\nexport interface Origin {\n x: number;\n y: number;\n}\n\nconst rel = (value: number, origin: number) =>\n Number.isFinite(value) ? value - origin : GAP;\n\nconst points = (x: Float64Array, y: Float64Array, count: number, o: Origin) => {\n const out = new Float32Array(count * 2);\n for (let i = 0; i < count; i++) {\n // x stays real at gaps so sorted data can be binary searched\n out[i * 2] = rel(x[i], o.x);\n out[i * 2 + 1] = Number.isFinite(y[i]) ? y[i] - o.y : GAP;\n }\n return out;\n};\n\nconst DRAW_ORDER = { area: 0, bar: 1, line: 2, scatter: 3 } as const;\n\n/** Render items of the visible series, back to front */\nexport const buildItems = (\n model: ChartModel,\n origin: Origin,\n version: number,\n): RenderItem[] => {\n const items: RenderItem[] = [];\n /** Outlines of the areas are drawn with the lines, above the bars */\n const outlines: RenderItem[] = [];\n const ordered = model.series\n .filter((s) => !s.hidden)\n .sort(\n (a, b) => DRAW_ORDER[a.type] - DRAW_ORDER[b.type] || a.index - b.index,\n );\n for (const s of ordered) {\n const { x, y, count, sorted } = s.cols;\n if ((s.type === \"line\" || s.type === \"scatter\") && outlines.length) {\n items.push(...outlines.splice(0));\n }\n switch (s.type) {\n case \"line\":\n case \"area\": {\n const pts = points(x, y, count, origin);\n if (s.type === \"area\") {\n items.push({\n kind: \"area\",\n key: `${s.key}:area`,\n version,\n color: s.color,\n points: pts,\n count,\n baseline: model.baseline - origin.y,\n opacity: s.opacity,\n sorted,\n });\n }\n (s.type === \"area\" ? outlines : items).push({\n kind: \"line\",\n key: `${s.key}:line`,\n version,\n color: s.color,\n points: pts,\n count,\n width: s.lineWidth,\n sorted,\n });\n break;\n }\n case \"bar\": {\n const base = s.barBase ?? new Float64Array(count);\n const top = s.barTop ?? y;\n const instances = new Float32Array(count * 3);\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(top[i]) && Number.isFinite(base[i]);\n instances[i * 3] = rel(x[i] + s.barOffset, origin.x);\n instances[i * 3 + 1] = valid ? base[i] - origin.y : GAP;\n instances[i * 3 + 2] = valid ? top[i] - origin.y : GAP;\n }\n items.push({\n kind: \"bar\",\n key: `${s.key}:bar`,\n version,\n color: s.color,\n instances,\n count,\n halfWidth: s.barHalfWidth,\n sorted,\n radius: model.series.some(\n (o) =>\n o !== s &&\n !o.hidden &&\n o.type === \"bar\" &&\n o.barOffset === s.barOffset,\n )\n ? 0\n : 3,\n });\n break;\n }\n default: {\n const buffer = new ArrayBuffer(count * SCATTER_STRIDE);\n const f = new Float32Array(buffer);\n const u = new Uint32Array(buffer);\n const seriesColor = packColor(s.color);\n const sizes = s.cols.size;\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(y[i]) && Number.isFinite(x[i]);\n f[i * 4] = valid ? x[i] - origin.x : GAP;\n f[i * 4 + 1] = valid ? y[i] - origin.y : GAP;\n const size = sizes ? sizes[i] : NaN;\n f[i * 4 + 2] = Number.isFinite(size) && size > 0 ? size : s.pointSize;\n const pc = s.pointColors?.[i];\n u[i * 4 + 3] = pc ? packColor(pc) : seriesColor;\n }\n items.push({\n kind: \"scatter\",\n key: `${s.key}:scatter`,\n version,\n color: s.color,\n instances: buffer,\n count,\n opacity: s.opacity,\n stroke: count <= 5000 ? 1.25 : 0,\n });\n break;\n }\n }\n }\n items.push(...outlines);\n return items;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ChartModel } from './model.cjs';
|
|
2
|
+
import { RenderItem } from './renderers/types.cjs';
|
|
3
|
+
export interface Origin {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
}
|
|
7
|
+
/** Render items of the visible series, back to front */
|
|
8
|
+
export declare const buildItems: (model: ChartModel, origin: Origin, version: number) => RenderItem[];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ChartModel } from './model.js';
|
|
2
|
+
import { RenderItem } from './renderers/types.js';
|
|
3
|
+
export interface Origin {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
}
|
|
7
|
+
/** Render items of the visible series, back to front */
|
|
8
|
+
export declare const buildItems: (model: ChartModel, origin: Origin, version: number) => RenderItem[];
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { packColor as e } from "./color.js";
|
|
2
|
+
import { GAP as t } from "./renderers/types.js";
|
|
3
|
+
//#region src/engine/items.ts
|
|
4
|
+
var n = (e, n) => Number.isFinite(e) ? e - n : t, r = (e, r, i, a) => {
|
|
5
|
+
let o = new Float32Array(i * 2);
|
|
6
|
+
for (let s = 0; s < i; s++) o[s * 2] = n(e[s], a.x), o[s * 2 + 1] = Number.isFinite(r[s]) ? r[s] - a.y : t;
|
|
7
|
+
return o;
|
|
8
|
+
}, i = {
|
|
9
|
+
area: 0,
|
|
10
|
+
bar: 1,
|
|
11
|
+
line: 2,
|
|
12
|
+
scatter: 3
|
|
13
|
+
}, a = (a, o, s) => {
|
|
14
|
+
let c = [], l = [], u = a.series.filter((e) => !e.hidden).sort((e, t) => i[e.type] - i[t.type] || e.index - t.index);
|
|
15
|
+
for (let i of u) {
|
|
16
|
+
let { x: u, y: d, count: f, sorted: p } = i.cols;
|
|
17
|
+
switch ((i.type === "line" || i.type === "scatter") && l.length && c.push(...l.splice(0)), i.type) {
|
|
18
|
+
case "line":
|
|
19
|
+
case "area": {
|
|
20
|
+
let e = r(u, d, f, o);
|
|
21
|
+
i.type === "area" && c.push({
|
|
22
|
+
kind: "area",
|
|
23
|
+
key: `${i.key}:area`,
|
|
24
|
+
version: s,
|
|
25
|
+
color: i.color,
|
|
26
|
+
points: e,
|
|
27
|
+
count: f,
|
|
28
|
+
baseline: a.baseline - o.y,
|
|
29
|
+
opacity: i.opacity,
|
|
30
|
+
sorted: p
|
|
31
|
+
}), (i.type === "area" ? l : c).push({
|
|
32
|
+
kind: "line",
|
|
33
|
+
key: `${i.key}:line`,
|
|
34
|
+
version: s,
|
|
35
|
+
color: i.color,
|
|
36
|
+
points: e,
|
|
37
|
+
count: f,
|
|
38
|
+
width: i.lineWidth,
|
|
39
|
+
sorted: p
|
|
40
|
+
});
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
case "bar": {
|
|
44
|
+
let e = i.barBase ?? new Float64Array(f), r = i.barTop ?? d, l = new Float32Array(f * 3);
|
|
45
|
+
for (let a = 0; a < f; a++) {
|
|
46
|
+
let s = Number.isFinite(r[a]) && Number.isFinite(e[a]);
|
|
47
|
+
l[a * 3] = n(u[a] + i.barOffset, o.x), l[a * 3 + 1] = s ? e[a] - o.y : t, l[a * 3 + 2] = s ? r[a] - o.y : t;
|
|
48
|
+
}
|
|
49
|
+
c.push({
|
|
50
|
+
kind: "bar",
|
|
51
|
+
key: `${i.key}:bar`,
|
|
52
|
+
version: s,
|
|
53
|
+
color: i.color,
|
|
54
|
+
instances: l,
|
|
55
|
+
count: f,
|
|
56
|
+
halfWidth: i.barHalfWidth,
|
|
57
|
+
sorted: p,
|
|
58
|
+
radius: a.series.some((e) => e !== i && !e.hidden && e.type === "bar" && e.barOffset === i.barOffset) ? 0 : 3
|
|
59
|
+
});
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
default: {
|
|
63
|
+
let n = /* @__PURE__ */ new ArrayBuffer(f * 16), r = new Float32Array(n), a = new Uint32Array(n), l = e(i.color), p = i.cols.size;
|
|
64
|
+
for (let n = 0; n < f; n++) {
|
|
65
|
+
let s = Number.isFinite(d[n]) && Number.isFinite(u[n]);
|
|
66
|
+
r[n * 4] = s ? u[n] - o.x : t, r[n * 4 + 1] = s ? d[n] - o.y : t;
|
|
67
|
+
let c = p ? p[n] : NaN;
|
|
68
|
+
r[n * 4 + 2] = Number.isFinite(c) && c > 0 ? c : i.pointSize;
|
|
69
|
+
let f = i.pointColors?.[n];
|
|
70
|
+
a[n * 4 + 3] = f ? e(f) : l;
|
|
71
|
+
}
|
|
72
|
+
c.push({
|
|
73
|
+
kind: "scatter",
|
|
74
|
+
key: `${i.key}:scatter`,
|
|
75
|
+
version: s,
|
|
76
|
+
color: i.color,
|
|
77
|
+
instances: n,
|
|
78
|
+
count: f,
|
|
79
|
+
opacity: i.opacity,
|
|
80
|
+
stroke: f <= 5e3 ? 1.25 : 0
|
|
81
|
+
});
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return c.push(...l), c;
|
|
87
|
+
};
|
|
88
|
+
//#endregion
|
|
89
|
+
export { a as buildItems };
|
|
90
|
+
|
|
91
|
+
//# sourceMappingURL=items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"items.js","names":["rel","value","origin","GAP","points","out","count","i","x","o","y","DRAW_ORDER","buildItems","items","outlines","ordered","model","s","a","b","pts","base","top","instances","valid","buffer","f","u","seriesColor","packColor","sizes","size","pc"],"sources":["../../../../charts/src/engine/items.ts"],"sourcesContent":["// Chart model -> GPU-ready buffers (positions relative to an origin).\n\nimport { packColor } from \"./color\";\nimport type { ChartModel } from \"./model\";\nimport { GAP, SCATTER_STRIDE, type RenderItem } from \"./renderers/types\";\n\nexport interface Origin {\n x: number;\n y: number;\n}\n\nconst rel = (value: number, origin: number) =>\n Number.isFinite(value) ? value - origin : GAP;\n\nconst points = (x: Float64Array, y: Float64Array, count: number, o: Origin) => {\n const out = new Float32Array(count * 2);\n for (let i = 0; i < count; i++) {\n // x stays real at gaps so sorted data can be binary searched\n out[i * 2] = rel(x[i], o.x);\n out[i * 2 + 1] = Number.isFinite(y[i]) ? y[i] - o.y : GAP;\n }\n return out;\n};\n\nconst DRAW_ORDER = { area: 0, bar: 1, line: 2, scatter: 3 } as const;\n\n/** Render items of the visible series, back to front */\nexport const buildItems = (\n model: ChartModel,\n origin: Origin,\n version: number,\n): RenderItem[] => {\n const items: RenderItem[] = [];\n /** Outlines of the areas are drawn with the lines, above the bars */\n const outlines: RenderItem[] = [];\n const ordered = model.series\n .filter((s) => !s.hidden)\n .sort(\n (a, b) => DRAW_ORDER[a.type] - DRAW_ORDER[b.type] || a.index - b.index,\n );\n for (const s of ordered) {\n const { x, y, count, sorted } = s.cols;\n if ((s.type === \"line\" || s.type === \"scatter\") && outlines.length) {\n items.push(...outlines.splice(0));\n }\n switch (s.type) {\n case \"line\":\n case \"area\": {\n const pts = points(x, y, count, origin);\n if (s.type === \"area\") {\n items.push({\n kind: \"area\",\n key: `${s.key}:area`,\n version,\n color: s.color,\n points: pts,\n count,\n baseline: model.baseline - origin.y,\n opacity: s.opacity,\n sorted,\n });\n }\n (s.type === \"area\" ? outlines : items).push({\n kind: \"line\",\n key: `${s.key}:line`,\n version,\n color: s.color,\n points: pts,\n count,\n width: s.lineWidth,\n sorted,\n });\n break;\n }\n case \"bar\": {\n const base = s.barBase ?? new Float64Array(count);\n const top = s.barTop ?? y;\n const instances = new Float32Array(count * 3);\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(top[i]) && Number.isFinite(base[i]);\n instances[i * 3] = rel(x[i] + s.barOffset, origin.x);\n instances[i * 3 + 1] = valid ? base[i] - origin.y : GAP;\n instances[i * 3 + 2] = valid ? top[i] - origin.y : GAP;\n }\n items.push({\n kind: \"bar\",\n key: `${s.key}:bar`,\n version,\n color: s.color,\n instances,\n count,\n halfWidth: s.barHalfWidth,\n sorted,\n radius: model.series.some(\n (o) =>\n o !== s &&\n !o.hidden &&\n o.type === \"bar\" &&\n o.barOffset === s.barOffset,\n )\n ? 0\n : 3,\n });\n break;\n }\n default: {\n const buffer = new ArrayBuffer(count * SCATTER_STRIDE);\n const f = new Float32Array(buffer);\n const u = new Uint32Array(buffer);\n const seriesColor = packColor(s.color);\n const sizes = s.cols.size;\n for (let i = 0; i < count; i++) {\n const valid = Number.isFinite(y[i]) && Number.isFinite(x[i]);\n f[i * 4] = valid ? x[i] - origin.x : GAP;\n f[i * 4 + 1] = valid ? y[i] - origin.y : GAP;\n const size = sizes ? sizes[i] : NaN;\n f[i * 4 + 2] = Number.isFinite(size) && size > 0 ? size : s.pointSize;\n const pc = s.pointColors?.[i];\n u[i * 4 + 3] = pc ? packColor(pc) : seriesColor;\n }\n items.push({\n kind: \"scatter\",\n key: `${s.key}:scatter`,\n version,\n color: s.color,\n instances: buffer,\n count,\n opacity: s.opacity,\n stroke: count <= 5000 ? 1.25 : 0,\n });\n break;\n }\n }\n }\n items.push(...outlines);\n return items;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=(e,t,n,r)=>{let[i,a]=t.x,[o,s]=t.y,c=e.width/(a-i||1),l=e.height/(s-o||1),u=e.x,d=e.x+e.width,f=e.y,p=e.y+e.height;return{plot:e,view:t,xToPx:n?e=>d-(e-i)*c:e=>u+(e-i)*c,yToPx:r?e=>f+(e-o)*l:e=>p-(e-o)*l,pxToX:n?e=>i+(d-e)/c:e=>i+(e-u)/c,pxToY:r?e=>o+(e-f)/l:e=>o+(p-e)/l,xPerPx:1/c,yPerPx:1/l}},t=e=>{let{width:t,height:n,padding:r,fontSize:i}=e,a=Math.ceil(i*1.4),o=r.left+(e.yLabelWidth>0?e.yLabelWidth+8:0)+(e.yTitle?a+6:0),s=r.bottom+(e.xAxisVisible?a+8:0)+(e.xTitle?a+4:0),c=r.top,l=r.right;return{x:Math.round(o),y:Math.round(c),width:Math.max(10,Math.round(t-o-l)),height:Math.max(10,Math.round(n-c-s))}};exports.computePlot=t,exports.createScales=e;
|
|
2
|
+
//# sourceMappingURL=layout.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.cjs","names":["createScales","x0","x1","view","y0","y1","xs","plot","ys","left","right","top","bottom","reverseX","v","reverseY","p","computePlot","input","line","fontSize","padding","width","height"],"sources":["../../../../charts/src/engine/layout.ts"],"sourcesContent":["// Plot rectangle and data <-> pixel mappings (CSS pixels of the stage).\n\nimport type { ChartView } from \"./types\";\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface Scales {\n plot: Rect;\n view: ChartView;\n xToPx(value: number): number;\n yToPx(value: number): number;\n pxToX(px: number): number;\n pxToY(px: number): number;\n /** Data units per CSS pixel */\n xPerPx: number;\n yPerPx: number;\n}\n\nexport const createScales = (\n plot: Rect,\n view: ChartView,\n reverseX: boolean,\n reverseY: boolean,\n): Scales => {\n const [x0, x1] = view.x;\n const [y0, y1] = view.y;\n const xs = plot.width / (x1 - x0 || 1);\n const ys = plot.height / (y1 - y0 || 1);\n const left = plot.x;\n const right = plot.x + plot.width;\n const top = plot.y;\n const bottom = plot.y + plot.height;\n return {\n plot,\n view,\n xToPx: reverseX\n ? (v) => right - (v - x0) * xs\n : (v) => left + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => top + (v - y0) * ys\n : (v) => bottom - (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (right - p) / xs\n : (p) => x0 + (p - left) / xs,\n pxToY: reverseY\n ? (p) => y0 + (p - top) / ys\n : (p) => y0 + (bottom - p) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n};\n\nexport interface LayoutInput {\n width: number;\n height: number;\n padding: { top: number; right: number; bottom: number; left: number };\n /** Width of the widest y tick label (0 when the axis is hidden) */\n yLabelWidth: number;\n xAxisVisible: boolean;\n xTitle: boolean;\n yTitle: boolean;\n fontSize: number;\n}\n\n/** Room for the axes, then the plot area */\nexport const computePlot = (input: LayoutInput): Rect => {\n const { width, height, padding, fontSize } = input;\n const line = Math.ceil(fontSize * 1.4);\n const left =\n padding.left +\n (input.yLabelWidth > 0 ? input.yLabelWidth + 8 : 0) +\n (input.yTitle ? line + 6 : 0);\n const bottom =\n padding.bottom +\n (input.xAxisVisible ? line + 8 : 0) +\n (input.xTitle ? line + 4 : 0);\n const top = padding.top;\n const right = padding.right;\n return {\n x: Math.round(left),\n y: Math.round(top),\n width: Math.max(10, Math.round(width - left - right)),\n height: Math.max(10, Math.round(height - top - bottom)),\n };\n};\n"],"mappings":"AAuBA,IAAaA,GACX,EACA,EACA,EACA,IACW,CACX,GAAM,CAACC,EAAIC,GAAMC,EAAK,EAChB,CAACC,EAAIC,GAAMF,EAAK,EAChBG,EAAKC,EAAK,OAASL,EAAKD,GAAM,GAC9BO,EAAKD,EAAK,QAAUF,EAAKD,GAAM,GAC/BK,EAAOF,EAAK,EACZG,EAAQH,EAAK,EAAIA,EAAK,MACtBI,EAAMJ,EAAK,EACXK,EAASL,EAAK,EAAIA,EAAK,OAC7B,MAAO,CACL,OACA,OACA,MAAOM,EACF,GAAMH,GAASI,EAAIb,GAAMK,EACzB,GAAMG,GAAQK,EAAIb,GAAMK,EAC7B,MAAOS,EACF,GAAMJ,GAAOG,EAAIV,GAAMI,EACvB,GAAMI,GAAUE,EAAIV,GAAMI,EAC/B,MAAOK,EACF,GAAMZ,GAAMS,EAAQM,GAAKV,EACzB,GAAML,GAAMe,EAAIP,GAAQH,EAC7B,MAAOS,EACF,GAAMX,GAAMY,EAAIL,GAAOH,EACvB,GAAMJ,GAAMQ,EAASI,GAAKR,EAC/B,OAAQ,EAAIF,EACZ,OAAQ,EAAIE,CACd,CACF,EAeaS,EAAe,GAA6B,CACvD,GAAM,CAAE,QAAO,SAAQ,UAAS,YAAaC,EACvCC,EAAO,KAAK,KAAKC,EAAW,GAAG,EAC/BX,EACJY,EAAQ,MACPH,EAAM,YAAc,EAAIA,EAAM,YAAc,EAAI,IAChDA,EAAM,OAASC,EAAO,EAAI,GACvBP,EACJS,EAAQ,QACPH,EAAM,aAAeC,EAAO,EAAI,IAChCD,EAAM,OAASC,EAAO,EAAI,GACvBR,EAAMU,EAAQ,IACdX,EAAQW,EAAQ,MACtB,MAAO,CACL,EAAG,KAAK,MAAMZ,CAAI,EAClB,EAAG,KAAK,MAAME,CAAG,EACjB,MAAO,KAAK,IAAI,GAAI,KAAK,MAAMW,EAAQb,EAAOC,CAAK,CAAC,EACpD,OAAQ,KAAK,IAAI,GAAI,KAAK,MAAMa,EAASZ,EAAMC,CAAM,CAAC,CACxD,CACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ChartView } from './types.cjs';
|
|
2
|
+
export interface Rect {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
8
|
+
export interface Scales {
|
|
9
|
+
plot: Rect;
|
|
10
|
+
view: ChartView;
|
|
11
|
+
xToPx(value: number): number;
|
|
12
|
+
yToPx(value: number): number;
|
|
13
|
+
pxToX(px: number): number;
|
|
14
|
+
pxToY(px: number): number;
|
|
15
|
+
/** Data units per CSS pixel */
|
|
16
|
+
xPerPx: number;
|
|
17
|
+
yPerPx: number;
|
|
18
|
+
}
|
|
19
|
+
export declare const createScales: (plot: Rect, view: ChartView, reverseX: boolean, reverseY: boolean) => Scales;
|
|
20
|
+
export interface LayoutInput {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
padding: {
|
|
24
|
+
top: number;
|
|
25
|
+
right: number;
|
|
26
|
+
bottom: number;
|
|
27
|
+
left: number;
|
|
28
|
+
};
|
|
29
|
+
/** Width of the widest y tick label (0 when the axis is hidden) */
|
|
30
|
+
yLabelWidth: number;
|
|
31
|
+
xAxisVisible: boolean;
|
|
32
|
+
xTitle: boolean;
|
|
33
|
+
yTitle: boolean;
|
|
34
|
+
fontSize: number;
|
|
35
|
+
}
|
|
36
|
+
/** Room for the axes, then the plot area */
|
|
37
|
+
export declare const computePlot: (input: LayoutInput) => Rect;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ChartView } from './types.js';
|
|
2
|
+
export interface Rect {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
}
|
|
8
|
+
export interface Scales {
|
|
9
|
+
plot: Rect;
|
|
10
|
+
view: ChartView;
|
|
11
|
+
xToPx(value: number): number;
|
|
12
|
+
yToPx(value: number): number;
|
|
13
|
+
pxToX(px: number): number;
|
|
14
|
+
pxToY(px: number): number;
|
|
15
|
+
/** Data units per CSS pixel */
|
|
16
|
+
xPerPx: number;
|
|
17
|
+
yPerPx: number;
|
|
18
|
+
}
|
|
19
|
+
export declare const createScales: (plot: Rect, view: ChartView, reverseX: boolean, reverseY: boolean) => Scales;
|
|
20
|
+
export interface LayoutInput {
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
padding: {
|
|
24
|
+
top: number;
|
|
25
|
+
right: number;
|
|
26
|
+
bottom: number;
|
|
27
|
+
left: number;
|
|
28
|
+
};
|
|
29
|
+
/** Width of the widest y tick label (0 when the axis is hidden) */
|
|
30
|
+
yLabelWidth: number;
|
|
31
|
+
xAxisVisible: boolean;
|
|
32
|
+
xTitle: boolean;
|
|
33
|
+
yTitle: boolean;
|
|
34
|
+
fontSize: number;
|
|
35
|
+
}
|
|
36
|
+
/** Room for the axes, then the plot area */
|
|
37
|
+
export declare const computePlot: (input: LayoutInput) => Rect;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/engine/layout.ts
|
|
2
|
+
var e = (e, t, n, r) => {
|
|
3
|
+
let [i, a] = t.x, [o, s] = t.y, c = e.width / (a - i || 1), l = e.height / (s - o || 1), u = e.x, d = e.x + e.width, f = e.y, p = e.y + e.height;
|
|
4
|
+
return {
|
|
5
|
+
plot: e,
|
|
6
|
+
view: t,
|
|
7
|
+
xToPx: n ? (e) => d - (e - i) * c : (e) => u + (e - i) * c,
|
|
8
|
+
yToPx: r ? (e) => f + (e - o) * l : (e) => p - (e - o) * l,
|
|
9
|
+
pxToX: n ? (e) => i + (d - e) / c : (e) => i + (e - u) / c,
|
|
10
|
+
pxToY: r ? (e) => o + (e - f) / l : (e) => o + (p - e) / l,
|
|
11
|
+
xPerPx: 1 / c,
|
|
12
|
+
yPerPx: 1 / l
|
|
13
|
+
};
|
|
14
|
+
}, t = (e) => {
|
|
15
|
+
let { width: t, height: n, padding: r, fontSize: i } = e, a = Math.ceil(i * 1.4), o = r.left + (e.yLabelWidth > 0 ? e.yLabelWidth + 8 : 0) + (e.yTitle ? a + 6 : 0), s = r.bottom + (e.xAxisVisible ? a + 8 : 0) + (e.xTitle ? a + 4 : 0), c = r.top, l = r.right;
|
|
16
|
+
return {
|
|
17
|
+
x: Math.round(o),
|
|
18
|
+
y: Math.round(c),
|
|
19
|
+
width: Math.max(10, Math.round(t - o - l)),
|
|
20
|
+
height: Math.max(10, Math.round(n - c - s))
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
//#endregion
|
|
24
|
+
export { t as computePlot, e as createScales };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","names":["createScales","x0","x1","view","y0","y1","xs","plot","ys","left","right","top","bottom","reverseX","v","reverseY","p","computePlot","input","line","fontSize","padding","width","height"],"sources":["../../../../charts/src/engine/layout.ts"],"sourcesContent":["// Plot rectangle and data <-> pixel mappings (CSS pixels of the stage).\n\nimport type { ChartView } from \"./types\";\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface Scales {\n plot: Rect;\n view: ChartView;\n xToPx(value: number): number;\n yToPx(value: number): number;\n pxToX(px: number): number;\n pxToY(px: number): number;\n /** Data units per CSS pixel */\n xPerPx: number;\n yPerPx: number;\n}\n\nexport const createScales = (\n plot: Rect,\n view: ChartView,\n reverseX: boolean,\n reverseY: boolean,\n): Scales => {\n const [x0, x1] = view.x;\n const [y0, y1] = view.y;\n const xs = plot.width / (x1 - x0 || 1);\n const ys = plot.height / (y1 - y0 || 1);\n const left = plot.x;\n const right = plot.x + plot.width;\n const top = plot.y;\n const bottom = plot.y + plot.height;\n return {\n plot,\n view,\n xToPx: reverseX\n ? (v) => right - (v - x0) * xs\n : (v) => left + (v - x0) * xs,\n yToPx: reverseY\n ? (v) => top + (v - y0) * ys\n : (v) => bottom - (v - y0) * ys,\n pxToX: reverseX\n ? (p) => x0 + (right - p) / xs\n : (p) => x0 + (p - left) / xs,\n pxToY: reverseY\n ? (p) => y0 + (p - top) / ys\n : (p) => y0 + (bottom - p) / ys,\n xPerPx: 1 / xs,\n yPerPx: 1 / ys,\n };\n};\n\nexport interface LayoutInput {\n width: number;\n height: number;\n padding: { top: number; right: number; bottom: number; left: number };\n /** Width of the widest y tick label (0 when the axis is hidden) */\n yLabelWidth: number;\n xAxisVisible: boolean;\n xTitle: boolean;\n yTitle: boolean;\n fontSize: number;\n}\n\n/** Room for the axes, then the plot area */\nexport const computePlot = (input: LayoutInput): Rect => {\n const { width, height, padding, fontSize } = input;\n const line = Math.ceil(fontSize * 1.4);\n const left =\n padding.left +\n (input.yLabelWidth > 0 ? input.yLabelWidth + 8 : 0) +\n (input.yTitle ? line + 6 : 0);\n const bottom =\n padding.bottom +\n (input.xAxisVisible ? line + 8 : 0) +\n (input.xTitle ? line + 4 : 0);\n const top = padding.top;\n const right = padding.right;\n return {\n x: Math.round(left),\n y: Math.round(top),\n width: Math.max(10, Math.round(width - left - right)),\n height: Math.max(10, Math.round(height - top - bottom)),\n };\n};\n"],"mappings":";AAuBA,IAAaA,KACX,GACA,GACA,GACA,MACW;CACX,IAAM,CAACC,GAAIC,KAAMC,EAAK,GAChB,CAACC,GAAIC,KAAMF,EAAK,GAChBG,IAAKC,EAAK,SAASL,IAAKD,KAAM,IAC9BO,IAAKD,EAAK,UAAUF,IAAKD,KAAM,IAC/BK,IAAOF,EAAK,GACZG,IAAQH,EAAK,IAAIA,EAAK,OACtBI,IAAMJ,EAAK,GACXK,IAASL,EAAK,IAAIA,EAAK;CAC7B,OAAO;EACL;EACA;EACA,OAAOM,KACF,MAAMH,KAASI,IAAIb,KAAMK,KACzB,MAAMG,KAAQK,IAAIb,KAAMK;EAC7B,OAAOS,KACF,MAAMJ,KAAOG,IAAIV,KAAMI,KACvB,MAAMI,KAAUE,IAAIV,KAAMI;EAC/B,OAAOK,KACF,MAAMZ,KAAMS,IAAQM,KAAKV,KACzB,MAAML,KAAMe,IAAIP,KAAQH;EAC7B,OAAOS,KACF,MAAMX,KAAMY,IAAIL,KAAOH,KACvB,MAAMJ,KAAMQ,IAASI,KAAKR;EAC/B,QAAQ,IAAIF;EACZ,QAAQ,IAAIE;CACd;AACF,GAeaS,KAAe,MAA6B;CACvD,IAAM,EAAE,UAAO,WAAQ,YAAS,gBAAaC,GACvCC,IAAO,KAAK,KAAKC,IAAW,GAAG,GAC/BX,IACJY,EAAQ,QACPH,EAAM,cAAc,IAAIA,EAAM,cAAc,IAAI,MAChDA,EAAM,SAASC,IAAO,IAAI,IACvBP,IACJS,EAAQ,UACPH,EAAM,eAAeC,IAAO,IAAI,MAChCD,EAAM,SAASC,IAAO,IAAI,IACvBR,IAAMU,EAAQ,KACdX,IAAQW,EAAQ;CACtB,OAAO;EACL,GAAG,KAAK,MAAMZ,CAAI;EAClB,GAAG,KAAK,MAAME,CAAG;EACjB,OAAO,KAAK,IAAI,IAAI,KAAK,MAAMW,IAAQb,IAAOC,CAAK,CAAC;EACpD,QAAQ,KAAK,IAAI,IAAI,KAAK,MAAMa,IAASZ,IAAMC,CAAM,CAAC;CACxD;AACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./data.cjs"),t=require("./color.cjs"),n=require("./scale.cjs"),r=require("./spatial.cjs");var i=e=>{if(typeof e==`object`&&e&&!(`length`in e)){let t=e.x;return t&&t.length?t[0]:void 0}let t=e;for(let e=0;e<Math.min(t.length,8);e++){let n=t[e];if(Array.isArray(n))return n[0];if(n&&typeof n==`object`)return n.x}},a=e=>{for(let t of e){let e=i(t);if(e instanceof Date)return`time`;if(typeof e==`string`)return`category`}return`linear`},o=(e,t,n,r)=>({type:t,reverse:!!e?.reverse,categories:n,title:e?.title,format:e?.format,grid:e?.grid??r,visible:e?.visible??!0,tickCount:e?.tickCount}),s=e=>{let t=1/0,n=-1/0;for(let r=0;r<e.length;r++){let i=e[r];Number.isFinite(i)&&(i<t&&(t=i),i>n&&(n=i))}return[t,n]},c=e=>{let t=1/0;for(let n of e){let e=n.sorted?n.x:Float64Array.from(n.x).sort();for(let r=1;r<n.count;r++){let n=e[r]-e[r-1];n>0&&n<t&&(t=n)}}return t},l=(r,i,l,u,d=null)=>{let f=d??i.resolve??((e,n)=>t.resolveStaticColor(e,{},n)),p=r.series,m=p.map(e=>e.data),h=r.xAxis?.type??a(m),g=h===`category`?[...r.xAxis?.categories??e.collectCategories(m)]:[],_=new Map(g.map((e,t)=>[e,t])),v=e.xResolver(h,e=>_.get(e)??NaN),y=`${h}|${g.join(``)}`,b=new Set,x=p.map((n,r)=>{let a=n.id??`#${r}`;for(;b.has(a);)a+=`'`;b.add(a);let o=u.get(a);(!o||o.data!==n.data||o.resolverKey!==y)&&(o={data:n.data,resolverKey:y,cols:e.normalizeData(n.data,v)},u.set(a,o));let s=n.type??`line`,c=n.color?f(n.color,i.palette[r%i.palette.length]):i.palette[r%i.palette.length],d=o.cols,p=null;if(s===`scatter`&&d.colors){let e=new Map;p=d.colors.map(t=>{if(t===void 0)return;let n=e.get(t);return n||e.set(t,n=f(t,c)),n})}let m=n.id??String(r);return{index:r,key:a,id:m,name:n.name??`Series ${r+1}`,type:s,color:c,colorCss:t.toCss(c),lineWidth:n.lineWidth??2,pointSize:n.pointSize??8,opacity:n.opacity??(s===`area`?.28:s===`scatter`?.78:1),hidden:!!n.hidden||l.has(m),showLabels:!!n.showLabels,cols:d,barOffset:0,barHalfWidth:0,barBase:null,barTop:null,pointColors:p}}),S=x.filter(e=>!e.hidden),C=x.length>0&&x.every(e=>e.type===`scatter`),w=S.filter(e=>e.type===`bar`),T=h===`category`?1:(()=>{let e=c(w.map(e=>e.cols));return Number.isFinite(e)?e:1})();if(w.length){let e=new Map;for(let t of w){let n=p[t.index].stack??`\u0000${t.key}`;e.has(n)||e.set(n,e.size)}let t=T*(e.size>1?.78:.62),n=t/e.size,r=new Map;for(let i of w){let a=p[i.index].stack??`\u0000${i.key}`,o=e.get(a)??0;i.barOffset=-t/2+n*(o+.5),i.barHalfWidth=n/2*(e.size>1?.86:1);let s=r.get(a);s||r.set(a,s=new Map);let{x:c,y:l,count:u}=i.cols;i.barBase=new Float64Array(u),i.barTop=new Float64Array(u);for(let e=0;e<u;e++){let t=l[e];if(!Number.isFinite(t)){i.barBase[e]=NaN,i.barTop[e]=NaN;continue}let n=s.get(c[e])??[0,0],r=t>=0?n[0]:n[1];i.barBase[e]=r,i.barTop[e]=r+t,t>=0?n[0]+=t:n[1]+=t,s.set(c[e],n)}}}let E=r.xAxis,D;if(h===`category`)D=[-.5,Math.max(1,g.length)-.5];else{let e=[];for(let t of S)e.push(t.cols.xMin,t.cols.xMax),t.type===`bar`&&e.push(t.cols.xMin-T/2,t.cols.xMax+T/2);if(D=n.ensureSpan(...s(e),h===`time`?[Date.now()-864e5,Date.now()]:[0,1]),C){let e=(D[1]-D[0])*.04;D=[D[0]-e,D[1]+e]}(E?.nice??(C&&h===`linear`))&&h===`linear`&&(D=n.niceDomain(D[0],D[1],E?.tickCount??6))}E?.min!==void 0&&(D[0]=E.min),E?.max!==void 0&&(D[1]=E.max),D=n.ensureSpan(D[0],D[1]);let O=r.yAxis,k=[];for(let e of S)e.type===`bar`&&e.barBase&&e.barTop?k.push(...s(e.barBase),...s(e.barTop)):k.push(e.cols.yMin,e.cols.yMax);(w.length||O?.zero)&&k.push(0);let A=n.ensureSpan(...s(k));if(C){let e=(A[1]-A[0])*.06;A=[A[0]-e,A[1]+e]}(O?.nice??!0)&&(O?.type??`linear`)===`linear`&&(A=n.niceDomain(A[0],A[1],O?.tickCount??5)),w.length&&!O?.zero&&A[0]<0&&s(k)[0]>=0&&(A[0]=0),O?.min!==void 0&&(A[0]=O.min),O?.max!==void 0&&(A[1]=O.max),A=n.ensureSpan(A[0],A[1]);let j=r.interaction===!1?!1:r.interaction===!0||r.interaction===void 0?!0:r.interaction.zoom??!0,M=j===!1?{x:!1,y:!1}:j===!0?{x:!0,y:C}:{x:j.includes(`x`),y:j.includes(`y`)},N=typeof r.tooltip==`object`?r.tooltip:void 0;return{series:x,x:o(E,h,g,!1),y:o(O,O?.type===`time`?`time`:`linear`,[],!0),base:{x:D,y:A},allScatter:C,zoom:M,tooltipMode:N?.mode??(C?`nearest`:`axis`),baseline:Math.min(Math.max(0,A[0]),A[1]),minSpan:{x:h===`category`?1:(D[1]-D[0])*1e-7,y:(A[1]-A[0])*1e-7}}},u=new WeakMap,d=e=>{let t=u.get(e.cols);return t||(t=new r.GridIndex(e.cols.x,e.cols.y,e.cols.count),u.set(e.cols,t)),t};exports.buildModel=l,exports.detectXType=a,exports.gridOf=d;
|
|
2
|
+
//# sourceMappingURL=model.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.cjs","names":["resolveStaticColor","collectCategories","xResolver","normalizeData","toCss","ensureSpan","niceDomain","GridIndex","require_data","require_color","require_scale","require_spatial","firstX","data","xs","list","i","item","detectXType","datas","x","axisModel","options","gridDefault","extent","min","max","values","v","smallestStep","step","c","cols","d","buildModel","resolve","resolver","theme","value","fallback","input","s","xType","categories","categoryMap","resolveX","name","resolverKey","usedKeys","series","key","index","entry","cache","type","color","pointColors","resolved","rgba","id","hidden","visible","allScatter","bars","band","slots","stack","group","slotWidth","sums","slot","totals","count","y","t","base","xOpts","xRange","pad","yOpts","yValues","yRange","zoomOption","zoomAxes","tooltip","grids","gridOf","grid"],"sources":["../../../../charts/src/engine/model.ts"],"sourcesContent":["// Options -> chart model: normalized data, colors, bar layout and the full\n// ranges of the axes. Pure (colors go through the theme's resolver).\n\nimport {\n resolveStaticColor,\n toCss,\n type ColorResolver,\n type Rgba,\n} from \"./color\";\nimport {\n collectCategories,\n normalizeData,\n xResolver,\n type SeriesColumns,\n} from \"./data\";\nimport { ensureSpan, niceDomain } from \"./scale\";\nimport { GridIndex } from \"./spatial\";\nimport type { ChartTheme } from \"./theme\";\nimport type {\n ChartAxisOptions,\n ChartAxisType,\n ChartOptions,\n ChartSeriesData,\n ChartSeriesType,\n} from \"./types\";\nimport type { Range } from \"./viewport\";\n\nexport interface AxisModel {\n type: ChartAxisType;\n reverse: boolean;\n categories: string[];\n title?: string;\n format?: (value: number) => string;\n grid: boolean;\n visible: boolean;\n tickCount?: number;\n}\n\nexport interface SeriesModel {\n index: number;\n /** Key of the GPU resources and of the data cache */\n key: string;\n id: string;\n name: string;\n type: ChartSeriesType;\n color: Rgba;\n colorCss: string;\n lineWidth: number;\n pointSize: number;\n opacity: number;\n hidden: boolean;\n showLabels: boolean;\n cols: SeriesColumns;\n /** Bars: x offset of the series inside a group and half of the bar width */\n barOffset: number;\n barHalfWidth: number;\n /** Bars: bottom / top of every bar (stacks included) */\n barBase: Float64Array | null;\n barTop: Float64Array | null;\n /** Scatter: resolved per-point colors */\n pointColors: (Rgba | undefined)[] | null;\n}\n\nexport interface ChartModel {\n series: SeriesModel[];\n x: AxisModel;\n y: AxisModel;\n /** Full ranges (zoomed out) */\n base: { x: Range; y: Range };\n allScatter: boolean;\n zoom: { x: boolean; y: boolean };\n tooltipMode: \"nearest\" | \"axis\";\n /** Y value the areas are filled to */\n baseline: number;\n /** Smallest zoomed spans */\n minSpan: { x: number; y: number };\n}\n\nexport interface DataCacheEntry {\n data: ChartSeriesData;\n resolverKey: string;\n cols: SeriesColumns;\n}\n\nexport type DataCache = Map<string, DataCacheEntry>;\n\nconst firstX = (data: ChartSeriesData): unknown => {\n if (typeof data === \"object\" && data !== null && !(\"length\" in data)) {\n const xs = (data as { x?: ArrayLike<unknown> }).x;\n return xs && xs.length ? xs[0] : undefined;\n }\n const list = data as ArrayLike<unknown>;\n for (let i = 0; i < Math.min(list.length, 8); i++) {\n const item = list[i];\n if (Array.isArray(item)) return item[0];\n if (item && typeof item === \"object\") return (item as { x?: unknown }).x;\n }\n return undefined;\n};\n\n/** Axis type when not given: dates -> time, strings -> category */\nexport const detectXType = (\n datas: readonly ChartSeriesData[],\n): ChartAxisType => {\n for (const data of datas) {\n const x = firstX(data);\n if (x instanceof Date) return \"time\";\n if (typeof x === \"string\") return \"category\";\n }\n return \"linear\";\n};\n\nconst axisModel = (\n options: ChartAxisOptions | undefined,\n type: ChartAxisType,\n categories: string[],\n gridDefault: boolean,\n): AxisModel => ({\n type,\n reverse: !!options?.reverse,\n categories,\n title: options?.title,\n format: options?.format,\n grid: options?.grid ?? gridDefault,\n visible: options?.visible ?? true,\n tickCount: options?.tickCount,\n});\n\nconst extent = (values: ArrayLike<number>): Range => {\n let min = Infinity;\n let max = -Infinity;\n for (let i = 0; i < values.length; i++) {\n const v = values[i];\n if (!Number.isFinite(v)) continue;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return [min, max];\n};\n\n/** Smallest positive gap between consecutive x values (bar width on numeric axes) */\nconst smallestStep = (cols: SeriesColumns[]): number => {\n let step = Infinity;\n for (const c of cols) {\n const xs = c.sorted ? c.x : Float64Array.from(c.x).sort();\n for (let i = 1; i < c.count; i++) {\n const d = xs[i] - xs[i - 1];\n if (d > 0 && d < step) step = d;\n }\n }\n return step;\n};\n\nexport const buildModel = (\n options: ChartOptions,\n theme: ChartTheme,\n hidden: ReadonlySet<string>,\n cache: DataCache,\n resolver: ColorResolver | null = null,\n): ChartModel => {\n const resolve: ColorResolver =\n resolver ??\n theme.resolve ??\n ((value, fallback) => resolveStaticColor(value, {}, fallback));\n const input = options.series;\n const datas = input.map((s) => s.data);\n const xType = options.xAxis?.type ?? detectXType(datas);\n const categories =\n xType === \"category\"\n ? [...(options.xAxis?.categories ?? collectCategories(datas))]\n : [];\n const categoryMap = new Map(categories.map((c, i) => [c, i]));\n const resolveX = xResolver(xType, (name) => categoryMap.get(name) ?? NaN);\n const resolverKey = `${xType}|${categories.join(\"\\u0001\")}`;\n\n const usedKeys = new Set<string>();\n const series: SeriesModel[] = input.map((s, index) => {\n let key = s.id ?? `#${index}`;\n while (usedKeys.has(key)) key += \"'\";\n usedKeys.add(key);\n let entry = cache.get(key);\n if (!entry || entry.data !== s.data || entry.resolverKey !== resolverKey) {\n entry = {\n data: s.data,\n resolverKey,\n cols: normalizeData(s.data, resolveX),\n };\n cache.set(key, entry);\n }\n const type = s.type ?? \"line\";\n const color = s.color\n ? resolve(s.color, theme.palette[index % theme.palette.length])\n : theme.palette[index % theme.palette.length];\n const cols = entry.cols;\n let pointColors: (Rgba | undefined)[] | null = null;\n if (type === \"scatter\" && cols.colors) {\n const resolved = new Map<string, Rgba>();\n pointColors = cols.colors.map((c) => {\n if (c === undefined) return undefined;\n let rgba = resolved.get(c);\n if (!rgba) resolved.set(c, (rgba = resolve(c, color)));\n return rgba;\n });\n }\n const id = s.id ?? String(index);\n return {\n index,\n key,\n id,\n name: s.name ?? `Series ${index + 1}`,\n type,\n color,\n colorCss: toCss(color),\n lineWidth: s.lineWidth ?? 2,\n pointSize: s.pointSize ?? 8,\n opacity:\n s.opacity ?? (type === \"area\" ? 0.28 : type === \"scatter\" ? 0.78 : 1),\n hidden: !!s.hidden || hidden.has(id),\n showLabels: !!s.showLabels,\n cols,\n barOffset: 0,\n barHalfWidth: 0,\n barBase: null,\n barTop: null,\n pointColors,\n };\n });\n\n const visible = series.filter((s) => !s.hidden);\n const allScatter =\n series.length > 0 && series.every((s) => s.type === \"scatter\");\n\n // Bars: groups (one slot per stack) and stacking\n const bars = visible.filter((s) => s.type === \"bar\");\n const band =\n xType === \"category\"\n ? 1\n : (() => {\n const step = smallestStep(bars.map((s) => s.cols));\n return Number.isFinite(step) ? step : 1;\n })();\n if (bars.length) {\n const slots = new Map<string, number>();\n for (const s of bars) {\n const stack = input[s.index].stack ?? `\\u0000${s.key}`;\n if (!slots.has(stack)) slots.set(stack, slots.size);\n }\n const group = band * (slots.size > 1 ? 0.78 : 0.62);\n const slotWidth = group / slots.size;\n const sums = new Map<string, Map<number, [number, number]>>();\n for (const s of bars) {\n const stack = input[s.index].stack ?? `\\u0000${s.key}`;\n const slot = slots.get(stack) ?? 0;\n s.barOffset = -group / 2 + slotWidth * (slot + 0.5);\n s.barHalfWidth = (slotWidth / 2) * (slots.size > 1 ? 0.86 : 1);\n let totals = sums.get(stack);\n if (!totals) sums.set(stack, (totals = new Map()));\n const { x, y, count } = s.cols;\n s.barBase = new Float64Array(count);\n s.barTop = new Float64Array(count);\n for (let i = 0; i < count; i++) {\n const v = y[i];\n if (!Number.isFinite(v)) {\n s.barBase[i] = NaN;\n s.barTop[i] = NaN;\n continue;\n }\n const t = totals.get(x[i]) ?? [0, 0];\n const base = v >= 0 ? t[0] : t[1];\n s.barBase[i] = base;\n s.barTop[i] = base + v;\n if (v >= 0) t[0] += v;\n else t[1] += v;\n totals.set(x[i], t);\n }\n }\n }\n\n // X range\n const xOpts = options.xAxis;\n let xRange: Range;\n if (xType === \"category\") {\n xRange = [-0.5, Math.max(1, categories.length) - 0.5];\n } else {\n const values: number[] = [];\n for (const s of visible) {\n values.push(s.cols.xMin, s.cols.xMax);\n if (s.type === \"bar\") {\n values.push(s.cols.xMin - band / 2, s.cols.xMax + band / 2);\n }\n }\n xRange = ensureSpan(\n ...extent(values),\n xType === \"time\" ? [Date.now() - 86400000, Date.now()] : [0, 1],\n );\n if (allScatter) {\n const pad = (xRange[1] - xRange[0]) * 0.04;\n xRange = [xRange[0] - pad, xRange[1] + pad];\n }\n const nice = xOpts?.nice ?? (allScatter && xType === \"linear\");\n if (nice && xType === \"linear\") {\n xRange = niceDomain(xRange[0], xRange[1], xOpts?.tickCount ?? 6);\n }\n }\n if (xOpts?.min !== undefined) xRange[0] = xOpts.min;\n if (xOpts?.max !== undefined) xRange[1] = xOpts.max;\n xRange = ensureSpan(xRange[0], xRange[1]);\n\n // Y range\n const yOpts = options.yAxis;\n const yValues: number[] = [];\n for (const s of visible) {\n if (s.type === \"bar\" && s.barBase && s.barTop) {\n yValues.push(...extent(s.barBase), ...extent(s.barTop));\n } else {\n yValues.push(s.cols.yMin, s.cols.yMax);\n }\n }\n if (bars.length || yOpts?.zero) yValues.push(0);\n let yRange = ensureSpan(...extent(yValues));\n if (allScatter) {\n const pad = (yRange[1] - yRange[0]) * 0.06;\n yRange = [yRange[0] - pad, yRange[1] + pad];\n }\n if ((yOpts?.nice ?? true) && (yOpts?.type ?? \"linear\") === \"linear\") {\n yRange = niceDomain(yRange[0], yRange[1], yOpts?.tickCount ?? 5);\n }\n if (bars.length && !yOpts?.zero) {\n // bars start at zero: no padding below / above it\n if (yRange[0] < 0 && extent(yValues)[0] >= 0) yRange[0] = 0;\n }\n if (yOpts?.min !== undefined) yRange[0] = yOpts.min;\n if (yOpts?.max !== undefined) yRange[1] = yOpts.max;\n yRange = ensureSpan(yRange[0], yRange[1]);\n\n const zoomOption =\n options.interaction === false\n ? false\n : options.interaction === true || options.interaction === undefined\n ? true\n : (options.interaction.zoom ?? true);\n const zoomAxes =\n zoomOption === false\n ? { x: false, y: false }\n : zoomOption === true\n ? { x: true, y: allScatter }\n : { x: zoomOption.includes(\"x\"), y: zoomOption.includes(\"y\") };\n\n const tooltip =\n typeof options.tooltip === \"object\" ? options.tooltip : undefined;\n\n return {\n series,\n x: axisModel(xOpts, xType, categories, false),\n y: axisModel(yOpts, yOpts?.type === \"time\" ? \"time\" : \"linear\", [], true),\n base: { x: xRange, y: yRange },\n allScatter,\n zoom: zoomAxes,\n tooltipMode: tooltip?.mode ?? (allScatter ? \"nearest\" : \"axis\"),\n baseline: Math.min(Math.max(0, yRange[0]), yRange[1]),\n minSpan: {\n x: xType === \"category\" ? 1 : (xRange[1] - xRange[0]) * 1e-7,\n y: (yRange[1] - yRange[0]) * 1e-7,\n },\n };\n};\n\nconst grids = new WeakMap<SeriesColumns, GridIndex>();\n\n/** Spatial index of a scatter series, built on first use and kept with its data */\nexport const gridOf = (s: SeriesModel): GridIndex => {\n let grid = grids.get(s.cols);\n if (!grid) {\n grid = new GridIndex(s.cols.x, s.cols.y, s.cols.count);\n grids.set(s.cols, grid);\n }\n return grid;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ColorResolver, Rgba } from './color.cjs';
|
|
2
|
+
import { SeriesColumns } from './data.cjs';
|
|
3
|
+
import { GridIndex } from './spatial.cjs';
|
|
4
|
+
import { ChartTheme } from './theme.cjs';
|
|
5
|
+
import { ChartAxisType, ChartOptions, ChartSeriesData, ChartSeriesType } from './types.cjs';
|
|
6
|
+
import { Range } from './viewport.cjs';
|
|
7
|
+
export interface AxisModel {
|
|
8
|
+
type: ChartAxisType;
|
|
9
|
+
reverse: boolean;
|
|
10
|
+
categories: string[];
|
|
11
|
+
title?: string;
|
|
12
|
+
format?: (value: number) => string;
|
|
13
|
+
grid: boolean;
|
|
14
|
+
visible: boolean;
|
|
15
|
+
tickCount?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface SeriesModel {
|
|
18
|
+
index: number;
|
|
19
|
+
/** Key of the GPU resources and of the data cache */
|
|
20
|
+
key: string;
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
type: ChartSeriesType;
|
|
24
|
+
color: Rgba;
|
|
25
|
+
colorCss: string;
|
|
26
|
+
lineWidth: number;
|
|
27
|
+
pointSize: number;
|
|
28
|
+
opacity: number;
|
|
29
|
+
hidden: boolean;
|
|
30
|
+
showLabels: boolean;
|
|
31
|
+
cols: SeriesColumns;
|
|
32
|
+
/** Bars: x offset of the series inside a group and half of the bar width */
|
|
33
|
+
barOffset: number;
|
|
34
|
+
barHalfWidth: number;
|
|
35
|
+
/** Bars: bottom / top of every bar (stacks included) */
|
|
36
|
+
barBase: Float64Array | null;
|
|
37
|
+
barTop: Float64Array | null;
|
|
38
|
+
/** Scatter: resolved per-point colors */
|
|
39
|
+
pointColors: (Rgba | undefined)[] | null;
|
|
40
|
+
}
|
|
41
|
+
export interface ChartModel {
|
|
42
|
+
series: SeriesModel[];
|
|
43
|
+
x: AxisModel;
|
|
44
|
+
y: AxisModel;
|
|
45
|
+
/** Full ranges (zoomed out) */
|
|
46
|
+
base: {
|
|
47
|
+
x: Range;
|
|
48
|
+
y: Range;
|
|
49
|
+
};
|
|
50
|
+
allScatter: boolean;
|
|
51
|
+
zoom: {
|
|
52
|
+
x: boolean;
|
|
53
|
+
y: boolean;
|
|
54
|
+
};
|
|
55
|
+
tooltipMode: "nearest" | "axis";
|
|
56
|
+
/** Y value the areas are filled to */
|
|
57
|
+
baseline: number;
|
|
58
|
+
/** Smallest zoomed spans */
|
|
59
|
+
minSpan: {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface DataCacheEntry {
|
|
65
|
+
data: ChartSeriesData;
|
|
66
|
+
resolverKey: string;
|
|
67
|
+
cols: SeriesColumns;
|
|
68
|
+
}
|
|
69
|
+
export type DataCache = Map<string, DataCacheEntry>;
|
|
70
|
+
/** Axis type when not given: dates -> time, strings -> category */
|
|
71
|
+
export declare const detectXType: (datas: readonly ChartSeriesData[]) => ChartAxisType;
|
|
72
|
+
export declare const buildModel: (options: ChartOptions, theme: ChartTheme, hidden: ReadonlySet<string>, cache: DataCache, resolver?: ColorResolver | null) => ChartModel;
|
|
73
|
+
/** Spatial index of a scatter series, built on first use and kept with its data */
|
|
74
|
+
export declare const gridOf: (s: SeriesModel) => GridIndex;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ColorResolver, Rgba } from './color.js';
|
|
2
|
+
import { SeriesColumns } from './data.js';
|
|
3
|
+
import { GridIndex } from './spatial.js';
|
|
4
|
+
import { ChartTheme } from './theme.js';
|
|
5
|
+
import { ChartAxisType, ChartOptions, ChartSeriesData, ChartSeriesType } from './types.js';
|
|
6
|
+
import { Range } from './viewport.js';
|
|
7
|
+
export interface AxisModel {
|
|
8
|
+
type: ChartAxisType;
|
|
9
|
+
reverse: boolean;
|
|
10
|
+
categories: string[];
|
|
11
|
+
title?: string;
|
|
12
|
+
format?: (value: number) => string;
|
|
13
|
+
grid: boolean;
|
|
14
|
+
visible: boolean;
|
|
15
|
+
tickCount?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface SeriesModel {
|
|
18
|
+
index: number;
|
|
19
|
+
/** Key of the GPU resources and of the data cache */
|
|
20
|
+
key: string;
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
type: ChartSeriesType;
|
|
24
|
+
color: Rgba;
|
|
25
|
+
colorCss: string;
|
|
26
|
+
lineWidth: number;
|
|
27
|
+
pointSize: number;
|
|
28
|
+
opacity: number;
|
|
29
|
+
hidden: boolean;
|
|
30
|
+
showLabels: boolean;
|
|
31
|
+
cols: SeriesColumns;
|
|
32
|
+
/** Bars: x offset of the series inside a group and half of the bar width */
|
|
33
|
+
barOffset: number;
|
|
34
|
+
barHalfWidth: number;
|
|
35
|
+
/** Bars: bottom / top of every bar (stacks included) */
|
|
36
|
+
barBase: Float64Array | null;
|
|
37
|
+
barTop: Float64Array | null;
|
|
38
|
+
/** Scatter: resolved per-point colors */
|
|
39
|
+
pointColors: (Rgba | undefined)[] | null;
|
|
40
|
+
}
|
|
41
|
+
export interface ChartModel {
|
|
42
|
+
series: SeriesModel[];
|
|
43
|
+
x: AxisModel;
|
|
44
|
+
y: AxisModel;
|
|
45
|
+
/** Full ranges (zoomed out) */
|
|
46
|
+
base: {
|
|
47
|
+
x: Range;
|
|
48
|
+
y: Range;
|
|
49
|
+
};
|
|
50
|
+
allScatter: boolean;
|
|
51
|
+
zoom: {
|
|
52
|
+
x: boolean;
|
|
53
|
+
y: boolean;
|
|
54
|
+
};
|
|
55
|
+
tooltipMode: "nearest" | "axis";
|
|
56
|
+
/** Y value the areas are filled to */
|
|
57
|
+
baseline: number;
|
|
58
|
+
/** Smallest zoomed spans */
|
|
59
|
+
minSpan: {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface DataCacheEntry {
|
|
65
|
+
data: ChartSeriesData;
|
|
66
|
+
resolverKey: string;
|
|
67
|
+
cols: SeriesColumns;
|
|
68
|
+
}
|
|
69
|
+
export type DataCache = Map<string, DataCacheEntry>;
|
|
70
|
+
/** Axis type when not given: dates -> time, strings -> category */
|
|
71
|
+
export declare const detectXType: (datas: readonly ChartSeriesData[]) => ChartAxisType;
|
|
72
|
+
export declare const buildModel: (options: ChartOptions, theme: ChartTheme, hidden: ReadonlySet<string>, cache: DataCache, resolver?: ColorResolver | null) => ChartModel;
|
|
73
|
+
/** Spatial index of a scatter series, built on first use and kept with its data */
|
|
74
|
+
export declare const gridOf: (s: SeriesModel) => GridIndex;
|