@tradecanvas/core 0.7.0 → 0.8.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/interaction/InteractionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,qBAAa,kBAAkB;IAmBjB,OAAO,CAAC,OAAO;IAlB3B,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAI5B,OAAO,CAAC,UAAU,CAAwB;gBAEtB,OAAO,EAAE,WAAW;IAExC,uBAAuB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAE7C,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IACxC,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAC1C,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAEpD,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,GAAG,IAAI;IAKrF,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,GAAG,IAAI;IAKrF,MAAM,IAAI,IAAI;IAgKd,MAAM,IAAI,IAAI;IAMd,mEAAmE;IACnE,cAAc,IAAI,IAAI;IAItB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;CAOzB"}
1
+ {"version":3,"file":"InteractionManager.d.ts","sourceRoot":"","sources":["../../src/interaction/InteractionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,qBAAa,kBAAkB;IAmBjB,OAAO,CAAC,OAAO;IAlB3B,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAI5B,OAAO,CAAC,UAAU,CAAwB;gBAEtB,OAAO,EAAE,WAAW;IAExC,uBAAuB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAE7C,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IACxC,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAC1C,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAEpD,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,GAAG,IAAI;IAKrF,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,GAAG,IAAI;IAKrF,MAAM,IAAI,IAAI;IAiKd,MAAM,IAAI,IAAI;IAMd,mEAAmE;IACnE,cAAc,IAAI,IAAI;IAItB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -0,0 +1,67 @@
1
+ import { OHLCBar, DataSeries } from '@tradecanvas/commons';
2
+ import { Emitter } from './Emitter.js';
3
+ export type ReplayStatus = 'idle' | 'playing' | 'paused' | 'finished';
4
+ export interface ReplayBarEvent {
5
+ bar: OHLCBar;
6
+ index: number;
7
+ total: number;
8
+ }
9
+ export interface ReplayStateChangeEvent {
10
+ status: ReplayStatus;
11
+ index: number;
12
+ total: number;
13
+ }
14
+ export interface ReplayEventMap {
15
+ bar: ReplayBarEvent;
16
+ finished: {
17
+ total: number;
18
+ };
19
+ stateChange: ReplayStateChangeEvent;
20
+ [key: string]: unknown;
21
+ }
22
+ export interface ReplayOptions {
23
+ /** Full historical dataset to replay through. */
24
+ data: DataSeries;
25
+ /** Bars emitted per second. Default 1. */
26
+ speed?: number;
27
+ /** Index of the first bar to emit (0-based). Default 0. */
28
+ startIndex?: number;
29
+ /** Auto-start when constructed. Default false. */
30
+ autoStart?: boolean;
31
+ }
32
+ /**
33
+ * Drives historical bars forward at a controlled speed.
34
+ *
35
+ * Decoupled from Chart — consumers subscribe to `bar` events and wire them
36
+ * into a Chart (via appendBar) or a Backtester. The controller never touches
37
+ * the chart directly, which keeps it reusable for headless analytics.
38
+ */
39
+ export declare class ReplayController extends Emitter<ReplayEventMap> {
40
+ private readonly data;
41
+ private speed;
42
+ private index;
43
+ private status;
44
+ private timer;
45
+ constructor(opts: ReplayOptions);
46
+ getStatus(): ReplayStatus;
47
+ getIndex(): number;
48
+ getTotal(): number;
49
+ /** Bars at indices [0, index) — useful for seeding the chart before replay. */
50
+ getPrefix(): DataSeries;
51
+ /** Begin emitting from current index. Idempotent if already playing. */
52
+ start(): void;
53
+ pause(): void;
54
+ resume(): void;
55
+ stop(): void;
56
+ /** Emit N bars synchronously without waiting for the timer. */
57
+ step(n?: number): void;
58
+ /** Jump to a specific index without emitting bars in between. */
59
+ seek(index: number): void;
60
+ setSpeed(barsPerSecond: number): void;
61
+ destroy(): void;
62
+ private scheduleNext;
63
+ private emitNext;
64
+ private clearTimer;
65
+ private transition;
66
+ }
67
+ //# sourceMappingURL=ReplayController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReplayController.d.ts","sourceRoot":"","sources":["../../src/realtime/ReplayController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,cAAc,CAAC;IACpB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,WAAW,EAAE,sBAAsB,CAAC;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,IAAI,EAAE,UAAU,CAAC;IACjB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,gBAAiB,SAAQ,OAAO,CAAC,cAAc,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyB;IAC9C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAA8C;gBAE/C,IAAI,EAAE,aAAa;IAY/B,SAAS,IAAI,YAAY;IAIzB,QAAQ,IAAI,MAAM;IAIlB,QAAQ,IAAI,MAAM;IAIlB,+EAA+E;IAC/E,SAAS,IAAI,UAAU;IAIvB,wEAAwE;IACxE,KAAK,IAAI,IAAI;IAUb,KAAK,IAAI,IAAI;IAMb,MAAM,IAAI,IAAI;IAId,IAAI,IAAI,IAAI;IAMZ,+DAA+D;IAC/D,IAAI,CAAC,CAAC,SAAI,GAAG,IAAI;IASjB,iEAAiE;IACjE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQzB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAQrC,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;CASnB"}
@@ -4,5 +4,7 @@ export { ReconnectManager } from './ReconnectManager.js';
4
4
  export { StreamManager } from './StreamManager.js';
5
5
  export type { StreamEvents } from './StreamManager.js';
6
6
  export { CurrentPriceLine } from './CurrentPriceLine.js';
7
+ export { ReplayController } from './ReplayController.js';
8
+ export type { ReplayBarEvent, ReplayEventMap, ReplayOptions, ReplayStateChangeEvent, ReplayStatus, } from './ReplayController.js';
7
9
  export * from './adapters/index.js';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
@@ -11,4 +11,22 @@ export declare function yToPrice(y: number, viewport: ViewportState): number;
11
11
  export declare function timestampToBarIndex(timestamp: number, data: ReadonlyArray<{
12
12
  time: number;
13
13
  }>): number;
14
+ /**
15
+ * Resolve an anchor `time` value to a (possibly fractional) bar index in the
16
+ * current series. When `viewport.data` is set, `time` is interpreted as a real
17
+ * timestamp and converted via `timestampToBarIndex`. Otherwise `time` is
18
+ * already a bar index and is returned unchanged.
19
+ */
20
+ export declare function resolveBarIndex(time: number, viewport: ViewportState): number;
21
+ /**
22
+ * Map an anchor `time` value to its pixel x. Works whether `time` is a
23
+ * timestamp (when `viewport.data` is set) or a bar index (legacy callers).
24
+ */
25
+ export declare function timeToX(time: number, viewport: ViewportState): number;
26
+ /**
27
+ * Map a pixel x back to an anchor `time` value. Returns a real timestamp when
28
+ * `viewport.data` is set (so the value survives timeframe switches), otherwise
29
+ * returns a bar index for legacy callers.
30
+ */
31
+ export declare function xToTime(x: number, viewport: ViewportState): number;
14
32
  //# sourceMappingURL=ScaleMapping.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScaleMapping.d.ts","sourceRoot":"","sources":["../../src/viewport/ScaleMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAG1E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAcvE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAGtE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CASnE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAmBpG"}
1
+ {"version":3,"file":"ScaleMapping.d.ts","sourceRoot":"","sources":["../../src/viewport/ScaleMapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAG1E;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAcvE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAGtE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CASnE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAmBpG;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAM7E;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAErE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAQlE"}
@@ -1,4 +1,4 @@
1
1
  export { Viewport } from './Viewport.js';
2
- export { barIndexToX, priceToY, xToBarIndex, yToPrice, timestampToBarIndex } from './ScaleMapping.js';
2
+ export { barIndexToX, priceToY, xToBarIndex, yToPrice, timestampToBarIndex, resolveBarIndex, timeToX, xToTime, } from './ScaleMapping.js';
3
3
  export { getVisibleData } from './DataWindow.js';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewport/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,OAAO,EACP,OAAO,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tradecanvas/core",
3
- "version": "0.7.0",
3
+ "version": "0.8.1",
4
4
  "type": "module",
5
5
  "description": "Canvas rendering engine for @tradecanvas/chart",
6
6
  "license": "MIT",
@@ -34,7 +34,7 @@
34
34
  "README.md"
35
35
  ],
36
36
  "dependencies": {
37
- "@tradecanvas/commons": "0.7.0"
37
+ "@tradecanvas/commons": "0.8.1"
38
38
  },
39
39
  "devDependencies": {
40
40
  "vitest": "^2.1.8"