@trdrs/quickcharts 1.0.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 +16 -0
- package/LICENSE +201 -0
- package/NOTICE +18 -0
- package/README.md +2325 -0
- package/THIRD-PARTY-NOTICES.md +263 -0
- package/dist/adapters/rest.d.ts +143 -0
- package/dist/adapters/rest.js +214 -0
- package/dist/adapters/rest.js.map +1 -0
- package/dist/ar-G7MVXRE4.js +1028 -0
- package/dist/ar-G7MVXRE4.js.map +1 -0
- package/dist/assets-C1GQvm0w.d.ts +1452 -0
- package/dist/ca_ES-EUSRU4VG.js +1028 -0
- package/dist/ca_ES-EUSRU4VG.js.map +1 -0
- package/dist/chunk-AKXIFHQN.js +172 -0
- package/dist/chunk-AKXIFHQN.js.map +1 -0
- package/dist/chunk-KFBQSPNA.js +107 -0
- package/dist/chunk-KFBQSPNA.js.map +1 -0
- package/dist/chunk-PD3DEWMQ.js +6959 -0
- package/dist/chunk-PD3DEWMQ.js.map +1 -0
- package/dist/de-2SVTG25S.js +1028 -0
- package/dist/de-2SVTG25S.js.map +1 -0
- package/dist/drawings.d.ts +237 -0
- package/dist/drawings.js +199 -0
- package/dist/drawings.js.map +1 -0
- package/dist/es-UDHZM4W7.js +1028 -0
- package/dist/es-UDHZM4W7.js.map +1 -0
- package/dist/feature-manifest.json +3453 -0
- package/dist/fr-35VN4G4S.js +1028 -0
- package/dist/fr-35VN4G4S.js.map +1 -0
- package/dist/he_IL-JPZMCURP.js +1028 -0
- package/dist/he_IL-JPZMCURP.js.map +1 -0
- package/dist/id_ID-XSTFHHJQ.js +1028 -0
- package/dist/id_ID-XSTFHHJQ.js.map +1 -0
- package/dist/index.d.ts +5487 -0
- package/dist/index.js +24040 -0
- package/dist/index.js.map +1 -0
- package/dist/it-EIY6JESQ.js +1028 -0
- package/dist/it-EIY6JESQ.js.map +1 -0
- package/dist/ja-42N4XRCW.js +1028 -0
- package/dist/ja-42N4XRCW.js.map +1 -0
- package/dist/ko-3VRPTIP3.js +1028 -0
- package/dist/ko-3VRPTIP3.js.map +1 -0
- package/dist/ms_MY-SKN7O6M5.js +1028 -0
- package/dist/ms_MY-SKN7O6M5.js.map +1 -0
- package/dist/pl-TYARHCLT.js +1028 -0
- package/dist/pl-TYARHCLT.js.map +1 -0
- package/dist/pt-72IIFLL4.js +1028 -0
- package/dist/pt-72IIFLL4.js.map +1 -0
- package/dist/quickcharts.css +6217 -0
- package/dist/resources-Ch8eA1Mw.d.ts +228 -0
- package/dist/rest-openapi.json +1664 -0
- package/dist/ru-TPH4F7IB.js +1028 -0
- package/dist/ru-TPH4F7IB.js.map +1 -0
- package/dist/sv-DC5RS67Z.js +1028 -0
- package/dist/sv-DC5RS67Z.js.map +1 -0
- package/dist/th-I6H6AOZ3.js +1028 -0
- package/dist/th-I6H6AOZ3.js.map +1 -0
- package/dist/theme-manifest.json +1246 -0
- package/dist/tr-7FSUVCNW.js +1028 -0
- package/dist/tr-7FSUVCNW.js.map +1 -0
- package/dist/vi-DLRPHLLH.js +1028 -0
- package/dist/vi-DLRPHLLH.js.map +1 -0
- package/dist/zh-ZXIQBBEP.js +1028 -0
- package/dist/zh-ZXIQBBEP.js.map +1 -0
- package/dist/zh_TW-TYNUJU7U.js +1028 -0
- package/dist/zh_TW-TYNUJU7U.js.map +1 -0
- package/package.json +100 -0
|
@@ -0,0 +1,1452 @@
|
|
|
1
|
+
import { Time, IChartApi, ISeriesApi, SeriesType } from 'lightweight-charts';
|
|
2
|
+
import { i as ResourceStore, j as TemplateMeta, T as TemplateBody, R as ResourceRef, W as WriteOutcome } from './resources-Ch8eA1Mw.js';
|
|
3
|
+
|
|
4
|
+
/** One interval bucket's visibility rule: enabled + the inclusive value range it covers. */
|
|
5
|
+
interface VisibilityRange {
|
|
6
|
+
on: boolean;
|
|
7
|
+
from: number;
|
|
8
|
+
to: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Per-interval visibility for one drawing — which chart timeframes it appears on. Buckets and
|
|
12
|
+
* ranges mirror the timeframe vocabulary (seconds/minutes 1–59, hours 1–24, days 1–366,
|
|
13
|
+
* weeks 1–52, months 1–12); ticks is a single switch.
|
|
14
|
+
*/
|
|
15
|
+
interface IntervalVisibility {
|
|
16
|
+
ticks: boolean;
|
|
17
|
+
seconds: VisibilityRange;
|
|
18
|
+
minutes: VisibilityRange;
|
|
19
|
+
hours: VisibilityRange;
|
|
20
|
+
days: VisibilityRange;
|
|
21
|
+
weeks: VisibilityRange;
|
|
22
|
+
months: VisibilityRange;
|
|
23
|
+
}
|
|
24
|
+
declare const DEFAULT_VISIBILITY: IntervalVisibility;
|
|
25
|
+
type IntervalBucket = 'ticks' | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' | 'months';
|
|
26
|
+
/** The four quick visibility rules, resolved against the chart's CURRENT interval. */
|
|
27
|
+
type VisibilityPreset = 'current-and-above' | 'current-and-below' | 'current-only' | 'all';
|
|
28
|
+
/** Build the visibility tree for one quick rule. "Above" means the current interval and every
|
|
29
|
+
* COARSER one (a 1h line kept "and above" shows on 4h and 1d, never on 5m); "below" mirrors it
|
|
30
|
+
* toward the finer intervals; "only" pins the current bucket's value. A fractional context
|
|
31
|
+
* (90m → hours 1.5) rounds OUTWARD so the current chart always satisfies its own rule. With no
|
|
32
|
+
* context (unparseable timeframe) every rule degrades to all — a drawing must never vanish
|
|
33
|
+
* because the interval could not be classified. */
|
|
34
|
+
declare function visibilityPreset(kind: VisibilityPreset, ctx: IntervalContext): IntervalVisibility;
|
|
35
|
+
/** The chart's current interval, bucketed; null = unknown (drawings then always show). */
|
|
36
|
+
type IntervalContext = {
|
|
37
|
+
bucket: IntervalBucket;
|
|
38
|
+
value: number;
|
|
39
|
+
} | null;
|
|
40
|
+
/**
|
|
41
|
+
* Parse a timeframe token ('1t', '30s', '45m', '4h', '1d', '1w', '3mo') into a bucket context.
|
|
42
|
+
* Oversized values roll up so custom intervals land in the range users expect (90m → 1.5h).
|
|
43
|
+
*/
|
|
44
|
+
declare function parseIntervalContext(tf: string): IntervalContext;
|
|
45
|
+
/** Deep-copied visibility with defaults filled in — configs never alias the shared default. */
|
|
46
|
+
declare function normalizeVisibility(partial?: Partial<IntervalVisibility>): IntervalVisibility;
|
|
47
|
+
/** Whether a drawing with this visibility config shows at the given interval. */
|
|
48
|
+
declare function visibleAt(visibility: IntervalVisibility, context: IntervalContext): boolean;
|
|
49
|
+
|
|
50
|
+
/** How the host writes a price: the symbol's own formatter, injected so every drawing label,
|
|
51
|
+
* pill and readout carries the market's declared precision. The drawings package never derives a
|
|
52
|
+
* precision from a price's magnitude. */
|
|
53
|
+
type PriceFormatPort = (price: number) => string;
|
|
54
|
+
/** Where a glyph mark's artwork comes from. Platform emoji fonts cannot be trusted on a canvas
|
|
55
|
+
* (Windows draws no flag glyphs at all), so emoji and sticker marks draw a host-supplied image
|
|
56
|
+
* when this answers with a URL. Null falls back to drawing the glyph as text, which is also what
|
|
57
|
+
* icon marks always do, because their ink is tinted by the stroke colour and artwork cannot
|
|
58
|
+
* carry that. */
|
|
59
|
+
type GlyphSourcePort = (glyph: string) => string | null;
|
|
60
|
+
/** A point the drawing is pinned to, in chart coordinates. */
|
|
61
|
+
interface Anchor {
|
|
62
|
+
time: Time;
|
|
63
|
+
price: number;
|
|
64
|
+
}
|
|
65
|
+
/** A point in pane-local CSS pixels. */
|
|
66
|
+
interface Point {
|
|
67
|
+
x: number;
|
|
68
|
+
y: number;
|
|
69
|
+
}
|
|
70
|
+
type LineStyle = 'solid' | 'dashed' | 'dotted';
|
|
71
|
+
/**
|
|
72
|
+
* The shared visual vocabulary every tool paints with. `style` is HOW a drawing is painted
|
|
73
|
+
* (what the floating toolbar edits generically); a tool's `props` are WHAT it is (levels,
|
|
74
|
+
* extension flags, text content, …); `options` are lifecycle flags. All style fields are
|
|
75
|
+
* required — constructors merge defaults so tools never carry `?? fallback` chains.
|
|
76
|
+
*/
|
|
77
|
+
interface DrawingStyle {
|
|
78
|
+
lineColor: string;
|
|
79
|
+
lineWidth: number;
|
|
80
|
+
lineStyle: LineStyle;
|
|
81
|
+
/** Fill paint for tools with a fillable region; fill shows only while `fillOpacity > 0`. */
|
|
82
|
+
fillColor: string;
|
|
83
|
+
fillOpacity: number;
|
|
84
|
+
/** Text channel for tools that render text (labels, notes, callouts). */
|
|
85
|
+
textColor: string;
|
|
86
|
+
fontSize: number;
|
|
87
|
+
bold: boolean;
|
|
88
|
+
italic: boolean;
|
|
89
|
+
}
|
|
90
|
+
declare const DEFAULT_STYLE: DrawingStyle;
|
|
91
|
+
/** Lifecycle flags, uniform across tools. Higher `zIndex` hit-tests (and later paints) on top. */
|
|
92
|
+
interface DrawingOptions {
|
|
93
|
+
visible: boolean;
|
|
94
|
+
locked: boolean;
|
|
95
|
+
zIndex: number;
|
|
96
|
+
/** Which chart intervals the drawing shows on (independent of the manual `visible` switch). */
|
|
97
|
+
visibility: IntervalVisibility;
|
|
98
|
+
}
|
|
99
|
+
declare const DEFAULT_OPTIONS: DrawingOptions;
|
|
100
|
+
/**
|
|
101
|
+
* Wire/persistence format. `props` carries the tool-specific payload — every tool round-trips
|
|
102
|
+
* its COMPLETE state through this shape (the schema exists so nothing is ever dropped on save).
|
|
103
|
+
*/
|
|
104
|
+
interface SerializedDrawing {
|
|
105
|
+
v: 2;
|
|
106
|
+
id: string;
|
|
107
|
+
type: string;
|
|
108
|
+
anchors: Anchor[];
|
|
109
|
+
style: DrawingStyle;
|
|
110
|
+
options: DrawingOptions;
|
|
111
|
+
props?: Record<string, unknown>;
|
|
112
|
+
/** The chart surface this drawing is LOCAL to, when it is local to one. Absent — the case for
|
|
113
|
+
* every drawing made while sync is on, and for every drawing made before scoping existed —
|
|
114
|
+
* means the drawing is shared by every surface showing this symbol. The host owns the shape of
|
|
115
|
+
* the token; the drawing layer only ever compares it for equality. */
|
|
116
|
+
scope?: string;
|
|
117
|
+
}
|
|
118
|
+
type DrawingState = 'normal' | 'hovered' | 'selected' | 'editing';
|
|
119
|
+
/**
|
|
120
|
+
* Pane-local coordinate conversions handed to paint/hit-test code. Width/height are the pane's
|
|
121
|
+
* CSS-pixel size (never a container fallback — extension math depends on the real pane box).
|
|
122
|
+
*/
|
|
123
|
+
interface Viewport {
|
|
124
|
+
width: number;
|
|
125
|
+
height: number;
|
|
126
|
+
xOf(time: Time): number | null;
|
|
127
|
+
yOf(price: number): number | null;
|
|
128
|
+
timeAt(x: number): Time | null;
|
|
129
|
+
priceAt(y: number): number | null;
|
|
130
|
+
/** Bar-index distance between two times (fractional; null when either falls outside data). */
|
|
131
|
+
barsBetween(a: Time, b: Time): number | null;
|
|
132
|
+
/** The bar index a time sits at (fractional; null outside the loaded range). */
|
|
133
|
+
logicalOf(time: Time): number | null;
|
|
134
|
+
/** The time at a bar index (null in whitespace beyond the loaded range). */
|
|
135
|
+
timeOfLogical(logical: number): Time | null;
|
|
136
|
+
}
|
|
137
|
+
/** A draggable handle over an anchor, in pane-local CSS pixels. */
|
|
138
|
+
interface ControlPoint {
|
|
139
|
+
index: number;
|
|
140
|
+
x: number;
|
|
141
|
+
y: number;
|
|
142
|
+
}
|
|
143
|
+
interface IDrawing {
|
|
144
|
+
readonly id: string;
|
|
145
|
+
readonly type: string;
|
|
146
|
+
/** The chart surface this drawing is bound to, when it is bound to one; undefined is shared by
|
|
147
|
+
* every surface showing the symbol. The host assigns and compares it; the model only carries it. */
|
|
148
|
+
scope?: string;
|
|
149
|
+
anchors: readonly Anchor[];
|
|
150
|
+
style: Readonly<DrawingStyle>;
|
|
151
|
+
options: Readonly<DrawingOptions>;
|
|
152
|
+
state: DrawingState;
|
|
153
|
+
setAnchors(anchors: Anchor[]): void;
|
|
154
|
+
updateAnchor(index: number, anchor: Anchor): void;
|
|
155
|
+
appendAnchor(anchor: Anchor): void;
|
|
156
|
+
removeAnchor(index: number): void;
|
|
157
|
+
updateStyle(patch: Partial<DrawingStyle>): void;
|
|
158
|
+
updateOptions(patch: Partial<DrawingOptions>): void;
|
|
159
|
+
setState(state: DrawingState): void;
|
|
160
|
+
/** The tool-specific payload (typed per tool; empty object for tools without one). */
|
|
161
|
+
readonly props: Readonly<Record<string, unknown>>;
|
|
162
|
+
applyProps(patch: Record<string, unknown>): void;
|
|
163
|
+
/** True once the drawing has its full anchor set (placement complete, all values finite). */
|
|
164
|
+
isValid(): boolean;
|
|
165
|
+
/** The chart's current interval (the manager broadcasts it on timeframe changes). */
|
|
166
|
+
setIntervalContext(context: IntervalContext): void;
|
|
167
|
+
/** Chart-wide hide-all switch (transient view state — never serialized). */
|
|
168
|
+
setGlobalHidden(hidden: boolean): void;
|
|
169
|
+
/** The symbol's smallest price move (tick-denominated readouts); null omits those readouts. */
|
|
170
|
+
setTickSize(tick: number | null): void;
|
|
171
|
+
/** The symbol's price formatter (the manager broadcasts it); null returns to the declared
|
|
172
|
+
* stand-in. */
|
|
173
|
+
setPriceFormatter(format: PriceFormatPort | null): void;
|
|
174
|
+
/** Where glyph artwork comes from (the manager broadcasts it); null draws glyphs as text. */
|
|
175
|
+
setGlyphSource(source: GlyphSourcePort | null): void;
|
|
176
|
+
/** Manual `visible` switch AND hide-all AND the per-interval rule, combined. */
|
|
177
|
+
isVisibleNow(): boolean;
|
|
178
|
+
testHit(point: Point, viewport: Viewport): boolean;
|
|
179
|
+
getControlPoints(viewport: Viewport): ControlPoint[];
|
|
180
|
+
anchorToPixel(anchor: Anchor, viewport: Viewport): Point | null;
|
|
181
|
+
/** Scale grips beyond the anchors (emoji/image corners); dragging one calls `resizeTo`. */
|
|
182
|
+
resizeHandles(viewport: Viewport): Point[];
|
|
183
|
+
resizeTo(handleIndex: number, point: Point, viewport: Viewport): void;
|
|
184
|
+
/** "+ Add text" hint above a selected text-capable drawing that has no text yet. */
|
|
185
|
+
paintTextHint(ctx: CanvasRenderingContext2D, viewport: Viewport): void;
|
|
186
|
+
hitTextHint(point: Point): boolean;
|
|
187
|
+
/** Where the hint last painted — the inline editor opens exactly there (the hint becomes it). */
|
|
188
|
+
textHintAnchor(): {
|
|
189
|
+
x: number;
|
|
190
|
+
y: number;
|
|
191
|
+
angle: number;
|
|
192
|
+
} | null;
|
|
193
|
+
/** An inline text editor is open on this drawing — the hint stays hidden underneath it. */
|
|
194
|
+
textEditing: boolean;
|
|
195
|
+
getViewport(): Viewport | null;
|
|
196
|
+
requestUpdate(): void;
|
|
197
|
+
toJSON(): SerializedDrawing;
|
|
198
|
+
}
|
|
199
|
+
type ToolCategory = 'lines' | 'channels' | 'pitchforks' | 'fibonacci' | 'gann' | 'patterns' | 'elliott' | 'cycles' | 'forecasting' | 'volume' | 'measurement' | 'shapes' | 'annotation' | 'content';
|
|
200
|
+
|
|
201
|
+
type MagnetMode = 'off' | 'weak' | 'strong';
|
|
202
|
+
interface OhlcBar {
|
|
203
|
+
time: Time;
|
|
204
|
+
open: number;
|
|
205
|
+
high: number;
|
|
206
|
+
low: number;
|
|
207
|
+
close: number;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* The pure snap: nearest OHLC value of one bar, in pixel space. `weak` returns null when every
|
|
211
|
+
* value is farther than the pull radius; `strong` always takes the nearest.
|
|
212
|
+
*/
|
|
213
|
+
declare function snapToBar(bar: OhlcBar, pointerY: number, priceToY: (price: number) => number | null, mode: Exclude<MagnetMode, 'off'>): number | null;
|
|
214
|
+
/**
|
|
215
|
+
* Snap a pane point to the nearest bar's nearest OHLC value. Returns the snapped anchor (time
|
|
216
|
+
* pinned to the bar, price to the chosen value), or null when nothing pulls — the caller then
|
|
217
|
+
* uses the raw pointer anchor.
|
|
218
|
+
*/
|
|
219
|
+
declare function magnetSnap(chart: IChartApi, series: ISeriesApi<SeriesType>, point: Point, mode: MagnetMode): Anchor | null;
|
|
220
|
+
|
|
221
|
+
/** The widget's SOURCE catalog: every string its own chrome shows, in English, one file per
|
|
222
|
+
* surface. Every language the widget ships is typed against this shape. Symbols, prices and
|
|
223
|
+
* anything the datafeed says pass through untranslated: they are data, not interface. */
|
|
224
|
+
declare const en: {
|
|
225
|
+
readonly 'toast.dismiss': "Dismiss";
|
|
226
|
+
readonly 'toast.feedUnavailable': "No data for {symbol} from this feed.";
|
|
227
|
+
readonly 'toast.feedNoData': "No data for {symbol} yet.";
|
|
228
|
+
readonly 'toast.imageCopyFallback': "Could not copy the image. Saved a file instead.";
|
|
229
|
+
readonly 'toast.imageFailed': "Could not capture the chart image.";
|
|
230
|
+
readonly 'toast.indicatorsNotCarried': {
|
|
231
|
+
readonly one: "{count} indicator in this saved chart is not available here and was left out.";
|
|
232
|
+
readonly other: "{count} indicators in this saved chart are not available here and were left out.";
|
|
233
|
+
};
|
|
234
|
+
readonly 'settings.menu': "Chart settings";
|
|
235
|
+
readonly 'settings.sectionAppearance': "Appearance";
|
|
236
|
+
readonly 'settings.background': "Background";
|
|
237
|
+
readonly 'settings.upCandles': "Up candles";
|
|
238
|
+
readonly 'settings.downCandles': "Down candles";
|
|
239
|
+
readonly 'settings.upBorders': "Up borders";
|
|
240
|
+
readonly 'settings.downBorders': "Down borders";
|
|
241
|
+
readonly 'settings.upWicks': "Up wicks";
|
|
242
|
+
readonly 'settings.downWicks': "Down wicks";
|
|
243
|
+
readonly 'settings.sectionDisplay': "Display";
|
|
244
|
+
readonly 'settings.gridLines': "Grid lines";
|
|
245
|
+
readonly 'settings.sessionShading': "Session shading";
|
|
246
|
+
readonly 'settings.sectionScale': "Price scale";
|
|
247
|
+
readonly 'settings.sectionTheme': "Theme";
|
|
248
|
+
readonly 'settings.indicatorTitle': "{name} settings";
|
|
249
|
+
readonly 'settings.tabInputs': "Inputs";
|
|
250
|
+
readonly 'settings.tabStyle': "Style";
|
|
251
|
+
readonly 'settings.tabVisibility': "Visibility";
|
|
252
|
+
readonly 'settings.plots': "Plots";
|
|
253
|
+
readonly 'settings.levels': "Levels";
|
|
254
|
+
readonly 'settings.fills': "Fills";
|
|
255
|
+
readonly 'settings.colorOf': "{name} color";
|
|
256
|
+
readonly 'settings.lineWidthOf': "{name} line width";
|
|
257
|
+
readonly 'settings.lineStyleOf': "{name} line style";
|
|
258
|
+
readonly 'settings.visibleOf': "Show {name}";
|
|
259
|
+
readonly 'settings.lineStyleSolid': "Solid";
|
|
260
|
+
readonly 'settings.lineStyleDashed': "Dashed";
|
|
261
|
+
readonly 'settings.lineStyleDotted': "Dotted";
|
|
262
|
+
readonly 'settings.precision': "Precision";
|
|
263
|
+
readonly 'settings.precisionDefault': "Default";
|
|
264
|
+
readonly 'settings.labelsOnPriceScale': "Labels on price scale";
|
|
265
|
+
readonly 'settings.showIndicator': "Show this indicator";
|
|
266
|
+
readonly 'picker.title': "Indicators";
|
|
267
|
+
readonly 'picker.search': "Search indicators";
|
|
268
|
+
readonly 'picker.noMatches': "No matching indicators.";
|
|
269
|
+
readonly 'picker.collections': "Indicator collections";
|
|
270
|
+
readonly 'picker.personal': "Personal";
|
|
271
|
+
readonly 'picker.builtin': "Built-in";
|
|
272
|
+
readonly 'picker.favorites': "Favorites";
|
|
273
|
+
readonly 'picker.thousands': " K";
|
|
274
|
+
readonly 'picker.name': "Name";
|
|
275
|
+
readonly 'picker.author': "Author";
|
|
276
|
+
readonly 'picker.favorite': "Favorite {name}";
|
|
277
|
+
readonly 'picker.unfavorite': "Unfavorite {name}";
|
|
278
|
+
readonly 'picker.loading': "Loading indicators…";
|
|
279
|
+
readonly 'picker.unavailable': "Indicator content is unavailable. Try again.";
|
|
280
|
+
readonly 'picker.actionFailed': "The action could not be completed. Try again.";
|
|
281
|
+
readonly 'picker.add': "Add {name}";
|
|
282
|
+
readonly 'picker.notPermitted': "{name} is not available here";
|
|
283
|
+
readonly 'history.undoNamed': "Undo {change}";
|
|
284
|
+
readonly 'history.redoNamed': "Redo {change}";
|
|
285
|
+
readonly 'history.changeSymbol': "symbol change";
|
|
286
|
+
readonly 'history.changeTimeframe': "timeframe change";
|
|
287
|
+
readonly 'history.changeChartStyle': "chart style change";
|
|
288
|
+
readonly 'history.changePriceScale': "price scale change";
|
|
289
|
+
readonly 'history.changeAppearance': "appearance change";
|
|
290
|
+
readonly 'history.changeAddCompare': "add comparison";
|
|
291
|
+
readonly 'history.changeRemoveCompare': "remove comparison";
|
|
292
|
+
readonly 'history.changeCompare': "comparison change";
|
|
293
|
+
readonly 'history.changeAddIndicator': "add indicator";
|
|
294
|
+
readonly 'history.changeRemoveIndicator': "remove indicator";
|
|
295
|
+
readonly 'history.changeIndicator': "indicator change";
|
|
296
|
+
readonly 'history.changeAddDrawing': "add drawing";
|
|
297
|
+
readonly 'history.changeRemoveDrawing': "remove drawing";
|
|
298
|
+
readonly 'history.changeDrawing': "drawing change";
|
|
299
|
+
readonly 'chrome.topBar': "Chart toolbar";
|
|
300
|
+
readonly 'chrome.bottomBar': "Chart footer";
|
|
301
|
+
readonly 'chrome.symbolSearch': "Search symbol";
|
|
302
|
+
readonly 'chrome.compare': "Compare or add symbol";
|
|
303
|
+
readonly 'chrome.chartStyle': "Chart style";
|
|
304
|
+
readonly 'chrome.indicators': "Indicators";
|
|
305
|
+
readonly 'chrome.replay': "Bar replay";
|
|
306
|
+
readonly 'chrome.replayChip': "Replay";
|
|
307
|
+
readonly 'chrome.image': "Chart image";
|
|
308
|
+
readonly 'chrome.session': "Trading session";
|
|
309
|
+
readonly 'chrome.sessionsHeading': "Sessions";
|
|
310
|
+
readonly 'chrome.navigation': "Chart navigation";
|
|
311
|
+
readonly 'chrome.activeChart': "{symbol}, {timeframe}";
|
|
312
|
+
readonly 'command.extension': "Host command";
|
|
313
|
+
readonly 'command.viewReset': "Reset view";
|
|
314
|
+
readonly 'command.viewGoLive': "Go to the live edge";
|
|
315
|
+
readonly 'command.viewZoomIn': "Zoom in";
|
|
316
|
+
readonly 'command.viewZoomOut': "Zoom out";
|
|
317
|
+
readonly 'command.viewScrollLeft': "Scroll back";
|
|
318
|
+
readonly 'command.viewScrollRight': "Scroll forward";
|
|
319
|
+
readonly 'command.priceCopy': "Copy price";
|
|
320
|
+
readonly 'command.symbolSet': "Change symbol";
|
|
321
|
+
readonly 'command.styleCandles': "Candles";
|
|
322
|
+
readonly 'command.styleHollow': "Hollow candles";
|
|
323
|
+
readonly 'command.styleBars': "Bars";
|
|
324
|
+
readonly 'command.styleLine': "Line";
|
|
325
|
+
readonly 'command.styleArea': "Area";
|
|
326
|
+
readonly 'command.styleBaseline': "Baseline";
|
|
327
|
+
readonly 'command.styleStepline': "Step line";
|
|
328
|
+
readonly 'command.appearanceApply': "Chart appearance";
|
|
329
|
+
readonly 'command.appearanceReset': "Reset defaults";
|
|
330
|
+
readonly 'command.scaleNormal': "Regular price scale";
|
|
331
|
+
readonly 'command.scaleLog': "Logarithmic price scale";
|
|
332
|
+
readonly 'command.scalePercent': "Percentage price scale";
|
|
333
|
+
readonly 'command.scaleIndexed': "Indexed price scale";
|
|
334
|
+
readonly 'command.historyUndo': "Undo";
|
|
335
|
+
readonly 'command.historyRedo': "Redo";
|
|
336
|
+
readonly 'command.indicatorAdd': "Add indicator";
|
|
337
|
+
readonly 'command.indicatorUpdate': "Update indicator";
|
|
338
|
+
readonly 'command.indicatorsRemoveAll': "Remove indicators";
|
|
339
|
+
readonly 'command.indicatorRemove': "Remove indicator";
|
|
340
|
+
readonly 'command.indicatorHide': "Hide indicator";
|
|
341
|
+
readonly 'command.indicatorShow': "Show indicator";
|
|
342
|
+
readonly 'command.drawingsRemoveAll': "Remove drawings";
|
|
343
|
+
readonly 'command.drawingDeleteSelected': "Delete selected drawing";
|
|
344
|
+
readonly 'command.drawingArm': "Drawing tool";
|
|
345
|
+
readonly 'command.drawingCursor': "Cursor mode";
|
|
346
|
+
readonly 'command.drawingMagnet': "Magnet";
|
|
347
|
+
readonly 'command.drawingStayInMode': "Stay in drawing mode";
|
|
348
|
+
readonly 'command.drawingLockAll': "Lock all drawings";
|
|
349
|
+
readonly 'command.drawingHide': "Hide drawings or indicators";
|
|
350
|
+
readonly 'command.drawingSync': "Sync drawings across the layout";
|
|
351
|
+
readonly 'command.drawingRemoveLockedPolicy': "Always remove locked drawings";
|
|
352
|
+
readonly 'command.drawingFavorite': "Favorite drawing tool";
|
|
353
|
+
readonly 'command.drawingFavoritesBar': "Favorite drawing tools toolbar";
|
|
354
|
+
readonly 'command.drawingStyle': "Drawing style";
|
|
355
|
+
readonly 'command.drawingProps': "Drawing properties";
|
|
356
|
+
readonly 'command.drawingLock': "Lock drawing";
|
|
357
|
+
readonly 'command.drawingClone': "Clone drawing";
|
|
358
|
+
readonly 'command.drawingCopy': "Copy drawing";
|
|
359
|
+
readonly 'command.drawingPaste': "Paste drawing";
|
|
360
|
+
readonly 'command.drawingBringToFront': "Bring drawing to front";
|
|
361
|
+
readonly 'command.drawingSendToBack': "Send drawing to back";
|
|
362
|
+
readonly 'command.drawingBringForward': "Bring drawing forward";
|
|
363
|
+
readonly 'command.drawingSendBackward': "Send drawing backward";
|
|
364
|
+
readonly 'command.drawingHideSelected': "Hide drawing";
|
|
365
|
+
readonly 'command.drawingVisibility': "Drawing visibility on intervals";
|
|
366
|
+
readonly 'command.drawingSettings': "Drawing settings";
|
|
367
|
+
readonly 'command.drawingCommitEdit': "Apply drawing settings";
|
|
368
|
+
readonly 'command.drawingPlaceImage': "Place image";
|
|
369
|
+
readonly 'command.drawingTemplateApply': "Apply drawing template";
|
|
370
|
+
readonly 'command.drawingTemplateSave': "Save drawing template";
|
|
371
|
+
readonly 'command.drawingTemplateRemove': "Remove drawing template";
|
|
372
|
+
readonly 'command.drawingTableAddRow': "Add table row";
|
|
373
|
+
readonly 'command.drawingTableAddColumn': "Add table column";
|
|
374
|
+
readonly 'command.drawingCancel': "Cancel drawing";
|
|
375
|
+
readonly 'command.compareOpen': "Compare or add symbol";
|
|
376
|
+
readonly 'command.compareAdd': "Add comparison";
|
|
377
|
+
readonly 'command.compareRemove': "Remove comparison";
|
|
378
|
+
readonly 'command.compareVisible': "Show or hide a comparison";
|
|
379
|
+
readonly 'command.compareChangeSymbol': "Change compared symbol";
|
|
380
|
+
readonly 'command.replayStart': "Start bar replay";
|
|
381
|
+
readonly 'command.replayStartFirst': "Start bar replay at the first available date";
|
|
382
|
+
readonly 'command.replayExit': "Exit bar replay";
|
|
383
|
+
readonly 'command.replayPlay': "Play replay";
|
|
384
|
+
readonly 'command.replayPause': "Pause replay";
|
|
385
|
+
readonly 'command.replayStepForward': "Step forward";
|
|
386
|
+
readonly 'command.replayStepBack': "Step back";
|
|
387
|
+
readonly 'command.replayGoLive': "Replay to the live edge";
|
|
388
|
+
readonly 'command.replaySpeed': "Replay speed";
|
|
389
|
+
readonly 'command.replayInterval': "Replay update interval";
|
|
390
|
+
readonly 'command.timeframeSet': "Timeframe";
|
|
391
|
+
readonly 'command.subsessionRegular': "Regular hours";
|
|
392
|
+
readonly 'command.subsessionExtended': "Extended hours";
|
|
393
|
+
readonly 'command.rangeSet': "Date range";
|
|
394
|
+
readonly 'command.timezoneSet': "Timezone";
|
|
395
|
+
readonly 'command.themeLight': "Light theme";
|
|
396
|
+
readonly 'command.themeDark': "Dark theme";
|
|
397
|
+
readonly 'command.themeToggle': "Switch theme";
|
|
398
|
+
readonly 'command.themeSet': "Set theme";
|
|
399
|
+
readonly 'command.localeSet': "Language";
|
|
400
|
+
readonly 'command.fullscreenEnter': "Fullscreen";
|
|
401
|
+
readonly 'command.fullscreenExit': "Exit fullscreen";
|
|
402
|
+
readonly 'command.fullscreenToggle': "Toggle fullscreen";
|
|
403
|
+
readonly 'command.imageCapture': "Capture image";
|
|
404
|
+
readonly 'command.imageDownload': "Download image";
|
|
405
|
+
readonly 'command.dataDownload': "Download chart data";
|
|
406
|
+
readonly 'command.imageCopy': "Copy image";
|
|
407
|
+
readonly 'command.layoutArrangement': "Layout";
|
|
408
|
+
readonly 'command.layoutActive': "Active chart";
|
|
409
|
+
readonly 'command.layoutSync': "Chart synchronization";
|
|
410
|
+
readonly 'command.layoutActivateNext': "Next chart in layout";
|
|
411
|
+
readonly 'command.layoutActivatePrevious': "Previous chart in layout";
|
|
412
|
+
readonly 'command.layoutMaximize': "Maximize or restore the active chart";
|
|
413
|
+
readonly 'command.layoutSave': "Save layout";
|
|
414
|
+
readonly 'command.layoutRename': "Rename layout";
|
|
415
|
+
readonly 'command.layoutLoad': "Open layout";
|
|
416
|
+
readonly 'command.layoutOpen': "Open layout…";
|
|
417
|
+
readonly 'command.layoutDelete': "Delete layout";
|
|
418
|
+
readonly 'command.layoutCreate': "Create new layout";
|
|
419
|
+
readonly 'command.layoutAutosave': "Autosave layout";
|
|
420
|
+
readonly 'drawing.toolbar': "Drawing tools";
|
|
421
|
+
readonly 'drawing.groupTrend': "Trend tools";
|
|
422
|
+
readonly 'drawing.groupFibGann': "Fibonacci & Gann";
|
|
423
|
+
readonly 'drawing.groupPatterns': "Patterns";
|
|
424
|
+
readonly 'drawing.groupForecast': "Forecast & measure";
|
|
425
|
+
readonly 'drawing.groupGlyphs': "Emojis & stickers";
|
|
426
|
+
readonly 'drawing.shapes': "Shapes";
|
|
427
|
+
readonly 'drawing.textNotes': "Text & notes";
|
|
428
|
+
readonly 'drawing.groupMenu': "{group} menu";
|
|
429
|
+
readonly 'drawing.sectionLines': "Lines";
|
|
430
|
+
readonly 'drawing.sectionChannels': "Channels";
|
|
431
|
+
readonly 'drawing.sectionPitchforks': "Pitchforks";
|
|
432
|
+
readonly 'drawing.sectionFibonacci': "Fibonacci";
|
|
433
|
+
readonly 'drawing.sectionGann': "Gann";
|
|
434
|
+
readonly 'drawing.sectionChartPatterns': "Chart patterns";
|
|
435
|
+
readonly 'drawing.sectionElliott': "Elliott waves";
|
|
436
|
+
readonly 'drawing.sectionCycles': "Cycles";
|
|
437
|
+
readonly 'drawing.sectionForecasting': "Forecasting";
|
|
438
|
+
readonly 'drawing.sectionVolumeBased': "Volume based";
|
|
439
|
+
readonly 'drawing.sectionMeasures': "Measures";
|
|
440
|
+
readonly 'drawing.sectionBrushes': "Brushes";
|
|
441
|
+
readonly 'drawing.sectionArrows': "Arrows";
|
|
442
|
+
readonly 'drawing.sectionContent': "Content";
|
|
443
|
+
readonly 'drawing.sectionGlyphs': "Emojis, stickers, icons";
|
|
444
|
+
readonly 'drawing.cursor': "Cursor";
|
|
445
|
+
readonly 'drawing.cursorMenu': "Cursor menu";
|
|
446
|
+
readonly 'drawing.cursorCross': "Cross";
|
|
447
|
+
readonly 'drawing.cursorDot': "Dot";
|
|
448
|
+
readonly 'drawing.cursorArrow': "Arrow";
|
|
449
|
+
readonly 'drawing.cursorEraser': "Eraser";
|
|
450
|
+
readonly 'drawing.measure': "Measure";
|
|
451
|
+
readonly 'drawing.zoomIn': "Zoom in";
|
|
452
|
+
readonly 'drawing.magnet': "Magnet";
|
|
453
|
+
readonly 'drawing.magnetMenu': "Magnet menu";
|
|
454
|
+
readonly 'drawing.magnetWeak': "Weak magnet";
|
|
455
|
+
readonly 'drawing.magnetStrong': "Strong magnet";
|
|
456
|
+
readonly 'drawing.stayInDrawingMode': "Stay in drawing mode";
|
|
457
|
+
readonly 'drawing.lockAll': "Lock all drawings";
|
|
458
|
+
readonly 'drawing.unlockAll': "Unlock all drawings";
|
|
459
|
+
readonly 'drawing.hideMenu': "Hide menu";
|
|
460
|
+
readonly 'drawing.hideDrawings': "Hide drawings";
|
|
461
|
+
readonly 'drawing.showDrawings': "Show drawings";
|
|
462
|
+
readonly 'drawing.hideIndicators': "Hide indicators";
|
|
463
|
+
readonly 'drawing.showIndicators': "Show indicators";
|
|
464
|
+
readonly 'drawing.hideAll': "Hide all";
|
|
465
|
+
readonly 'drawing.showAll': "Show all";
|
|
466
|
+
readonly 'drawing.syncLabel': "Sync drawings across the layout";
|
|
467
|
+
readonly 'drawing.syncOnHelp': "New drawings are replicated to all charts in the layout and shown when the same ticker is selected";
|
|
468
|
+
readonly 'drawing.syncOffHelp': "New drawings stay on the chart that drew them";
|
|
469
|
+
readonly 'drawing.removeMenu': "Remove menu";
|
|
470
|
+
readonly 'drawing.removeDrawings': "Remove drawings";
|
|
471
|
+
readonly 'drawing.countDrawings': {
|
|
472
|
+
readonly one: "{count} drawing";
|
|
473
|
+
readonly other: "{count} drawings";
|
|
474
|
+
};
|
|
475
|
+
readonly 'drawing.countIndicators': {
|
|
476
|
+
readonly one: "{count} indicator";
|
|
477
|
+
readonly other: "{count} indicators";
|
|
478
|
+
};
|
|
479
|
+
readonly 'drawing.removeItems': "Remove {items}";
|
|
480
|
+
readonly 'drawing.removeBoth': "Remove {drawings} & {indicators}";
|
|
481
|
+
readonly 'drawing.nothingToRemove': "Nothing to remove";
|
|
482
|
+
readonly 'drawing.alwaysRemoveLocked': "Always remove locked drawings";
|
|
483
|
+
readonly 'drawing.favTools': "Favorite drawing tools";
|
|
484
|
+
readonly 'drawing.favToolsBar': "Favorite drawing tools toolbar";
|
|
485
|
+
readonly 'drawing.favAdd': "Add {tool} to favorites";
|
|
486
|
+
readonly 'drawing.favRemove': "Remove {tool} from favorites";
|
|
487
|
+
readonly 'drawing.moveToolbar': "Move toolbar";
|
|
488
|
+
readonly 'drawing.moveFavoritesToolbar': "Move favorites toolbar";
|
|
489
|
+
readonly 'drawing.settingsBar': "Selected drawing";
|
|
490
|
+
readonly 'drawing.templates': "Templates";
|
|
491
|
+
readonly 'drawing.drawingTemplates': "Drawing templates";
|
|
492
|
+
readonly 'drawing.saveTemplateAs': "Save drawing template as...";
|
|
493
|
+
readonly 'drawing.applyDefaultTemplate': "Apply default drawing template";
|
|
494
|
+
readonly 'drawing.removeTemplateNamed': "Remove template {name}";
|
|
495
|
+
readonly 'drawing.remove': "Remove";
|
|
496
|
+
readonly 'drawing.addRowShort': "+ Row";
|
|
497
|
+
readonly 'drawing.addColumnShort': "+ Col";
|
|
498
|
+
readonly 'drawing.drawingColor': "Drawing color";
|
|
499
|
+
readonly 'drawing.backgroundColor': "Background color";
|
|
500
|
+
readonly 'drawing.thickness': "Thickness";
|
|
501
|
+
readonly 'drawing.lineThickness': "Line thickness";
|
|
502
|
+
readonly 'drawing.thicknessValue': "Thickness {n}px";
|
|
503
|
+
readonly 'drawing.lineStyle': "Line style";
|
|
504
|
+
readonly 'drawing.lineStyleValue': "Line style {name}";
|
|
505
|
+
readonly 'drawing.lineSolid': "Line";
|
|
506
|
+
readonly 'drawing.lineDashed': "Dashed line";
|
|
507
|
+
readonly 'drawing.lineDotted': "Dotted line";
|
|
508
|
+
readonly 'drawing.settings': "Settings";
|
|
509
|
+
readonly 'drawing.drawingSettings': "Drawing settings";
|
|
510
|
+
readonly 'drawing.lock': "Lock";
|
|
511
|
+
readonly 'drawing.unlock': "Unlock";
|
|
512
|
+
readonly 'drawing.lockDrawing': "Lock drawing";
|
|
513
|
+
readonly 'drawing.unlockDrawing': "Unlock drawing";
|
|
514
|
+
readonly 'drawing.deleteDrawing': "Delete drawing";
|
|
515
|
+
readonly 'drawing.more': "More";
|
|
516
|
+
readonly 'drawing.moreActions': "More drawing actions";
|
|
517
|
+
readonly 'drawing.visualOrder': "Visual order";
|
|
518
|
+
readonly 'drawing.visibilityOnIntervals': "Visibility on intervals";
|
|
519
|
+
readonly 'drawing.clone': "Clone";
|
|
520
|
+
readonly 'drawing.copy': "Copy";
|
|
521
|
+
readonly 'drawing.modifierControl': "Ctrl";
|
|
522
|
+
readonly 'drawing.modifierCommand': "Cmd";
|
|
523
|
+
readonly 'drawing.hintClone': "{modifier} + Drag";
|
|
524
|
+
readonly 'drawing.hintCopy': "{modifier} + C";
|
|
525
|
+
readonly 'drawing.hintPaste': "{modifier} + V";
|
|
526
|
+
readonly 'drawing.deleteWithKey': "Delete (Del)";
|
|
527
|
+
readonly 'drawing.statusDrawingsHidden': "Drawings hidden";
|
|
528
|
+
readonly 'drawing.statusDrawingsShown': "Drawings shown";
|
|
529
|
+
readonly 'drawing.statusIndicatorsHidden': "Indicators hidden";
|
|
530
|
+
readonly 'drawing.statusIndicatorsShown': "Indicators shown";
|
|
531
|
+
readonly 'drawing.statusAllHidden': "Drawings and indicators hidden";
|
|
532
|
+
readonly 'drawing.statusAllShown': "Drawings and indicators shown";
|
|
533
|
+
readonly 'drawing.statusAllLocked': "All drawings locked";
|
|
534
|
+
readonly 'drawing.statusAllUnlocked': "All drawings unlocked";
|
|
535
|
+
readonly 'drawing.hide': "Hide";
|
|
536
|
+
readonly 'drawing.bringToFront': "Bring to front";
|
|
537
|
+
readonly 'drawing.sendToBack': "Send to back";
|
|
538
|
+
readonly 'drawing.bringForward': "Bring forward";
|
|
539
|
+
readonly 'drawing.sendBackward': "Send backward";
|
|
540
|
+
readonly 'drawing.visCurrentAndAbove': "Current interval and above";
|
|
541
|
+
readonly 'drawing.visCurrentAndBelow': "Current interval and below";
|
|
542
|
+
readonly 'drawing.visCurrentOnly': "Current interval only";
|
|
543
|
+
readonly 'drawing.visAll': "All intervals";
|
|
544
|
+
readonly 'drawing.saveTemplate': "Save drawing template";
|
|
545
|
+
readonly 'drawing.templateName': "Template name";
|
|
546
|
+
readonly 'drawing.save': "Save";
|
|
547
|
+
readonly 'drawing.deleteTemplateTitle': "Delete this template?";
|
|
548
|
+
readonly 'drawing.deleteTemplateBody': "Doing this will permanently delete your \"{name}\" drawing template.";
|
|
549
|
+
readonly 'drawing.settingsTitle': "{tool} settings";
|
|
550
|
+
readonly 'drawing.tabInputs': "Inputs";
|
|
551
|
+
readonly 'drawing.tabStyle': "Style";
|
|
552
|
+
readonly 'drawing.tabText': "Text";
|
|
553
|
+
readonly 'drawing.tabTable': "Table";
|
|
554
|
+
readonly 'drawing.tabCoordinates': "Coordinates";
|
|
555
|
+
readonly 'drawing.tabVisibility': "Visibility";
|
|
556
|
+
readonly 'drawing.template': "Template";
|
|
557
|
+
readonly 'drawing.saveAs': "Save as...";
|
|
558
|
+
readonly 'drawing.applyDefaults': "Apply defaults";
|
|
559
|
+
readonly 'drawing.cancel': "Cancel";
|
|
560
|
+
readonly 'drawing.ok': "Ok";
|
|
561
|
+
readonly 'drawing.delete': "Delete";
|
|
562
|
+
readonly 'drawing.close': "Close";
|
|
563
|
+
readonly 'drawing.color': "Color";
|
|
564
|
+
readonly 'drawing.rowLine': "Line";
|
|
565
|
+
readonly 'drawing.background': "Background";
|
|
566
|
+
readonly 'drawing.border': "Border";
|
|
567
|
+
readonly 'drawing.profitColor': "Target zone color";
|
|
568
|
+
readonly 'drawing.stopColor': "Stop zone color";
|
|
569
|
+
readonly 'drawing.textColor': "Text color";
|
|
570
|
+
readonly 'drawing.fontSize': "Font size";
|
|
571
|
+
readonly 'drawing.size': "Size";
|
|
572
|
+
readonly 'drawing.width': "Width";
|
|
573
|
+
readonly 'drawing.opacity': "Opacity";
|
|
574
|
+
readonly 'drawing.transparency': "Transparency";
|
|
575
|
+
readonly 'drawing.label': "Label";
|
|
576
|
+
readonly 'drawing.labels': "Labels";
|
|
577
|
+
readonly 'drawing.left': "Left";
|
|
578
|
+
readonly 'drawing.center': "Center";
|
|
579
|
+
readonly 'drawing.right': "Right";
|
|
580
|
+
readonly 'drawing.up': "Up";
|
|
581
|
+
readonly 'drawing.down': "Down";
|
|
582
|
+
readonly 'drawing.rowVisible': "{name} visible";
|
|
583
|
+
readonly 'drawing.leftEnd': "Left end";
|
|
584
|
+
readonly 'drawing.rightEnd': "Right end";
|
|
585
|
+
readonly 'drawing.lineEndNormal': "Normal";
|
|
586
|
+
readonly 'drawing.lineEndArrow': "Arrow";
|
|
587
|
+
readonly 'drawing.increase': "Increase";
|
|
588
|
+
readonly 'drawing.decrease': "Decrease";
|
|
589
|
+
readonly 'drawing.rangeFrom': "From";
|
|
590
|
+
readonly 'drawing.rangeTo': "To";
|
|
591
|
+
readonly 'drawing.pickColor': "Pick a color";
|
|
592
|
+
readonly 'drawing.extend': "Extend";
|
|
593
|
+
readonly 'drawing.extendNone': "Don't extend";
|
|
594
|
+
readonly 'drawing.extendLeft': "Extend left";
|
|
595
|
+
readonly 'drawing.extendRight': "Extend right";
|
|
596
|
+
readonly 'drawing.extendBoth': "Extend both";
|
|
597
|
+
readonly 'drawing.extendLines': "Extend lines";
|
|
598
|
+
readonly 'drawing.middlePoint': "Middle point";
|
|
599
|
+
readonly 'drawing.middleLine': "Middle line";
|
|
600
|
+
readonly 'drawing.priceLabel': "Price label";
|
|
601
|
+
readonly 'drawing.priceLabels': "Price labels";
|
|
602
|
+
readonly 'drawing.timeLabel': "Time label";
|
|
603
|
+
readonly 'drawing.rowStyle': "Style";
|
|
604
|
+
readonly 'drawing.variantOriginal': "Original";
|
|
605
|
+
readonly 'drawing.variantSchiff': "Schiff";
|
|
606
|
+
readonly 'drawing.variantModifiedSchiff': "Modified Schiff";
|
|
607
|
+
readonly 'drawing.variantInside': "Inside";
|
|
608
|
+
readonly 'drawing.sectionStats': "Stats";
|
|
609
|
+
readonly 'drawing.priceChange': "Price change";
|
|
610
|
+
readonly 'drawing.percentChange': "Percent change";
|
|
611
|
+
readonly 'drawing.bars': "Bars";
|
|
612
|
+
readonly 'drawing.dateTimeRange': "Date/time range";
|
|
613
|
+
readonly 'drawing.volume': "Volume";
|
|
614
|
+
readonly 'drawing.sectionInfo': "Info";
|
|
615
|
+
readonly 'drawing.priceRange': "Price range";
|
|
616
|
+
readonly 'drawing.barsRange': "Bars range";
|
|
617
|
+
readonly 'drawing.angle': "Angle";
|
|
618
|
+
readonly 'drawing.statsPosition': "Stats position";
|
|
619
|
+
readonly 'drawing.direction': "Direction";
|
|
620
|
+
readonly 'drawing.prices': "Prices";
|
|
621
|
+
readonly 'drawing.levels': "Levels";
|
|
622
|
+
readonly 'drawing.reverse': "Reverse";
|
|
623
|
+
readonly 'drawing.fullCircles': "Full circles";
|
|
624
|
+
readonly 'drawing.coeffsAsPercents': "Coeffs as percents";
|
|
625
|
+
readonly 'drawing.glyph': "Glyph";
|
|
626
|
+
readonly 'drawing.image': "Image";
|
|
627
|
+
readonly 'drawing.replaceEllipsis': "Replace...";
|
|
628
|
+
readonly 'drawing.chooseEllipsis': "Choose...";
|
|
629
|
+
readonly 'drawing.link': "Link";
|
|
630
|
+
readonly 'drawing.rowsLayout': "Rows layout";
|
|
631
|
+
readonly 'drawing.rowsByNumber': "Number of rows";
|
|
632
|
+
readonly 'drawing.ticksPerRow': "Ticks per row";
|
|
633
|
+
readonly 'drawing.rowSize': "Row size";
|
|
634
|
+
readonly 'drawing.upDown': "Up/Down";
|
|
635
|
+
readonly 'drawing.total': "Total";
|
|
636
|
+
readonly 'drawing.delta': "Delta";
|
|
637
|
+
readonly 'drawing.valueAreaVolume': "Value area volume";
|
|
638
|
+
readonly 'drawing.widthPercent': "Width %";
|
|
639
|
+
readonly 'drawing.placement': "Placement";
|
|
640
|
+
readonly 'drawing.upDownVolume': "Up/Down volume";
|
|
641
|
+
readonly 'drawing.valueAreaUpDown': "Value area up/down";
|
|
642
|
+
readonly 'drawing.pointOfControl': "Point of control";
|
|
643
|
+
readonly 'drawing.valueAreaHigh': "Value area high";
|
|
644
|
+
readonly 'drawing.valueAreaLow': "Value area low";
|
|
645
|
+
readonly 'drawing.developingPoc': "Developing PoC";
|
|
646
|
+
readonly 'drawing.developingVa': "Developing VA";
|
|
647
|
+
readonly 'drawing.source': "Source";
|
|
648
|
+
readonly 'drawing.mode': "Mode";
|
|
649
|
+
readonly 'drawing.modeLineOpen': "Line (Open)";
|
|
650
|
+
readonly 'drawing.modeLineHigh': "Line (High)";
|
|
651
|
+
readonly 'drawing.modeLineLow': "Line (Low)";
|
|
652
|
+
readonly 'drawing.modeLineClose': "Line (Close)";
|
|
653
|
+
readonly 'drawing.modeLineHl2': "Line (HL2)";
|
|
654
|
+
readonly 'drawing.mirrored': "Mirrored";
|
|
655
|
+
readonly 'drawing.flipped': "Flipped";
|
|
656
|
+
readonly 'drawing.target': "Target";
|
|
657
|
+
readonly 'drawing.success': "Success";
|
|
658
|
+
readonly 'drawing.failure': "Failure";
|
|
659
|
+
readonly 'drawing.avgHl': "Avg HL";
|
|
660
|
+
readonly 'drawing.variance': "Variance";
|
|
661
|
+
readonly 'drawing.body': "Body";
|
|
662
|
+
readonly 'drawing.borders': "Borders";
|
|
663
|
+
readonly 'drawing.drawBorders': "Draw borders";
|
|
664
|
+
readonly 'drawing.wick': "Wick";
|
|
665
|
+
readonly 'drawing.drawWicks': "Draw wicks";
|
|
666
|
+
readonly 'drawing.sectionDeviation': "Deviation";
|
|
667
|
+
readonly 'drawing.upper': "Upper";
|
|
668
|
+
readonly 'drawing.lower': "Lower";
|
|
669
|
+
readonly 'drawing.useUpperDeviation': "Use upper deviation";
|
|
670
|
+
readonly 'drawing.useLowerDeviation': "Use lower deviation";
|
|
671
|
+
readonly 'drawing.risk': "Risk";
|
|
672
|
+
readonly 'drawing.accountSize': "Account size";
|
|
673
|
+
readonly 'drawing.lotSize': "Lot size";
|
|
674
|
+
readonly 'drawing.leverage': "Leverage";
|
|
675
|
+
readonly 'drawing.compactStatsMode': "Compact stats mode";
|
|
676
|
+
readonly 'drawing.levelVisible': "Level {value} visible";
|
|
677
|
+
readonly 'drawing.levelText': "Level {value} text";
|
|
678
|
+
readonly 'drawing.removeLevel': "Remove level {value}";
|
|
679
|
+
readonly 'drawing.addLevel': "Add level";
|
|
680
|
+
readonly 'drawing.weight': "Weight";
|
|
681
|
+
readonly 'drawing.bold': "Bold";
|
|
682
|
+
readonly 'drawing.italic': "Italic";
|
|
683
|
+
readonly 'drawing.addText': "Add text";
|
|
684
|
+
readonly 'drawing.alignment': "Alignment";
|
|
685
|
+
readonly 'drawing.textPlaceholder': "Text";
|
|
686
|
+
readonly 'drawing.textEditor': "Drawing text";
|
|
687
|
+
readonly 'drawing.headerRow': "Header row";
|
|
688
|
+
readonly 'drawing.tableCell': "Cell {row},{col}";
|
|
689
|
+
readonly 'drawing.addRow': "Add row";
|
|
690
|
+
readonly 'drawing.removeRow': "Remove row";
|
|
691
|
+
readonly 'drawing.addColumn': "Add column";
|
|
692
|
+
readonly 'drawing.removeColumn': "Remove column";
|
|
693
|
+
readonly 'drawing.coordBar': "#{n} (bar)";
|
|
694
|
+
readonly 'drawing.coordPriceBar': "#{n} (price, bar)";
|
|
695
|
+
readonly 'drawing.unitTicks': "Ticks";
|
|
696
|
+
readonly 'drawing.unitSeconds': "Seconds";
|
|
697
|
+
readonly 'drawing.unitMinutes': "Minutes";
|
|
698
|
+
readonly 'drawing.unitHours': "Hours";
|
|
699
|
+
readonly 'drawing.unitDays': "Days";
|
|
700
|
+
readonly 'drawing.unitWeeks': "Weeks";
|
|
701
|
+
readonly 'drawing.unitMonths': "Months";
|
|
702
|
+
readonly 'drawing.intervalPinnedNote': "A drawing stays on at least one interval, so it can always be reached again.";
|
|
703
|
+
readonly 'drawing.colorSwatch': "Color {hex}";
|
|
704
|
+
readonly 'drawing.customColor': "Custom color";
|
|
705
|
+
readonly 'drawing.saturationValue': "Saturation and brightness";
|
|
706
|
+
readonly 'drawing.hue': "Hue";
|
|
707
|
+
readonly 'drawing.hexColor': "Hex color";
|
|
708
|
+
readonly 'drawing.add': "Add";
|
|
709
|
+
readonly 'drawing.glyphPicker': "Glyph picker";
|
|
710
|
+
readonly 'drawing.kindEmojis': "Emojis";
|
|
711
|
+
readonly 'drawing.kindStickers': "Stickers";
|
|
712
|
+
readonly 'drawing.kindIcons': "Icons";
|
|
713
|
+
readonly 'drawing.recentlyUsed': "Recently used";
|
|
714
|
+
readonly 'drawing.recentGlyph': "Recent {glyph}";
|
|
715
|
+
readonly 'drawing.stickersSoon': "No sticker set is installed.";
|
|
716
|
+
readonly 'drawing.glyphCatSmileys': "Smileys & People";
|
|
717
|
+
readonly 'drawing.glyphCatNature': "Animals & Nature";
|
|
718
|
+
readonly 'drawing.glyphCatFood': "Food & Drink";
|
|
719
|
+
readonly 'drawing.glyphCatActivity': "Activity";
|
|
720
|
+
readonly 'drawing.glyphCatTravel': "Travel & Places";
|
|
721
|
+
readonly 'drawing.glyphCatObjects': "Objects";
|
|
722
|
+
readonly 'drawing.glyphCatSymbols': "Symbols";
|
|
723
|
+
readonly 'drawing.glyphCatFlags': "Flags";
|
|
724
|
+
readonly 'drawing.glyphCatIconArrows': "Arrows";
|
|
725
|
+
readonly 'drawing.glyphCatIconCurrency': "Currency";
|
|
726
|
+
readonly 'drawing.glyphCatIconGestures': "Gestures and smileys";
|
|
727
|
+
readonly 'drawing.glyphCatIconNature': "Nature";
|
|
728
|
+
readonly 'drawing.glyphCatIconSpecial': "Special";
|
|
729
|
+
readonly 'drawing.glyphCatIconSymbols': "Symbols and flags";
|
|
730
|
+
readonly 'drawing.imageReading': "Reading...";
|
|
731
|
+
readonly 'drawing.chooseImage': "Choose image";
|
|
732
|
+
readonly 'drawing.imageFormats': "JPG or PNG";
|
|
733
|
+
readonly 'drawing.imageMaxSize': "Max size 2MB";
|
|
734
|
+
readonly 'drawing.imageDimensions': "{width} x {height}";
|
|
735
|
+
readonly 'drawing.imageErrorType': "That file is not a JPG or PNG. Pick one of those two formats.";
|
|
736
|
+
readonly 'drawing.imageErrorSize': "That image is {size}. The limit is 2MB.";
|
|
737
|
+
readonly 'drawing.imageErrorRead': "That file could not be read. Try picking it again.";
|
|
738
|
+
readonly 'drawing.imageErrorDecode': "That image could not be opened. It may be damaged.";
|
|
739
|
+
readonly 'search.title': "Symbol search";
|
|
740
|
+
readonly 'search.compareTitle': "Compare symbols";
|
|
741
|
+
readonly 'search.changeSymbolTitle': "Change symbol";
|
|
742
|
+
readonly 'search.placeholder': "Search symbol";
|
|
743
|
+
readonly 'search.clear': "Clear";
|
|
744
|
+
readonly 'search.close': "Close";
|
|
745
|
+
readonly 'search.noMatches': "No symbols match your criteria";
|
|
746
|
+
readonly 'search.loadingMore': "Loading more";
|
|
747
|
+
readonly 'search.failed': "Search failed.";
|
|
748
|
+
readonly 'search.results': "Symbols";
|
|
749
|
+
readonly 'search.samePercent': "Same % scale";
|
|
750
|
+
readonly 'search.newScale': "New price scale";
|
|
751
|
+
readonly 'search.newPane': "New pane";
|
|
752
|
+
readonly 'search.added': "Added symbols";
|
|
753
|
+
readonly 'search.recent': "Recent symbols";
|
|
754
|
+
readonly 'search.addedMark': "{symbol} is on the chart. Click to remove.";
|
|
755
|
+
readonly 'search.compareEmpty': "No symbols here yet. Why not add some?";
|
|
756
|
+
readonly 'search.allClasses': "All";
|
|
757
|
+
readonly 'search.classFilter': "Asset class";
|
|
758
|
+
readonly 'search.opDivision': "Division";
|
|
759
|
+
readonly 'search.opSubtraction': "Subtraction";
|
|
760
|
+
readonly 'search.opAddition': "Addition";
|
|
761
|
+
readonly 'search.opMultiplication': "Multiplication";
|
|
762
|
+
readonly 'search.opExponentiation': "Exponentiation";
|
|
763
|
+
readonly 'search.opReciprocal': "Reciprocal";
|
|
764
|
+
readonly 'search.opsHide': "Hide spread operators";
|
|
765
|
+
readonly 'search.opsShow': "Show spread operators";
|
|
766
|
+
readonly 'search.ops': "Spread operators";
|
|
767
|
+
readonly 'status.title': "Market status";
|
|
768
|
+
readonly 'status.unknownTitle': "Session unknown";
|
|
769
|
+
readonly 'status.unknown': "This symbol's trading session has not resolved yet.";
|
|
770
|
+
readonly 'status.endOfDayTitle': "End of day";
|
|
771
|
+
readonly 'status.endOfDay': "Prices update once a day, after the session closes.";
|
|
772
|
+
readonly 'status.delayed': "Prices are delayed.";
|
|
773
|
+
readonly 'status.delayedPair': "{status} {delay}";
|
|
774
|
+
readonly 'status.continuousTitle': "Open 24/7";
|
|
775
|
+
readonly 'status.continuous': "This market trades around the clock and never closes.";
|
|
776
|
+
readonly 'status.open': "Market is open for regular trading.";
|
|
777
|
+
readonly 'status.openCloses': "Market is open for regular trading. Closes in {until}.";
|
|
778
|
+
readonly 'status.extended': "Market is open for extended-hours trading.";
|
|
779
|
+
readonly 'status.extendedRegular': "Market is open for extended-hours trading. Regular hours start in {until}.";
|
|
780
|
+
readonly 'status.extendedCloses': "Market is open for extended-hours trading. Closes in {until}.";
|
|
781
|
+
readonly 'status.pre': "Market is open for pre-market trading.";
|
|
782
|
+
readonly 'status.preRegular': "Market is open for pre-market trading. Regular hours start in {until}.";
|
|
783
|
+
readonly 'status.after': "Market is open for after-hours trading.";
|
|
784
|
+
readonly 'status.afterEnds': "Market is open for after-hours trading. Ends in {until}.";
|
|
785
|
+
readonly 'status.closed': "Market is closed.";
|
|
786
|
+
readonly 'status.closedPre': "Market is closed. Pre-market starts in {until}.";
|
|
787
|
+
readonly 'status.closedOpens': "Market is closed. Opens in {until}.";
|
|
788
|
+
readonly 'status.exchangeTimezone': "Exchange timezone: {zone}";
|
|
789
|
+
readonly 'status.durationDays': {
|
|
790
|
+
readonly one: "{count} day";
|
|
791
|
+
readonly other: "{count} days";
|
|
792
|
+
};
|
|
793
|
+
readonly 'status.durationHours': {
|
|
794
|
+
readonly one: "{count} hour";
|
|
795
|
+
readonly other: "{count} hours";
|
|
796
|
+
};
|
|
797
|
+
readonly 'status.durationMinutes': {
|
|
798
|
+
readonly one: "{count} minute";
|
|
799
|
+
readonly other: "{count} minutes";
|
|
800
|
+
};
|
|
801
|
+
readonly 'status.durationPair': "{major} {minor}";
|
|
802
|
+
readonly 'range.oneDay': "1 Day";
|
|
803
|
+
readonly 'range.fiveDays': "5 Days";
|
|
804
|
+
readonly 'range.oneMonth': "1 Month";
|
|
805
|
+
readonly 'range.threeMonths': "3 Months";
|
|
806
|
+
readonly 'range.sixMonths': "6 Months";
|
|
807
|
+
readonly 'range.yearToDate': "Year to date";
|
|
808
|
+
readonly 'range.oneYear': "1 Year";
|
|
809
|
+
readonly 'range.fiveYears': "5 Years";
|
|
810
|
+
readonly 'range.all': "All data";
|
|
811
|
+
readonly 'range.tip': "{range} · {interval} bars";
|
|
812
|
+
readonly 'range.zoomIn': "Zoom in";
|
|
813
|
+
readonly 'range.zoomOut': "Zoom out";
|
|
814
|
+
readonly 'range.scrollLeft': "Scroll left";
|
|
815
|
+
readonly 'range.scrollRight': "Scroll right";
|
|
816
|
+
readonly 'range.reset': "Reset chart view";
|
|
817
|
+
readonly 'range.maximizeChart': "Maximize chart";
|
|
818
|
+
readonly 'range.restoreChart': "Restore chart";
|
|
819
|
+
readonly 'timezone.title': "Chart timezone";
|
|
820
|
+
readonly 'timezone.exchange': "Exchange";
|
|
821
|
+
readonly 'timeframe.title': "Timeframe";
|
|
822
|
+
readonly 'timeframe.all': "All timeframes";
|
|
823
|
+
readonly 'timeframe.unitTicks': "Ticks";
|
|
824
|
+
readonly 'timeframe.unitSeconds': "Seconds";
|
|
825
|
+
readonly 'timeframe.unitMinutes': "Minutes";
|
|
826
|
+
readonly 'timeframe.unitHours': "Hours";
|
|
827
|
+
readonly 'timeframe.unitDays': "Days";
|
|
828
|
+
readonly 'timeframe.unitWeeks': "Weeks";
|
|
829
|
+
readonly 'timeframe.unitMonths': "Months";
|
|
830
|
+
readonly 'timeframe.countTicks': {
|
|
831
|
+
readonly one: "{count} Tick";
|
|
832
|
+
readonly other: "{count} Ticks";
|
|
833
|
+
};
|
|
834
|
+
readonly 'timeframe.countSeconds': {
|
|
835
|
+
readonly one: "{count} Second";
|
|
836
|
+
readonly other: "{count} Seconds";
|
|
837
|
+
};
|
|
838
|
+
readonly 'timeframe.countMinutes': {
|
|
839
|
+
readonly one: "{count} Minute";
|
|
840
|
+
readonly other: "{count} Minutes";
|
|
841
|
+
};
|
|
842
|
+
readonly 'timeframe.countHours': {
|
|
843
|
+
readonly one: "{count} Hour";
|
|
844
|
+
readonly other: "{count} Hours";
|
|
845
|
+
};
|
|
846
|
+
readonly 'timeframe.countDays': {
|
|
847
|
+
readonly one: "{count} Day";
|
|
848
|
+
readonly other: "{count} Days";
|
|
849
|
+
};
|
|
850
|
+
readonly 'timeframe.countWeeks': {
|
|
851
|
+
readonly one: "{count} Week";
|
|
852
|
+
readonly other: "{count} Weeks";
|
|
853
|
+
};
|
|
854
|
+
readonly 'timeframe.countMonths': {
|
|
855
|
+
readonly one: "{count} Month";
|
|
856
|
+
readonly other: "{count} Months";
|
|
857
|
+
};
|
|
858
|
+
readonly 'timeframe.delete': "Delete {timeframe}";
|
|
859
|
+
readonly 'timeframe.save': "Save {timeframe}";
|
|
860
|
+
readonly 'timeframe.exists': "{timeframe} already exists";
|
|
861
|
+
readonly 'timeframe.custom': "Custom timeframe";
|
|
862
|
+
readonly 'timeframe.customCount': "Custom timeframe count";
|
|
863
|
+
readonly 'timeframe.customUnit': "Custom timeframe unit";
|
|
864
|
+
readonly 'timeframe.addCustom': "Add custom timeframe";
|
|
865
|
+
readonly 'timeframe.increment': "Increment";
|
|
866
|
+
readonly 'timeframe.decrement': "Decrement";
|
|
867
|
+
readonly 'indicator.smaName': "Simple Moving Average";
|
|
868
|
+
readonly 'indicator.smaDescription': "Smoothed average over a fixed window";
|
|
869
|
+
readonly 'indicator.emaName': "Exponential Moving Average";
|
|
870
|
+
readonly 'indicator.emaDescription': "Recency-weighted moving average";
|
|
871
|
+
readonly 'indicator.hmaName': "Hull Moving Average";
|
|
872
|
+
readonly 'indicator.hmaDescription': "Low-lag weighted moving average";
|
|
873
|
+
readonly 'indicator.vwmaName': "Volume Weighted MA";
|
|
874
|
+
readonly 'indicator.vwmaDescription': "Moving average weighted by volume";
|
|
875
|
+
readonly 'indicator.bollingerName': "Bollinger Bands";
|
|
876
|
+
readonly 'indicator.bollingerDescription': "SMA envelope at two standard deviations";
|
|
877
|
+
readonly 'indicator.donchianName': "Donchian Channels";
|
|
878
|
+
readonly 'indicator.donchianDescription': "Rolling highest-high and lowest-low channel";
|
|
879
|
+
readonly 'indicator.keltnerName': "Keltner Channels";
|
|
880
|
+
readonly 'indicator.keltnerDescription': "EMA midline with ATR-scaled bands";
|
|
881
|
+
readonly 'indicator.supertrendName': "Supertrend";
|
|
882
|
+
readonly 'indicator.supertrendDescription': "ATR trend band that flips with direction";
|
|
883
|
+
readonly 'indicator.psarName': "Parabolic SAR";
|
|
884
|
+
readonly 'indicator.psarDescription': "Stop-and-reverse trailing dots";
|
|
885
|
+
readonly 'indicator.rsiName': "Relative Strength Index";
|
|
886
|
+
readonly 'indicator.rsiDescription': "Momentum oscillator from 0 to 100";
|
|
887
|
+
readonly 'indicator.macdName': "MACD";
|
|
888
|
+
readonly 'indicator.macdDescription': "Moving Average Convergence Divergence";
|
|
889
|
+
readonly 'indicator.stochasticName': "Stochastic Oscillator";
|
|
890
|
+
readonly 'indicator.stochasticDescription': "%K and %D momentum from 0 to 100";
|
|
891
|
+
readonly 'indicator.stochrsiName': "Stochastic RSI";
|
|
892
|
+
readonly 'indicator.stochrsiDescription': "Stochastic applied to the RSI series";
|
|
893
|
+
readonly 'indicator.adxName': "Average Directional Index";
|
|
894
|
+
readonly 'indicator.adxDescription': "Trend strength with +DI and -DI";
|
|
895
|
+
readonly 'indicator.atrName': "Average True Range";
|
|
896
|
+
readonly 'indicator.atrDescription': "Volatility: Wilder's true-range average";
|
|
897
|
+
readonly 'indicator.cciName': "Commodity Channel Index";
|
|
898
|
+
readonly 'indicator.cciDescription': "Deviation from the typical-price average";
|
|
899
|
+
readonly 'indicator.williamsName': "Williams %R";
|
|
900
|
+
readonly 'indicator.williamsDescription': "Overbought and oversold momentum from -100 to 0";
|
|
901
|
+
readonly 'indicator.rocName': "Rate of Change";
|
|
902
|
+
readonly 'indicator.rocDescription': "Percent change over the period";
|
|
903
|
+
readonly 'indicator.momentumName': "Momentum";
|
|
904
|
+
readonly 'indicator.momentumDescription': "Price difference over the period";
|
|
905
|
+
readonly 'indicator.volumeName': "Volume";
|
|
906
|
+
readonly 'indicator.volumeDescription': "Per-bar traded volume histogram";
|
|
907
|
+
readonly 'indicator.vwapName': "Volume Weighted Avg Price";
|
|
908
|
+
readonly 'indicator.vwapDescription': "Cumulative volume-weighted average price";
|
|
909
|
+
readonly 'indicator.obvName': "On-Balance Volume";
|
|
910
|
+
readonly 'indicator.obvDescription': "Cumulative volume by close direction";
|
|
911
|
+
readonly 'indicator.mfiName': "Money Flow Index";
|
|
912
|
+
readonly 'indicator.mfiDescription': "Volume-weighted RSI from 0 to 100";
|
|
913
|
+
readonly 'host.noVolume': "No volume from this feed";
|
|
914
|
+
readonly 'host.saveConflict': "Saved elsewhere since you opened it. Load the newer version before saving.";
|
|
915
|
+
readonly 'host.saveNotFound': "This was deleted elsewhere. Save it again as new.";
|
|
916
|
+
readonly 'host.loadInvalid': "This could not be opened. Nothing on screen changed.";
|
|
917
|
+
readonly 'host.loadUnavailable': "Your saved work could not be reached. Nothing on screen changed.";
|
|
918
|
+
readonly 'host.loadNotRestored': "This could not be opened, and what was on screen could not be put back. The chart is not saving until you open a saved chart or layout. Save a copy first to keep what is on screen.";
|
|
919
|
+
readonly 'host.notSaving': "The chart is not saving. Open a saved chart or layout to start from a known state. Saving a copy keeps what is on screen, but the chart still will not save.";
|
|
920
|
+
readonly 'layout.s': "Single chart";
|
|
921
|
+
readonly 'layout.2h': "2 columns";
|
|
922
|
+
readonly 'layout.2v': "2 rows";
|
|
923
|
+
readonly 'layout.3h': "3 columns";
|
|
924
|
+
readonly 'layout.3v': "3 rows";
|
|
925
|
+
readonly 'layout.3s': "Large left, 2 stacked right";
|
|
926
|
+
readonly 'layout.3r': "2 stacked left, large right";
|
|
927
|
+
readonly 'layout.2_1': "2 above, 1 below";
|
|
928
|
+
readonly 'layout.1_2': "1 above, 2 below";
|
|
929
|
+
readonly 'layout.4': "2 × 2 grid";
|
|
930
|
+
readonly 'layout.4v': "4 rows";
|
|
931
|
+
readonly 'layout.4h': "4 columns";
|
|
932
|
+
readonly 'layout.4s': "Large left, 3 stacked right";
|
|
933
|
+
readonly 'layout.4s_l': "3 stacked left, large right";
|
|
934
|
+
readonly 'layout.1_3': "1 above, 3 below";
|
|
935
|
+
readonly 'layout.3_1': "3 above, 1 below";
|
|
936
|
+
readonly 'layout.2_2_l': "2 columns, 2 stacked right";
|
|
937
|
+
readonly 'layout.2_2_r': "2 stacked left, 2 columns";
|
|
938
|
+
readonly 'layout.2_2': "2 above, 2 full-width rows below";
|
|
939
|
+
readonly 'layout.1_4': "1 above, 4 below";
|
|
940
|
+
readonly 'layout.5h': "5 columns";
|
|
941
|
+
readonly 'layout.5v': "5 rows";
|
|
942
|
+
readonly 'layout.5s': "Large left, 4 stacked right";
|
|
943
|
+
readonly 'layout.5s_l': "4 stacked left, large right";
|
|
944
|
+
readonly 'layout.2_3': "2 above, 3 below";
|
|
945
|
+
readonly 'layout.3_2': "3 above, 2 below";
|
|
946
|
+
readonly 'layout.4_1': "4 above, 1 below";
|
|
947
|
+
readonly 'layout.2_3_l': "2 columns, 3 stacked right";
|
|
948
|
+
readonly 'layout.2_3_r': "3 stacked left, 2 columns";
|
|
949
|
+
readonly 'layout.6': "3 × 2 grid";
|
|
950
|
+
readonly 'layout.6h': "6 columns";
|
|
951
|
+
readonly 'layout.6v': "6 rows";
|
|
952
|
+
readonly 'layout.6c': "2 × 3 grid";
|
|
953
|
+
readonly 'layout.2_4': "2 above, 4 below";
|
|
954
|
+
readonly 'layout.4_2': "4 above, 2 below";
|
|
955
|
+
readonly 'layout.4_3': "4 above, 3 below";
|
|
956
|
+
readonly 'layout.7h': "7 columns";
|
|
957
|
+
readonly 'layout.7s': "Large left, 6 stacked right";
|
|
958
|
+
readonly 'layout.8': "4 × 2 grid";
|
|
959
|
+
readonly 'layout.8c': "2 × 4 grid";
|
|
960
|
+
readonly 'layout.8h': "8 columns";
|
|
961
|
+
readonly 'layout.8v': "8 rows";
|
|
962
|
+
readonly 'layout.9s': "3 × 3 grid";
|
|
963
|
+
readonly 'layout.5_4': "5 above, 4 below";
|
|
964
|
+
readonly 'layout.9h': "9 columns";
|
|
965
|
+
readonly 'layout.9v': "9 rows";
|
|
966
|
+
readonly 'layout.10c5': "5 × 2 grid";
|
|
967
|
+
readonly 'layout.10h': "10 columns";
|
|
968
|
+
readonly 'layout.10v': "10 rows";
|
|
969
|
+
readonly 'layout.12c6': "6 × 2 grid";
|
|
970
|
+
readonly 'layout.12c4': "4 × 3 grid";
|
|
971
|
+
readonly 'layout.12h': "12 columns";
|
|
972
|
+
readonly 'layout.14c7': "7 × 2 grid";
|
|
973
|
+
readonly 'layout.16c8': "8 × 2 grid";
|
|
974
|
+
readonly 'layout.16c4': "4 × 4 grid";
|
|
975
|
+
readonly 'layouts.setup': "Layout setup";
|
|
976
|
+
readonly 'layouts.arrangement': "Chart arrangement";
|
|
977
|
+
readonly 'layouts.syncInLayout': "Sync in layout";
|
|
978
|
+
readonly 'layouts.syncSymbol': "Symbol";
|
|
979
|
+
readonly 'layouts.syncInterval': "Interval";
|
|
980
|
+
readonly 'layouts.syncCrosshair': "Crosshair";
|
|
981
|
+
readonly 'layouts.syncTime': "Time";
|
|
982
|
+
readonly 'layouts.syncDateRange': "Date range";
|
|
983
|
+
readonly 'layouts.syncSymbolTip': "Symbol changes on all charts within the layout";
|
|
984
|
+
readonly 'layouts.syncIntervalTip': "Interval changes on all charts within the layout";
|
|
985
|
+
readonly 'layouts.syncCrosshairTip': "Crosshair is synced across all charts within the layout";
|
|
986
|
+
readonly 'layouts.syncTimeTip': "When a chart is clicked, all charts within the layout display the same point of time";
|
|
987
|
+
readonly 'layouts.syncDateRangeTip': "Date range changes on all charts within the layout";
|
|
988
|
+
readonly 'layouts.syncSymbolToggle': "Sync symbol";
|
|
989
|
+
readonly 'layouts.syncIntervalToggle': "Sync interval";
|
|
990
|
+
readonly 'layouts.syncCrosshairToggle': "Sync crosshair";
|
|
991
|
+
readonly 'layouts.syncTimeToggle': "Sync time";
|
|
992
|
+
readonly 'layouts.syncDateRangeToggle': "Sync date range";
|
|
993
|
+
readonly 'layouts.unnamed': "Unnamed";
|
|
994
|
+
readonly 'layouts.unsavedChanges': "Unsaved changes";
|
|
995
|
+
readonly 'layouts.allSaved': "All changes saved";
|
|
996
|
+
readonly 'layouts.notSaving': "Not saving until this is restored";
|
|
997
|
+
readonly 'layouts.manage': "Manage layouts";
|
|
998
|
+
readonly 'layouts.saveLayout': "Save layout";
|
|
999
|
+
readonly 'layouts.hintSave': "{modifier} + S";
|
|
1000
|
+
readonly 'layouts.hintOpen': "Dot";
|
|
1001
|
+
readonly 'layouts.save': "Save";
|
|
1002
|
+
readonly 'layouts.autosave': "Autosave";
|
|
1003
|
+
readonly 'layouts.rename': "Rename";
|
|
1004
|
+
readonly 'layouts.copyOfName': "{name} copy";
|
|
1005
|
+
readonly 'layouts.saveNewTitle': "Save New Chart Layout";
|
|
1006
|
+
readonly 'layouts.saveNewLabel': "Enter a new chart layout name:";
|
|
1007
|
+
readonly 'layouts.copyTitle': "Make copy of chart layout";
|
|
1008
|
+
readonly 'layouts.renameTitle': "Rename chart layout";
|
|
1009
|
+
readonly 'layouts.createTitle': "Create layout";
|
|
1010
|
+
readonly 'layouts.newLayoutName': "New layout name";
|
|
1011
|
+
readonly 'layouts.createPlaceholder': "My layout";
|
|
1012
|
+
readonly 'layouts.create': "Create";
|
|
1013
|
+
readonly 'layouts.makeCopyRow': "Make a copy…";
|
|
1014
|
+
readonly 'layouts.renameRow': "Rename…";
|
|
1015
|
+
readonly 'layouts.downloadDataRow': "Download chart data";
|
|
1016
|
+
readonly 'layouts.createNewRow': "Create new layout…";
|
|
1017
|
+
readonly 'layouts.recentlyUsed': "Recently used";
|
|
1018
|
+
readonly 'layouts.loading': "Loading";
|
|
1019
|
+
readonly 'layouts.emptyNone': "No saved layouts yet.";
|
|
1020
|
+
readonly 'layouts.openLayoutRow': "Open layout…";
|
|
1021
|
+
readonly 'layouts.listingFacts': "{symbol}, {interval}";
|
|
1022
|
+
readonly 'layouts.listingDated': "{facts} ({date})";
|
|
1023
|
+
readonly 'layouts.dialogTitle': "Layouts";
|
|
1024
|
+
readonly 'layouts.search': "Search";
|
|
1025
|
+
readonly 'layouts.columnName': "Layout name";
|
|
1026
|
+
readonly 'layouts.sortBy': "Sort by layout name, date changed";
|
|
1027
|
+
readonly 'layouts.sortNameAsc': "Layout name (A to Z)";
|
|
1028
|
+
readonly 'layouts.sortNameDesc': "Layout name (Z to A)";
|
|
1029
|
+
readonly 'layouts.sortModifiedAsc': "Date modified (oldest first)";
|
|
1030
|
+
readonly 'layouts.sortModifiedDesc': "Date modified (newest first)";
|
|
1031
|
+
readonly 'layouts.favorite': "Add to favorites";
|
|
1032
|
+
readonly 'layouts.unfavorite': "Remove from favorites";
|
|
1033
|
+
readonly 'layouts.noMatches': "Nothing matches.";
|
|
1034
|
+
readonly 'layouts.delete': "Delete";
|
|
1035
|
+
readonly 'layouts.deleteNamed': "Delete {name}";
|
|
1036
|
+
readonly 'layouts.deleteConfirm': "Delete this chart layout?";
|
|
1037
|
+
readonly 'layouts.deleteConfirmBody': "Doing this will permanently delete your \"{name}\" layout.";
|
|
1038
|
+
readonly 'layouts.cancel': "Cancel";
|
|
1039
|
+
readonly 'layouts.close': "Close";
|
|
1040
|
+
readonly 'layouts.errList': "Could not load your saved layouts.";
|
|
1041
|
+
readonly 'session.pre': "Pre-market";
|
|
1042
|
+
readonly 'session.open': "Market open";
|
|
1043
|
+
readonly 'session.extended': "Extended hours";
|
|
1044
|
+
readonly 'session.after': "After-hours";
|
|
1045
|
+
readonly 'session.closed': "Market closed";
|
|
1046
|
+
readonly 'inputs.cancel': "Cancel";
|
|
1047
|
+
readonly 'inputs.apply': "Apply";
|
|
1048
|
+
readonly 'replay.watermark': "Replay";
|
|
1049
|
+
readonly 'replay.selectBar': "Select bar";
|
|
1050
|
+
readonly 'replay.selectDate': "Select date";
|
|
1051
|
+
readonly 'replay.selectStartingPoint': "Select starting point";
|
|
1052
|
+
readonly 'replay.startBar': "Bar";
|
|
1053
|
+
readonly 'replay.startDate': "Date…";
|
|
1054
|
+
readonly 'replay.startFirst': "First available date";
|
|
1055
|
+
readonly 'replay.startRandom': "Random bar";
|
|
1056
|
+
readonly 'replay.startDateField': "Replay start date";
|
|
1057
|
+
readonly 'replay.startTimeField': "Replay start time (UTC, optional)";
|
|
1058
|
+
readonly 'replay.dateMask': "YYYY-MM-DD";
|
|
1059
|
+
readonly 'replay.timeMask': "HH:MM";
|
|
1060
|
+
readonly 'replay.previousMonth': "Previous month";
|
|
1061
|
+
readonly 'replay.nextMonth': "Next month";
|
|
1062
|
+
readonly 'replay.cancel': "Cancel";
|
|
1063
|
+
readonly 'replay.select': "Select";
|
|
1064
|
+
readonly 'replay.weekdayMon': "Mo";
|
|
1065
|
+
readonly 'replay.weekdayTue': "Tu";
|
|
1066
|
+
readonly 'replay.weekdayWed': "We";
|
|
1067
|
+
readonly 'replay.weekdayThu': "Th";
|
|
1068
|
+
readonly 'replay.weekdayFri': "Fr";
|
|
1069
|
+
readonly 'replay.weekdaySat': "Sa";
|
|
1070
|
+
readonly 'replay.weekdaySun': "Su";
|
|
1071
|
+
readonly 'replay.stepBack': "Step back one bar";
|
|
1072
|
+
readonly 'replay.play': "Play";
|
|
1073
|
+
readonly 'replay.pause': "Pause";
|
|
1074
|
+
readonly 'replay.stepForward': "Step forward one bar";
|
|
1075
|
+
readonly 'replay.goLiveTitle': "Jump to the live edge";
|
|
1076
|
+
readonly 'replay.exit': "Exit replay";
|
|
1077
|
+
readonly 'replay.speed': "Replay speed";
|
|
1078
|
+
readonly 'replay.updatesPerSecond': {
|
|
1079
|
+
readonly one: "{count} update per second";
|
|
1080
|
+
readonly other: "{count} updates per second";
|
|
1081
|
+
};
|
|
1082
|
+
readonly 'replay.oneUpdatePerSeconds': {
|
|
1083
|
+
readonly one: "1 update per {count} second";
|
|
1084
|
+
readonly other: "1 update per {count} seconds";
|
|
1085
|
+
};
|
|
1086
|
+
readonly 'replay.interval': "Update interval";
|
|
1087
|
+
readonly 'replay.intervalHelp': "How much time each replay update advances. Finer than the chart interval, each bar forms from real finer bars.";
|
|
1088
|
+
readonly 'replay.intervalNone': "No finer interval for this chart interval";
|
|
1089
|
+
readonly 'replay.auto': "Auto";
|
|
1090
|
+
readonly 'replay.autoSelectInterval': "Auto select interval";
|
|
1091
|
+
readonly 'menu.resetView': "Reset chart view";
|
|
1092
|
+
readonly 'menu.copyPrice': "Copy price {price}";
|
|
1093
|
+
readonly 'menu.paste': "Paste";
|
|
1094
|
+
readonly 'menu.removeIndicators': {
|
|
1095
|
+
readonly one: "Remove {count} indicator";
|
|
1096
|
+
readonly other: "Remove {count} indicators";
|
|
1097
|
+
};
|
|
1098
|
+
readonly 'menu.removeDrawings': {
|
|
1099
|
+
readonly one: "Remove {count} drawing";
|
|
1100
|
+
readonly other: "Remove {count} drawings";
|
|
1101
|
+
};
|
|
1102
|
+
readonly 'menu.settings': "Settings…";
|
|
1103
|
+
readonly 'tool.trend_line': "Trend line";
|
|
1104
|
+
readonly 'tool.ray': "Ray";
|
|
1105
|
+
readonly 'tool.info_line': "Info line";
|
|
1106
|
+
readonly 'tool.extended': "Extended line";
|
|
1107
|
+
readonly 'tool.trend_angle': "Trend angle";
|
|
1108
|
+
readonly 'tool.horizontal_line': "Horizontal line";
|
|
1109
|
+
readonly 'tool.horizontal_ray': "Horizontal ray";
|
|
1110
|
+
readonly 'tool.vertical_line': "Vertical line";
|
|
1111
|
+
readonly 'tool.cross_line': "Cross line";
|
|
1112
|
+
readonly 'tool.arrow': "Arrow";
|
|
1113
|
+
readonly 'tool.rectangle': "Rectangle";
|
|
1114
|
+
readonly 'tool.rotated_rectangle': "Rotated rectangle";
|
|
1115
|
+
readonly 'tool.ellipse': "Ellipse";
|
|
1116
|
+
readonly 'tool.circle': "Circle";
|
|
1117
|
+
readonly 'tool.triangle': "Triangle";
|
|
1118
|
+
readonly 'tool.arc': "Arc";
|
|
1119
|
+
readonly 'tool.curve': "Curve";
|
|
1120
|
+
readonly 'tool.double_curve': "Double curve";
|
|
1121
|
+
readonly 'tool.regression_trend': "Regression trend";
|
|
1122
|
+
readonly 'tool.parallel_channel': "Parallel channel";
|
|
1123
|
+
readonly 'tool.flat_top_bottom': "Flat top/bottom";
|
|
1124
|
+
readonly 'tool.disjoint_channel': "Disjoint channel";
|
|
1125
|
+
readonly 'tool.fib_retracement': "Fib retracement";
|
|
1126
|
+
readonly 'tool.fib_trend_ext': "Trend-based fib extension";
|
|
1127
|
+
readonly 'tool.fib_channel': "Fib channel";
|
|
1128
|
+
readonly 'tool.fib_timezone': "Fib time zone";
|
|
1129
|
+
readonly 'tool.fib_speed_resist_fan': "Fib speed resistance fan";
|
|
1130
|
+
readonly 'tool.fib_trend_time': "Trend-based fib time";
|
|
1131
|
+
readonly 'tool.fib_circles': "Fib circles";
|
|
1132
|
+
readonly 'tool.fib_spiral': "Fib spiral";
|
|
1133
|
+
readonly 'tool.fib_speed_resist_arcs': "Fib speed resistance arcs";
|
|
1134
|
+
readonly 'tool.fib_wedge': "Fib wedge";
|
|
1135
|
+
readonly 'tool.pitchfan': "Pitchfan";
|
|
1136
|
+
readonly 'tool.pitchfork': "Pitchfork";
|
|
1137
|
+
readonly 'tool.schiff_pitchfork': "Schiff pitchfork";
|
|
1138
|
+
readonly 'tool.schiff_pitchfork_modified': "Modified Schiff pitchfork";
|
|
1139
|
+
readonly 'tool.inside_pitchfork': "Inside pitchfork";
|
|
1140
|
+
readonly 'tool.gannbox': "Gann box";
|
|
1141
|
+
readonly 'tool.gannbox_square': "Gann square";
|
|
1142
|
+
readonly 'tool.gannbox_fixed': "Gann square fixed";
|
|
1143
|
+
readonly 'tool.gannbox_fan': "Gann fan";
|
|
1144
|
+
readonly 'tool.xabcd_pattern': "XABCD pattern";
|
|
1145
|
+
readonly 'tool.cypher_pattern': "Cypher pattern";
|
|
1146
|
+
readonly 'tool.abcd_pattern': "ABCD pattern";
|
|
1147
|
+
readonly 'tool.three_drives': "Three drives pattern";
|
|
1148
|
+
readonly 'tool.triangle_pattern': "Triangle pattern";
|
|
1149
|
+
readonly 'tool.head_and_shoulders': "Head and shoulders";
|
|
1150
|
+
readonly 'tool.elliott_impulse_wave': "Elliott impulse (12345)";
|
|
1151
|
+
readonly 'tool.elliott_correction': "Elliott correction (ABC)";
|
|
1152
|
+
readonly 'tool.elliott_triangle_wave': "Elliott triangle (ABCDE)";
|
|
1153
|
+
readonly 'tool.elliott_double_combo': "Elliott double combo (WXY)";
|
|
1154
|
+
readonly 'tool.elliott_triple_combo': "Elliott triple combo (WXYXZ)";
|
|
1155
|
+
readonly 'tool.cyclic_lines': "Cyclic lines";
|
|
1156
|
+
readonly 'tool.time_cycles': "Time cycles";
|
|
1157
|
+
readonly 'tool.sine_line': "Sine line";
|
|
1158
|
+
readonly 'tool.long_position': "Long position";
|
|
1159
|
+
readonly 'tool.short_position': "Short position";
|
|
1160
|
+
readonly 'tool.forecast': "Position forecast";
|
|
1161
|
+
readonly 'tool.sector': "Sector";
|
|
1162
|
+
readonly 'tool.bars_pattern': "Bars pattern";
|
|
1163
|
+
readonly 'tool.ghost_feed': "Ghost feed";
|
|
1164
|
+
readonly 'tool.anchored_vwap': "Anchored VWAP";
|
|
1165
|
+
readonly 'tool.fixed_range_volume_profile': "Fixed range volume profile";
|
|
1166
|
+
readonly 'tool.anchored_volume_profile': "Anchored volume profile";
|
|
1167
|
+
readonly 'tool.image': "Image";
|
|
1168
|
+
readonly 'tool.content_card': "Content card";
|
|
1169
|
+
readonly 'tool.emoji': "Emoji";
|
|
1170
|
+
readonly 'tool.sticker': "Sticker";
|
|
1171
|
+
readonly 'tool.icon': "Icon";
|
|
1172
|
+
readonly 'tool.text': "Text";
|
|
1173
|
+
readonly 'tool.note': "Note";
|
|
1174
|
+
readonly 'tool.comment': "Comment";
|
|
1175
|
+
readonly 'tool.callout': "Callout";
|
|
1176
|
+
readonly 'tool.price_label': "Price label";
|
|
1177
|
+
readonly 'tool.arrow_up': "Arrow mark up";
|
|
1178
|
+
readonly 'tool.arrow_down': "Arrow mark down";
|
|
1179
|
+
readonly 'tool.arrow_marker': "Arrow marker";
|
|
1180
|
+
readonly 'tool.flag': "Flag mark";
|
|
1181
|
+
readonly 'tool.price_note': "Price note";
|
|
1182
|
+
readonly 'tool.pin': "Pin";
|
|
1183
|
+
readonly 'tool.signpost': "Signpost";
|
|
1184
|
+
readonly 'tool.table': "Table";
|
|
1185
|
+
readonly 'tool.brush': "Brush";
|
|
1186
|
+
readonly 'tool.highlighter': "Highlighter";
|
|
1187
|
+
readonly 'tool.path': "Path";
|
|
1188
|
+
readonly 'tool.polyline': "Polyline";
|
|
1189
|
+
readonly 'tool.price_range': "Price range";
|
|
1190
|
+
readonly 'tool.date_range': "Date range";
|
|
1191
|
+
readonly 'tool.date_and_price_range': "Date and price range";
|
|
1192
|
+
readonly 'tool.measure': "Measure";
|
|
1193
|
+
readonly 'legend.open': "O";
|
|
1194
|
+
readonly 'legend.high': "H";
|
|
1195
|
+
readonly 'legend.low': "L";
|
|
1196
|
+
readonly 'legend.close': "C";
|
|
1197
|
+
readonly 'legend.change': "{change} ({percent}%)";
|
|
1198
|
+
readonly 'legend.indicatorSettings': "Indicator settings";
|
|
1199
|
+
readonly 'legend.showRows': "Show study rows";
|
|
1200
|
+
readonly 'legend.hideRows': "Hide study rows";
|
|
1201
|
+
readonly 'legend.restorePane': "Restore pane";
|
|
1202
|
+
readonly 'legend.collapsePane': "Collapse pane";
|
|
1203
|
+
readonly 'legend.maximizePane': "Maximize pane";
|
|
1204
|
+
readonly 'legend.showIndicator': "Show indicator";
|
|
1205
|
+
readonly 'legend.hideIndicator': "Hide indicator";
|
|
1206
|
+
readonly 'legend.scaleNormal': "Reg";
|
|
1207
|
+
readonly 'legend.scaleLog': "Log";
|
|
1208
|
+
readonly 'legend.scalePercent': "%";
|
|
1209
|
+
readonly 'legend.scaleIndexed': "100";
|
|
1210
|
+
readonly 'legend.changeSymbol': "Change symbol";
|
|
1211
|
+
readonly 'legend.removeCompare': "Remove compare";
|
|
1212
|
+
readonly 'legend.removeIndicator': "Remove indicator";
|
|
1213
|
+
};
|
|
1214
|
+
type ChartMessageKey = keyof typeof en;
|
|
1215
|
+
|
|
1216
|
+
/** The pointer's own glyph over the chart. */
|
|
1217
|
+
type CursorMode = 'cross' | 'dot' | 'arrow';
|
|
1218
|
+
declare const CURSOR_MODES: readonly CursorMode[];
|
|
1219
|
+
declare const CURSOR_LABELS: Readonly<Record<CursorMode, ChartMessageKey>>;
|
|
1220
|
+
/** The armed pointer tools that place nothing permanent. The eraser removes on click and stays
|
|
1221
|
+
* armed; measure and zoom draw a two-anchor shape that is discarded once it has done its work. */
|
|
1222
|
+
type TransientTool = 'eraser' | 'measure' | 'zoom';
|
|
1223
|
+
declare const TRANSIENT_TOOLS: readonly TransientTool[];
|
|
1224
|
+
declare const TRANSIENT_LABELS: Readonly<Record<TransientTool, ChartMessageKey>>;
|
|
1225
|
+
/** Whether an armed tool id is a transient rather than a catalog tool. `null` (nothing armed) is
|
|
1226
|
+
* not a transient. */
|
|
1227
|
+
declare function isTransientTool(tool: string | null): tool is TransientTool;
|
|
1228
|
+
/** Whether a lingering measure readout or zoom box survives the gesture starting now. It survives
|
|
1229
|
+
* only while the same transient stays armed, which is what lets a second measure replace the
|
|
1230
|
+
* first without the readout flickering away in between. */
|
|
1231
|
+
declare function transientSurvives(tool: string | null): boolean;
|
|
1232
|
+
/** What stays armed after a placement completes. Freehand tools keep drawing successive strokes;
|
|
1233
|
+
* other permanent tools follow Stay in drawing mode. Transients keep their own pointer mode. */
|
|
1234
|
+
declare function toolAfterPlacement(tool: string | null, stayInDrawingMode: boolean): string | null;
|
|
1235
|
+
/** Which toolbar buttons look armed. The cursor button is the resting state, and it also owns the
|
|
1236
|
+
* eraser, so it reads as armed while the eraser is. */
|
|
1237
|
+
declare function cursorButtonArmed(tool: string | null): boolean;
|
|
1238
|
+
|
|
1239
|
+
/** Live tally the remove menu counts from. */
|
|
1240
|
+
interface DrawingCounts {
|
|
1241
|
+
total: number;
|
|
1242
|
+
locked: number;
|
|
1243
|
+
}
|
|
1244
|
+
/** How many drawings a sweep would actually take. A locked drawing survives unless the standing
|
|
1245
|
+
* "always remove locked" preference is on, and the menu's row shows THIS number rather than the
|
|
1246
|
+
* total, so the count and the outcome cannot disagree. */
|
|
1247
|
+
declare function removableDrawings(counts: DrawingCounts, includeLocked: boolean): number;
|
|
1248
|
+
/** One row the remove menu offers. Rows whose count is zero are never built, so the menu never
|
|
1249
|
+
* offers a no-op, and the combined row appears only when both kinds are present. */
|
|
1250
|
+
interface RemoveRow {
|
|
1251
|
+
id: 'drawings' | 'indicators' | 'both';
|
|
1252
|
+
/** The carrier message; its slots are filled with counted phrases by the surface that renders it. */
|
|
1253
|
+
label: ChartMessageKey;
|
|
1254
|
+
drawings: number;
|
|
1255
|
+
indicators: number;
|
|
1256
|
+
}
|
|
1257
|
+
/** The remove menu's rows for the current tallies. An empty array means there is nothing to take,
|
|
1258
|
+
* and the surface says so rather than showing a menu of dead rows. */
|
|
1259
|
+
declare function removeRows(counts: DrawingCounts, indicators: number, includeLocked: boolean): RemoveRow[];
|
|
1260
|
+
|
|
1261
|
+
/** The most tools the bar holds. */
|
|
1262
|
+
declare const MAX_FAVORITE_TOOLS = 24;
|
|
1263
|
+
/** Where the bar sits inside the chart, in CSS pixels from the chart's top left. Null means the
|
|
1264
|
+
* bar has never been dragged and takes its default corner. */
|
|
1265
|
+
interface FavoritesPosition {
|
|
1266
|
+
x: number;
|
|
1267
|
+
y: number;
|
|
1268
|
+
}
|
|
1269
|
+
/** The whole favorites preference: what is starred, whether the bar shows, and where it sits. */
|
|
1270
|
+
interface FavoritesState {
|
|
1271
|
+
tools: readonly string[];
|
|
1272
|
+
visible: boolean;
|
|
1273
|
+
position: FavoritesPosition | null;
|
|
1274
|
+
}
|
|
1275
|
+
declare const DEFAULT_FAVORITES: FavoritesState;
|
|
1276
|
+
/** Where favorites live. The chart holds no storage of its own, so a host implements this over
|
|
1277
|
+
* whatever it already uses for viewer state, and every surface that stars a tool goes through it.
|
|
1278
|
+
* `subscribe` is what keeps the toolbar's stars and the floating bar showing the same list without
|
|
1279
|
+
* either one owning the other. */
|
|
1280
|
+
interface FavoritesPort {
|
|
1281
|
+
read(): FavoritesState;
|
|
1282
|
+
write(state: FavoritesState): void;
|
|
1283
|
+
/** Hear every change, including one made by another surface. Returns its own unsubscribe. */
|
|
1284
|
+
subscribe(listener: () => void): () => void;
|
|
1285
|
+
}
|
|
1286
|
+
declare const isFavorite: (state: FavoritesState, type: string) => boolean;
|
|
1287
|
+
/** Star or unstar a tool. Returns a NEW state; unstarring always succeeds, and starring past the
|
|
1288
|
+
* cap returns the state unchanged so the caller can say why nothing happened. */
|
|
1289
|
+
declare function toggleFavorite(state: FavoritesState, type: string): FavoritesState;
|
|
1290
|
+
/** Whether the bar has anything to show. An empty list hides the bar even when it is switched on,
|
|
1291
|
+
* because an empty floating strip over a chart is a smudge, not a control. */
|
|
1292
|
+
declare const favoritesBarShown: (state: FavoritesState) => boolean;
|
|
1293
|
+
/** Drop starred tools the catalog no longer registers, so a list saved against an older
|
|
1294
|
+
* configuration does not leave dead buttons on the bar. */
|
|
1295
|
+
declare function pruneFavorites(state: FavoritesState, known: (type: string) => boolean): FavoritesState;
|
|
1296
|
+
/** Keep a dragged bar inside the chart. A chart that shrinks below the bar's last position would
|
|
1297
|
+
* otherwise strand it off the edge with no way to drag it back. */
|
|
1298
|
+
declare function clampFavoritesPosition(position: FavoritesPosition, bar: {
|
|
1299
|
+
width: number;
|
|
1300
|
+
height: number;
|
|
1301
|
+
}, chart: {
|
|
1302
|
+
width: number;
|
|
1303
|
+
height: number;
|
|
1304
|
+
}): FavoritesPosition;
|
|
1305
|
+
|
|
1306
|
+
interface DrawingPreferences {
|
|
1307
|
+
/** The pointer's glyph over the chart. */
|
|
1308
|
+
cursor: CursorMode;
|
|
1309
|
+
/** Off, or the strength the magnet pulls with. */
|
|
1310
|
+
magnet: MagnetMode;
|
|
1311
|
+
/** The last strength chosen, so switching the magnet back on restores it rather than falling
|
|
1312
|
+
* back to weak. */
|
|
1313
|
+
magnetStrength: Exclude<MagnetMode, 'off'>;
|
|
1314
|
+
/** A placed tool stays armed for the next drawing. */
|
|
1315
|
+
stayInDrawingMode: boolean;
|
|
1316
|
+
/** A sweep takes locked drawings too. */
|
|
1317
|
+
removeLocked: boolean;
|
|
1318
|
+
/** A NEW drawing is replicated to every pane charting the same symbol. */
|
|
1319
|
+
syncAcrossPanes: boolean;
|
|
1320
|
+
/** Each toolbar group's last-picked tool, so the button keeps that face. Keyed by group id. */
|
|
1321
|
+
railTools: Readonly<Record<string, string>>;
|
|
1322
|
+
favorites: FavoritesState;
|
|
1323
|
+
/** Where the selected drawing's settings bar was dragged to; null takes its default place. */
|
|
1324
|
+
settingsBarPosition: FavoritesPosition | null;
|
|
1325
|
+
/** The glyph picker's most recent picks, newest first. */
|
|
1326
|
+
recentGlyphs: readonly string[];
|
|
1327
|
+
/** The colours this viewer mixed in the picker, newest first. */
|
|
1328
|
+
recentColors: readonly string[];
|
|
1329
|
+
}
|
|
1330
|
+
declare const DEFAULT_DRAWING_PREFERENCES: DrawingPreferences;
|
|
1331
|
+
/** Read a stored record. TOTAL: anything unreadable, and any field that is missing or not what it
|
|
1332
|
+
* claims, falls back to its default rather than throwing. A preference document is the one piece
|
|
1333
|
+
* of state a chart must never fail to open on. */
|
|
1334
|
+
declare function parseDrawingPreferences(raw: string | null | undefined): DrawingPreferences;
|
|
1335
|
+
/** Write a preference document. */
|
|
1336
|
+
declare function serializeDrawingPreferences(preferences: DrawingPreferences): string;
|
|
1337
|
+
/** The `ChartStorage` key the widget persists the record under, in the widget's own namespace
|
|
1338
|
+
* beside its symbol, timeframe and scale keys. */
|
|
1339
|
+
declare const DRAWING_PREFERENCES_KEY = "quickcharts.drawingPrefs.v1";
|
|
1340
|
+
|
|
1341
|
+
/** A saved tool setup: style and props partials layered over the tool's factory defaults. */
|
|
1342
|
+
interface ToolPreset {
|
|
1343
|
+
style?: Partial<DrawingStyle>;
|
|
1344
|
+
props?: Record<string, unknown>;
|
|
1345
|
+
}
|
|
1346
|
+
/** A named preset, as the picker lists it. */
|
|
1347
|
+
interface ToolTemplate extends ToolPreset {
|
|
1348
|
+
ref: ResourceRef;
|
|
1349
|
+
name: string;
|
|
1350
|
+
tool: string;
|
|
1351
|
+
}
|
|
1352
|
+
/** The reserved template name that holds a tool's silent last-used DEFAULT. It is not shown in the
|
|
1353
|
+
* template list and cannot be typed: a name a trader could collide with would let them overwrite
|
|
1354
|
+
* their defaults by saving a template. */
|
|
1355
|
+
declare const DEFAULT_PRESET_NAME = "";
|
|
1356
|
+
/** Total: a body that will not parse reads as an empty preset, so one corrupt row never takes the
|
|
1357
|
+
* picker down with it. */
|
|
1358
|
+
declare function decodePreset(content: string): ToolPreset;
|
|
1359
|
+
/** The drawing-template workflow over one `templates('drawing')` store. Every call takes the
|
|
1360
|
+
* caller's `AbortSignal`, so a closed dialog or a fast retype abandons in flight and a late answer
|
|
1361
|
+
* never lands. */
|
|
1362
|
+
declare class DrawingTemplates {
|
|
1363
|
+
private readonly store;
|
|
1364
|
+
constructor(store: ResourceStore<TemplateMeta, TemplateBody>);
|
|
1365
|
+
/** The named templates for one tool, in the store's order. The tool's silent default is not
|
|
1366
|
+
* among them. */
|
|
1367
|
+
list(tool: string, signal?: AbortSignal): Promise<TemplateMeta[]>;
|
|
1368
|
+
/** Every row of the family, defaults included, each with its preset. A host that has to answer
|
|
1369
|
+
* synchronously (a placement path, a render) reads this once into a cache of its own rather
|
|
1370
|
+
* fetched: one read per saved setup, once, against a family a trader keeps in the dozens. The
|
|
1371
|
+
* reads run together, `BODY_READS` at a time, and the answer keeps the store's order. */
|
|
1372
|
+
listAll(signal?: AbortSignal): Promise<ToolTemplate[]>;
|
|
1373
|
+
/** One template's preset. Null when the id is gone, which is what a picker shows after another
|
|
1374
|
+
* tab deleted it. */
|
|
1375
|
+
load(id: string, signal?: AbortSignal): Promise<{
|
|
1376
|
+
ref: ResourceRef;
|
|
1377
|
+
template: ToolTemplate;
|
|
1378
|
+
} | null>;
|
|
1379
|
+
/** Save a NAMED template. Saving over a name the tool already has REPLACES that row at the
|
|
1380
|
+
* revision the caller read, so two tabs saving the same name conflict rather than one silently
|
|
1381
|
+
* winning. A name the tool does not have creates a row. */
|
|
1382
|
+
save(tool: string, name: string, preset: ToolPreset, signal?: AbortSignal): Promise<WriteOutcome<TemplateMeta>>;
|
|
1383
|
+
remove(ref: ResourceRef, signal?: AbortSignal): Promise<WriteOutcome<void>>;
|
|
1384
|
+
/** A tool's silent last-used default, or an empty preset when it has none. */
|
|
1385
|
+
defaultFor(tool: string, signal?: AbortSignal): Promise<ToolPreset>;
|
|
1386
|
+
/** Remember a tool's default. This runs after an ordinary style edit, so a CONFLICT here is not
|
|
1387
|
+
* worth surfacing: another surface already wrote a newer default and the trader's next edit
|
|
1388
|
+
* writes again. It is returned rather than swallowed so a caller may still look. */
|
|
1389
|
+
rememberDefault(tool: string, preset: ToolPreset, signal?: AbortSignal): Promise<WriteOutcome<TemplateMeta>>;
|
|
1390
|
+
/** Forget a tool's default, so new drawings of it start from the factory style again. */
|
|
1391
|
+
clearDefault(tool: string, signal?: AbortSignal): Promise<WriteOutcome<void> | null>;
|
|
1392
|
+
}
|
|
1393
|
+
|
|
1394
|
+
/** What the intake accepts. Stated here because it is a product rule, not a host preference: a
|
|
1395
|
+
* drawing is persisted with its picture inline, so an unbounded image is an unbounded saved chart. */
|
|
1396
|
+
declare const IMAGE_MAX_BYTES: number;
|
|
1397
|
+
/** Longest edge, in pixels. A larger picture is downscaled rather than refused. */
|
|
1398
|
+
declare const IMAGE_MAX_EDGE = 2000;
|
|
1399
|
+
declare const IMAGE_TYPES: readonly string[];
|
|
1400
|
+
/** The `accept` attribute for a file input, kept beside the types it mirrors. */
|
|
1401
|
+
declare const IMAGE_ACCEPT = "image/jpeg,image/png";
|
|
1402
|
+
/** Why an intake failed. A CODE, not a sentence: the host renders it through the catalog, so the
|
|
1403
|
+
* reason reaches a trader in their own language and no English lives in the port. */
|
|
1404
|
+
type ImageIntakeError = 'wrong-type' | 'too-large' | 'unreadable' | 'undecodable';
|
|
1405
|
+
/** The catalog message each code says. `too-large` carries the picked file's size in its slot. */
|
|
1406
|
+
declare const IMAGE_ERROR_MESSAGES: Readonly<Record<ImageIntakeError, ChartMessageKey>>;
|
|
1407
|
+
/** A picture that is ready to store on a drawing. */
|
|
1408
|
+
interface ImageAsset {
|
|
1409
|
+
/** A data URL sized within the caps. */
|
|
1410
|
+
dataUrl: string;
|
|
1411
|
+
width: number;
|
|
1412
|
+
height: number;
|
|
1413
|
+
/** The picture was larger than the edge cap and had to be resampled. */
|
|
1414
|
+
downscaled: boolean;
|
|
1415
|
+
}
|
|
1416
|
+
type ImageIntakeResult = {
|
|
1417
|
+
ok: true;
|
|
1418
|
+
asset: ImageAsset;
|
|
1419
|
+
} | {
|
|
1420
|
+
ok: false;
|
|
1421
|
+
error: ImageIntakeError;
|
|
1422
|
+
bytes?: number;
|
|
1423
|
+
};
|
|
1424
|
+
/** What the host supplies so the image and glyph tools can draw. */
|
|
1425
|
+
interface DrawingAssetPort {
|
|
1426
|
+
/** Validate a picked file and turn it into a payload within the caps, or say why it cannot be
|
|
1427
|
+
* used. The host owns the decode and the resample; `checkImageFile` and `fitScale` below are the
|
|
1428
|
+
* library's rules it applies. */
|
|
1429
|
+
intakeImage(file: File): Promise<ImageIntakeResult>;
|
|
1430
|
+
/** Artwork for one emoji or sticker glyph, as a URL the canvas can draw, or null to fall back to
|
|
1431
|
+
* drawing the glyph as text. Icon marks always stay text: their ink is tinted by the stroke
|
|
1432
|
+
* color, which artwork cannot carry. */
|
|
1433
|
+
glyphSource(glyph: string): string | null;
|
|
1434
|
+
}
|
|
1435
|
+
/** Type and size gate, pure so it needs no DOM and no real file. */
|
|
1436
|
+
declare function checkImageFile(file: {
|
|
1437
|
+
type: string;
|
|
1438
|
+
size: number;
|
|
1439
|
+
}): {
|
|
1440
|
+
error: ImageIntakeError;
|
|
1441
|
+
bytes?: number;
|
|
1442
|
+
} | null;
|
|
1443
|
+
/** The scale that brings a picture inside the edge cap. 1 when it already fits, so a small picture
|
|
1444
|
+
* is never resampled and never loses a pixel it did not have to. */
|
|
1445
|
+
declare function fitScale(width: number, height: number, maxEdge?: number): number;
|
|
1446
|
+
/** The pixel size a picture is resampled to. */
|
|
1447
|
+
declare function fittedSize(width: number, height: number, maxEdge?: number): {
|
|
1448
|
+
width: number;
|
|
1449
|
+
height: number;
|
|
1450
|
+
};
|
|
1451
|
+
|
|
1452
|
+
export { clampFavoritesPosition as $, type Anchor as A, type ImageIntakeResult as B, type ChartMessageKey as C, type DrawingStyle as D, type IntervalBucket as E, type FavoritesPort as F, type GlyphSourcePort as G, type IntervalContext as H, type IDrawing as I, type IntervalVisibility as J, MAX_FAVORITE_TOOLS as K, type LineStyle as L, type MagnetMode as M, TRANSIENT_LABELS as N, type OhlcBar as O, type Point as P, TRANSIENT_TOOLS as Q, type RemoveRow as R, type SerializedDrawing as S, type ToolCategory as T, type ToolPreset as U, type ToolTemplate as V, type TransientTool as W, type Viewport as X, type VisibilityPreset as Y, type VisibilityRange as Z, checkImageFile as _, CURSOR_LABELS as a, cursorButtonArmed as a0, decodePreset as a1, favoritesBarShown as a2, fitScale as a3, fittedSize as a4, isFavorite as a5, isTransientTool as a6, magnetSnap as a7, normalizeVisibility as a8, parseDrawingPreferences as a9, parseIntervalContext as aa, pruneFavorites as ab, removableDrawings as ac, removeRows as ad, serializeDrawingPreferences as ae, snapToBar as af, toggleFavorite as ag, toolAfterPlacement as ah, transientSurvives as ai, visibilityPreset as aj, visibleAt as ak, en as al, CURSOR_MODES as b, type ControlPoint as c, type CursorMode as d, DEFAULT_DRAWING_PREFERENCES as e, DEFAULT_FAVORITES as f, DEFAULT_OPTIONS as g, DEFAULT_PRESET_NAME as h, DEFAULT_STYLE as i, DEFAULT_VISIBILITY as j, DRAWING_PREFERENCES_KEY as k, type DrawingAssetPort as l, type DrawingCounts as m, type DrawingOptions as n, type DrawingPreferences as o, type DrawingState as p, DrawingTemplates as q, type FavoritesPosition as r, type FavoritesState as s, IMAGE_ACCEPT as t, IMAGE_ERROR_MESSAGES as u, IMAGE_MAX_BYTES as v, IMAGE_MAX_EDGE as w, IMAGE_TYPES as x, type ImageAsset as y, type ImageIntakeError as z };
|