@baron1996/klinecharts-adapter 0.1.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/LICENSE +201 -0
- package/NOTICE +22 -0
- package/README.md +10 -0
- package/dist/adapter.d.ts +57 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +262 -0
- package/dist/conversion/chart-options.d.ts +5 -0
- package/dist/conversion/chart-options.d.ts.map +1 -0
- package/dist/conversion/chart-options.js +123 -0
- package/dist/conversion/id-map.d.ts +12 -0
- package/dist/conversion/id-map.d.ts.map +1 -0
- package/dist/conversion/id-map.js +47 -0
- package/dist/conversion/indicators.d.ts +8 -0
- package/dist/conversion/indicators.d.ts.map +1 -0
- package/dist/conversion/indicators.js +62 -0
- package/dist/conversion/overlays.d.ts +33 -0
- package/dist/conversion/overlays.d.ts.map +1 -0
- package/dist/conversion/overlays.js +301 -0
- package/dist/conversion/panes.d.ts +6 -0
- package/dist/conversion/panes.d.ts.map +1 -0
- package/dist/conversion/panes.js +69 -0
- package/dist/conversion/viewport.d.ts +5 -0
- package/dist/conversion/viewport.d.ts.map +1 -0
- package/dist/conversion/viewport.js +6 -0
- package/dist/engine.d.ts +10 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +37 -0
- package/dist/errors.d.ts +2 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +1 -0
- package/dist/extensions/arrow.d.ts +6 -0
- package/dist/extensions/arrow.d.ts.map +1 -0
- package/dist/extensions/arrow.js +31 -0
- package/dist/extensions/callout.d.ts +6 -0
- package/dist/extensions/callout.d.ts.map +1 -0
- package/dist/extensions/callout.js +33 -0
- package/dist/extensions/cross-line.d.ts +6 -0
- package/dist/extensions/cross-line.d.ts.map +1 -0
- package/dist/extensions/cross-line.js +24 -0
- package/dist/extensions/rectangle.d.ts +6 -0
- package/dist/extensions/rectangle.d.ts.map +1 -0
- package/dist/extensions/rectangle.js +26 -0
- package/dist/extensions/register.d.ts +8 -0
- package/dist/extensions/register.d.ts.map +1 -0
- package/dist/extensions/register.js +26 -0
- package/dist/extensions/text.d.ts +6 -0
- package/dist/extensions/text.d.ts.map +1 -0
- package/dist/extensions/text.js +24 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/registry/indicators.d.ts +4 -0
- package/dist/registry/indicators.d.ts.map +1 -0
- package/dist/registry/indicators.js +33 -0
- package/dist/registry/overlays.d.ts +6 -0
- package/dist/registry/overlays.d.ts.map +1 -0
- package/dist/registry/overlays.js +33 -0
- package/dist/static-data-loader.d.ts +6 -0
- package/dist/static-data-loader.d.ts.map +1 -0
- package/dist/static-data-loader.js +12 -0
- package/dist/version.d.ts +7 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/licenses/KLineCharts-LICENSE +201 -0
- package/licenses/KLineCharts-NOTICE +5 -0
- package/licenses/Noto-Sans-SC-OFL-1.1 +93 -0
- package/licenses/Tabler-Icons-LICENSE +21 -0
- package/licenses/TradingView-Lightweight-Charts-LICENSE +201 -0
- package/licenses/fflate-LICENSE +21 -0
- package/package.json +44 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { SceneError } from '@baron1996/kline-scene-schema';
|
|
2
|
+
import { requireMappedId } from './id-map.js';
|
|
3
|
+
import { createPaneIndicators } from './indicators.js';
|
|
4
|
+
function axisOverride(axis, enginePaneId, engineAxisId) {
|
|
5
|
+
return {
|
|
6
|
+
id: engineAxisId,
|
|
7
|
+
paneId: enginePaneId,
|
|
8
|
+
name: 'normal',
|
|
9
|
+
reverse: axis.reverse,
|
|
10
|
+
inside: axis.inside,
|
|
11
|
+
position: axis.position,
|
|
12
|
+
scrollZoomEnabled: axis.scrollZoomEnabled,
|
|
13
|
+
gap: {
|
|
14
|
+
top: axis.topGap,
|
|
15
|
+
bottom: axis.bottomGap,
|
|
16
|
+
},
|
|
17
|
+
needWidget: true,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** 按 Scene 顺序创建 Pane、Y 轴和指标,并核对每个映射。 */
|
|
21
|
+
export function applyPanes(scene, chart, idMap) {
|
|
22
|
+
for (let paneIndex = 0; paneIndex < scene.panes.length; paneIndex++) {
|
|
23
|
+
const pane = scene.panes[paneIndex];
|
|
24
|
+
if (pane === undefined) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const enginePaneId = requireMappedId(idMap.paneToEngine, pane.id, `/panes/${paneIndex}/id`, 'Pane');
|
|
28
|
+
if (pane.kind === 'indicator') {
|
|
29
|
+
createPaneIndicators(chart, pane, paneIndex, idMap);
|
|
30
|
+
}
|
|
31
|
+
chart.setPaneOptions({
|
|
32
|
+
id: enginePaneId,
|
|
33
|
+
height: pane.height,
|
|
34
|
+
minHeight: pane.minHeight,
|
|
35
|
+
order: pane.order,
|
|
36
|
+
state: pane.state,
|
|
37
|
+
dragEnabled: false,
|
|
38
|
+
});
|
|
39
|
+
for (let axisIndex = 0; axisIndex < pane.yAxes.length; axisIndex++) {
|
|
40
|
+
const axis = pane.yAxes[axisIndex];
|
|
41
|
+
if (axis === undefined) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const engineAxisId = requireMappedId(idMap.yAxisToEngine, axis.id, `/panes/${paneIndex}/yAxes/${axisIndex}/id`, 'Y-axis');
|
|
45
|
+
const override = axisOverride(axis, enginePaneId, engineAxisId);
|
|
46
|
+
const axes = chart.getYAxes({ paneId: enginePaneId });
|
|
47
|
+
if (axes.some((candidate) => candidate.id === engineAxisId)) {
|
|
48
|
+
chart.overrideYAxis(override);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const createdId = chart.createYAxis(override);
|
|
52
|
+
if (createdId !== engineAxisId) {
|
|
53
|
+
throw new SceneError('RUNTIME_INIT_FAILED', `/panes/${paneIndex}/yAxes/${axisIndex}`, `KLineCharts failed to create Y-axis ${axis.id}.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const paneOptions = chart.getPaneOptions(enginePaneId);
|
|
58
|
+
if (paneOptions === null || Array.isArray(paneOptions)) {
|
|
59
|
+
throw new SceneError('RUNTIME_INIT_FAILED', `/panes/${paneIndex}`, `KLineCharts did not retain Pane ${pane.id}.`);
|
|
60
|
+
}
|
|
61
|
+
const actualAxisIds = new Set(chart.getYAxes({ paneId: enginePaneId }).map((axis) => axis.id));
|
|
62
|
+
for (const axis of pane.yAxes) {
|
|
63
|
+
const mapped = idMap.yAxisToEngine.get(axis.id);
|
|
64
|
+
if (mapped === undefined || !actualAxisIds.has(mapped)) {
|
|
65
|
+
throw new SceneError('RUNTIME_INIT_FAILED', `/panes/${paneIndex}/yAxes`, `KLineCharts did not retain Y-axis ${axis.id}.`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viewport.d.ts","sourceRoot":"","sources":["../../src/conversion/viewport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,sBAAsB;AACtB,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAIpE"}
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ChartScene } from '@baron1996/kline-scene-schema';
|
|
2
|
+
import type { Chart } from 'klinecharts';
|
|
3
|
+
export type KLineChartsModule = typeof import('klinecharts');
|
|
4
|
+
export interface EngineHandle {
|
|
5
|
+
readonly chart: Chart;
|
|
6
|
+
readonly module: KLineChartsModule;
|
|
7
|
+
}
|
|
8
|
+
/** 按固定顺序创建并初始化唯一的 KLineCharts 引擎。 */
|
|
9
|
+
export declare function createEngine(container: HTMLElement, scene: ChartScene): Promise<EngineHandle>;
|
|
10
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AASzC,MAAM,MAAM,iBAAiB,GAAG,cAAc,aAAa,CAAC,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACnC;AAiBD,qCAAqC;AACrC,wBAAsB,YAAY,CACjC,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,UAAU,GACf,OAAO,CAAC,YAAY,CAAC,CA+BvB"}
|
package/dist/engine.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { SceneError } from '@baron1996/kline-scene-schema';
|
|
2
|
+
import { toKLineChartsOptions } from './conversion/chart-options.js';
|
|
3
|
+
import { createStaticDataLoader } from './static-data-loader.js';
|
|
4
|
+
import { KLINECHARTS_ENGINE_VERSION, KLINECHARTS_RUNTIME_VERSION, } from './version.js';
|
|
5
|
+
function assertRuntimeIdentity(scene, actualEngineVersion) {
|
|
6
|
+
if (scene.runtime.engine !== 'klinecharts' ||
|
|
7
|
+
scene.runtime.engineVersion !== KLINECHARTS_ENGINE_VERSION ||
|
|
8
|
+
actualEngineVersion !== KLINECHARTS_ENGINE_VERSION ||
|
|
9
|
+
scene.runtime.runtimeVersion !== KLINECHARTS_RUNTIME_VERSION) {
|
|
10
|
+
throw new SceneError('ENGINE_VERSION_MISMATCH', '/runtime', `Expected klinecharts ${KLINECHARTS_ENGINE_VERSION} and Runtime ${KLINECHARTS_RUNTIME_VERSION}; received engine ${actualEngineVersion}.`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/** 按固定顺序创建并初始化唯一的 KLineCharts 引擎。 */
|
|
14
|
+
export async function createEngine(container, scene) {
|
|
15
|
+
const engine = await import('klinecharts');
|
|
16
|
+
assertRuntimeIdentity(scene, engine.version());
|
|
17
|
+
const chart = engine.init(container, toKLineChartsOptions(scene.chart));
|
|
18
|
+
if (chart === null) {
|
|
19
|
+
throw new SceneError('RUNTIME_INIT_FAILED', '/', 'KLineCharts returned null while initializing the chart container.');
|
|
20
|
+
}
|
|
21
|
+
// KLineCharts 生成的交互根节点必须独占图表区域内的触摸手势。
|
|
22
|
+
const engineRoot = container.firstElementChild;
|
|
23
|
+
if (!(engineRoot instanceof HTMLElement)) {
|
|
24
|
+
engine.dispose(container);
|
|
25
|
+
throw new SceneError('RUNTIME_INIT_FAILED', '/', 'KLineCharts did not create an interactive chart root.');
|
|
26
|
+
}
|
|
27
|
+
engineRoot.style.touchAction = 'none';
|
|
28
|
+
chart.setSymbol({
|
|
29
|
+
ticker: scene.symbol.ticker,
|
|
30
|
+
pricePrecision: scene.symbol.pricePrecision,
|
|
31
|
+
volumePrecision: scene.symbol.volumePrecision,
|
|
32
|
+
...(scene.symbol.name === undefined ? {} : { name: scene.symbol.name }),
|
|
33
|
+
});
|
|
34
|
+
chart.setPeriod(structuredClone(scene.period));
|
|
35
|
+
chart.setDataLoader(createStaticDataLoader(scene.data));
|
|
36
|
+
return { chart, module: engine };
|
|
37
|
+
}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SceneError as AdapterError } from '@baron1996/kline-scene-schema';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrow.d.ts","sourceRoot":"","sources":["../../src/extensions/arrow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,gBAAgB;AAChB,eAAO,MAAM,YAAY,EAAE,oBA6B1B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** 项目自有箭头标注。 */
|
|
2
|
+
export const arrowOverlay = {
|
|
3
|
+
name: 'arrow',
|
|
4
|
+
totalStep: 3,
|
|
5
|
+
needDefaultPointFigure: true,
|
|
6
|
+
needDefaultXAxisFigure: true,
|
|
7
|
+
needDefaultYAxisFigure: true,
|
|
8
|
+
createPointFigures: ({ coordinates }) => {
|
|
9
|
+
if (coordinates.length !== 2) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
const [start, end] = coordinates;
|
|
13
|
+
if (start === undefined || end === undefined) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
const angle = Math.atan2(end.y - start.y, end.x - start.x);
|
|
17
|
+
const headLength = 12;
|
|
18
|
+
const left = {
|
|
19
|
+
x: end.x - headLength * Math.cos(angle - Math.PI / 6),
|
|
20
|
+
y: end.y - headLength * Math.sin(angle - Math.PI / 6),
|
|
21
|
+
};
|
|
22
|
+
const right = {
|
|
23
|
+
x: end.x - headLength * Math.cos(angle + Math.PI / 6),
|
|
24
|
+
y: end.y - headLength * Math.sin(angle + Math.PI / 6),
|
|
25
|
+
};
|
|
26
|
+
return [
|
|
27
|
+
{ type: 'line', attrs: { coordinates: [start, end] } },
|
|
28
|
+
{ type: 'polygon', attrs: { coordinates: [end, left, right] } },
|
|
29
|
+
];
|
|
30
|
+
},
|
|
31
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callout.d.ts","sourceRoot":"","sources":["../../src/extensions/callout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,kBAAkB;AAClB,eAAO,MAAM,cAAc,EAAE,oBA+B5B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** 项目自有气泡文字标注。 */
|
|
2
|
+
export const calloutOverlay = {
|
|
3
|
+
name: 'callout',
|
|
4
|
+
totalStep: 2,
|
|
5
|
+
needDefaultPointFigure: true,
|
|
6
|
+
needDefaultXAxisFigure: true,
|
|
7
|
+
needDefaultYAxisFigure: true,
|
|
8
|
+
createPointFigures: ({ coordinates, overlay }) => {
|
|
9
|
+
const point = coordinates[0];
|
|
10
|
+
if (point === undefined) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
const text = typeof overlay.extendData === 'string' ? overlay.extendData : '';
|
|
14
|
+
return [
|
|
15
|
+
{
|
|
16
|
+
type: 'line',
|
|
17
|
+
attrs: {
|
|
18
|
+
coordinates: [point, { x: point.x + 16, y: point.y - 24 }],
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
type: 'text',
|
|
23
|
+
attrs: {
|
|
24
|
+
x: point.x + 16,
|
|
25
|
+
y: point.y - 24,
|
|
26
|
+
text,
|
|
27
|
+
align: 'left',
|
|
28
|
+
baseline: 'bottom',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
},
|
|
33
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-line.d.ts","sourceRoot":"","sources":["../../src/extensions/cross-line.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,iBAAiB;AACjB,eAAO,MAAM,gBAAgB,EAAE,oBAsB9B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** 项目自有十字线标注。 */
|
|
2
|
+
export const crossLineOverlay = {
|
|
3
|
+
name: 'crossLine',
|
|
4
|
+
totalStep: 2,
|
|
5
|
+
needDefaultPointFigure: true,
|
|
6
|
+
needDefaultXAxisFigure: true,
|
|
7
|
+
needDefaultYAxisFigure: true,
|
|
8
|
+
createPointFigures: ({ coordinates, bounding }) => {
|
|
9
|
+
const point = coordinates[0];
|
|
10
|
+
if (point === undefined) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
return [
|
|
14
|
+
{
|
|
15
|
+
type: 'line',
|
|
16
|
+
attrs: { coordinates: [{ x: 0, y: point.y }, { x: bounding.width, y: point.y }] },
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: 'line',
|
|
20
|
+
attrs: { coordinates: [{ x: point.x, y: 0 }, { x: point.x, y: bounding.height }] },
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
},
|
|
24
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { registerOverlay } from 'klinecharts';
|
|
2
|
+
type KLineOverlayTemplate = Parameters<typeof registerOverlay>[0];
|
|
3
|
+
/** 项目自有矩形标注,仅使用 KLineCharts 官方 Figure API。 */
|
|
4
|
+
export declare const rectangleOverlay: KLineOverlayTemplate;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=rectangle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rectangle.d.ts","sourceRoot":"","sources":["../../src/extensions/rectangle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,EAAE,oBAwB9B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** 项目自有矩形标注,仅使用 KLineCharts 官方 Figure API。 */
|
|
2
|
+
export const rectangleOverlay = {
|
|
3
|
+
name: 'rectangle',
|
|
4
|
+
totalStep: 3,
|
|
5
|
+
needDefaultPointFigure: true,
|
|
6
|
+
needDefaultXAxisFigure: true,
|
|
7
|
+
needDefaultYAxisFigure: true,
|
|
8
|
+
createPointFigures: ({ coordinates }) => {
|
|
9
|
+
if (coordinates.length !== 2) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
const [start, end] = coordinates;
|
|
13
|
+
if (start === undefined || end === undefined) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
type: 'rect',
|
|
18
|
+
attrs: {
|
|
19
|
+
x: Math.min(start.x, end.x),
|
|
20
|
+
y: Math.min(start.y, end.y),
|
|
21
|
+
width: Math.abs(end.x - start.x),
|
|
22
|
+
height: Math.abs(end.y - start.y),
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { registerOverlay } from 'klinecharts';
|
|
2
|
+
type KLineOverlayTemplate = Parameters<typeof registerOverlay>[0];
|
|
3
|
+
type RegisterOverlay = (template: KLineOverlayTemplate) => void;
|
|
4
|
+
/** 在当前浏览器 Runtime 内恰好注册一次项目扩展。 */
|
|
5
|
+
export declare function registerProjectOverlays(register: RegisterOverlay): void;
|
|
6
|
+
export declare function areProjectOverlaysRegistered(): boolean;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/extensions/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQnD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,KAAK,eAAe,GAAG,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAYhE,kCAAkC;AAClC,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAQvE;AAED,wBAAgB,4BAA4B,IAAI,OAAO,CAEtD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { arrowOverlay } from './arrow.js';
|
|
2
|
+
import { calloutOverlay } from './callout.js';
|
|
3
|
+
import { crossLineOverlay } from './cross-line.js';
|
|
4
|
+
import { rectangleOverlay } from './rectangle.js';
|
|
5
|
+
import { textOverlay } from './text.js';
|
|
6
|
+
const projectExtensions = [
|
|
7
|
+
rectangleOverlay,
|
|
8
|
+
arrowOverlay,
|
|
9
|
+
crossLineOverlay,
|
|
10
|
+
calloutOverlay,
|
|
11
|
+
textOverlay,
|
|
12
|
+
];
|
|
13
|
+
let registered = false;
|
|
14
|
+
/** 在当前浏览器 Runtime 内恰好注册一次项目扩展。 */
|
|
15
|
+
export function registerProjectOverlays(register) {
|
|
16
|
+
if (registered) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
for (const extension of projectExtensions) {
|
|
20
|
+
register(extension);
|
|
21
|
+
}
|
|
22
|
+
registered = true;
|
|
23
|
+
}
|
|
24
|
+
export function areProjectOverlaysRegistered() {
|
|
25
|
+
return registered;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/extensions/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,kBAAkB;AAClB,eAAO,MAAM,WAAW,EAAE,oBAsBzB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** 项目自有自由文字标注。 */
|
|
2
|
+
export const textOverlay = {
|
|
3
|
+
name: 'text',
|
|
4
|
+
totalStep: 2,
|
|
5
|
+
needDefaultPointFigure: true,
|
|
6
|
+
needDefaultXAxisFigure: true,
|
|
7
|
+
needDefaultYAxisFigure: true,
|
|
8
|
+
createPointFigures: ({ coordinates, overlay }) => {
|
|
9
|
+
const point = coordinates[0];
|
|
10
|
+
if (point === undefined) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
type: 'text',
|
|
15
|
+
attrs: {
|
|
16
|
+
x: point.x,
|
|
17
|
+
y: point.y,
|
|
18
|
+
text: typeof overlay.extendData === 'string' ? overlay.extendData : '',
|
|
19
|
+
align: 'left',
|
|
20
|
+
baseline: 'middle',
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './adapter.js';
|
|
2
|
+
export * from './errors.js';
|
|
3
|
+
export * from './extensions/register.js';
|
|
4
|
+
export * from './registry/indicators.js';
|
|
5
|
+
export * from './registry/overlays.js';
|
|
6
|
+
export * from './static-data-loader.js';
|
|
7
|
+
export * from './version.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { SceneIndicator } from '@baron1996/kline-scene-schema';
|
|
2
|
+
export declare const SUPPORTED_INDICATORS: readonly ["MA", "EMA", "SMA", "BBI", "VOL", "MACD", "BOLL", "KDJ", "RSI", "BIAS", "BRAR", "CCI", "DMI", "CR", "PSY", "DMA", "TRIX", "OBV", "VR", "WR", "MTM", "EMV", "SAR", "AO", "ROC", "PVT", "AVP"];
|
|
3
|
+
export declare function isSupportedIndicator(name: SceneIndicator['name']): name is (typeof SUPPORTED_INDICATORS)[number];
|
|
4
|
+
//# sourceMappingURL=indicators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indicators.d.ts","sourceRoot":"","sources":["../../src/registry/indicators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,eAAO,MAAM,oBAAoB,wMA4BqB,CAAC;AAIvD,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,GAC1B,IAAI,IAAI,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAE/C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export const SUPPORTED_INDICATORS = [
|
|
2
|
+
'MA',
|
|
3
|
+
'EMA',
|
|
4
|
+
'SMA',
|
|
5
|
+
'BBI',
|
|
6
|
+
'VOL',
|
|
7
|
+
'MACD',
|
|
8
|
+
'BOLL',
|
|
9
|
+
'KDJ',
|
|
10
|
+
'RSI',
|
|
11
|
+
'BIAS',
|
|
12
|
+
'BRAR',
|
|
13
|
+
'CCI',
|
|
14
|
+
'DMI',
|
|
15
|
+
'CR',
|
|
16
|
+
'PSY',
|
|
17
|
+
'DMA',
|
|
18
|
+
'TRIX',
|
|
19
|
+
'OBV',
|
|
20
|
+
'VR',
|
|
21
|
+
'WR',
|
|
22
|
+
'MTM',
|
|
23
|
+
'EMV',
|
|
24
|
+
'SAR',
|
|
25
|
+
'AO',
|
|
26
|
+
'ROC',
|
|
27
|
+
'PVT',
|
|
28
|
+
'AVP',
|
|
29
|
+
];
|
|
30
|
+
const supported = new Set(SUPPORTED_INDICATORS);
|
|
31
|
+
export function isSupportedIndicator(name) {
|
|
32
|
+
return supported.has(name);
|
|
33
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SceneOverlay } from '@baron1996/kline-scene-schema';
|
|
2
|
+
export declare const BUILT_IN_OVERLAYS: readonly ["horizontalRayLine", "horizontalSegment", "horizontalStraightLine", "verticalRayLine", "verticalSegment", "verticalStraightLine", "rayLine", "segment", "straightLine", "priceLine", "priceChannelLine", "parallelStraightLine", "fibonacciLine", "brush", "simpleAnnotation", "simpleTag"];
|
|
3
|
+
export declare const PROJECT_OVERLAYS: readonly ["rectangle", "arrow", "crossLine", "callout", "text"];
|
|
4
|
+
export declare const SUPPORTED_OVERLAYS: readonly ["horizontalRayLine", "horizontalSegment", "horizontalStraightLine", "verticalRayLine", "verticalSegment", "verticalStraightLine", "rayLine", "segment", "straightLine", "priceLine", "priceChannelLine", "parallelStraightLine", "fibonacciLine", "brush", "simpleAnnotation", "simpleTag", "rectangle", "arrow", "crossLine", "callout", "text"];
|
|
5
|
+
export declare function isSupportedOverlay(name: string): name is SceneOverlay['type'];
|
|
6
|
+
//# sourceMappingURL=overlays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlays.d.ts","sourceRoot":"","sources":["../../src/registry/overlays.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,eAAO,MAAM,iBAAiB,uSAiBsB,CAAC;AAErD,eAAO,MAAM,gBAAgB,iEAMuB,CAAC;AAErD,eAAO,MAAM,kBAAkB,6VAGqB,CAAC;AAIrD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,CAE7E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export const BUILT_IN_OVERLAYS = [
|
|
2
|
+
'horizontalRayLine',
|
|
3
|
+
'horizontalSegment',
|
|
4
|
+
'horizontalStraightLine',
|
|
5
|
+
'verticalRayLine',
|
|
6
|
+
'verticalSegment',
|
|
7
|
+
'verticalStraightLine',
|
|
8
|
+
'rayLine',
|
|
9
|
+
'segment',
|
|
10
|
+
'straightLine',
|
|
11
|
+
'priceLine',
|
|
12
|
+
'priceChannelLine',
|
|
13
|
+
'parallelStraightLine',
|
|
14
|
+
'fibonacciLine',
|
|
15
|
+
'brush',
|
|
16
|
+
'simpleAnnotation',
|
|
17
|
+
'simpleTag',
|
|
18
|
+
];
|
|
19
|
+
export const PROJECT_OVERLAYS = [
|
|
20
|
+
'rectangle',
|
|
21
|
+
'arrow',
|
|
22
|
+
'crossLine',
|
|
23
|
+
'callout',
|
|
24
|
+
'text',
|
|
25
|
+
];
|
|
26
|
+
export const SUPPORTED_OVERLAYS = [
|
|
27
|
+
...BUILT_IN_OVERLAYS,
|
|
28
|
+
...PROJECT_OVERLAYS,
|
|
29
|
+
];
|
|
30
|
+
const supported = new Set(SUPPORTED_OVERLAYS);
|
|
31
|
+
export function isSupportedOverlay(name) {
|
|
32
|
+
return supported.has(name);
|
|
33
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { MarketData } from '@baron1996/kline-scene-schema';
|
|
2
|
+
import type { DataLoader, DataLoaderGetBarsParams } from 'klinecharts';
|
|
3
|
+
export type StaticDataLoadType = DataLoaderGetBarsParams['type'];
|
|
4
|
+
/** 创建只读取场景内嵌行情的不可变数据加载器。 */
|
|
5
|
+
export declare function createStaticDataLoader(data: readonly MarketData[]): DataLoader;
|
|
6
|
+
//# sourceMappingURL=static-data-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-data-loader.d.ts","sourceRoot":"","sources":["../src/static-data-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EACX,UAAU,EACV,uBAAuB,EAEvB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAEjE,4BAA4B;AAC5B,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,CAU9E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** 创建只读取场景内嵌行情的不可变数据加载器。 */
|
|
2
|
+
export function createStaticDataLoader(data) {
|
|
3
|
+
const snapshot = structuredClone(data);
|
|
4
|
+
return {
|
|
5
|
+
getBars({ type, callback }) {
|
|
6
|
+
callback(type === 'init' ? structuredClone(snapshot) : [], {
|
|
7
|
+
forward: false,
|
|
8
|
+
backward: false,
|
|
9
|
+
});
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Adapter 包版本。 */
|
|
2
|
+
export declare const ADAPTER_PACKAGE_VERSION: "0.1.0";
|
|
3
|
+
/** 唯一允许加载的 KLineCharts 引擎版本。 */
|
|
4
|
+
export declare const KLINECHARTS_ENGINE_VERSION: "10.0.0";
|
|
5
|
+
/** 与 ChartScene 绑定的 Runtime 协议版本。 */
|
|
6
|
+
export declare const KLINECHARTS_RUNTIME_VERSION: "0.1.0";
|
|
7
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,eAAO,MAAM,uBAAuB,EAAG,OAAgB,CAAC;AAExD,gCAAgC;AAChC,eAAO,MAAM,0BAA0B,EAAG,QAAiB,CAAC;AAE5D,qCAAqC;AACrC,eAAO,MAAM,2BAA2B,EAAG,OAAgB,CAAC"}
|
package/dist/version.js
ADDED