@tradecanvas/core 1.41.0 → 1.42.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.
@@ -32,6 +32,9 @@ export declare class MockAdapter implements DataAdapter {
32
32
  private currentPrice;
33
33
  /** Open of the oldest bar handed out per symbol, where its next older page ends. */
34
34
  private oldestOpen;
35
+ /** The bar the ticks build on, and its timeframe: the history's newest, then each new one. */
36
+ private forming;
37
+ private formingTimeframe;
35
38
  constructor(options?: MockAdapterOptions);
36
39
  connect(config: DataAdapterConfig): void;
37
40
  disconnect(): void;
@@ -56,6 +59,12 @@ export declare class MockAdapter implements DataAdapter {
56
59
  dispose(): void;
57
60
  private generateHistory;
58
61
  private startTicking;
62
+ /**
63
+ * The forming bar after a tick moved the price by `change`: the bar of this
64
+ * moment carried on (its open kept, its range widened, its volume added),
65
+ * or a new one opening at the last close once its time has come.
66
+ */
67
+ private tickBar;
59
68
  private stopTicking;
60
69
  private emitEvent;
61
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MockAdapter.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/MockAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,OAAO,EACP,KAAK,EACL,KAAK,EACL,UAAU,EACV,mBAAmB,EACnB,SAAS,EACV,MAAM,sBAAsB,CAAC;AAG9B,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;IACtF,wDAAwD;IACxD,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,QAAQ,CAAC,IAAI,UAAU;IAEvB,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,SAAS,CAA6D;IAC9E,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,YAAY,CAAS;IAC7B,oFAAoF;IACpF,OAAO,CAAC,UAAU,CAA6B;gBAEnC,OAAO,CAAC,EAAE,kBAAkB;IAWxC,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAOxC,UAAU,IAAI,IAAI;IAMlB,kBAAkB,IAAI,eAAe;IAIrC;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IA+B5F,sFAAsF;IAChF,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAajE,sDAAsD;IACtD,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAc1E,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQ5F,0FAA0F;IACpF,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAkB3G,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIlF,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI/D,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAMpF,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAIrF,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,YAAY;IAgCpB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,SAAS;CAOlB"}
1
+ {"version":3,"file":"MockAdapter.d.ts","sourceRoot":"","sources":["../../../src/realtime/adapters/MockAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { OrderSide, Point, ViewportState, Theme } from '@tradecanvas/commons';
2
+ import { AxisBadge, TradingTag } from './tradingTags.js';
2
3
  export type BracketHandle = 'entry' | 'sl' | 'tp';
3
4
  export interface BracketDraft {
4
5
  side: OrderSide;
@@ -39,12 +40,26 @@ export declare class BracketTool {
39
40
  /** Which handle (if any) is under the pointer. */
40
41
  hitTest(pos: Point, viewport: ViewportState, tolerance?: number): BracketHandle | null;
41
42
  beginDrag(pos: Point, viewport: ViewportState, tolerance?: number): boolean;
43
+ /** Drag `handle`, pressed by its tag: by which it is, whatever line is nearer. */
44
+ beginDragOn(handle: BracketHandle): boolean;
42
45
  /** Call the drag off: the handle goes back to where it was. */
43
46
  cancelDrag(): void;
44
47
  drag(pos: Point, viewport: ViewportState): boolean;
45
48
  endDrag(): void;
46
49
  isDragging(): boolean;
47
50
  private priceOf;
48
- render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, pricePrecision?: number): void;
51
+ /** The zones, the lines and their tags (`pricePrecision` is for the axis badges, drawn apart). */
52
+ render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, _pricePrecision?: number): void;
53
+ /** The reward zone (entry to target) and the risk zone (entry to stop), and the three lines. */
54
+ renderLines(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
55
+ /**
56
+ * The tags, each a handle for its line: the side and the reward to risk
57
+ * on the entry, how far away in percent on the target and the stop.
58
+ */
59
+ tags(viewport: ViewportState, theme: Theme): TradingTag[];
60
+ /** The entry, the target and the stop on the price axis. */
61
+ renderAxisBadges(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, pricePrecision?: number): void;
62
+ /** The prices it puts on the axis (on the plot): the target, the stop, the entry. */
63
+ axisBadges(viewport: ViewportState, theme: Theme, pricePrecision?: number): AxisBadge[];
49
64
  }
50
65
  //# sourceMappingURL=BracketTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BracketTool.d.ts","sourceRoot":"","sources":["../../src/trading/BracketTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAKnF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,sBAA2B,GAChC,YAAY,CASd;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAI7D;AAID;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA6B;IAC1C,6EAA6E;IAC7E,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,QAAQ,GAAE,sBAA2B;IAIjD,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3C,MAAM,IAAI,IAAI;IAKd,QAAQ,IAAI,OAAO;IAInB,QAAQ,IAAI,YAAY,GAAG,IAAI;IAI/B,kDAAkD;IAClD,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,SAAmB,GAAG,aAAa,GAAG,IAAI;IAgBhG,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAQ3E,+DAA+D;IAC/D,UAAU,IAAI,IAAI;IAMlB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAOlD,OAAO,IAAI,IAAI;IAKf,UAAU,IAAI,OAAO;IAIrB,OAAO,CAAC,OAAO;IAKf,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;CA8C5G"}
1
+ {"version":3,"file":"BracketTool.d.ts","sourceRoot":"","sources":["../../src/trading/BracketTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAInF,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5F,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,sBAA2B,GAChC,YAAY,CASd;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAI7D;AAQD;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA6B;IAC1C,6EAA6E;IAC7E,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,QAAQ,GAAE,sBAA2B;IAIjD,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3C,MAAM,IAAI,IAAI;IAKd,QAAQ,IAAI,OAAO;IAInB,QAAQ,IAAI,YAAY,GAAG,IAAI;IAI/B,kDAAkD;IAClD,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,SAAmB,GAAG,aAAa,GAAG,IAAI;IAgBhG,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAK3E,kFAAkF;IAClF,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAO3C,+DAA+D;IAC/D,UAAU,IAAI,IAAI;IAMlB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAOlD,OAAO,IAAI,IAAI;IAKf,UAAU,IAAI,OAAO;IAIrB,OAAO,CAAC,OAAO;IAKf,kGAAkG;IAClG,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAK5G,gGAAgG;IAChG,WAAW,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAqBvF;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU,EAAE;IA2BzD,4DAA4D;IAC5D,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAMrH,qFAAqF;IACrF,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE;CAWxF"}
@@ -1,4 +1,5 @@
1
1
  import { OrderSide, OrderType, OrderPlaceIntent, Point, ViewportState, Theme } from '@tradecanvas/commons';
2
+ import { AxisBadge, TradingTag } from './tradingTags.js';
2
3
  export interface OrderDraft {
3
4
  side: OrderSide;
4
5
  price: number;
@@ -32,10 +33,21 @@ export declare class OrderDraftTool {
32
33
  toIntent(marketPrice: number | null): OrderPlaceIntent | null;
33
34
  hitTest(pos: Point, viewport: ViewportState, tolerance?: number): boolean;
34
35
  beginDrag(pos: Point, viewport: ViewportState, tolerance?: number): boolean;
36
+ /** Drag the line, pressed by its tag. */
37
+ beginDragOn(): boolean;
35
38
  /** Call the drag off: the line goes back to where it was. */
36
39
  cancelDrag(): void;
37
40
  drag(pos: Point, viewport: ViewportState): boolean;
38
41
  endDrag(): void;
39
- render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, marketPrice: number | null, pricePrecision?: number): void;
42
+ /** The line and its tag (`pricePrecision` is for the axis badge, drawn apart). */
43
+ render(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, marketPrice: number | null, _pricePrecision?: number): void;
44
+ /** The draft's line, dashed as an order's. */
45
+ renderLines(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
46
+ /** Its tag, a handle for the line: the quantity, then the order it will be ("Buy limit"). */
47
+ tags(viewport: ViewportState, theme: Theme, marketPrice: number | null): TradingTag[];
48
+ /** Its price on the price axis. */
49
+ renderAxisBadges(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme, pricePrecision?: number): void;
50
+ /** The price it puts on the axis (on the plot). */
51
+ axisBadges(viewport: ViewportState, theme: Theme, pricePrecision?: number): AxisBadge[];
40
52
  }
41
53
  //# sourceMappingURL=OrderDraftTool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderDraftTool.d.ts","sourceRoot":"","sources":["../../src/trading/OrderDraftTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,aAAa,EACb,KAAK,EACN,MAAM,sBAAsB,CAAC;AAK9B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,SAAS,CAIX;AAID;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA2B;IACxC,6EAA6E;IAC7E,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,QAAQ,CAAS;IAEzB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,IAAI;IAKzD,MAAM,IAAI,IAAI;IAKd,QAAQ,IAAI,OAAO;IAInB,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI,UAAU,GAAG,IAAI;IAI7B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMhC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI;IAU7D,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,SAAmB,GAAG,OAAO;IAKnF,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAO3E,6DAA6D;IAC7D,UAAU,IAAI,IAAI;IAMlB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAKlD,OAAO,IAAI,IAAI;IAKf,MAAM,CACJ,GAAG,EAAE,wBAAwB,EAC7B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,cAAc,CAAC,EAAE,MAAM,GACtB,IAAI;CA4BR"}
1
+ {"version":3,"file":"OrderDraftTool.d.ts","sourceRoot":"","sources":["../../src/trading/OrderDraftTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,aAAa,EACb,KAAK,EACN,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE5F,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,SAAS,CAIX;AAMD;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA2B;IACxC,6EAA6E;IAC7E,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,QAAQ,CAAS;IAEzB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,IAAI;IAKzD,MAAM,IAAI,IAAI;IAKd,QAAQ,IAAI,OAAO;IAInB,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI,UAAU,GAAG,IAAI;IAI7B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAMhC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI;IAU7D,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,SAAmB,GAAG,OAAO;IAKnF,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAI3E,yCAAyC;IACzC,WAAW,IAAI,OAAO;IAOtB,6DAA6D;IAC7D,UAAU,IAAI,IAAI;IAMlB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAKlD,OAAO,IAAI,IAAI;IAKf,kFAAkF;IAClF,MAAM,CACJ,GAAG,EAAE,wBAAwB,EAC7B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,eAAe,CAAC,EAAE,MAAM,GACvB,IAAI;IAKP,8CAA8C;IAC9C,WAAW,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAQvF,6FAA6F;IAC7F,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,EAAE;IAcrF,mCAAmC;IACnC,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAMrH,mDAAmD;IACnD,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE;CAMxF"}
@@ -1,18 +1,31 @@
1
1
  import { TradingOrder, TradingConfig, ViewportState, Theme } from '@tradecanvas/commons';
2
2
  import { LineButton } from './lineButtons.js';
3
+ import { AxisBadge, TradingTag } from './tradingTags.js';
3
4
  export interface DragState {
4
5
  orderId: string;
5
6
  sourceType: 'order' | 'stopLoss' | 'takeProfit';
6
7
  startPrice: number;
7
8
  currentPrice: number;
8
9
  }
10
+ /** The words for an order's kind ("Buy limit", "Sell stop limit"), or its own label's for a stop or a target. */
11
+ export declare function orderKindText(order: Pick<TradingOrder, 'side' | 'type' | 'label'>): string;
9
12
  export declare class OrderRenderer {
13
+ /** The lines and their tags, the tags laid out among themselves. */
10
14
  render(ctx: CanvasRenderingContext2D, orders: TradingOrder[], viewport: ViewportState, theme: Theme, config: TradingConfig, dragState: DragState | null, buttons?: LineButton[]): void;
15
+ /** Each order's line (and, while it is dragged, a ghost where it was), and its stop's and target's. */
16
+ renderLines(ctx: CanvasRenderingContext2D, orders: TradingOrder[], viewport: ViewportState, config: TradingConfig, dragState: DragState | null): void;
11
17
  /**
12
- * Draw order price badges on the price axis. Called after the price axis
13
- * so they paint ON TOP of the regular axis tick labels.
18
+ * Each order's tag: its quantity, its side and kind, and a × that cancels
19
+ * it; a tag on its stop and its target saying what they would make.
20
+ */
21
+ tags(orders: TradingOrder[], viewport: ViewportState, config: TradingConfig, dragState: DragState | null): TradingTag[];
22
+ /**
23
+ * Each order's price on the price axis, written as the axis writes it.
24
+ * Called after the price axis so they paint over its labels.
14
25
  */
15
26
  renderAxisBadges(ctx: CanvasRenderingContext2D, orders: TradingOrder[], viewport: ViewportState, theme: Theme, config: TradingConfig, dragState: DragState | null): void;
27
+ /** The price each order puts on the axis (on the plot): where it is being dragged to, else its own. */
28
+ axisBadges(orders: TradingOrder[], viewport: ViewportState, config: TradingConfig, dragState: DragState | null): AxisBadge[];
16
29
  hitTest(y: number, orders: TradingOrder[], viewport: ViewportState, tolerance: number): TradingOrder | null;
17
30
  }
18
31
  //# sourceMappingURL=OrderRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderRenderer.d.ts","sourceRoot":"","sources":["../../src/trading/OrderRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG9F,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMpE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,aAAa;IACxB,MAAM,CACJ,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,YAAY,EAAE,EACtB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,OAAO,GAAE,UAAU,EAAO,GACzB,IAAI;IA6EP;;;OAGG;IACH,gBAAgB,CACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,YAAY,EAAE,EACtB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,IAAI;IAyBP,OAAO,CACL,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,YAAY,EAAE,EACtB,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,GAChB,YAAY,GAAG,IAAI;CAQvB"}
1
+ {"version":3,"file":"OrderRenderer.d.ts","sourceRoot":"","sources":["../../src/trading/OrderRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EAA2B,KAAK,SAAS,EAAgB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1G,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AASD,iHAAiH;AACjH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM,CAI1F;AAqBD,qBAAa,aAAa;IACxB,oEAAoE;IACpE,MAAM,CACJ,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,YAAY,EAAE,EACtB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,GAAG,IAAI,EAC3B,OAAO,GAAE,UAAU,EAAO,GACzB,IAAI;IAKP,uGAAuG;IACvG,WAAW,CACT,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,YAAY,EAAE,EACtB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,IAAI;IAkBP;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,UAAU,EAAE;IAoCvH;;;OAGG;IACH,gBAAgB,CACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,YAAY,EAAE,EACtB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,IAAI;IAMP,uGAAuG;IACvG,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EAAE;IAW5H,OAAO,CACL,CAAC,EAAE,MAAM,EACT,MAAM,EAAE,YAAY,EAAE,EACtB,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,GAChB,YAAY,GAAG,IAAI;CAQvB"}
@@ -1,15 +1,30 @@
1
1
  import { TradingPosition, TradingConfig, ViewportState, Theme } from '@tradecanvas/commons';
2
2
  import { LineButton } from './lineButtons.js';
3
+ import { DragState } from './OrderRenderer.js';
4
+ import { AxisBadge, TradingTag } from './tradingTags.js';
3
5
  export declare class PositionRenderer {
4
- render(ctx: CanvasRenderingContext2D, positions: TradingPosition[], currentPrice: number | null, viewport: ViewportState, theme: Theme, config: TradingConfig, buttons?: LineButton[]): void;
5
- /** ⇅ reverses the position, × closes it; each one when switched on. */
6
- private renderButtons;
7
- /** × beside an SL or TP label removes that stop. */
8
- private renderStopButton;
6
+ /** The lines and their tags, the tags laid out among themselves. */
7
+ render(ctx: CanvasRenderingContext2D, positions: TradingPosition[], currentPrice: number | null, viewport: ViewportState, theme: Theme, config: TradingConfig, buttons?: LineButton[], dragState?: DragState | null): void;
8
+ /** Each position's entry line, its open profit or loss as a band to the price, its stop's and target's lines. */
9
+ renderLines(ctx: CanvasRenderingContext2D, positions: TradingPosition[], currentPrice: number | null, viewport: ViewportState, config: TradingConfig, dragState?: DragState | null): void;
10
+ /** The open profit or loss, a band from the entry to the price; the closed part at the left edge. */
11
+ private renderBand;
9
12
  /**
10
- * Draw position entry badges on the price axis. Called after the price axis
11
- * so they paint ON TOP of the regular axis tick labels.
13
+ * Each position's tags: on its entry its open quantity, its side and its
14
+ * open profit (or the `positionLabel`), then reverse and close; on its stop
15
+ * and its target what they would make, then a × that removes them.
16
+ */
17
+ tags(positions: TradingPosition[], currentPrice: number | null, viewport: ViewportState, config: TradingConfig, dragState?: DragState | null): TradingTag[];
18
+ /** The entry's tag, when the entry is on the plot. */
19
+ private entryTag;
20
+ /** A stop's or a target's tag, where it is (or is being dragged to) on the plot: a handle for its line. */
21
+ private stopTag;
22
+ /**
23
+ * Each position's entry, stop and target on the price axis. Called after
24
+ * the price axis so they paint over its labels.
12
25
  */
13
26
  renderAxisBadges(ctx: CanvasRenderingContext2D, positions: TradingPosition[], viewport: ViewportState, theme: Theme, config: TradingConfig): void;
27
+ /** The prices each position puts on the axis (on the plot): its stop and target (where dragged to) and its entry. */
28
+ axisBadges(positions: TradingPosition[], viewport: ViewportState, config: TradingConfig, dragState?: DragState | null): AxisBadge[];
14
29
  }
15
30
  //# sourceMappingURL=PositionRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PositionRenderer.d.ts","sourceRoot":"","sources":["../../src/trading/PositionRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAQjG,OAAO,EAAsC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAcvF,qBAAa,gBAAgB;IAC3B,MAAM,CACJ,GAAG,EAAE,wBAAwB,EAC7B,SAAS,EAAE,eAAe,EAAE,EAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,UAAU,EAAO,GACzB,IAAI;IAsHP,uEAAuE;IACvE,OAAO,CAAC,aAAa;IAwBrB,oDAAoD;IACpD,OAAO,CAAC,gBAAgB;IAcxB;;;OAGG;IACH,gBAAgB,CACd,GAAG,EAAE,wBAAwB,EAC7B,SAAS,EAAE,eAAe,EAAE,EAC5B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,GACpB,IAAI;CAiBR"}
1
+ {"version":3,"file":"PositionRenderer.d.ts","sourceRoot":"","sources":["../../src/trading/PositionRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAUjG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAuC,KAAK,SAAS,EAAgB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAwCtH,qBAAa,gBAAgB;IAC3B,oEAAoE;IACpE,MAAM,CACJ,GAAG,EAAE,wBAAwB,EAC7B,SAAS,EAAE,eAAe,EAAE,EAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,UAAU,EAAO,EAC1B,SAAS,GAAE,SAAS,GAAG,IAAW,GACjC,IAAI;IAKP,iHAAiH;IACjH,WAAW,CACT,GAAG,EAAE,wBAAwB,EAC7B,SAAS,EAAE,eAAe,EAAE,EAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,SAAS,GAAE,SAAS,GAAG,IAAW,GACjC,IAAI;IAsBP,qGAAqG;IACrG,OAAO,CAAC,UAAU;IAyBlB;;;;OAIG;IACH,IAAI,CACF,SAAS,EAAE,eAAe,EAAE,EAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,SAAS,GAAE,SAAS,GAAG,IAAW,GACjC,UAAU,EAAE;IAaf,sDAAsD;IACtD,OAAO,CAAC,QAAQ;IA4BhB,2GAA2G;IAC3G,OAAO,CAAC,OAAO;IAiBf;;;OAGG;IACH,gBAAgB,CACd,GAAG,EAAE,wBAAwB,EAC7B,SAAS,EAAE,eAAe,EAAE,EAC5B,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,aAAa,GACpB,IAAI;IAMP,qHAAqH;IACrH,UAAU,CAAC,SAAS,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,GAAE,SAAS,GAAG,IAAW,GAAG,SAAS,EAAE;CAiB1I"}
@@ -12,7 +12,13 @@ export declare class TradingDragHandler {
12
12
  private startY;
13
13
  private dragging;
14
14
  constructor(dragThreshold?: number);
15
+ /** A press at `pos`: the first order line within `tolerance`, else the first stop or target. */
15
16
  onPointerDown(pos: Point, orders: TradingOrder[], positions: TradingPosition[], viewport: ViewportState, tolerance: number): boolean;
17
+ /** Drag `order`'s line, pressed at `y`. */
18
+ beginOrder(order: TradingOrder, y: number): boolean;
19
+ /** Drag `position`'s stop or target, pressed at `y`. */
20
+ beginStop(position: TradingPosition, which: 'stopLoss' | 'takeProfit', y: number): boolean;
21
+ private start;
16
22
  onPointerMove(pos: Point, viewport: ViewportState): boolean;
17
23
  onPointerUp(): DragResult | null;
18
24
  /** Drop the drag: the line goes back to where it was, nothing to report. */
@@ -1 +1 @@
1
- {"version":3,"file":"TradingDragHandler.d.ts","sourceRoot":"","sources":["../../src/trading/TradingDragHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEhG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,kBAAkB;IAKjB,OAAO,CAAC,aAAa;IAJjC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAS;gBAEL,aAAa,SAAI;IAErC,aAAa,CACX,GAAG,EAAE,KAAK,EACV,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,eAAe,EAAE,EAC5B,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO;IAqDV,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAY3D,WAAW,IAAI,UAAU,GAAG,IAAI;IAgBhC,4EAA4E;IAC5E,MAAM,IAAI,OAAO;IAOjB,YAAY,IAAI,SAAS,GAAG,IAAI;IAIhC,QAAQ,IAAI,OAAO;CAGpB"}
1
+ {"version":3,"file":"TradingDragHandler.d.ts","sourceRoot":"","sources":["../../src/trading/TradingDragHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEhG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAKD,qBAAa,kBAAkB;IAKjB,OAAO,CAAC,aAAa;IAJjC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAS;gBAEL,aAAa,SAAI;IAErC,gGAAgG;IAChG,aAAa,CACX,GAAG,EAAE,KAAK,EACV,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,eAAe,EAAE,EAC5B,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO;IAgBV,2CAA2C;IAC3C,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAKnD,wDAAwD;IACxD,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,GAAG,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IAM1F,OAAO,CAAC,KAAK;IAOb,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAY3D,WAAW,IAAI,UAAU,GAAG,IAAI;IAgBhC,4EAA4E;IAC5E,MAAM,IAAI,OAAO;IAOjB,YAAY,IAAI,SAAS,GAAG,IAAI;IAIhC,QAAQ,IAAI,OAAO;CAGpB"}
@@ -15,6 +15,10 @@ export declare class TradingManager {
15
15
  private orderDraft;
16
16
  /** The buttons on the lines as last drawn, for clicks and the cursor. */
17
17
  private buttons;
18
+ /** The tags that take their line when pressed, as last drawn. */
19
+ private tagBoxes;
20
+ /** A press on a tag drags its line: how far the line sits from the pointer. */
21
+ private grabOffset;
18
22
  private fills;
19
23
  private realisedPnl;
20
24
  private requestRender;
@@ -64,7 +68,9 @@ export declare class TradingManager {
64
68
  * of a bracket or order draft, the lines' buttons, the lines.
65
69
  */
66
70
  onPointerDown(pos: Point, viewport: ViewportState, reach?: Pick<PointerReach, 'handle' | 'order' | 'button'>): boolean;
67
- onPointerMove(pos: Point, viewport: ViewportState): boolean;
71
+ /** Start dragging the line `tag` is on, the line keeping its distance from the pointer at `pos`. */
72
+ private grabTag;
73
+ onPointerMove(pointer: Point, viewport: ViewportState): boolean;
68
74
  /** End a press; `pos` is where it ended (none when the pointer left: a pressed button does nothing). */
69
75
  onPointerUp(pos?: Point): boolean;
70
76
  /**
@@ -81,8 +87,13 @@ export declare class TradingManager {
81
87
  * price axis so they paint ON TOP of the regular axis labels.
82
88
  */
83
89
  renderAxisBadges(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
84
- /** Where the axis badges sit (entries and orders on the plot), for the scale to keep clear of. */
85
- axisTagYs(viewport: ViewportState): number[];
90
+ /** Every price the lines put on the axis, where their lines are. */
91
+ private axisBadges;
92
+ /**
93
+ * Where the axis badges sit (top to bottom), for the scale to keep clear
94
+ * of. The theme colours them; where they sit is the same in any.
95
+ */
96
+ axisTagYs(viewport: ViewportState, theme?: Theme): number[];
86
97
  destroy(): void;
87
98
  }
88
99
  //# sourceMappingURL=TradingManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TradingManager.d.ts","sourceRoot":"","sources":["../../src/trading/TradingManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TradingManager.d.ts","sourceRoot":"","sources":["../../src/trading/TradingManager.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,6 @@ export declare class TradingRenderer {
11
11
  */
12
12
  renderAxisBadges(ctx: CanvasRenderingContext2D, viewport: ViewportState, theme: Theme): void;
13
13
  /** Where the axis badges sit, for the scale and other tags to keep clear of. */
14
- axisTagYs(viewport: ViewportState): number[];
14
+ axisTagYs(viewport: ViewportState, theme?: Theme): number[];
15
15
  }
16
16
  //# sourceMappingURL=TradingRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TradingRenderer.d.ts","sourceRoot":"","sources":["../../src/trading/TradingRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE3C,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAIlF;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAI5F,gFAAgF;IAChF,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE;CAG7C"}
1
+ {"version":3,"file":"TradingRenderer.d.ts","sourceRoot":"","sources":["../../src/trading/TradingRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE3C,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAIlF;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAI5F,gFAAgF;IAChF,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE;CAG5D"}
@@ -23,9 +23,10 @@ export interface LineButton {
23
23
  }
24
24
  /** Whether two buttons do the same thing (to the same order or position). */
25
25
  export declare function sameLineAction(a: LineButtonAction, b: LineButtonAction): boolean;
26
+ /**
27
+ * The button a press at `pos` is on, else the nearest whose margin (`slop`,
28
+ * wider for a finger) it is in: in a column of buttons the margins overlap,
29
+ * and the one under the press must win over a neighbour drawn after it.
30
+ */
26
31
  export declare function buttonAt(buttons: readonly LineButton[], pos: Point, slop?: number): LineButton | null;
27
- /** A square button filled with `color`, a cross on it. */
28
- export declare function drawCloseButton(ctx: CanvasRenderingContext2D, x: number, y: number, size: number, color: string): void;
29
- /** A square button filled with `color`, an up and a down arrow on it (reverse). */
30
- export declare function drawReverseButton(ctx: CanvasRenderingContext2D, x: number, y: number, size: number, color: string): void;
31
32
  //# sourceMappingURL=lineButtons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lineButtons.d.ts","sourceRoot":"","sources":["../../src/trading/lineButtons.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAAA;CAAE,CAAC;AAEjF,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAKD,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAKhF;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,SAAO,GAAG,UAAU,GAAG,IAAI,CAOnG;AAED,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAYtH;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAsBxH"}
1
+ {"version":3,"file":"lineButtons.d.ts","sourceRoot":"","sources":["../../src/trading/lineButtons.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAAA;CAAE,CAAC;AAEjF,oDAAoD;AACpD,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAKD,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAKhF;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,SAAO,GAAG,UAAU,GAAG,IAAI,CAgBnG"}
@@ -1,4 +1,8 @@
1
1
  import { ViewportState } from '@tradecanvas/commons';
2
2
  /** Whether a line at `y` lies on the main plot (not above it, nor over the time axis or a pane below). */
3
3
  export declare function inPlot(y: number, viewport: ViewportState): boolean;
4
+ /** `y` kept on the main plot. */
5
+ export declare function clampToPlot(y: number, viewport: ViewportState): number;
6
+ /** A price's line across the plot at `y`, on the pixel grid, `dash` empty for solid. */
7
+ export declare function levelLine(ctx: CanvasRenderingContext2D, viewport: ViewportState, y: number, color: string, dash: readonly number[]): void;
4
8
  //# sourceMappingURL=plot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plot.d.ts","sourceRoot":"","sources":["../../src/trading/plot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,0GAA0G;AAC1G,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAGlE"}
1
+ {"version":3,"file":"plot.d.ts","sourceRoot":"","sources":["../../src/trading/plot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,0GAA0G;AAC1G,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAGlE;AAED,iCAAiC;AACjC,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,CAGtE;AAED,wFAAwF;AACxF,wBAAgB,SAAS,CAAC,GAAG,EAAE,wBAAwB,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAUzI"}
@@ -5,6 +5,14 @@ import { PnLThreshold, PositionLabelContext, TradingPosition } from '@tradecanva
5
5
  */
6
6
  export declare function buildPositionLabelContext(pos: TradingPosition, currentPrice: number, precision: number, formatPrice?: (price: number) => string, locale?: string): PositionLabelContext;
7
7
  export declare function formatPositionLabel(template: string, ctx: PositionLabelContext): string;
8
+ /**
9
+ * Money made or lost, signed ("+40.00", "-20.00"), grouped in the number
10
+ * locale. What rounds to nothing has no sign: a short at its entry is "0.00",
11
+ * not "+-0.00".
12
+ */
13
+ export declare function formatAmount(value: number, precision: number, locale?: string): string;
14
+ /** What a position (or the order that opens it) makes when the price reaches `price`. */
15
+ export declare function amountAt(side: 'buy' | 'sell', entryPrice: number, quantity: number, price: number): number;
8
16
  export declare const DEFAULT_POSITION_LABEL = "{side} {qty} | P&L: {pnlSign}{pnl}";
9
17
  export declare function resolvePositionLabel(template: string | ((ctx: PositionLabelContext) => string) | undefined, ctx: PositionLabelContext): string;
10
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"positionFormat.d.ts","sourceRoot":"","sources":["../../src/trading/positionFormat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAG9B;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,eAAe,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EACvC,MAAM,CAAC,EAAE,MAAM,GACd,oBAAoB,CAsBtB;AAID,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,oBAAoB,GACxB,MAAM,CAyBR;AAED,eAAO,MAAM,sBAAsB,uCACG,CAAC;AAEvC,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,GAAG,SAAS,EACtE,GAAG,EAAE,oBAAoB,GACxB,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,YAAY,EAAE,GAAG,SAAS,EACtC,QAAQ,EAAE,MAAM,GACf,MAAM,CASR"}
1
+ {"version":3,"file":"positionFormat.d.ts","sourceRoot":"","sources":["../../src/trading/positionFormat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAG9B;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,eAAe,EACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EACvC,MAAM,CAAC,EAAE,MAAM,GACd,oBAAoB,CAsBtB;AAID,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,oBAAoB,GACxB,MAAM,CAyBR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAItF;AAED,yFAAyF;AACzF,wBAAgB,QAAQ,CACtB,IAAI,EAAE,KAAK,GAAG,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAED,eAAO,MAAM,sBAAsB,uCACG,CAAC;AAEvC,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,GAAG,SAAS,EACtE,GAAG,EAAE,oBAAoB,GACxB,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,YAAY,EAAE,GAAG,SAAS,EACtC,QAAQ,EAAE,MAAM,GACf,MAAM,CASR"}
@@ -0,0 +1,107 @@
1
+ import { IconDef, Theme, ViewportState } from '@tradecanvas/commons';
2
+ import { LineButton, LineButtonAction } from './lineButtons.js';
3
+ import { BracketHandle } from './BracketTool.js';
4
+ /** A tag's height, px: a Fibonacci number, as the built-in look's sizes are. */
5
+ export declare const TAG_HEIGHT = 21;
6
+ /** Between one tag and the next, and between the last and the price axis, px. */
7
+ export declare const TAG_GAP = 8;
8
+ /**
9
+ * One cell of a tag on a trading line: a stamp in the line's colour (the
10
+ * quantity, SL, TP), words or a figure on the tag's ground, or a button
11
+ * (an icon) that acts on the line.
12
+ */
13
+ export type TagCell = {
14
+ kind: 'stamp';
15
+ text: string;
16
+ } | {
17
+ kind: 'text';
18
+ text: string;
19
+ color?: string;
20
+ } | {
21
+ kind: 'button';
22
+ icon: IconDef;
23
+ action: LineButtonAction;
24
+ };
25
+ /** The line a press on a tag takes, by what it is: tags of lines near each other sit side by side. */
26
+ export type TagGrab = {
27
+ kind: 'order';
28
+ orderId: string;
29
+ } | {
30
+ kind: 'stop';
31
+ positionId: string;
32
+ which: 'stopLoss' | 'takeProfit';
33
+ } | {
34
+ kind: 'bracket';
35
+ handle: BracketHandle;
36
+ } | {
37
+ kind: 'draft';
38
+ };
39
+ /** A tag on the line at `y`, bordered in the line's `color`. */
40
+ export interface TradingTag {
41
+ y: number;
42
+ color: string;
43
+ cells: readonly TagCell[];
44
+ /** The line a press on it takes, as a press on the line itself would; none for a line that doesn't move. */
45
+ grab?: TagGrab;
46
+ }
47
+ /** Where a tag that takes its line was drawn (on the plot), its line's y, and the line. */
48
+ export interface TagBox {
49
+ x: number;
50
+ y: number;
51
+ width: number;
52
+ height: number;
53
+ lineY: number;
54
+ grab: TagGrab;
55
+ }
56
+ /** The tag a press at (`x`, `y`) is on, of those that take their line. */
57
+ export declare function tagAt(boxes: readonly TagBox[], x: number, y: number): TagBox | null;
58
+ /** A tag's width: its cells side by side. */
59
+ export declare function tagWidth(ctx: CanvasRenderingContext2D, tag: TradingTag, theme: Theme): number;
60
+ /**
61
+ * Where each tag starts: at the right end of its line, a gap short of the
62
+ * price axis, unless it would cover a tag laid out before it, when it moves
63
+ * to that tag's left (and on past any other it then covers). The first tags
64
+ * keep the axis end: lay out the ones that matter most first. One that runs
65
+ * into the plot's left edge stops there and does not fit: it may lie under
66
+ * another.
67
+ */
68
+ export declare function layoutTags(items: readonly {
69
+ y: number;
70
+ width: number;
71
+ }[], plot: {
72
+ left: number;
73
+ right: number;
74
+ }): {
75
+ x: number;
76
+ fits: boolean;
77
+ }[];
78
+ /**
79
+ * Draw `tags` at the right of the plot, laid out so none covers another,
80
+ * and add their buttons to `buttons`, and the tags that take their line to
81
+ * `boxes`, where they were drawn. A tag that did not fit is drawn first,
82
+ * under the others, with neither: what may lie under another tag can't be
83
+ * pressed.
84
+ */
85
+ export declare function drawTags(ctx: CanvasRenderingContext2D, tags: readonly TradingTag[], viewport: ViewportState, theme: Theme, buttons: LineButton[], boxes?: TagBox[]): void;
86
+ /** A price for the price axis: its line's y, the price as the axis writes it, the line's colour. */
87
+ export interface AxisBadge {
88
+ y: number;
89
+ text: string;
90
+ color: string;
91
+ }
92
+ /**
93
+ * Where badges for lines at `ys` go on the axis so none covers another, each
94
+ * as near its line as the others allow, top to bottom; those that no longer
95
+ * fit above the plot's foot are left out.
96
+ */
97
+ export declare function spreadAxisBadges<T extends {
98
+ y: number;
99
+ }>(badges: readonly T[], viewport: ViewportState): (T & {
100
+ at: number;
101
+ })[];
102
+ /**
103
+ * A price on the price axis, the axis's width in its line's `color`, its
104
+ * text in the ink that reads on it. Drawn after the axis, over its labels.
105
+ */
106
+ export declare function drawAxisBadge(ctx: CanvasRenderingContext2D, y: number, text: string, color: string, viewport: ViewportState, theme: Theme): void;
107
+ //# sourceMappingURL=tradingTags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tradingTags.d.ts","sourceRoot":"","sources":["../../src/trading/tradingTags.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { Theme } from '@tradecanvas/commons';
2
2
  /**
3
- * Fill a tag's box (a price tag, an axis pill, an order badge) in the
3
+ * Trace a tag's box (a price tag, an axis pill, an order badge) in the
4
4
  * theme's corner shape: square by default, rounded by `theme.shape.tagRadius`
5
- * (999 or anything past half its height makes a pill). Uses the context's
6
- * current fill.
5
+ * (999 or anything past half its height makes a pill). Starts a new path, to
6
+ * fill or to clip to.
7
7
  */
8
+ export declare function tagPath(ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, theme: Theme): void;
9
+ /** Fill a tag's box in the theme's corner shape, with the context's current fill. */
8
10
  export declare function fillTag(ctx: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, theme: Theme): void;
9
11
  //# sourceMappingURL=shapes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/ui/shapes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAmBrH"}
1
+ {"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/ui/shapes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAQlD;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAiBrH;AAED,qFAAqF;AACrF,wBAAgB,OAAO,CAAC,GAAG,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAOrH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tradecanvas/core",
3
- "version": "1.41.0",
3
+ "version": "1.42.0",
4
4
  "type": "module",
5
5
  "description": "Canvas rendering engine for @tradecanvas/chart",
6
6
  "license": "MIT",
@@ -38,7 +38,7 @@
38
38
  "README.md"
39
39
  ],
40
40
  "dependencies": {
41
- "@tradecanvas/commons": "1.41.0"
41
+ "@tradecanvas/commons": "1.42.0"
42
42
  },
43
43
  "devDependencies": {
44
44
  "jsdom": "^25.0.1",