@trdrs/quickcharts 3.0.0 → 4.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +234 -23
  3. package/dist/adapters/rest.d.ts +1 -1
  4. package/dist/{ar-HLKX6L6O.js → ar-FXZ5QJUR.js} +205 -56
  5. package/dist/ar-FXZ5QJUR.js.map +1 -0
  6. package/dist/{assets-C1VjN7DP.d.ts → assets-Gg-UquDA.d.ts} +284 -61
  7. package/dist/{ca_ES-3ALUJ2FI.js → ca_ES-3WVKFBIF.js} +205 -56
  8. package/dist/ca_ES-3WVKFBIF.js.map +1 -0
  9. package/dist/chunk-C4MEVUNK.js +11449 -0
  10. package/dist/chunk-C4MEVUNK.js.map +1 -0
  11. package/dist/{de-GXKOZYHP.js → de-V72Q3OI7.js} +205 -56
  12. package/dist/de-V72Q3OI7.js.map +1 -0
  13. package/dist/drawings.d.ts +24 -13
  14. package/dist/drawings.js +5 -1
  15. package/dist/{es-R7WSUWO2.js → es-CNQ3OJ6E.js} +205 -56
  16. package/dist/es-CNQ3OJ6E.js.map +1 -0
  17. package/dist/feature-manifest.json +74 -11
  18. package/dist/{fr-EBUMQLPT.js → fr-5WQBCGR4.js} +205 -56
  19. package/dist/fr-5WQBCGR4.js.map +1 -0
  20. package/dist/{he_IL-GCAXKEWB.js → he_IL-WXKA77UE.js} +205 -56
  21. package/dist/he_IL-WXKA77UE.js.map +1 -0
  22. package/dist/{id_ID-6JYEEKEA.js → id_ID-XPBAYSWK.js} +205 -56
  23. package/dist/id_ID-XPBAYSWK.js.map +1 -0
  24. package/dist/index.d.ts +1775 -1660
  25. package/dist/index.js +4513 -1815
  26. package/dist/index.js.map +1 -1
  27. package/dist/{it-IMLHI5VO.js → it-DR2EBNWX.js} +205 -56
  28. package/dist/it-DR2EBNWX.js.map +1 -0
  29. package/dist/{ja-QDEQ2EYA.js → ja-URB2CPXO.js} +205 -56
  30. package/dist/ja-URB2CPXO.js.map +1 -0
  31. package/dist/{ko-MTA7BZI3.js → ko-OE47NYVP.js} +205 -56
  32. package/dist/ko-OE47NYVP.js.map +1 -0
  33. package/dist/{ms_MY-K4EAHE5J.js → ms_MY-BKCFRK2K.js} +205 -56
  34. package/dist/ms_MY-BKCFRK2K.js.map +1 -0
  35. package/dist/{pl-CIIDQ3SB.js → pl-3IKQRG3Y.js} +205 -56
  36. package/dist/pl-3IKQRG3Y.js.map +1 -0
  37. package/dist/{pt-3HA2PDUN.js → pt-PZHV5EZE.js} +205 -56
  38. package/dist/pt-PZHV5EZE.js.map +1 -0
  39. package/dist/quickcharts.css +1627 -422
  40. package/dist/{resources-C0cYryO9.d.ts → resources-Le6flcEn.d.ts} +1 -1
  41. package/dist/{ru-2F2VGHMW.js → ru-BAL6RQUV.js} +205 -56
  42. package/dist/ru-BAL6RQUV.js.map +1 -0
  43. package/dist/{sv-HCBRKFRZ.js → sv-Y6GBGDHM.js} +205 -56
  44. package/dist/sv-Y6GBGDHM.js.map +1 -0
  45. package/dist/{th-WWPM2QKB.js → th-MAMLMZKU.js} +205 -56
  46. package/dist/th-MAMLMZKU.js.map +1 -0
  47. package/dist/theme-manifest.json +148 -14
  48. package/dist/{tr-M57AMCWK.js → tr-3LQHINUZ.js} +205 -56
  49. package/dist/tr-3LQHINUZ.js.map +1 -0
  50. package/dist/{vi-YJHN2OK7.js → vi-GR4PSDKP.js} +205 -56
  51. package/dist/vi-GR4PSDKP.js.map +1 -0
  52. package/dist/{zh-AIFC65OE.js → zh-2RJ5VNAI.js} +205 -56
  53. package/dist/zh-2RJ5VNAI.js.map +1 -0
  54. package/dist/{zh_TW-2LLLW4H6.js → zh_TW-XEBSACHU.js} +205 -56
  55. package/dist/zh_TW-XEBSACHU.js.map +1 -0
  56. package/package.json +1 -1
  57. package/dist/ar-HLKX6L6O.js.map +0 -1
  58. package/dist/ca_ES-3ALUJ2FI.js.map +0 -1
  59. package/dist/chunk-DBJQXHLQ.js +0 -7003
  60. package/dist/chunk-DBJQXHLQ.js.map +0 -1
  61. package/dist/de-GXKOZYHP.js.map +0 -1
  62. package/dist/es-R7WSUWO2.js.map +0 -1
  63. package/dist/fr-EBUMQLPT.js.map +0 -1
  64. package/dist/he_IL-GCAXKEWB.js.map +0 -1
  65. package/dist/id_ID-6JYEEKEA.js.map +0 -1
  66. package/dist/it-IMLHI5VO.js.map +0 -1
  67. package/dist/ja-QDEQ2EYA.js.map +0 -1
  68. package/dist/ko-MTA7BZI3.js.map +0 -1
  69. package/dist/ms_MY-K4EAHE5J.js.map +0 -1
  70. package/dist/pl-CIIDQ3SB.js.map +0 -1
  71. package/dist/pt-3HA2PDUN.js.map +0 -1
  72. package/dist/ru-2F2VGHMW.js.map +0 -1
  73. package/dist/sv-HCBRKFRZ.js.map +0 -1
  74. package/dist/th-WWPM2QKB.js.map +0 -1
  75. package/dist/tr-M57AMCWK.js.map +0 -1
  76. package/dist/vi-YJHN2OK7.js.map +0 -1
  77. package/dist/zh-AIFC65OE.js.map +0 -1
  78. package/dist/zh_TW-2LLLW4H6.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,1438 +1,47 @@
1
1
  import { C as ChartDatafeed, F as FeedBar, S as SymbolRow, D as DatafeedSearchOptions, a as SearchPage, b as SearchClassNode } from './symbols-6V22WaRX.js';
2
2
  export { B as BarMark, c as BarsEvent, d as DatafeedConfig, e as FeedUnavailableError, H as HistoryPage, M as MarkColorRole, f as MarkPlacement, g as MarkShape, O as OlderPageVerdict, h as SubscribeHandlers, i as SymbolNames, T as TimescaleMark, o as olderPageVerdict, s as symbolNames } from './symbols-6V22WaRX.js';
3
- import { al as en, C as ChartMessageKey, G as GlyphSourcePort, M as MagnetMode, d as CursorMode, L as LineStyle, I as IDrawing, m as DrawingCounts, D as DrawingStyle, Y as VisibilityPreset, U as ToolPreset, V as ToolTemplate, S as SerializedDrawing, o as DrawingPreferences, l as DrawingAssetPort } from './assets-C1VjN7DP.js';
4
- import { b as ResourceRef, C as ChartSaveLoadAdapter, q as ChartMeta, t as ChartBody, h as DrawingResourceContext, R as ResourceStore, u as DrawingsMeta, j as DrawingsBody, T as TemplateMeta, a as TemplateBody, v as LayoutMeta, w as LayoutBody, e as DrawingContextKind } from './resources-C0cYryO9.js';
5
- export { c as ChartLocalDrawingContext, D as DRAWING_CONTEXT_VERSION, d as DRAWING_DOCUMENT_VERSION, f as DrawingEntry, g as DrawingGroup, i as DrawingTombstone, L as LayoutSharedDrawingContext, M as MemoryResourcesOptions, x as ResourceAbortError, S as SymbolGlobalDrawingContext, y as TemplateKind, W as WriteOutcome, k as drawingContextKey, l as emptyDrawingDocument, m as liveDrawingEntries, n as liveDrawingGroups, z as memorySaveLoadAdapter, o as mergeDrawingDocuments, p as parseDrawingDocument, r as reviseDrawingDocument, s as sameDrawingContext } from './resources-C0cYryO9.js';
3
+ import { an as en, C as ChartMessageKey, G as GlyphSourcePort, M as MagnetMode, d as CursorMode, N as TextEditFrame, K as TextDraft, L as LineStyle, I as IDrawing, m as DrawingCounts, D as DrawingStyle, _ as VisibilityPreset, W as ToolPreset, X as ToolTemplate, S as SerializedDrawing, o as DrawingPreferences, l as DrawingAssetPort } from './assets-Gg-UquDA.js';
4
+ import { R as ResourceRef, C as ChartSaveLoadAdapter, q as ChartMeta, t as ChartBody, f as DrawingResourceContext, i as ResourceStore, u as DrawingsMeta, h as DrawingsBody, j as TemplateMeta, T as TemplateBody, v as LayoutMeta, w as LayoutBody, c as DrawingContextKind } from './resources-Le6flcEn.js';
5
+ export { a as ChartLocalDrawingContext, D as DRAWING_CONTEXT_VERSION, b as DRAWING_DOCUMENT_VERSION, d as DrawingEntry, e as DrawingGroup, g as DrawingTombstone, L as LayoutSharedDrawingContext, M as MemoryResourcesOptions, x as ResourceAbortError, S as SymbolGlobalDrawingContext, y as TemplateKind, W as WriteOutcome, k as drawingContextKey, l as emptyDrawingDocument, m as liveDrawingEntries, n as liveDrawingGroups, z as memorySaveLoadAdapter, o as mergeDrawingDocuments, p as parseDrawingDocument, r as reviseDrawingDocument, s as sameDrawingContext } from './resources-Le6flcEn.js';
6
6
  import { LineData, UTCTimestamp, HistogramData, WhitespaceData, IChartApi, ISeriesApi, CreatePriceLineOptions, PriceLineOptions, ISeriesPrimitive, Time, PriceScaleMode, SeriesType, SeriesAttachedParameter, TickMarkType } from 'lightweight-charts';
7
7
  import { D as DataStatus, S as SymbolInfo, P as PriceFormat } from './symbology-D3SLclrU.js';
8
8
  export { a as Subsession, b as SubsessionId, T as TickBand, p as parseTickBands, t as tickBandFor } from './symbology-D3SLclrU.js';
9
9
  import { PriceFormatter } from './format.js';
10
10
  export { NumericPunctuation, PriceFormatterOptions, createPriceFormatter } from './format.js';
11
11
 
12
- /** A feed that answers coarser grains than the one it wraps.
13
- *
14
- * `serves` names the grains the wrapped feed answers natively; every other request is folded from
15
- * the coarsest of them that divides it. A request nothing divides is passed straight through, so
16
- * the wrapped feed gives its own honest answer rather than this wrapper inventing one.
17
- *
18
- * ```ts
19
- * import { withFoldedHistory } from '@trdrs/quickcharts'
20
- *
21
- * const feed = withFoldedHistory(venueFeed, { serves: ['1m', '15m', '1h', '1d', '1mo'] })
22
- * // A 45m request now fetches 15m bars and folds them three at a time.
23
- * ```
24
- */
25
- declare function withFoldedHistory(feed: ChartDatafeed, options: {
26
- serves: readonly string[];
27
- }): ChartDatafeed;
28
-
29
- interface ChartStorage {
30
- /** The stored value for a key, or null when absent. Must not throw — a backing-store failure reads as
31
- * "absent" so the chart falls back to its defaults rather than crashing. */
32
- get(key: string): string | null;
33
- /** Persist a value. Must not throw — a quota/permission failure is swallowed (the chart keeps working
34
- * off in-memory state for the session). */
35
- set(key: string, value: string): void;
36
- /** Remove a key. Must not throw. */
37
- remove(key: string): void;
38
- /** Every key currently present, so the chart can enumerate its own namespace. Order is unspecified. */
39
- keys(): string[];
40
- }
41
- /** An in-memory ChartStorage — the default, and the store for SSR, tests, or an intentionally ephemeral
42
- * embed where nothing should persist beyond the page. A host can also seed one from its own state to
43
- * hand the chart a starting set. */
44
- declare function memoryChartStorage(seed?: Record<string, string>): ChartStorage;
45
-
46
- /** The subset of `fetch` this adapter uses — kept minimal so the package stays DOM-independent and a
47
- * test can drive it with a plain fake. The global `fetch` satisfies it. */
48
- type FetchLike = (url: string) => Promise<{
49
- ok: boolean;
50
- status: number;
51
- json(): Promise<unknown>;
52
- text(): Promise<string>;
53
- }>;
54
- interface UdfDatafeedOptions {
55
- /** UDF server base URL, e.g. `https://feed.example.com/udf` (no trailing slash needed). */
56
- baseUrl: string;
57
- /** Injected fetch — defaults to the global. Provide one in tests or to add auth headers via a wrapper. */
58
- fetch?: FetchLike;
59
- /** Live-poll cadence in ms for `subscribeBars` (UDF has no push). Default 10s, the UDF norm. */
60
- pollMs?: number;
61
- /** Bars pulled for the initial live snapshot. Default 300. */
62
- snapshotBars?: number;
63
- }
64
- /** A ChartDatafeed backed by a UDF server. */
65
- declare function createUdfDatafeed(options: UdfDatafeedOptions): ChartDatafeed;
66
-
67
- /** Map a timeframe token to a UDF resolution string: seconds `<N>S`, minutes `<N>`, hours as
68
- * minutes (`<N*60>`, the classic UDF intraday encoding), day/week/month `<N>D`/`<N>W`/`<N>M`, ticks
69
- * `<N>T`. A token the grammar cannot read falls through as-is (a custom server may accept it). */
70
- declare function tfToUdfResolution(tf: string): string;
71
- /** The inverse of {@link tfToUdfResolution}: a UDF resolution string back to a timeframe token.
72
- * Bare numbers are minutes; whole-hour counts of 60 or more normalize to `<N>h` (the forward map
73
- * emits hours AS minutes, so '1h' → '60' → '1h' round-trips); bare 'D'/'W'/'M'/'S'/'T' mean a
74
- * count of 1. Null for a resolution the timeframe grammar cannot express, its per-unit ceilings
75
- * included: a caller building a capability declaration OMITS that resolution rather than
76
- * mis-declaring it (the widget can't do bucket arithmetic on a token outside the grammar, so it
77
- * isn't widget-servable even if the server serves it). */
78
- declare function udfResolutionToTf(resolution: string): string | null;
79
-
80
- /** A locale a product ships or a host registers. `code` is the stable product-facing identifier;
81
- * `tag` is the canonical BCP 47 value for `Intl` and the document language. */
82
- interface LocaleDefinition<Code extends string = string> {
83
- code: Code;
84
- endonym: string;
85
- tag: string;
86
- dir: 'ltr' | 'rtl';
87
- }
88
- /** The languages this package ships a dictionary for. */
89
- type ChartLocaleCode = 'en' | 'de' | 'fr' | 'es' | 'it' | 'ca_ES' | 'pl' | 'sv' | 'tr' | 'ru' | 'pt' | 'id_ID' | 'ms_MY' | 'th' | 'vi' | 'ja' | 'ko' | 'zh' | 'zh_TW' | 'ar' | 'he_IL';
90
- type ChartLocale = LocaleDefinition<ChartLocaleCode>;
91
- /** English first, then the Latin-script languages, then the others. Endonyms let every reader find
92
- * their own language in a picker. `scripts/i18n.mjs` reads this table by its line shape. */
93
- declare const BUILT_IN_LOCALES: readonly ChartLocale[];
94
-
95
- type PluralCategory = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other';
96
- /** A message with one form per plural category its language distinguishes (CLDR: English has
97
- * `one` and `other`, Russian `one`/`few`/`many`/`other`, Arabic all six, Japanese `other` alone).
98
- * `other` is always present. `zero` is special: when present it is used for an exact count of 0 in
99
- * EVERY language, so "No alerts" needs no branch at the call site. The form is selected by the
100
- * `count` variable. */
101
- type PluralMessage = {
102
- other: string;
103
- } & Partial<Record<Exclude<PluralCategory, 'other'>, string>>;
104
- type Message = string | PluralMessage;
105
- /** A catalog: keys to messages. The English catalog is the SOURCE every translation is typed
106
- * against; keys are dotted by surface (`legend.hideIndicator`), and each surface keeps its own file. */
107
- type Catalog = Record<string, Message>;
108
- /** A translation of a catalog: a string for every string, a plural for every plural. The shape is
109
- * the source's, so a translation cannot miss a key or flatten a plural without failing typecheck. */
110
- type Translation<Source extends Catalog> = {
111
- [K in keyof Source]: Source[K] extends string ? string : PluralMessage;
112
- };
113
- type Vars = Record<string, string | number>;
114
- /** The arguments `t` takes for a key: a plural key REQUIRES `count`; a string key takes any vars.
115
- * Distributive over `K`, so a key chosen at runtime from a union of keys (a label table) is
116
- * accepted with the arguments any ONE of them takes rather than what all of them would need. */
117
- type TranslateArgs<Source extends Catalog, K extends keyof Source> = K extends unknown ? Source[K] extends string ? [vars?: Vars] : [vars: Vars & {
118
- count: number;
119
- }] : never;
120
- /** The message for a key in the active language: a plural key picks its form by the language's
121
- * rules, and numbers in `{slots}` are written with the language's digits and grouping. */
122
- type Translate<Source extends Catalog> = <K extends keyof Source & string>(key: K, ...args: TranslateArgs<Source, K>) => string;
123
-
124
- interface DictionaryLoader<Source extends Catalog, Code extends string = ChartLocaleCode> {
125
- /** The translation if it is already in memory: synchronous, for a first render that must not flash. */
126
- ifLoaded(code: Code): Translation<Source> | null;
127
- /** Load (once) and return a locale's translation. Concurrent callers share one fetch; a locale
128
- * the catalog does not ship resolves to the source. */
129
- load(code: Code): Promise<Translation<Source>>;
130
- /** Whether the catalog ships this locale (the source locale always does). */
131
- has(code: Code): boolean;
132
- }
133
-
134
- type ChartTranslate = Translate<typeof en>;
135
- /** The widget's catalog in one language: every key of the English source, in the same shape. */
136
- type ChartDictionary = Translation<typeof en>;
137
- /** A locale a host adds beyond the built-in inventory: its stable code, canonical BCP 47 tag,
138
- * reading direction, endonym, and the dictionary chunk to fetch the first time it is chosen. */
139
- interface ChartCustomLocale extends LocaleDefinition {
140
- dictionary: () => Promise<{
141
- default: ChartDictionary;
142
- }>;
143
- }
144
- interface ChartI18nOptions {
145
- /** Locales registered beside the built-in inventory. A code or tag the inventory already holds
146
- * is refused: the built-in dictionaries are not overridden through this door. */
147
- locales?: readonly ChartCustomLocale[];
148
- /** Hears every key a loaded dictionary is missing; the text falls back to English. The typed
149
- * catalogs cannot miss a key, so this only ever reports a dictionary loaded from data. */
150
- onMissing?: (key: ChartMessageKey, locale: string) => void;
12
+ /** The two modes Quick Charts ships complete. A host switches between them at runtime; it does not
13
+ * add a third. A host that keeps named brand presets resolves each preset to a custom light or
14
+ * dark palette before passing it in. */
15
+ type ThemeMode = 'light' | 'dark';
16
+ /** What a role's value is written as. Every value is a CSS token string, so `length` is `'4px'`,
17
+ * `duration` is `'150ms'`, `easing` is a timing function such as `'ease-out'`, and `scale` is a
18
+ * unitless factor such as `'0.97'`; the kind says which tokens are valid, and validation enforces
19
+ * it. */
20
+ type ThemeRoleKind = 'color' | 'length' | 'font' | 'duration' | 'easing' | 'scale' | 'shadow';
21
+ /** The grouping a role belongs to. Families organize the manual and the manifest; they are not part
22
+ * of a role's identity. */
23
+ type ThemeRoleFamily = 'canvas' | 'series' | 'scale' | 'text' | 'chrome' | 'overlay' | 'state' | 'control' | 'status' | 'illustration' | 'drawing' | 'motion';
24
+ /** A readability requirement the palettes must meet: this role's value, read against the value of
25
+ * `over`, reaches `min` under the WCAG 2.2 contrast formula. Where `over` is a translucent tint
26
+ * such as the hover or selected fill, `on` names the opaque surface the tint is drawn on, and the
27
+ * tint is flattened onto it before measuring. Body text needs 4.5, a non-text indicator such as a
28
+ * focus ring needs 3. */
29
+ interface ThemeContrastRule {
30
+ over: string;
31
+ on?: string;
32
+ min: number;
151
33
  }
152
- interface ChartI18n {
153
- /** The host-owned stable locale code. It does not need to use the built-in vocabulary. */
154
- locale(): string;
155
- /** The BCP 47 tag for `Intl` and for the chart library's own axis and crosshair formatting. */
156
- tag(): string;
157
- /** The reading direction of the language in effect. The chrome writes it on the widget root so
158
- * the stylesheet's logical properties flip. A host adapter that omits it reads as left to right. */
159
- dir?(): 'ltr' | 'rtl';
160
- t: ChartTranslate;
161
- /** Switch language. The translation loads once; until it lands `t` reads English. Resolves when
162
- * the switch is complete (or has settled on English because the chunk failed). */
163
- setLocale(code: string): Promise<void>;
164
- /** Hear every change of `t`; a module re-renders its text in the handler. */
165
- onChange(listener: () => void): () => void;
166
- }
167
- /** One chunk per language the widget ships, every language in `BUILT_IN_LOCALES`, fetched the
168
- * first time it is chosen. */
169
- declare const chartDictionaries: DictionaryLoader<{
170
- readonly 'toast.dismiss': "Dismiss";
171
- readonly 'toast.feedUnavailable': "No data for {symbol} from this feed.";
172
- readonly 'toast.feedNoData': "No data for {symbol} yet.";
173
- readonly 'toast.imageCopyFallback': "Could not copy the image. Saved a file instead.";
174
- readonly 'toast.imageFailed': "Could not capture the chart image.";
175
- readonly 'toast.indicatorsNotCarried': {
176
- readonly one: "{count} indicator in this saved chart is not available here and was left out.";
177
- readonly other: "{count} indicators in this saved chart are not available here and were left out.";
178
- };
179
- readonly 'settings.menu': "Chart settings";
180
- readonly 'settings.sectionAppearance': "Appearance";
181
- readonly 'settings.background': "Background";
182
- readonly 'settings.upCandles': "Up candles";
183
- readonly 'settings.downCandles': "Down candles";
184
- readonly 'settings.upBorders': "Up borders";
185
- readonly 'settings.downBorders': "Down borders";
186
- readonly 'settings.upWicks': "Up wicks";
187
- readonly 'settings.downWicks': "Down wicks";
188
- readonly 'settings.sectionDisplay': "Display";
189
- readonly 'settings.gridLines': "Grid lines";
190
- readonly 'settings.sessionShading': "Session shading";
191
- readonly 'settings.sectionScale': "Price scale";
192
- readonly 'settings.sectionTheme': "Theme";
193
- readonly 'settings.indicatorTitle': "{name} settings";
194
- readonly 'settings.tabInputs': "Inputs";
195
- readonly 'settings.tabStyle': "Style";
196
- readonly 'settings.tabVisibility': "Visibility";
197
- readonly 'settings.plots': "Plots";
198
- readonly 'settings.levels': "Levels";
199
- readonly 'settings.fills': "Fills";
200
- readonly 'settings.colorOf': "{name} color";
201
- readonly 'settings.lineWidthOf': "{name} line width";
202
- readonly 'settings.lineStyleOf': "{name} line style";
203
- readonly 'settings.visibleOf': "Show {name}";
204
- readonly 'settings.lineStyleSolid': "Solid";
205
- readonly 'settings.lineStyleDashed': "Dashed";
206
- readonly 'settings.lineStyleDotted': "Dotted";
207
- readonly 'settings.precision': "Precision";
208
- readonly 'settings.precisionDefault': "Default";
209
- readonly 'settings.labelsOnPriceScale': "Labels on price scale";
210
- readonly 'settings.showIndicator': "Show this indicator";
211
- readonly 'picker.title': "Indicators";
212
- readonly 'picker.search': "Search indicators";
213
- readonly 'picker.noMatches': "No matching indicators.";
214
- readonly 'picker.collections': "Indicator collections";
215
- readonly 'picker.personal': "Personal";
216
- readonly 'picker.builtin': "Built-in";
217
- readonly 'picker.favorites': "Favorites";
218
- readonly 'picker.thousands': " K";
219
- readonly 'picker.name': "Name";
220
- readonly 'picker.author': "Author";
221
- readonly 'picker.favorite': "Favorite {name}";
222
- readonly 'picker.unfavorite': "Unfavorite {name}";
223
- readonly 'picker.loading': "Loading indicators…";
224
- readonly 'picker.unavailable': "Indicator content is unavailable. Try again.";
225
- readonly 'picker.actionFailed': "The action could not be completed. Try again.";
226
- readonly 'picker.add': "Add {name}";
227
- readonly 'picker.notPermitted': "{name} is not available here";
228
- readonly 'history.undoNamed': "Undo {change}";
229
- readonly 'history.redoNamed': "Redo {change}";
230
- readonly 'history.changeSymbol': "symbol change";
231
- readonly 'history.changeTimeframe': "timeframe change";
232
- readonly 'history.changeChartStyle': "chart style change";
233
- readonly 'history.changePriceScale': "price scale change";
234
- readonly 'history.changeAppearance': "appearance change";
235
- readonly 'history.changeAddCompare': "add comparison";
236
- readonly 'history.changeRemoveCompare': "remove comparison";
237
- readonly 'history.changeCompare': "comparison change";
238
- readonly 'history.changeAddIndicator': "add indicator";
239
- readonly 'history.changeRemoveIndicator': "remove indicator";
240
- readonly 'history.changeIndicator': "indicator change";
241
- readonly 'history.changeAddDrawing': "add drawing";
242
- readonly 'history.changeRemoveDrawing': "remove drawing";
243
- readonly 'history.changeDrawing': "drawing change";
244
- readonly 'chrome.topBar': "Chart toolbar";
245
- readonly 'chrome.bottomBar': "Chart footer";
246
- readonly 'chrome.symbolSearch': "Search symbol";
247
- readonly 'chrome.compare': "Compare or add symbol";
248
- readonly 'chrome.chartStyle': "Chart style";
249
- readonly 'chrome.indicators': "Indicators";
250
- readonly 'chrome.replay': "Bar replay";
251
- readonly 'chrome.replayChip': "Replay";
252
- readonly 'chrome.image': "Chart image";
253
- readonly 'chrome.session': "Trading session";
254
- readonly 'chrome.sessionsHeading': "Sessions";
255
- readonly 'chrome.navigation': "Chart navigation";
256
- readonly 'chrome.activeChart': "{symbol}, {timeframe}";
257
- readonly 'command.extension': "Host command";
258
- readonly 'command.viewReset': "Reset view";
259
- readonly 'command.viewGoLive': "Go to the live edge";
260
- readonly 'command.viewZoomIn': "Zoom in";
261
- readonly 'command.viewZoomOut': "Zoom out";
262
- readonly 'command.viewScrollLeft': "Scroll back";
263
- readonly 'command.viewScrollRight': "Scroll forward";
264
- readonly 'command.priceCopy': "Copy price";
265
- readonly 'command.symbolSet': "Change symbol";
266
- readonly 'command.styleCandles': "Candles";
267
- readonly 'command.styleHollow': "Hollow candles";
268
- readonly 'command.styleBars': "Bars";
269
- readonly 'command.styleLine': "Line";
270
- readonly 'command.styleArea': "Area";
271
- readonly 'command.styleBaseline': "Baseline";
272
- readonly 'command.styleStepline': "Step line";
273
- readonly 'command.appearanceApply': "Chart appearance";
274
- readonly 'command.appearanceReset': "Reset defaults";
275
- readonly 'command.scaleNormal': "Regular price scale";
276
- readonly 'command.scaleLog': "Logarithmic price scale";
277
- readonly 'command.scalePercent': "Percentage price scale";
278
- readonly 'command.scaleIndexed': "Indexed price scale";
279
- readonly 'command.historyUndo': "Undo";
280
- readonly 'command.historyRedo': "Redo";
281
- readonly 'command.indicatorAdd': "Add indicator";
282
- readonly 'command.indicatorUpdate': "Update indicator";
283
- readonly 'command.indicatorsRemoveAll': "Remove indicators";
284
- readonly 'command.indicatorRemove': "Remove indicator";
285
- readonly 'command.indicatorHide': "Hide indicator";
286
- readonly 'command.indicatorShow': "Show indicator";
287
- readonly 'command.drawingsRemoveAll': "Remove drawings";
288
- readonly 'command.drawingDeleteSelected': "Delete selected drawing";
289
- readonly 'command.drawingArm': "Drawing tool";
290
- readonly 'command.drawingCursor': "Cursor mode";
291
- readonly 'command.drawingMagnet': "Magnet";
292
- readonly 'command.drawingStayInMode': "Stay in drawing mode";
293
- readonly 'command.drawingLockAll': "Lock all drawings";
294
- readonly 'command.drawingHide': "Hide drawings or indicators";
295
- readonly 'command.drawingSync': "Sync drawings across the layout";
296
- readonly 'command.drawingRemoveLockedPolicy': "Always remove locked drawings";
297
- readonly 'command.drawingFavorite': "Favorite drawing tool";
298
- readonly 'command.drawingFavoritesBar': "Favorite drawing tools toolbar";
299
- readonly 'command.drawingStyle': "Drawing style";
300
- readonly 'command.drawingProps': "Drawing properties";
301
- readonly 'command.drawingLock': "Lock drawing";
302
- readonly 'command.drawingClone': "Clone drawing";
303
- readonly 'command.drawingCopy': "Copy drawing";
304
- readonly 'command.drawingPaste': "Paste drawing";
305
- readonly 'command.drawingBringToFront': "Bring drawing to front";
306
- readonly 'command.drawingSendToBack': "Send drawing to back";
307
- readonly 'command.drawingBringForward': "Bring drawing forward";
308
- readonly 'command.drawingSendBackward': "Send drawing backward";
309
- readonly 'command.drawingHideSelected': "Hide drawing";
310
- readonly 'command.drawingVisibility': "Drawing visibility on timeframes";
311
- readonly 'command.drawingSettings': "Drawing settings";
312
- readonly 'command.drawingCommitEdit': "Apply drawing settings";
313
- readonly 'command.drawingPlaceImage': "Place image";
314
- readonly 'command.drawingTemplateApply': "Apply drawing template";
315
- readonly 'command.drawingTemplateSave': "Save drawing template";
316
- readonly 'command.drawingTemplateRemove': "Remove drawing template";
317
- readonly 'command.drawingTableAddRow': "Add table row";
318
- readonly 'command.drawingTableAddColumn': "Add table column";
319
- readonly 'command.drawingCancel': "Cancel drawing";
320
- readonly 'command.compareOpen': "Compare or add symbol";
321
- readonly 'command.compareAdd': "Add comparison";
322
- readonly 'command.compareRemove': "Remove comparison";
323
- readonly 'command.compareVisible': "Show or hide a comparison";
324
- readonly 'command.compareChangeSymbol': "Change compared symbol";
325
- readonly 'command.replayStart': "Start bar replay";
326
- readonly 'command.replayStartFirst': "Start bar replay at the first available date";
327
- readonly 'command.replayExit': "Exit bar replay";
328
- readonly 'command.replayPlay': "Play replay";
329
- readonly 'command.replayPause': "Pause replay";
330
- readonly 'command.replayStepForward': "Step forward";
331
- readonly 'command.replayStepBack': "Step back";
332
- readonly 'command.replayGoLive': "Replay to the live edge";
333
- readonly 'command.replaySpeed': "Replay speed";
334
- readonly 'command.replayTimeframe': "Replay update timeframe";
335
- readonly 'command.timeframeSet': "Timeframe";
336
- readonly 'command.subsessionRegular': "Regular hours";
337
- readonly 'command.subsessionExtended': "Extended hours";
338
- readonly 'command.rangeSet': "Date range";
339
- readonly 'command.timezoneSet': "Timezone";
340
- readonly 'command.themeLight': "Light theme";
341
- readonly 'command.themeDark': "Dark theme";
342
- readonly 'command.themeToggle': "Switch theme";
343
- readonly 'command.themeSet': "Set theme";
344
- readonly 'command.localeSet': "Language";
345
- readonly 'command.fullscreenEnter': "Fullscreen";
346
- readonly 'command.fullscreenExit': "Exit fullscreen";
347
- readonly 'command.fullscreenToggle': "Toggle fullscreen";
348
- readonly 'command.imageCapture': "Capture image";
349
- readonly 'command.imageDownload': "Download image";
350
- readonly 'command.dataDownload': "Download chart data";
351
- readonly 'command.imageCopy': "Copy image";
352
- readonly 'command.layoutArrangement': "Layout";
353
- readonly 'command.layoutActive': "Active chart";
354
- readonly 'command.layoutSync': "Chart synchronization";
355
- readonly 'command.layoutActivateNext': "Next chart in layout";
356
- readonly 'command.layoutActivatePrevious': "Previous chart in layout";
357
- readonly 'command.layoutMaximize': "Maximize or restore the active chart";
358
- readonly 'command.layoutSave': "Save layout";
359
- readonly 'command.layoutRename': "Rename layout";
360
- readonly 'command.layoutLoad': "Open layout";
361
- readonly 'command.layoutOpen': "Open layout…";
362
- readonly 'command.layoutDelete': "Delete layout";
363
- readonly 'command.layoutCreate': "Create new layout";
364
- readonly 'command.layoutAutosave': "Autosave layout";
365
- readonly 'drawing.toolbar': "Drawing tools";
366
- readonly 'drawing.groupTrend': "Trend tools";
367
- readonly 'drawing.groupFibGann': "Fibonacci & Gann";
368
- readonly 'drawing.groupPatterns': "Patterns";
369
- readonly 'drawing.groupForecast': "Forecast & measure";
370
- readonly 'drawing.groupGlyphs': "Emojis & stickers";
371
- readonly 'drawing.shapes': "Shapes";
372
- readonly 'drawing.textNotes': "Text & notes";
373
- readonly 'drawing.groupMenu': "{group} menu";
374
- readonly 'drawing.sectionLines': "Lines";
375
- readonly 'drawing.sectionChannels': "Channels";
376
- readonly 'drawing.sectionPitchforks': "Pitchforks";
377
- readonly 'drawing.sectionFibonacci': "Fibonacci";
378
- readonly 'drawing.sectionGann': "Gann";
379
- readonly 'drawing.sectionChartPatterns': "Chart patterns";
380
- readonly 'drawing.sectionElliott': "Elliott waves";
381
- readonly 'drawing.sectionCycles': "Cycles";
382
- readonly 'drawing.sectionForecasting': "Forecasting";
383
- readonly 'drawing.sectionVolumeBased': "Volume based";
384
- readonly 'drawing.sectionMeasures': "Measures";
385
- readonly 'drawing.sectionBrushes': "Brushes";
386
- readonly 'drawing.sectionArrows': "Arrows";
387
- readonly 'drawing.sectionContent': "Content";
388
- readonly 'drawing.sectionGlyphs': "Emojis, stickers, icons";
389
- readonly 'drawing.cursor': "Cursor";
390
- readonly 'drawing.cursorMenu': "Cursor menu";
391
- readonly 'drawing.cursorCross': "Cross";
392
- readonly 'drawing.cursorDot': "Dot";
393
- readonly 'drawing.cursorArrow': "Arrow";
394
- readonly 'drawing.cursorEraser': "Eraser";
395
- readonly 'drawing.measure': "Measure";
396
- readonly 'drawing.zoomIn': "Zoom in";
397
- readonly 'drawing.magnet': "Magnet";
398
- readonly 'drawing.magnetMenu': "Magnet menu";
399
- readonly 'drawing.magnetWeak': "Weak magnet";
400
- readonly 'drawing.magnetStrong': "Strong magnet";
401
- readonly 'drawing.stayInDrawingMode': "Stay in drawing mode";
402
- readonly 'drawing.lockAll': "Lock all drawings";
403
- readonly 'drawing.unlockAll': "Unlock all drawings";
404
- readonly 'drawing.hideMenu': "Hide menu";
405
- readonly 'drawing.hideDrawings': "Hide drawings";
406
- readonly 'drawing.showDrawings': "Show drawings";
407
- readonly 'drawing.hideIndicators': "Hide indicators";
408
- readonly 'drawing.showIndicators': "Show indicators";
409
- readonly 'drawing.hideAll': "Hide all";
410
- readonly 'drawing.showAll': "Show all";
411
- readonly 'drawing.syncLabel': "Sync drawings across the layout";
412
- readonly 'drawing.syncOnHelp': "New drawings are replicated to all charts in the layout and shown when the same ticker is selected";
413
- readonly 'drawing.syncOffHelp': "New drawings stay on the chart that drew them";
414
- readonly 'drawing.removeMenu': "Remove menu";
415
- readonly 'drawing.removeDrawings': "Remove drawings";
416
- readonly 'drawing.countDrawings': {
417
- readonly one: "{count} drawing";
418
- readonly other: "{count} drawings";
419
- };
420
- readonly 'drawing.countIndicators': {
421
- readonly one: "{count} indicator";
422
- readonly other: "{count} indicators";
423
- };
424
- readonly 'drawing.removeItems': "Remove {items}";
425
- readonly 'drawing.removeBoth': "Remove {drawings} & {indicators}";
426
- readonly 'drawing.nothingToRemove': "Nothing to remove";
427
- readonly 'drawing.alwaysRemoveLocked': "Always remove locked drawings";
428
- readonly 'drawing.favTools': "Favorite drawing tools";
429
- readonly 'drawing.favToolsBar': "Favorite drawing tools toolbar";
430
- readonly 'drawing.favAdd': "Add {tool} to favorites";
431
- readonly 'drawing.favRemove': "Remove {tool} from favorites";
432
- readonly 'drawing.moveToolbar': "Move toolbar";
433
- readonly 'drawing.moveFavoritesToolbar': "Move favorites toolbar";
434
- readonly 'drawing.settingsBar': "Selected drawing";
435
- readonly 'drawing.templates': "Templates";
436
- readonly 'drawing.drawingTemplates': "Drawing templates";
437
- readonly 'drawing.saveTemplateAs': "Save drawing template as...";
438
- readonly 'drawing.applyDefaultTemplate': "Apply default drawing template";
439
- readonly 'drawing.removeTemplateNamed': "Remove template {name}";
440
- readonly 'drawing.remove': "Remove";
441
- readonly 'drawing.addRowShort': "+ Row";
442
- readonly 'drawing.addColumnShort': "+ Col";
443
- readonly 'drawing.drawingColor': "Drawing color";
444
- readonly 'drawing.backgroundColor': "Background color";
445
- readonly 'drawing.thickness': "Thickness";
446
- readonly 'drawing.lineThickness': "Line thickness";
447
- readonly 'drawing.thicknessValue': "Thickness {n}px";
448
- readonly 'drawing.lineStyle': "Line style";
449
- readonly 'drawing.lineStyleValue': "Line style {name}";
450
- readonly 'drawing.lineSolid': "Line";
451
- readonly 'drawing.lineDashed': "Dashed line";
452
- readonly 'drawing.lineDotted': "Dotted line";
453
- readonly 'drawing.settings': "Settings";
454
- readonly 'drawing.drawingSettings': "Drawing settings";
455
- readonly 'drawing.lock': "Lock";
456
- readonly 'drawing.unlock': "Unlock";
457
- readonly 'drawing.lockDrawing': "Lock drawing";
458
- readonly 'drawing.unlockDrawing': "Unlock drawing";
459
- readonly 'drawing.deleteDrawing': "Delete drawing";
460
- readonly 'drawing.more': "More";
461
- readonly 'drawing.moreActions': "More drawing actions";
462
- readonly 'drawing.visualOrder': "Visual order";
463
- readonly 'drawing.visibilityOnTimeframes': "Visibility on timeframes";
464
- readonly 'drawing.clone': "Clone";
465
- readonly 'drawing.copy': "Copy";
466
- readonly 'drawing.modifierControl': "Ctrl";
467
- readonly 'drawing.modifierCommand': "Cmd";
468
- readonly 'drawing.hintClone': "{modifier} + Drag";
469
- readonly 'drawing.hintCopy': "{modifier} + C";
470
- readonly 'drawing.hintPaste': "{modifier} + V";
471
- readonly 'drawing.deleteWithKey': "Delete (Del)";
472
- readonly 'drawing.statusDrawingsHidden': "Drawings hidden";
473
- readonly 'drawing.statusDrawingsShown': "Drawings shown";
474
- readonly 'drawing.statusIndicatorsHidden': "Indicators hidden";
475
- readonly 'drawing.statusIndicatorsShown': "Indicators shown";
476
- readonly 'drawing.statusAllHidden': "Drawings and indicators hidden";
477
- readonly 'drawing.statusAllShown': "Drawings and indicators shown";
478
- readonly 'drawing.statusAllLocked': "All drawings locked";
479
- readonly 'drawing.statusAllUnlocked': "All drawings unlocked";
480
- readonly 'drawing.hide': "Hide";
481
- readonly 'drawing.bringToFront': "Bring to front";
482
- readonly 'drawing.sendToBack': "Send to back";
483
- readonly 'drawing.bringForward': "Bring forward";
484
- readonly 'drawing.sendBackward': "Send backward";
485
- readonly 'drawing.visCurrentAndAbove': "Current timeframe and above";
486
- readonly 'drawing.visCurrentAndBelow': "Current timeframe and below";
487
- readonly 'drawing.visCurrentOnly': "Current timeframe only";
488
- readonly 'drawing.visAll': "All timeframes";
489
- readonly 'drawing.saveTemplate': "Save drawing template";
490
- readonly 'drawing.templateName': "Template name";
491
- readonly 'drawing.save': "Save";
492
- readonly 'drawing.deleteTemplateTitle': "Delete this template?";
493
- readonly 'drawing.deleteTemplateBody': "Doing this will permanently delete your \"{name}\" drawing template.";
494
- readonly 'drawing.settingsTitle': "{tool} settings";
495
- readonly 'drawing.tabInputs': "Inputs";
496
- readonly 'drawing.tabStyle': "Style";
497
- readonly 'drawing.tabText': "Text";
498
- readonly 'drawing.tabTable': "Table";
499
- readonly 'drawing.tabCoordinates': "Coordinates";
500
- readonly 'drawing.tabVisibility': "Visibility";
501
- readonly 'drawing.template': "Template";
502
- readonly 'drawing.saveAs': "Save as...";
503
- readonly 'drawing.applyDefaults': "Apply defaults";
504
- readonly 'drawing.cancel': "Cancel";
505
- readonly 'drawing.ok': "Ok";
506
- readonly 'drawing.delete': "Delete";
507
- readonly 'drawing.close': "Close";
508
- readonly 'drawing.color': "Color";
509
- readonly 'drawing.rowLine': "Line";
510
- readonly 'drawing.background': "Background";
511
- readonly 'drawing.border': "Border";
512
- readonly 'drawing.profitColor': "Target zone color";
513
- readonly 'drawing.stopColor': "Stop zone color";
514
- readonly 'drawing.textColor': "Text color";
515
- readonly 'drawing.fontSize': "Font size";
516
- readonly 'drawing.size': "Size";
517
- readonly 'drawing.width': "Width";
518
- readonly 'drawing.opacity': "Opacity";
519
- readonly 'drawing.transparency': "Transparency";
520
- readonly 'drawing.label': "Label";
521
- readonly 'drawing.labels': "Labels";
522
- readonly 'drawing.left': "Left";
523
- readonly 'drawing.center': "Center";
524
- readonly 'drawing.right': "Right";
525
- readonly 'drawing.up': "Up";
526
- readonly 'drawing.down': "Down";
527
- readonly 'drawing.rowVisible': "{name} visible";
528
- readonly 'drawing.leftEnd': "Left end";
529
- readonly 'drawing.rightEnd': "Right end";
530
- readonly 'drawing.lineEndNormal': "Normal";
531
- readonly 'drawing.lineEndArrow': "Arrow";
532
- readonly 'drawing.increase': "Increase";
533
- readonly 'drawing.decrease': "Decrease";
534
- readonly 'drawing.rangeFrom': "From";
535
- readonly 'drawing.rangeTo': "To";
536
- readonly 'drawing.pickColor': "Pick a color";
537
- readonly 'drawing.extend': "Extend";
538
- readonly 'drawing.extendNone': "Don't extend";
539
- readonly 'drawing.extendLeft': "Extend left";
540
- readonly 'drawing.extendRight': "Extend right";
541
- readonly 'drawing.extendBoth': "Extend both";
542
- readonly 'drawing.extendLines': "Extend lines";
543
- readonly 'drawing.middlePoint': "Middle point";
544
- readonly 'drawing.middleLine': "Middle line";
545
- readonly 'drawing.priceLabel': "Price label";
546
- readonly 'drawing.priceLabels': "Price labels";
547
- readonly 'drawing.timeLabel': "Time label";
548
- readonly 'drawing.rowStyle': "Style";
549
- readonly 'drawing.variantOriginal': "Original";
550
- readonly 'drawing.variantSchiff': "Schiff";
551
- readonly 'drawing.variantModifiedSchiff': "Modified Schiff";
552
- readonly 'drawing.variantInside': "Inside";
553
- readonly 'drawing.sectionStats': "Stats";
554
- readonly 'drawing.priceChange': "Price change";
555
- readonly 'drawing.percentChange': "Percent change";
556
- readonly 'drawing.bars': "Bars";
557
- readonly 'drawing.dateTimeRange': "Date/time range";
558
- readonly 'drawing.volume': "Volume";
559
- readonly 'drawing.sectionInfo': "Info";
560
- readonly 'drawing.priceRange': "Price range";
561
- readonly 'drawing.barsRange': "Bars range";
562
- readonly 'drawing.angle': "Angle";
563
- readonly 'drawing.statsPosition': "Stats position";
564
- readonly 'drawing.direction': "Direction";
565
- readonly 'drawing.prices': "Prices";
566
- readonly 'drawing.levels': "Levels";
567
- readonly 'drawing.reverse': "Reverse";
568
- readonly 'drawing.fullCircles': "Full circles";
569
- readonly 'drawing.coeffsAsPercents': "Coeffs as percents";
570
- readonly 'drawing.glyph': "Glyph";
571
- readonly 'drawing.image': "Image";
572
- readonly 'drawing.replaceEllipsis': "Replace...";
573
- readonly 'drawing.chooseEllipsis': "Choose...";
574
- readonly 'drawing.link': "Link";
575
- readonly 'drawing.rowsLayout': "Rows layout";
576
- readonly 'drawing.rowsByNumber': "Number of rows";
577
- readonly 'drawing.ticksPerRow': "Ticks per row";
578
- readonly 'drawing.rowSize': "Row size";
579
- readonly 'drawing.upDown': "Up/Down";
580
- readonly 'drawing.total': "Total";
581
- readonly 'drawing.delta': "Delta";
582
- readonly 'drawing.valueAreaVolume': "Value area volume";
583
- readonly 'drawing.widthPercent': "Width %";
584
- readonly 'drawing.placement': "Placement";
585
- readonly 'drawing.upDownVolume': "Up/Down volume";
586
- readonly 'drawing.valueAreaUpDown': "Value area up/down";
587
- readonly 'drawing.pointOfControl': "Point of control";
588
- readonly 'drawing.valueAreaHigh': "Value area high";
589
- readonly 'drawing.valueAreaLow': "Value area low";
590
- readonly 'drawing.developingPoc': "Developing PoC";
591
- readonly 'drawing.developingVa': "Developing VA";
592
- readonly 'drawing.source': "Source";
593
- readonly 'drawing.mode': "Mode";
594
- readonly 'drawing.modeLineOpen': "Line (Open)";
595
- readonly 'drawing.modeLineHigh': "Line (High)";
596
- readonly 'drawing.modeLineLow': "Line (Low)";
597
- readonly 'drawing.modeLineClose': "Line (Close)";
598
- readonly 'drawing.modeLineHl2': "Line (HL2)";
599
- readonly 'drawing.mirrored': "Mirrored";
600
- readonly 'drawing.flipped': "Flipped";
601
- readonly 'drawing.target': "Target";
602
- readonly 'drawing.success': "Success";
603
- readonly 'drawing.failure': "Failure";
604
- readonly 'drawing.avgHl': "Avg HL";
605
- readonly 'drawing.variance': "Variance";
606
- readonly 'drawing.body': "Body";
607
- readonly 'drawing.borders': "Borders";
608
- readonly 'drawing.drawBorders': "Draw borders";
609
- readonly 'drawing.wick': "Wick";
610
- readonly 'drawing.drawWicks': "Draw wicks";
611
- readonly 'drawing.sectionDeviation': "Deviation";
612
- readonly 'drawing.upper': "Upper";
613
- readonly 'drawing.lower': "Lower";
614
- readonly 'drawing.useUpperDeviation': "Use upper deviation";
615
- readonly 'drawing.useLowerDeviation': "Use lower deviation";
616
- readonly 'drawing.risk': "Risk";
617
- readonly 'drawing.accountSize': "Account size";
618
- readonly 'drawing.lotSize': "Lot size";
619
- readonly 'drawing.leverage': "Leverage";
620
- readonly 'drawing.compactStatsMode': "Compact stats mode";
621
- readonly 'drawing.levelVisible': "Level {value} visible";
622
- readonly 'drawing.levelText': "Level {value} text";
623
- readonly 'drawing.removeLevel': "Remove level {value}";
624
- readonly 'drawing.addLevel': "Add level";
625
- readonly 'drawing.weight': "Weight";
626
- readonly 'drawing.bold': "Bold";
627
- readonly 'drawing.italic': "Italic";
628
- readonly 'drawing.addText': "Add text";
629
- readonly 'drawing.alignment': "Alignment";
630
- readonly 'drawing.textPlaceholder': "Text";
631
- readonly 'drawing.textEditor': "Drawing text";
632
- readonly 'drawing.headerRow': "Header row";
633
- readonly 'drawing.tableCell': "Cell {row},{col}";
634
- readonly 'drawing.addRow': "Add row";
635
- readonly 'drawing.removeRow': "Remove row";
636
- readonly 'drawing.addColumn': "Add column";
637
- readonly 'drawing.removeColumn': "Remove column";
638
- readonly 'drawing.coordBar': "#{n} (bar)";
639
- readonly 'drawing.coordPriceBar': "#{n} (price, bar)";
640
- readonly 'drawing.unitTicks': "Ticks";
641
- readonly 'drawing.unitSeconds': "Seconds";
642
- readonly 'drawing.unitMinutes': "Minutes";
643
- readonly 'drawing.unitHours': "Hours";
644
- readonly 'drawing.unitDays': "Days";
645
- readonly 'drawing.unitWeeks': "Weeks";
646
- readonly 'drawing.unitMonths': "Months";
647
- readonly 'drawing.timeframePinnedNote': "A drawing stays on at least one timeframe, so it can always be reached again.";
648
- readonly 'drawing.colorSwatch': "Color {hex}";
649
- readonly 'drawing.customColor': "Custom color";
650
- readonly 'drawing.saturationValue': "Saturation and brightness";
651
- readonly 'drawing.hue': "Hue";
652
- readonly 'drawing.hexColor': "Hex color";
653
- readonly 'drawing.add': "Add";
654
- readonly 'drawing.glyphPicker': "Glyph picker";
655
- readonly 'drawing.kindEmojis': "Emojis";
656
- readonly 'drawing.kindStickers': "Stickers";
657
- readonly 'drawing.kindIcons': "Icons";
658
- readonly 'drawing.recentlyUsed': "Recently used";
659
- readonly 'drawing.recentGlyph': "Recent {glyph}";
660
- readonly 'drawing.stickersSoon': "No sticker set is installed.";
661
- readonly 'drawing.glyphCatSmileys': "Smileys & People";
662
- readonly 'drawing.glyphCatNature': "Animals & Nature";
663
- readonly 'drawing.glyphCatFood': "Food & Drink";
664
- readonly 'drawing.glyphCatActivity': "Activity";
665
- readonly 'drawing.glyphCatTravel': "Travel & Places";
666
- readonly 'drawing.glyphCatObjects': "Objects";
667
- readonly 'drawing.glyphCatSymbols': "Symbols";
668
- readonly 'drawing.glyphCatFlags': "Flags";
669
- readonly 'drawing.glyphCatIconArrows': "Arrows";
670
- readonly 'drawing.glyphCatIconCurrency': "Currency";
671
- readonly 'drawing.glyphCatIconGestures': "Gestures and smileys";
672
- readonly 'drawing.glyphCatIconNature': "Nature";
673
- readonly 'drawing.glyphCatIconSpecial': "Special";
674
- readonly 'drawing.glyphCatIconSymbols': "Symbols and flags";
675
- readonly 'drawing.imageReading': "Reading...";
676
- readonly 'drawing.chooseImage': "Choose image";
677
- readonly 'drawing.imageFormats': "JPG or PNG";
678
- readonly 'drawing.imageMaxSize': "Max size 2MB";
679
- readonly 'drawing.imageDimensions': "{width} x {height}";
680
- readonly 'drawing.imageErrorType': "That file is not a JPG or PNG. Pick one of those two formats.";
681
- readonly 'drawing.imageErrorSize': "That image is {size}. The limit is 2MB.";
682
- readonly 'drawing.imageErrorRead': "That file could not be read. Try picking it again.";
683
- readonly 'drawing.imageErrorDecode': "That image could not be opened. It may be damaged.";
684
- readonly 'search.title': "Symbol search";
685
- readonly 'search.compareTitle': "Compare symbols";
686
- readonly 'search.changeSymbolTitle': "Change symbol";
687
- readonly 'search.placeholder': "Search symbol";
688
- readonly 'search.clear': "Clear";
689
- readonly 'search.close': "Close";
690
- readonly 'search.noMatches': "No symbols match your criteria";
691
- readonly 'search.loadingMore': "Loading more";
692
- readonly 'search.failed': "Search failed.";
693
- readonly 'search.results': "Symbols";
694
- readonly 'search.samePercent': "Same % scale";
695
- readonly 'search.newScale': "New price scale";
696
- readonly 'search.newPane': "New pane";
697
- readonly 'search.added': "Added symbols";
698
- readonly 'search.recent': "Recent symbols";
699
- readonly 'search.addedMark': "{symbol} is on the chart. Click to remove.";
700
- readonly 'search.compareEmpty': "No symbols here yet. Why not add some?";
701
- readonly 'search.allClasses': "All";
702
- readonly 'search.classFilter': "Asset class";
703
- readonly 'search.limitToScope': "Limit search to {scope}";
704
- readonly 'search.opDivision': "Division";
705
- readonly 'search.opSubtraction': "Subtraction";
706
- readonly 'search.opAddition': "Addition";
707
- readonly 'search.opMultiplication': "Multiplication";
708
- readonly 'search.opExponentiation': "Exponentiation";
709
- readonly 'search.opReciprocal': "Reciprocal";
710
- readonly 'search.opsHide': "Hide spread operators";
711
- readonly 'search.opsShow': "Show spread operators";
712
- readonly 'search.ops': "Spread operators";
713
- readonly 'status.title': "Market status";
714
- readonly 'status.unknownTitle': "Session unknown";
715
- readonly 'status.unknown': "This symbol's trading session has not resolved yet.";
716
- readonly 'status.endOfDayTitle': "End of day";
717
- readonly 'status.endOfDay': "Prices update once a day, after the session closes.";
718
- readonly 'status.delayed': "Prices are delayed.";
719
- readonly 'status.delayedPair': "{status} {delay}";
720
- readonly 'status.continuousTitle': "Open 24/7";
721
- readonly 'status.continuous': "This market trades around the clock and never closes.";
722
- readonly 'status.open': "Market is open for regular trading.";
723
- readonly 'status.openCloses': "Market is open for regular trading. Closes in {until}.";
724
- readonly 'status.extended': "Market is open for extended-hours trading.";
725
- readonly 'status.extendedRegular': "Market is open for extended-hours trading. Regular hours start in {until}.";
726
- readonly 'status.extendedCloses': "Market is open for extended-hours trading. Closes in {until}.";
727
- readonly 'status.pre': "Market is open for pre-market trading.";
728
- readonly 'status.preRegular': "Market is open for pre-market trading. Regular hours start in {until}.";
729
- readonly 'status.after': "Market is open for after-hours trading.";
730
- readonly 'status.afterEnds': "Market is open for after-hours trading. Ends in {until}.";
731
- readonly 'status.closed': "Market is closed.";
732
- readonly 'status.closedPre': "Market is closed. Pre-market starts in {until}.";
733
- readonly 'status.closedOpens': "Market is closed. Opens in {until}.";
734
- readonly 'status.exchangeTimezone': "Exchange timezone: {zone}";
735
- readonly 'status.durationDays': {
736
- readonly one: "{count} day";
737
- readonly other: "{count} days";
738
- };
739
- readonly 'status.durationHours': {
740
- readonly one: "{count} hour";
741
- readonly other: "{count} hours";
742
- };
743
- readonly 'status.durationMinutes': {
744
- readonly one: "{count} minute";
745
- readonly other: "{count} minutes";
746
- };
747
- readonly 'status.durationPair': "{major} {minor}";
748
- readonly 'range.oneDay': "1 Day";
749
- readonly 'range.fiveDays': "5 Days";
750
- readonly 'range.oneMonth': "1 Month";
751
- readonly 'range.threeMonths': "3 Months";
752
- readonly 'range.sixMonths': "6 Months";
753
- readonly 'range.yearToDate': "Year to date";
754
- readonly 'range.oneYear': "1 Year";
755
- readonly 'range.fiveYears': "5 Years";
756
- readonly 'range.all': "All data";
757
- readonly 'range.tip': "{range} · {timeframe} bars";
758
- readonly 'range.zoomIn': "Zoom in";
759
- readonly 'range.zoomOut': "Zoom out";
760
- readonly 'range.scrollLeft': "Scroll left";
761
- readonly 'range.scrollRight': "Scroll right";
762
- readonly 'range.reset': "Reset chart view";
763
- readonly 'range.maximizeChart': "Maximize chart";
764
- readonly 'range.restoreChart': "Restore chart";
765
- readonly 'timezone.title': "Chart timezone";
766
- readonly 'timezone.exchange': "Exchange";
767
- readonly 'timeframe.title': "Timeframe";
768
- readonly 'timeframe.all': "All timeframes";
769
- readonly 'timeframe.unitTicks': "Ticks";
770
- readonly 'timeframe.unitSeconds': "Seconds";
771
- readonly 'timeframe.unitMinutes': "Minutes";
772
- readonly 'timeframe.unitHours': "Hours";
773
- readonly 'timeframe.unitDays': "Days";
774
- readonly 'timeframe.unitWeeks': "Weeks";
775
- readonly 'timeframe.unitMonths': "Months";
776
- readonly 'timeframe.countTicks': {
777
- readonly one: "{count} Tick";
778
- readonly other: "{count} Ticks";
779
- };
780
- readonly 'timeframe.countSeconds': {
781
- readonly one: "{count} Second";
782
- readonly other: "{count} Seconds";
783
- };
784
- readonly 'timeframe.countMinutes': {
785
- readonly one: "{count} Minute";
786
- readonly other: "{count} Minutes";
787
- };
788
- readonly 'timeframe.countHours': {
789
- readonly one: "{count} Hour";
790
- readonly other: "{count} Hours";
791
- };
792
- readonly 'timeframe.countDays': {
793
- readonly one: "{count} Day";
794
- readonly other: "{count} Days";
795
- };
796
- readonly 'timeframe.countWeeks': {
797
- readonly one: "{count} Week";
798
- readonly other: "{count} Weeks";
799
- };
800
- readonly 'timeframe.countMonths': {
801
- readonly one: "{count} Month";
802
- readonly other: "{count} Months";
803
- };
804
- readonly 'timeframe.delete': "Delete {timeframe}";
805
- readonly 'timeframe.save': "Save {timeframe}";
806
- readonly 'timeframe.exists': "{timeframe} already exists";
807
- readonly 'timeframe.custom': "Custom timeframe";
808
- readonly 'timeframe.customCount': "Custom timeframe count";
809
- readonly 'timeframe.customUnit': "Custom timeframe unit";
810
- readonly 'timeframe.addCustom': "Add custom timeframe";
811
- readonly 'timeframe.increment': "Increment";
812
- readonly 'timeframe.decrement': "Decrement";
813
- readonly 'indicator.smaName': "Simple Moving Average";
814
- readonly 'indicator.smaDescription': "Smoothed average over a fixed window";
815
- readonly 'indicator.emaName': "Exponential Moving Average";
816
- readonly 'indicator.emaDescription': "Recency-weighted moving average";
817
- readonly 'indicator.hmaName': "Hull Moving Average";
818
- readonly 'indicator.hmaDescription': "Low-lag weighted moving average";
819
- readonly 'indicator.vwmaName': "Volume Weighted MA";
820
- readonly 'indicator.vwmaDescription': "Moving average weighted by volume";
821
- readonly 'indicator.bollingerName': "Bollinger Bands";
822
- readonly 'indicator.bollingerDescription': "SMA envelope at two standard deviations";
823
- readonly 'indicator.donchianName': "Donchian Channels";
824
- readonly 'indicator.donchianDescription': "Rolling highest-high and lowest-low channel";
825
- readonly 'indicator.keltnerName': "Keltner Channels";
826
- readonly 'indicator.keltnerDescription': "EMA midline with ATR-scaled bands";
827
- readonly 'indicator.supertrendName': "Supertrend";
828
- readonly 'indicator.supertrendDescription': "ATR trend band that flips with direction";
829
- readonly 'indicator.psarName': "Parabolic SAR";
830
- readonly 'indicator.psarDescription': "Stop-and-reverse trailing dots";
831
- readonly 'indicator.rsiName': "Relative Strength Index";
832
- readonly 'indicator.rsiDescription': "Momentum oscillator from 0 to 100";
833
- readonly 'indicator.macdName': "MACD";
834
- readonly 'indicator.macdDescription': "Moving Average Convergence Divergence";
835
- readonly 'indicator.stochasticName': "Stochastic Oscillator";
836
- readonly 'indicator.stochasticDescription': "%K and %D momentum from 0 to 100";
837
- readonly 'indicator.stochrsiName': "Stochastic RSI";
838
- readonly 'indicator.stochrsiDescription': "Stochastic applied to the RSI series";
839
- readonly 'indicator.adxName': "Average Directional Index";
840
- readonly 'indicator.adxDescription': "Trend strength with +DI and -DI";
841
- readonly 'indicator.atrName': "Average True Range";
842
- readonly 'indicator.atrDescription': "Volatility: Wilder's true-range average";
843
- readonly 'indicator.cciName': "Commodity Channel Index";
844
- readonly 'indicator.cciDescription': "Deviation from the typical-price average";
845
- readonly 'indicator.williamsName': "Williams %R";
846
- readonly 'indicator.williamsDescription': "Overbought and oversold momentum from -100 to 0";
847
- readonly 'indicator.rocName': "Rate of Change";
848
- readonly 'indicator.rocDescription': "Percent change over the period";
849
- readonly 'indicator.momentumName': "Momentum";
850
- readonly 'indicator.momentumDescription': "Price difference over the period";
851
- readonly 'indicator.volumeName': "Volume";
852
- readonly 'indicator.volumeDescription': "Per-bar traded volume histogram";
853
- readonly 'indicator.vwapName': "Volume Weighted Avg Price";
854
- readonly 'indicator.vwapDescription': "Cumulative volume-weighted average price";
855
- readonly 'indicator.obvName': "On-Balance Volume";
856
- readonly 'indicator.obvDescription': "Cumulative volume by close direction";
857
- readonly 'indicator.mfiName': "Money Flow Index";
858
- readonly 'indicator.mfiDescription': "Volume-weighted RSI from 0 to 100";
859
- readonly 'host.noVolume': "No volume from this feed";
860
- readonly 'host.saveConflict': "Saved elsewhere since you opened it. Load the newer version before saving.";
861
- readonly 'host.saveNotFound': "This was deleted elsewhere. Save it again as new.";
862
- readonly 'host.loadInvalid': "This could not be opened. Nothing on screen changed.";
863
- readonly 'host.loadUnavailable': "Your saved work could not be reached. Nothing on screen changed.";
864
- 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.";
865
- 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.";
866
- readonly 'layout.s': "Single chart";
867
- readonly 'layout.2h': "2 columns";
868
- readonly 'layout.2v': "2 rows";
869
- readonly 'layout.3h': "3 columns";
870
- readonly 'layout.3v': "3 rows";
871
- readonly 'layout.3s': "Large left, 2 stacked right";
872
- readonly 'layout.3r': "2 stacked left, large right";
873
- readonly 'layout.2_1': "2 above, 1 below";
874
- readonly 'layout.1_2': "1 above, 2 below";
875
- readonly 'layout.4': "2 × 2 grid";
876
- readonly 'layout.4v': "4 rows";
877
- readonly 'layout.4h': "4 columns";
878
- readonly 'layout.4s': "Large left, 3 stacked right";
879
- readonly 'layout.4s_l': "3 stacked left, large right";
880
- readonly 'layout.1_3': "1 above, 3 below";
881
- readonly 'layout.3_1': "3 above, 1 below";
882
- readonly 'layout.2_2_l': "2 columns, 2 stacked right";
883
- readonly 'layout.2_2_r': "2 stacked left, 2 columns";
884
- readonly 'layout.2_2': "2 above, 2 full-width rows below";
885
- readonly 'layout.1_4': "1 above, 4 below";
886
- readonly 'layout.5h': "5 columns";
887
- readonly 'layout.5v': "5 rows";
888
- readonly 'layout.5s': "Large left, 4 stacked right";
889
- readonly 'layout.5s_l': "4 stacked left, large right";
890
- readonly 'layout.2_3': "2 above, 3 below";
891
- readonly 'layout.3_2': "3 above, 2 below";
892
- readonly 'layout.4_1': "4 above, 1 below";
893
- readonly 'layout.2_3_l': "2 columns, 3 stacked right";
894
- readonly 'layout.2_3_r': "3 stacked left, 2 columns";
895
- readonly 'layout.6': "3 × 2 grid";
896
- readonly 'layout.6h': "6 columns";
897
- readonly 'layout.6v': "6 rows";
898
- readonly 'layout.6c': "2 × 3 grid";
899
- readonly 'layout.2_4': "2 above, 4 below";
900
- readonly 'layout.4_2': "4 above, 2 below";
901
- readonly 'layout.4_3': "4 above, 3 below";
902
- readonly 'layout.7h': "7 columns";
903
- readonly 'layout.7s': "Large left, 6 stacked right";
904
- readonly 'layout.8': "4 × 2 grid";
905
- readonly 'layout.8c': "2 × 4 grid";
906
- readonly 'layout.8h': "8 columns";
907
- readonly 'layout.8v': "8 rows";
908
- readonly 'layout.9s': "3 × 3 grid";
909
- readonly 'layout.5_4': "5 above, 4 below";
910
- readonly 'layout.9h': "9 columns";
911
- readonly 'layout.9v': "9 rows";
912
- readonly 'layout.10c5': "5 × 2 grid";
913
- readonly 'layout.10h': "10 columns";
914
- readonly 'layout.10v': "10 rows";
915
- readonly 'layout.12c6': "6 × 2 grid";
916
- readonly 'layout.12c4': "4 × 3 grid";
917
- readonly 'layout.12h': "12 columns";
918
- readonly 'layout.14c7': "7 × 2 grid";
919
- readonly 'layout.16c8': "8 × 2 grid";
920
- readonly 'layout.16c4': "4 × 4 grid";
921
- readonly 'layouts.setup': "Layout setup";
922
- readonly 'layouts.arrangement': "Chart arrangement";
923
- readonly 'layouts.syncInLayout': "Sync in layout";
924
- readonly 'layouts.syncSymbol': "Symbol";
925
- readonly 'layouts.syncTimeframe': "Timeframe";
926
- readonly 'layouts.syncCrosshair': "Crosshair";
927
- readonly 'layouts.syncTime': "Time";
928
- readonly 'layouts.syncDateRange': "Date range";
929
- readonly 'layouts.syncSymbolTip': "Symbol changes on all charts within the layout";
930
- readonly 'layouts.syncTimeframeTip': "Timeframe changes on all charts within the layout";
931
- readonly 'layouts.syncCrosshairTip': "Crosshair is synced across all charts within the layout";
932
- readonly 'layouts.syncTimeTip': "When a chart is clicked, all charts within the layout display the same point of time";
933
- readonly 'layouts.syncDateRangeTip': "Date range changes on all charts within the layout";
934
- readonly 'layouts.syncSymbolToggle': "Sync symbol";
935
- readonly 'layouts.syncTimeframeToggle': "Sync timeframe";
936
- readonly 'layouts.syncCrosshairToggle': "Sync crosshair";
937
- readonly 'layouts.syncTimeToggle': "Sync time";
938
- readonly 'layouts.syncDateRangeToggle': "Sync date range";
939
- readonly 'layouts.unnamed': "Unnamed";
940
- readonly 'layouts.unsavedChanges': "Unsaved changes";
941
- readonly 'layouts.allSaved': "All changes saved";
942
- readonly 'layouts.notSaving': "Not saving until this is restored";
943
- readonly 'layouts.manage': "Manage layouts";
944
- readonly 'layouts.saveLayout': "Save layout";
945
- readonly 'layouts.hintSave': "{modifier} + S";
946
- readonly 'layouts.hintOpen': "Dot";
947
- readonly 'layouts.save': "Save";
948
- readonly 'layouts.autosave': "Autosave";
949
- readonly 'layouts.rename': "Rename";
950
- readonly 'layouts.copyOfName': "{name} copy";
951
- readonly 'layouts.saveNewTitle': "Save New Chart Layout";
952
- readonly 'layouts.saveNewLabel': "Enter a new chart layout name:";
953
- readonly 'layouts.copyTitle': "Make copy of chart layout";
954
- readonly 'layouts.renameTitle': "Rename chart layout";
955
- readonly 'layouts.createTitle': "Create layout";
956
- readonly 'layouts.newLayoutName': "New layout name";
957
- readonly 'layouts.createPlaceholder': "My layout";
958
- readonly 'layouts.create': "Create";
959
- readonly 'layouts.makeCopyRow': "Make a copy…";
960
- readonly 'layouts.renameRow': "Rename…";
961
- readonly 'layouts.downloadDataRow': "Download chart data";
962
- readonly 'layouts.createNewRow': "Create new layout…";
963
- readonly 'layouts.recentlyUsed': "Recently used";
964
- readonly 'layouts.loading': "Loading";
965
- readonly 'layouts.emptyNone': "No saved layouts yet.";
966
- readonly 'layouts.openLayoutRow': "Open layout…";
967
- readonly 'layouts.listingFacts': "{symbol}, {timeframe}";
968
- readonly 'layouts.listingDated': "{facts} ({date})";
969
- readonly 'layouts.dialogTitle': "Layouts";
970
- readonly 'layouts.search': "Search";
971
- readonly 'layouts.columnName': "Layout name";
972
- readonly 'layouts.sortBy': "Sort by layout name, date changed";
973
- readonly 'layouts.sortNameAsc': "Layout name (A to Z)";
974
- readonly 'layouts.sortNameDesc': "Layout name (Z to A)";
975
- readonly 'layouts.sortModifiedAsc': "Date modified (oldest first)";
976
- readonly 'layouts.sortModifiedDesc': "Date modified (newest first)";
977
- readonly 'layouts.favorite': "Add to favorites";
978
- readonly 'layouts.unfavorite': "Remove from favorites";
979
- readonly 'layouts.noMatches': "Nothing matches.";
980
- readonly 'layouts.delete': "Delete";
981
- readonly 'layouts.deleteNamed': "Delete {name}";
982
- readonly 'layouts.deleteConfirm': "Delete this chart layout?";
983
- readonly 'layouts.deleteConfirmBody': "Doing this will permanently delete your \"{name}\" layout.";
984
- readonly 'layouts.cancel': "Cancel";
985
- readonly 'layouts.close': "Close";
986
- readonly 'layouts.errList': "Could not load your saved layouts.";
987
- readonly 'session.pre': "Pre-market";
988
- readonly 'session.open': "Market open";
989
- readonly 'session.extended': "Extended hours";
990
- readonly 'session.after': "After-hours";
991
- readonly 'session.closed': "Market closed";
992
- readonly 'inputs.cancel': "Cancel";
993
- readonly 'inputs.apply': "Apply";
994
- readonly 'replay.watermark': "Replay";
995
- readonly 'replay.selectBar': "Select bar";
996
- readonly 'replay.selectDate': "Select date";
997
- readonly 'replay.selectStartingPoint': "Select starting point";
998
- readonly 'replay.startBar': "Bar";
999
- readonly 'replay.startDate': "Date…";
1000
- readonly 'replay.startFirst': "First available date";
1001
- readonly 'replay.startRandom': "Random bar";
1002
- readonly 'replay.startDateField': "Replay start date";
1003
- readonly 'replay.startTimeField': "Replay start time (UTC, optional)";
1004
- readonly 'replay.dateMask': "YYYY-MM-DD";
1005
- readonly 'replay.timeMask': "HH:MM";
1006
- readonly 'replay.previousMonth': "Previous month";
1007
- readonly 'replay.nextMonth': "Next month";
1008
- readonly 'replay.cancel': "Cancel";
1009
- readonly 'replay.select': "Select";
1010
- readonly 'replay.weekdayMon': "Mo";
1011
- readonly 'replay.weekdayTue': "Tu";
1012
- readonly 'replay.weekdayWed': "We";
1013
- readonly 'replay.weekdayThu': "Th";
1014
- readonly 'replay.weekdayFri': "Fr";
1015
- readonly 'replay.weekdaySat': "Sa";
1016
- readonly 'replay.weekdaySun': "Su";
1017
- readonly 'replay.stepBack': "Step back one bar";
1018
- readonly 'replay.play': "Play";
1019
- readonly 'replay.pause': "Pause";
1020
- readonly 'replay.stepForward': "Step forward one bar";
1021
- readonly 'replay.goLiveTitle': "Jump to the live edge";
1022
- readonly 'replay.exit': "Exit replay";
1023
- readonly 'replay.speed': "Replay speed";
1024
- readonly 'replay.updatesPerSecond': {
1025
- readonly one: "{count} update per second";
1026
- readonly other: "{count} updates per second";
1027
- };
1028
- readonly 'replay.oneUpdatePerSeconds': {
1029
- readonly one: "1 update per {count} second";
1030
- readonly other: "1 update per {count} seconds";
1031
- };
1032
- readonly 'replay.timeframe': "Update timeframe";
1033
- readonly 'replay.timeframeHelp': "How much time each replay update advances. Finer than the chart timeframe, each bar forms from real finer bars.";
1034
- readonly 'replay.timeframeNone': "No finer timeframe for this chart timeframe";
1035
- readonly 'replay.auto': "Auto";
1036
- readonly 'replay.autoSelectTimeframe': "Auto select timeframe";
1037
- readonly 'menu.resetView': "Reset chart view";
1038
- readonly 'menu.copyPrice': "Copy price {price}";
1039
- readonly 'menu.paste': "Paste";
1040
- readonly 'menu.removeIndicators': {
1041
- readonly one: "Remove {count} indicator";
1042
- readonly other: "Remove {count} indicators";
1043
- };
1044
- readonly 'menu.removeDrawings': {
1045
- readonly one: "Remove {count} drawing";
1046
- readonly other: "Remove {count} drawings";
1047
- };
1048
- readonly 'menu.settings': "Settings…";
1049
- readonly 'tool.trend_line': "Trend line";
1050
- readonly 'tool.ray': "Ray";
1051
- readonly 'tool.info_line': "Info line";
1052
- readonly 'tool.extended': "Extended line";
1053
- readonly 'tool.trend_angle': "Trend angle";
1054
- readonly 'tool.horizontal_line': "Horizontal line";
1055
- readonly 'tool.horizontal_ray': "Horizontal ray";
1056
- readonly 'tool.vertical_line': "Vertical line";
1057
- readonly 'tool.cross_line': "Cross line";
1058
- readonly 'tool.arrow': "Arrow";
1059
- readonly 'tool.rectangle': "Rectangle";
1060
- readonly 'tool.rotated_rectangle': "Rotated rectangle";
1061
- readonly 'tool.ellipse': "Ellipse";
1062
- readonly 'tool.circle': "Circle";
1063
- readonly 'tool.triangle': "Triangle";
1064
- readonly 'tool.arc': "Arc";
1065
- readonly 'tool.curve': "Curve";
1066
- readonly 'tool.double_curve': "Double curve";
1067
- readonly 'tool.regression_trend': "Regression trend";
1068
- readonly 'tool.parallel_channel': "Parallel channel";
1069
- readonly 'tool.flat_top_bottom': "Flat top/bottom";
1070
- readonly 'tool.disjoint_channel': "Disjoint channel";
1071
- readonly 'tool.fib_retracement': "Fib retracement";
1072
- readonly 'tool.fib_trend_ext': "Trend-based fib extension";
1073
- readonly 'tool.fib_channel': "Fib channel";
1074
- readonly 'tool.fib_timezone': "Fib time zone";
1075
- readonly 'tool.fib_speed_resist_fan': "Fib speed resistance fan";
1076
- readonly 'tool.fib_trend_time': "Trend-based fib time";
1077
- readonly 'tool.fib_circles': "Fib circles";
1078
- readonly 'tool.fib_spiral': "Fib spiral";
1079
- readonly 'tool.fib_speed_resist_arcs': "Fib speed resistance arcs";
1080
- readonly 'tool.fib_wedge': "Fib wedge";
1081
- readonly 'tool.pitchfan': "Pitchfan";
1082
- readonly 'tool.pitchfork': "Pitchfork";
1083
- readonly 'tool.schiff_pitchfork': "Schiff pitchfork";
1084
- readonly 'tool.schiff_pitchfork_modified': "Modified Schiff pitchfork";
1085
- readonly 'tool.inside_pitchfork': "Inside pitchfork";
1086
- readonly 'tool.gannbox': "Gann box";
1087
- readonly 'tool.gannbox_square': "Gann square";
1088
- readonly 'tool.gannbox_fixed': "Gann square fixed";
1089
- readonly 'tool.gannbox_fan': "Gann fan";
1090
- readonly 'tool.xabcd_pattern': "XABCD pattern";
1091
- readonly 'tool.cypher_pattern': "Cypher pattern";
1092
- readonly 'tool.abcd_pattern': "ABCD pattern";
1093
- readonly 'tool.three_drives': "Three drives pattern";
1094
- readonly 'tool.triangle_pattern': "Triangle pattern";
1095
- readonly 'tool.head_and_shoulders': "Head and shoulders";
1096
- readonly 'tool.elliott_impulse_wave': "Elliott impulse (12345)";
1097
- readonly 'tool.elliott_correction': "Elliott correction (ABC)";
1098
- readonly 'tool.elliott_triangle_wave': "Elliott triangle (ABCDE)";
1099
- readonly 'tool.elliott_double_combo': "Elliott double combo (WXY)";
1100
- readonly 'tool.elliott_triple_combo': "Elliott triple combo (WXYXZ)";
1101
- readonly 'tool.cyclic_lines': "Cyclic lines";
1102
- readonly 'tool.time_cycles': "Time cycles";
1103
- readonly 'tool.sine_line': "Sine line";
1104
- readonly 'tool.long_position': "Long position";
1105
- readonly 'tool.short_position': "Short position";
1106
- readonly 'tool.forecast': "Position forecast";
1107
- readonly 'tool.sector': "Sector";
1108
- readonly 'tool.bars_pattern': "Bars pattern";
1109
- readonly 'tool.ghost_feed': "Ghost feed";
1110
- readonly 'tool.anchored_vwap': "Anchored VWAP";
1111
- readonly 'tool.fixed_range_volume_profile': "Fixed range volume profile";
1112
- readonly 'tool.anchored_volume_profile': "Anchored volume profile";
1113
- readonly 'tool.image': "Image";
1114
- readonly 'tool.content_card': "Content card";
1115
- readonly 'tool.emoji': "Emoji";
1116
- readonly 'tool.sticker': "Sticker";
1117
- readonly 'tool.icon': "Icon";
1118
- readonly 'tool.text': "Text";
1119
- readonly 'tool.note': "Note";
1120
- readonly 'tool.comment': "Comment";
1121
- readonly 'tool.callout': "Callout";
1122
- readonly 'tool.price_label': "Price label";
1123
- readonly 'tool.arrow_up': "Arrow mark up";
1124
- readonly 'tool.arrow_down': "Arrow mark down";
1125
- readonly 'tool.arrow_marker': "Arrow marker";
1126
- readonly 'tool.flag': "Flag mark";
1127
- readonly 'tool.price_note': "Price note";
1128
- readonly 'tool.pin': "Pin";
1129
- readonly 'tool.signpost': "Signpost";
1130
- readonly 'tool.table': "Table";
1131
- readonly 'tool.brush': "Brush";
1132
- readonly 'tool.highlighter': "Highlighter";
1133
- readonly 'tool.path': "Path";
1134
- readonly 'tool.polyline': "Polyline";
1135
- readonly 'tool.price_range': "Price range";
1136
- readonly 'tool.date_range': "Date range";
1137
- readonly 'tool.date_and_price_range': "Date and price range";
1138
- readonly 'tool.measure': "Measure";
1139
- readonly 'legend.open': "O";
1140
- readonly 'legend.high': "H";
1141
- readonly 'legend.low': "L";
1142
- readonly 'legend.close': "C";
1143
- readonly 'legend.change': "{change} ({percent}%)";
1144
- readonly 'legend.indicatorSettings': "Indicator settings";
1145
- readonly 'legend.showRows': "Show indicator rows";
1146
- readonly 'legend.hideRows': "Hide indicator rows";
1147
- readonly 'legend.restorePane': "Restore pane";
1148
- readonly 'legend.collapsePane': "Collapse pane";
1149
- readonly 'legend.maximizePane': "Maximize pane";
1150
- readonly 'legend.showIndicator': "Show indicator";
1151
- readonly 'legend.hideIndicator': "Hide indicator";
1152
- readonly 'legend.scaleNormal': "Reg";
1153
- readonly 'legend.scaleLog': "Log";
1154
- readonly 'legend.scalePercent': "%";
1155
- readonly 'legend.scaleIndexed': "100";
1156
- readonly 'legend.changeSymbol': "Change symbol";
1157
- readonly 'legend.removeCompare': "Remove comparison";
1158
- readonly 'legend.removeIndicator': "Remove indicator";
1159
- }, ChartLocaleCode>;
1160
- /** A drawing tool's display name for a registry `type`: the catalog's when it knows the type, else
1161
- * the registry's own English `name`, so a tool the catalog has not met still has a name. */
1162
- declare function toolName(t: ChartTranslate, type: string, fallback: string): string;
1163
- /** A multi-chart arrangement's display name for its code, else the arrangement catalog's English
1164
- * label. An arrangement code separates its parts with hyphens (`2-2-l`) where a catalog key uses
1165
- * underscores, so the code is converted rather than asking every caller to. */
1166
- declare function arrangementName(t: ChartTranslate, code: string, fallback: string): string;
1167
- /** A `ChartI18n` over the widget's own catalog, starting in `initial` (English when omitted): one
1168
- * of the built-in codes, or a code the `locales` option registers. */
1169
- declare function createChartI18n(initial?: string, options?: ChartI18nOptions): ChartI18n;
1170
-
1171
- /** The session an instant classifies into. `extended` is trading outside regular hours when the
1172
- * symbol does not split it into pre-market and after-hours. */
1173
- type SessionState = 'pre' | 'open' | 'extended' | 'after' | 'closed';
1174
- /** One subsession of an extended-hours symbol: `regular`,
1175
- * `extended`, `premarket` or `postmarket`, each with its own session string and, optionally,
1176
- * the corrections that shorten it. `SymbolInfo.subsessions` satisfies it; an id the chart has
1177
- * no state for is ignored. */
1178
- interface SubsessionSource {
1179
- readonly id: string;
1180
- readonly session: string;
1181
- readonly sessionCorrections?: string;
1182
- }
1183
- /** What a session model is built from: the symbology triple plus the optional corrections and
1184
- * subsessions. `SymbolInfo` satisfies it. */
1185
- interface SessionSource {
1186
- readonly timezone: string;
1187
- readonly session: string;
1188
- readonly sessionHolidays?: string;
1189
- readonly corrections?: string;
1190
- readonly subsessions?: readonly SubsessionSource[];
1191
- }
1192
- /** One trading stretch of a trading day, in minutes from that day's exchange-local midnight. The
1193
- * start may be negative (the stretch begins on a previous day) and the end may pass 1440 (it
1194
- * runs into the next day); the end is exclusive. */
1195
- interface SessionSegment {
1196
- readonly start: number;
1197
- readonly end: number;
1198
- }
1199
- /** A schedule: the stretches per weekday (0 = Sunday), and dated overrides keyed 'YYYYMMDD'. */
1200
- interface SessionSchedule {
1201
- readonly week: readonly (readonly SessionSegment[])[];
1202
- readonly corrections: ReadonlyMap<string, readonly SessionSegment[]>;
1203
- }
1204
- interface SessionModel {
1205
- /** The exchange zone every minute here is read in. */
1206
- readonly timezone: string;
1207
- /** A `24x7` symbol: always open, no transitions, no timeline. */
1208
- readonly continuous: boolean;
1209
- /** The regular session. */
1210
- readonly regular: SessionSchedule;
1211
- /** Extended-hours stretches by the state they classify into, from the subsessions. */
1212
- readonly extended: readonly {
1213
- readonly state: Exclude<SessionState, 'open' | 'closed'>;
1214
- readonly schedule: SessionSchedule;
1215
- }[];
1216
- /** Full-closure dates, 'YYYYMMDD'. */
1217
- readonly holidays: ReadonlySet<string>;
1218
- }
1219
- /** Build the session model from a symbol's metadata. Null when the grammar cannot read any part
1220
- * of it: a chart then shows no bands, no status and no timeline for the symbol rather than a
1221
- * session it guessed. A `regular` subsession, when given, is the regular session; the symbol's
1222
- * `session` is otherwise. Subsessions with ids the chart has no state for are ignored. */
1223
- declare function parseSessionModel(source: SessionSource): SessionModel | null;
1224
- /** Which of a symbol's named sessions a chart displays:
1225
- * `regular` shows regular hours only, `extended` shows the extended-hours bars as well. A
1226
- * per-chart preference a host persists. `extended` is the DEFAULT and shows every bar the feed
1227
- * served; narrowing to `regular` is the opt-in, because a chart that silently hid bars it had
1228
- * would be lying about the market by default. A symbol without extended hours has nothing to
1229
- * choose, and every bar shows either way. */
1230
- type ActiveSubsession = 'regular' | 'extended';
1231
- declare const DEFAULT_SUBSESSION: ActiveSubsession;
1232
- /** Whether the symbol declared any hours outside its regular session. Only such a symbol offers a
1233
- * subsession choice or shades extended hours. */
1234
- declare function hasExtendedHours(model: SessionModel): boolean;
1235
- /** The bar filter for the active subsession: under `regular`, on a symbol with extended hours,
1236
- * keep the bars whose open falls in regular hours; otherwise nothing is filtered (null). For
1237
- * intraday timeframes only: a daily bar spans whole sessions, so a caller applies the filter on
1238
- * intraday timeframes and shows every daily bar. */
1239
- declare function subsessionBarFilter(model: SessionModel, active: ActiveSubsession): ((epochSecs: number) => boolean) | null;
1240
- /** The session state at an instant (epoch seconds), under the symbol's exchange clock. */
1241
- declare function sessionStateAt(model: SessionModel, epochSecs: number): SessionState;
1242
- /** The next session transition after an instant, exact to the minute, or null when there is
1243
- * none within eight days (a continuous market, or a long closure). */
1244
- declare function nextSessionChange(model: SessionModel, epochSecs: number): {
1245
- atSecs: number;
1246
- state: SessionState;
1247
- } | null;
1248
- interface SessionTimeline {
1249
- /** The exchange-local day's stretches, closed gaps included, covering 0 to 1440 minutes. */
1250
- readonly segments: readonly {
1251
- readonly start: number;
1252
- readonly end: number;
1253
- readonly state: SessionState;
1254
- }[];
1255
- /** Now, in exchange-local minutes from midnight. */
1256
- readonly nowMins: number;
1257
- /** The exchange-local weekday, written in the language of `tag` and upper-cased ("MON"). */
1258
- readonly dayLabel: string;
1259
- readonly timezone: string;
1260
- }
1261
- /** The exchange-local day's timeline for a status popup. `tag` is the BCP 47 tag the weekday is
1262
- * written in: a date part, so it comes from Intl rather than the catalog. */
1263
- declare function sessionTimeline(model: SessionModel, epochSecs: number, tag: string): SessionTimeline;
1264
- /** A symbol's market status at an instant: the session state and the feed's liveness together,
1265
- * so a consumer cannot present an end-of-day or delayed feed as a live open market. */
1266
- interface MarketStatus {
1267
- readonly state: SessionState;
1268
- /** The feed's liveness, an explicit part of the status. */
1269
- readonly dataStatus: DataStatus;
1270
- /** A `24x7` symbol. */
1271
- readonly continuous: boolean;
1272
- /** The next transition, or null when there is none to count down to. */
1273
- readonly next: {
1274
- readonly atSecs: number;
1275
- readonly state: SessionState;
1276
- } | null;
1277
- }
1278
- declare function marketStatus(model: SessionModel, dataStatus: DataStatus, nowSecs: number): MarketStatus;
1279
- /** The market status straight from a resolved symbol, or null when its session cannot be read. */
1280
- declare function marketStatusFor(symbol: Pick<SymbolInfo, 'timezone' | 'session' | 'sessionHolidays' | 'corrections' | 'subsessions' | 'dataStatus'>, nowSecs: number): MarketStatus | null;
1281
- /** The catalog key of a session state's name: the same five words the legend's status dot and
1282
- * a status popup's title use. */
1283
- declare const SESSION_STATE_TITLE: Readonly<Record<SessionState, ChartMessageKey>>;
1284
- /** The title line of a status popup: the feed's liveness when it is not a live stream, the
1285
- * continuous market's own word, or the session state's name. */
1286
- declare function marketStatusTitle(t: ChartTranslate, status: MarketStatus): string;
1287
- /** "3 days 4 hours": the coarsest unit, and the next one down when it is non-zero. Each unit is a
1288
- * whole phrase and `status.durationPair` owns the order and the separator, so a language decides
1289
- * both rather than inheriting English's. A duration under a minute reads as one minute. */
1290
- declare function formatDuration(t: ChartTranslate, secs: number): string;
1291
- /** The sentence under a status popup's title. An end-of-day feed states that and nothing about
1292
- * hours; a continuous market states that it never closes; otherwise the session state with a
1293
- * countdown to the next transition when one is known, and a delayed stream adds that its prices
1294
- * are delayed. */
1295
- declare function marketStatusText(t: ChartTranslate, status: MarketStatus, nowSecs: number): string;
1296
- /** The footer naming the exchange zone a timeline is drawn in: "Exchange timezone: New York
1297
- * (UTC-4)". */
1298
- declare function exchangeTimezoneText(t: ChartTranslate, timezone: string, at?: Date): string;
1299
-
1300
- /** Paints a market's mark into a box the chart owns, and answers what takes it down again. */
1301
- type SymbolMarkPainter = (request: {
1302
- symbol: string;
1303
- host: HTMLElement;
1304
- size: number;
1305
- }) => (() => void) | void;
1306
- /** Paints the mark of the venue a market lists on, the same way. */
1307
- type VenueMarkPainter = (request: {
1308
- exchange: string;
1309
- host: HTMLElement;
1310
- size: number;
1311
- }) => (() => void) | void;
1312
- /** Paints the mark of a data source, where a row names a data source rather than a venue. */
1313
- type DataSourceMarkPainter = (request: {
1314
- dataSource: string;
1315
- host: HTMLElement;
1316
- size: number;
1317
- }) => (() => void) | void;
1318
- /** Every painter the host lent, as the chart carries them: null where it lent none. */
1319
- interface MarkPainters {
1320
- readonly symbol: SymbolMarkPainter | null;
1321
- readonly venue: VenueMarkPainter | null;
1322
- readonly dataSource: DataSourceMarkPainter | null;
1323
- }
1324
- /** The host's hooks, as an entry point takes them. Each is the host's to lend or withhold, and
1325
- * every entry point that paints marks takes exactly these, so a host writes them once and hands
1326
- * the same three to a chart and to a picker it opens away from one. */
1327
- interface MarkPainterHooks {
1328
- /** The host's mark for a market, called WHEREVER the chart names one: each chart's legend, the
1329
- * compare rows under it, every row of the symbol search and compare dialogs, and the market tag
1330
- * an extension's notice wears. It receives the element to paint into and the symbol it stands for,
1331
- * and returns a disposer that takes the mark down again.
1332
- *
1333
- * One hook rather than one per surface, so a market wears the same mark everywhere it appears and
1334
- * a host implements it once. The chart ships no artwork and fetches none: absent this, every mark
1335
- * is the neutral monogram the package draws itself. */
1336
- symbolMark?: SymbolMarkPainter;
1337
- /** The host's mark for the venue a market lists on, painted beside the venue's name in every row
1338
- * of the symbol search and compare dialogs. Like `symbolMark`, it receives the element to paint
1339
- * into and the size of the box, and returns a disposer; absent, a venue wears its initial on the
1340
- * neutral disc the package draws itself. */
1341
- venueMark?: VenueMarkPainter;
1342
- /** The host's mark for the data source a row names where it names no venue, painted in that
1343
- * row's source cell the same way. Absent, a data source wears its initial on a neutral disc. */
1344
- dataSourceMark?: DataSourceMarkPainter;
1345
- }
1346
-
1347
- /** One glyph: its own grid and the inner markup drawn on it. */
1348
- interface Glyph {
1349
- viewBox: string;
1350
- body: string;
1351
- /** A glyph that is not square keeps its grid's proportion: the size is its HEIGHT and the width
1352
- * follows this ratio. Square glyphs omit it. */
1353
- aspect?: number;
1354
- /** The height the glyph is drawn at when a caller names none. Glyphs drawn at 28 omit it. */
1355
- size?: number;
1356
- }
1357
-
1358
- interface ChartOverrides {
1359
- appearance: {
1360
- background: string;
1361
- upColor: string;
1362
- downColor: string;
1363
- /** Candle anatomy: the border ring and the wick are their OWN colors per direction. They do
1364
- * NOT follow upColor/downColor; each is set independently. */
1365
- borderUpColor: string;
1366
- borderDownColor: string;
1367
- wickUpColor: string;
1368
- wickDownColor: string;
1369
- grid: boolean;
1370
- /** Shade pre-market / after-hours / overnight stretches. */
1371
- sessions: boolean;
1372
- /** Bar-close countdown pill on the price scale. */
1373
- countdown: boolean;
1374
- };
1375
- }
1376
- /** The brand palette, single-sourced: a host's own surfaces on the chart read these (an
1377
- * extension's lines among them), and a rebrand edits two strings. The candle bodies keep their
1378
- * own pair; see the note on DEFAULT_OVERRIDES for why. */
1379
- declare const BRAND_UP = "#4c98fb";
1380
- declare const BRAND_DOWN = "#f23645";
1381
- declare const DEFAULT_OVERRIDES: ChartOverrides;
1382
- /** A recursive partial of the tree — what a host supplies. */
1383
- type PartialOverrides = {
1384
- [S in keyof ChartOverrides]?: Partial<ChartOverrides[S]>;
1385
- };
1386
- /** Deep-fill a partial over the defaults. One level of nesting by design — the tree is two levels
1387
- * (section → leaf) and stays that way; new leaves are additive. */
1388
- declare function mergeOverrides(partial?: PartialOverrides | null): ChartOverrides;
1389
- /** The precedence composer: deep-fill any number of partials over an explicit BASE, later layers
1390
- * winning leaf by leaf. The widget's look resolves through this — its theme-derived floor, then
1391
- * the host's constructor partial, then runtime applyAppearance calls: one ladder where runtime
1392
- * beats constructor beats theme, expressed as one pure function. */
1393
- declare function layerOverrides(base: ChartOverrides, ...partials: (PartialOverrides | null | undefined)[]): ChartOverrides;
1394
-
1395
- /** One resolved role as it is written to the DOM. */
1396
- interface ThemeDeclaration {
1397
- /** The private custom-property name. */
1398
- property: string;
1399
- /** The resolved value, already a CSS token. */
1400
- value: string;
1401
- }
1402
-
1403
- /** The two modes Quick Charts ships complete. A host switches between them at runtime; it does not
1404
- * add a third. A host that keeps named brand presets resolves each preset to a custom light or
1405
- * dark palette before passing it in. */
1406
- type ThemeMode = 'light' | 'dark';
1407
- /** What a role's value is written as. Every value is a CSS token string, so `length` is `'4px'`,
1408
- * `duration` is `'150ms'`, `easing` is a timing function such as `'ease-out'`, and `scale` is a
1409
- * unitless factor such as `'0.97'`; the kind says which tokens are valid, and validation enforces
1410
- * it. */
1411
- type ThemeRoleKind = 'color' | 'length' | 'font' | 'duration' | 'easing' | 'scale' | 'shadow';
1412
- /** The grouping a role belongs to. Families organize the manual and the manifest; they are not part
1413
- * of a role's identity. */
1414
- type ThemeRoleFamily = 'canvas' | 'series' | 'scale' | 'text' | 'chrome' | 'overlay' | 'state' | 'control' | 'status' | 'illustration' | 'drawing' | 'motion';
1415
- /** A readability requirement the palettes must meet: this role's value, read against the value of
1416
- * `over`, reaches `min` under the WCAG 2.2 contrast formula. Where `over` is a translucent tint
1417
- * such as the hover or selected fill, `on` names the opaque surface the tint is drawn on, and the
1418
- * tint is flattened onto it before measuring. Body text needs 4.5, a non-text indicator such as a
1419
- * focus ring needs 3. */
1420
- interface ThemeContrastRule {
1421
- over: string;
1422
- on?: string;
1423
- min: number;
1424
- }
1425
- /** One entry of the inventory. */
1426
- interface ThemeRole {
1427
- /** The public id, `family.name`. Also the key of `SemanticTheme`. */
1428
- id: string;
1429
- family: ThemeRoleFamily;
1430
- kind: ThemeRoleKind;
1431
- /** One sentence naming what the role means, published in the manifest and the manual. */
1432
- description: string;
1433
- /** Present when the role carries readability requirements: one rule per ground the stylesheet's
1434
- * recipes draw it on. */
1435
- contrast?: readonly ThemeContrastRule[];
34
+ /** One entry of the inventory. */
35
+ interface ThemeRole {
36
+ /** The public id, `family.name`. Also the key of `SemanticTheme`. */
37
+ id: string;
38
+ family: ThemeRoleFamily;
39
+ kind: ThemeRoleKind;
40
+ /** One sentence naming what the role means, published in the manifest and the manual. */
41
+ description: string;
42
+ /** Present when the role carries readability requirements: one rule per ground the stylesheet's
43
+ * recipes draw it on. */
44
+ contrast?: readonly ThemeContrastRule[];
1436
45
  }
1437
46
  /** The complete role inventory. Adding an entry is a minor API change and needs a value in both
1438
47
  * built-in palettes; removing one is breaking. */
@@ -1570,6 +179,9 @@ declare const THEME_ROLES: readonly [{
1570
179
  readonly over: "state.hover";
1571
180
  readonly on: "overlay.surface";
1572
181
  readonly min: 4.5;
182
+ }, {
183
+ readonly over: "control.neutral";
184
+ readonly min: 4.5;
1573
185
  }];
1574
186
  }, {
1575
187
  readonly id: "text.disabled";
@@ -1733,7 +345,7 @@ declare const THEME_ROLES: readonly [{
1733
345
  readonly id: "state.accent";
1734
346
  readonly family: "state";
1735
347
  readonly kind: "color";
1736
- readonly description: "The accent a mark, fill, or glyph wears: a chosen day, a selected tab, an armed favorite.";
348
+ readonly description: "The accent a mark, fill, or glyph wears: a selected tab, an armed favorite.";
1737
349
  readonly contrast: readonly [{
1738
350
  readonly over: "chrome.surface";
1739
351
  readonly min: 3;
@@ -1784,7 +396,7 @@ declare const THEME_ROLES: readonly [{
1784
396
  readonly id: "state.markInk";
1785
397
  readonly family: "state";
1786
398
  readonly kind: "color";
1787
- readonly description: "Ink on the accent or a filled state mark: a chosen day, the replay disc's cut-out.";
399
+ readonly description: "Ink on the accent or a filled state mark, such as the replay disc's cut-out.";
1788
400
  readonly contrast: readonly [{
1789
401
  readonly over: "state.accent";
1790
402
  readonly min: 4.5;
@@ -1831,6 +443,58 @@ declare const THEME_ROLES: readonly [{
1831
443
  readonly family: "control";
1832
444
  readonly kind: "color";
1833
445
  readonly description: "The track of a switch that is off, while the pointer is down.";
446
+ }, {
447
+ readonly id: "control.outline";
448
+ readonly family: "control";
449
+ readonly kind: "color";
450
+ readonly description: "The edge and the words of an outlined button at rest, such as a dialog's Cancel, which takes the emphasis fill under the pointer.";
451
+ readonly contrast: readonly [{
452
+ readonly over: "overlay.surface";
453
+ readonly min: 4.5;
454
+ }];
455
+ }, {
456
+ readonly id: "control.onInk";
457
+ readonly family: "control";
458
+ readonly kind: "color";
459
+ readonly description: "A mark cut from the emphasis fill, and its name beside it: a chosen thickness, line style or line end.";
460
+ readonly contrast: readonly [{
461
+ readonly over: "control.on";
462
+ readonly min: 3;
463
+ }];
464
+ }, {
465
+ readonly id: "control.neutral";
466
+ readonly family: "control";
467
+ readonly kind: "color";
468
+ readonly description: "The quiet fill: a neutral action such as a dialog's shortcut chip, the band that heads a calendar's columns, and a chosen month or year.";
469
+ }, {
470
+ readonly id: "control.neutralHover";
471
+ readonly family: "control";
472
+ readonly kind: "color";
473
+ readonly description: "The quiet fill under the pointer.";
474
+ }, {
475
+ readonly id: "control.neutralPressed";
476
+ readonly family: "control";
477
+ readonly kind: "color";
478
+ readonly description: "The quiet fill while the pointer is down.";
479
+ }, {
480
+ readonly id: "control.neutralInk";
481
+ readonly family: "control";
482
+ readonly kind: "color";
483
+ readonly description: "The words and mark on the quiet fill, and what a quiet control's words and mark brighten to under the pointer, such as a calendar's day or a dialog's close.";
484
+ readonly contrast: readonly [{
485
+ readonly over: "control.neutral";
486
+ readonly min: 4.5;
487
+ }, {
488
+ readonly over: "control.neutralHover";
489
+ readonly min: 4.5;
490
+ }, {
491
+ readonly over: "control.neutralPressed";
492
+ readonly min: 4.5;
493
+ }, {
494
+ readonly over: "state.hover";
495
+ readonly on: "overlay.surface";
496
+ readonly min: 4.5;
497
+ }];
1834
498
  }, {
1835
499
  readonly id: "control.mark";
1836
500
  readonly family: "control";
@@ -1856,6 +520,11 @@ declare const THEME_ROLES: readonly [{
1856
520
  readonly family: "control";
1857
521
  readonly kind: "color";
1858
522
  readonly description: "The edge of a field under the pointer.";
523
+ }, {
524
+ readonly id: "control.selectEdgeHover";
525
+ readonly family: "control";
526
+ readonly kind: "color";
527
+ readonly description: "The edge of a list button under the pointer, such as a select on a drawing's settings page.";
1859
528
  }, {
1860
529
  readonly id: "control.fieldInvalid";
1861
530
  readonly family: "control";
@@ -2016,6 +685,11 @@ declare const THEME_ROLES: readonly [{
2016
685
  readonly family: "motion";
2017
686
  readonly kind: "duration";
2018
687
  readonly description: "A larger mark turning, such as the drawing toolbar's chevron.";
688
+ }, {
689
+ readonly id: "motion.durationGlide";
690
+ readonly family: "motion";
691
+ readonly kind: "duration";
692
+ readonly description: "A mark gliding to a new place, such as a dialog's tab bar or an opacity knob.";
2019
693
  }, {
2020
694
  readonly id: "motion.easingStandard";
2021
695
  readonly family: "motion";
@@ -2036,6 +710,11 @@ declare const THEME_ROLES: readonly [{
2036
710
  readonly family: "motion";
2037
711
  readonly kind: "easing";
2038
712
  readonly description: "The timing of a mark that turns with a slight overshoot, such as a caret or chevron.";
713
+ }, {
714
+ readonly id: "motion.easingInOut";
715
+ readonly family: "motion";
716
+ readonly kind: "easing";
717
+ readonly description: "The timing of a mark that slides from one place to another, such as a dialog's tab bar.";
2039
718
  }, {
2040
719
  readonly id: "motion.scaleEnter";
2041
720
  readonly family: "motion";
@@ -2049,11 +728,1565 @@ type ThemeRoleId = (typeof THEME_ROLES)[number]['id'];
2049
728
  type SemanticTheme = {
2050
729
  readonly [Id in ThemeRoleId]: string;
2051
730
  };
2052
- /** What a host supplies: a partial palette for either mode, or both. An omitted role keeps the
2053
- * built-in value for that mode. */
2054
- interface CustomThemes {
2055
- light?: Partial<SemanticTheme>;
2056
- dark?: Partial<SemanticTheme>;
731
+ /** What a host supplies: a partial palette for either mode, or both. An omitted role keeps the
732
+ * built-in value for that mode. */
733
+ interface CustomThemes {
734
+ light?: Partial<SemanticTheme>;
735
+ dark?: Partial<SemanticTheme>;
736
+ }
737
+
738
+ interface DrawingInks {
739
+ /** A selection handle's ring. */
740
+ handleRing: string;
741
+ /** A selection handle's center: the chart's ground, so the handle covers what it stands on. */
742
+ handleCenter: string;
743
+ /** Words a drawing writes in the chart's own ink. */
744
+ text: string;
745
+ /** A quiet edge, such as a signpost plate's outline. */
746
+ edge: string;
747
+ /** The accent the chart marks what is being worked on with, such as the table cell being typed
748
+ * in. */
749
+ accent: string;
750
+ }
751
+
752
+ /** A feed that answers coarser grains than the one it wraps.
753
+ *
754
+ * `serves` names the grains the wrapped feed answers natively; every other request is folded from
755
+ * the coarsest of them that divides it. A request nothing divides is passed straight through, so
756
+ * the wrapped feed gives its own honest answer rather than this wrapper inventing one.
757
+ *
758
+ * ```ts
759
+ * import { withFoldedHistory } from '@trdrs/quickcharts'
760
+ *
761
+ * const feed = withFoldedHistory(venueFeed, { serves: ['1m', '15m', '1h', '1d', '1mo'] })
762
+ * // A 45m request now fetches 15m bars and folds them three at a time.
763
+ * ```
764
+ */
765
+ declare function withFoldedHistory(feed: ChartDatafeed, options: {
766
+ serves: readonly string[];
767
+ }): ChartDatafeed;
768
+
769
+ interface ChartStorage {
770
+ /** The stored value for a key, or null when absent. Must not throw — a backing-store failure reads as
771
+ * "absent" so the chart falls back to its defaults rather than crashing. */
772
+ get(key: string): string | null;
773
+ /** Persist a value. Must not throw — a quota/permission failure is swallowed (the chart keeps working
774
+ * off in-memory state for the session). */
775
+ set(key: string, value: string): void;
776
+ /** Remove a key. Must not throw. */
777
+ remove(key: string): void;
778
+ /** Every key currently present, so the chart can enumerate its own namespace. Order is unspecified. */
779
+ keys(): string[];
780
+ }
781
+ /** An in-memory ChartStorage — the default, and the store for SSR, tests, or an intentionally ephemeral
782
+ * embed where nothing should persist beyond the page. A host can also seed one from its own state to
783
+ * hand the chart a starting set. */
784
+ declare function memoryChartStorage(seed?: Record<string, string>): ChartStorage;
785
+
786
+ /** The subset of `fetch` this adapter uses — kept minimal so the package stays DOM-independent and a
787
+ * test can drive it with a plain fake. The global `fetch` satisfies it. */
788
+ type FetchLike = (url: string) => Promise<{
789
+ ok: boolean;
790
+ status: number;
791
+ json(): Promise<unknown>;
792
+ text(): Promise<string>;
793
+ }>;
794
+ interface UdfDatafeedOptions {
795
+ /** UDF server base URL, e.g. `https://feed.example.com/udf` (no trailing slash needed). */
796
+ baseUrl: string;
797
+ /** Injected fetch — defaults to the global. Provide one in tests or to add auth headers via a wrapper. */
798
+ fetch?: FetchLike;
799
+ /** Live-poll cadence in ms for `subscribeBars` (UDF has no push). Default 10s, the UDF norm. */
800
+ pollMs?: number;
801
+ /** Bars pulled for the initial live snapshot. Default 300. */
802
+ snapshotBars?: number;
803
+ }
804
+ /** A ChartDatafeed backed by a UDF server. */
805
+ declare function createUdfDatafeed(options: UdfDatafeedOptions): ChartDatafeed;
806
+
807
+ /** Map a timeframe token to a UDF resolution string: seconds `<N>S`, minutes `<N>`, hours as
808
+ * minutes (`<N*60>`, the classic UDF intraday encoding), day/week/month `<N>D`/`<N>W`/`<N>M`, ticks
809
+ * `<N>T`. A token the grammar cannot read falls through as-is (a custom server may accept it). */
810
+ declare function tfToUdfResolution(tf: string): string;
811
+ /** The inverse of {@link tfToUdfResolution}: a UDF resolution string back to a timeframe token.
812
+ * Bare numbers are minutes; whole-hour counts of 60 or more normalize to `<N>h` (the forward map
813
+ * emits hours AS minutes, so '1h' → '60' → '1h' round-trips); bare 'D'/'W'/'M'/'S'/'T' mean a
814
+ * count of 1. Null for a resolution the timeframe grammar cannot express, its per-unit ceilings
815
+ * included: a caller building a capability declaration OMITS that resolution rather than
816
+ * mis-declaring it (the widget can't do bucket arithmetic on a token outside the grammar, so it
817
+ * isn't widget-servable even if the server serves it). */
818
+ declare function udfResolutionToTf(resolution: string): string | null;
819
+
820
+ /** A locale a product ships or a host registers. `code` is the stable product-facing identifier;
821
+ * `tag` is the canonical BCP 47 value for `Intl` and the document language. */
822
+ interface LocaleDefinition<Code extends string = string> {
823
+ code: Code;
824
+ endonym: string;
825
+ tag: string;
826
+ dir: 'ltr' | 'rtl';
827
+ }
828
+ /** The languages this package ships a dictionary for. */
829
+ type ChartLocaleCode = 'en' | 'de' | 'fr' | 'es' | 'it' | 'ca_ES' | 'pl' | 'sv' | 'tr' | 'ru' | 'pt' | 'id_ID' | 'ms_MY' | 'th' | 'vi' | 'ja' | 'ko' | 'zh' | 'zh_TW' | 'ar' | 'he_IL';
830
+ type ChartLocale = LocaleDefinition<ChartLocaleCode>;
831
+ /** English first, then the Latin-script languages, then the others. Endonyms let every reader find
832
+ * their own language in a picker. `scripts/i18n.mjs` reads this table by its line shape. */
833
+ declare const BUILT_IN_LOCALES: readonly ChartLocale[];
834
+
835
+ type PluralCategory = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other';
836
+ /** A message with one form per plural category its language distinguishes (CLDR: English has
837
+ * `one` and `other`, Russian `one`/`few`/`many`/`other`, Arabic all six, Japanese `other` alone).
838
+ * `other` is always present. `zero` is special: when present it is used for an exact count of 0 in
839
+ * EVERY language, so "No alerts" needs no branch at the call site. The form is selected by the
840
+ * `count` variable. */
841
+ type PluralMessage = {
842
+ other: string;
843
+ } & Partial<Record<Exclude<PluralCategory, 'other'>, string>>;
844
+ type Message = string | PluralMessage;
845
+ /** A catalog: keys to messages. The English catalog is the SOURCE every translation is typed
846
+ * against; keys are dotted by surface (`legend.hideIndicator`), and each surface keeps its own file. */
847
+ type Catalog = Record<string, Message>;
848
+ /** A translation of a catalog: a string for every string, a plural for every plural. The shape is
849
+ * the source's, so a translation cannot miss a key or flatten a plural without failing typecheck. */
850
+ type Translation<Source extends Catalog> = {
851
+ [K in keyof Source]: Source[K] extends string ? string : PluralMessage;
852
+ };
853
+ type Vars = Record<string, string | number>;
854
+ /** The arguments `t` takes for a key: a plural key REQUIRES `count`; a string key takes any vars.
855
+ * Distributive over `K`, so a key chosen at runtime from a union of keys (a label table) is
856
+ * accepted with the arguments any ONE of them takes rather than what all of them would need. */
857
+ type TranslateArgs<Source extends Catalog, K extends keyof Source> = K extends unknown ? Source[K] extends string ? [vars?: Vars] : [vars: Vars & {
858
+ count: number;
859
+ }] : never;
860
+ /** The message for a key in the active language: a plural key picks its form by the language's
861
+ * rules, and numbers in `{slots}` are written with the language's digits and grouping. */
862
+ type Translate<Source extends Catalog> = <K extends keyof Source & string>(key: K, ...args: TranslateArgs<Source, K>) => string;
863
+
864
+ interface DictionaryLoader<Source extends Catalog, Code extends string = ChartLocaleCode> {
865
+ /** The translation if it is already in memory: synchronous, for a first render that must not flash. */
866
+ ifLoaded(code: Code): Translation<Source> | null;
867
+ /** Load (once) and return a locale's translation. Concurrent callers share one fetch; a locale
868
+ * the catalog does not ship resolves to the source. */
869
+ load(code: Code): Promise<Translation<Source>>;
870
+ /** Whether the catalog ships this locale (the source locale always does). */
871
+ has(code: Code): boolean;
872
+ }
873
+
874
+ type ChartTranslate = Translate<typeof en>;
875
+ /** The widget's catalog in one language: every key of the English source, in the same shape. */
876
+ type ChartDictionary = Translation<typeof en>;
877
+ /** A locale a host adds beyond the built-in inventory: its stable code, canonical BCP 47 tag,
878
+ * reading direction, endonym, and the dictionary chunk to fetch the first time it is chosen. */
879
+ interface ChartCustomLocale extends LocaleDefinition {
880
+ dictionary: () => Promise<{
881
+ default: ChartDictionary;
882
+ }>;
883
+ }
884
+ interface ChartI18nOptions {
885
+ /** Locales registered beside the built-in inventory. A code or tag the inventory already holds
886
+ * is refused: the built-in dictionaries are not overridden through this door. */
887
+ locales?: readonly ChartCustomLocale[];
888
+ /** Hears every key a loaded dictionary is missing; the text falls back to English. The typed
889
+ * catalogs cannot miss a key, so this only ever reports a dictionary loaded from data. */
890
+ onMissing?: (key: ChartMessageKey, locale: string) => void;
891
+ }
892
+ interface ChartI18n {
893
+ /** The host-owned stable locale code. It does not need to use the built-in vocabulary. */
894
+ locale(): string;
895
+ /** The BCP 47 tag for `Intl` and for the chart library's own axis and crosshair formatting. */
896
+ tag(): string;
897
+ /** The reading direction of the language in effect. The chrome writes it on the widget root so
898
+ * the stylesheet's logical properties flip. A host adapter that omits it reads as left to right. */
899
+ dir?(): 'ltr' | 'rtl';
900
+ t: ChartTranslate;
901
+ /** Switch language. The translation loads once; until it lands `t` reads English. Resolves when
902
+ * the switch is complete (or has settled on English because the chunk failed). */
903
+ setLocale(code: string): Promise<void>;
904
+ /** Hear every change of `t`; a module re-renders its text in the handler. */
905
+ onChange(listener: () => void): () => void;
906
+ }
907
+ /** One chunk per language the widget ships, every language in `BUILT_IN_LOCALES`, fetched the
908
+ * first time it is chosen. */
909
+ declare const chartDictionaries: DictionaryLoader<{
910
+ readonly 'toast.dismiss': "Dismiss";
911
+ readonly 'toast.feedUnavailable': "No data for {symbol} from this feed.";
912
+ readonly 'toast.feedNoData': "No data for {symbol} yet.";
913
+ readonly 'toast.imageCopyFallback': "Could not copy the image. Saved a file instead.";
914
+ readonly 'toast.imageFailed': "Could not capture the chart image.";
915
+ readonly 'toast.indicatorsNotCarried': {
916
+ readonly one: "{count} indicator in this saved chart is not available here and was left out.";
917
+ readonly other: "{count} indicators in this saved chart are not available here and were left out.";
918
+ };
919
+ readonly 'settings.menu': "Chart settings";
920
+ readonly 'settings.sectionAppearance': "Appearance";
921
+ readonly 'settings.background': "Background";
922
+ readonly 'settings.upCandles': "Up candles";
923
+ readonly 'settings.downCandles': "Down candles";
924
+ readonly 'settings.upBorders': "Up borders";
925
+ readonly 'settings.downBorders': "Down borders";
926
+ readonly 'settings.upWicks': "Up wicks";
927
+ readonly 'settings.downWicks': "Down wicks";
928
+ readonly 'settings.sectionDisplay': "Display";
929
+ readonly 'settings.gridLines': "Grid lines";
930
+ readonly 'settings.sessionShading': "Session shading";
931
+ readonly 'settings.sectionScale': "Price scale";
932
+ readonly 'settings.sectionTheme': "Theme";
933
+ readonly 'settings.indicatorTitle': "{name} settings";
934
+ readonly 'settings.tabInputs': "Inputs";
935
+ readonly 'settings.tabStyle': "Style";
936
+ readonly 'settings.tabVisibility': "Visibility";
937
+ readonly 'settings.plots': "Plots";
938
+ readonly 'settings.levels': "Levels";
939
+ readonly 'settings.fills': "Fills";
940
+ readonly 'settings.colorOf': "{name} color";
941
+ readonly 'settings.lineWidthOf': "{name} line width";
942
+ readonly 'settings.lineStyleOf': "{name} line style";
943
+ readonly 'settings.visibleOf': "Show {name}";
944
+ readonly 'settings.lineStyleSolid': "Solid";
945
+ readonly 'settings.lineStyleDashed': "Dashed";
946
+ readonly 'settings.lineStyleDotted': "Dotted";
947
+ readonly 'settings.precision': "Precision";
948
+ readonly 'settings.precisionDefault': "Default";
949
+ readonly 'settings.labelsOnPriceScale': "Labels on price scale";
950
+ readonly 'settings.showIndicator': "Show this indicator";
951
+ readonly 'picker.title': "Indicators";
952
+ readonly 'picker.search': "Search indicators";
953
+ readonly 'picker.noMatches': "No matching indicators.";
954
+ readonly 'picker.collections': "Indicator collections";
955
+ readonly 'picker.personal': "Personal";
956
+ readonly 'picker.builtin': "Built-in";
957
+ readonly 'picker.favorites': "Favorites";
958
+ readonly 'picker.thousands': " K";
959
+ readonly 'picker.name': "Name";
960
+ readonly 'picker.author': "Author";
961
+ readonly 'picker.favorite': "Favorite {name}";
962
+ readonly 'picker.unfavorite': "Unfavorite {name}";
963
+ readonly 'picker.loading': "Loading indicators…";
964
+ readonly 'picker.unavailable': "Indicator content is unavailable. Try again.";
965
+ readonly 'picker.actionFailed': "The action could not be completed. Try again.";
966
+ readonly 'picker.add': "Add {name}";
967
+ readonly 'picker.notPermitted': "{name} is not available here";
968
+ readonly 'history.undoNamed': "Undo {change}";
969
+ readonly 'history.redoNamed': "Redo {change}";
970
+ readonly 'history.changeSymbol': "symbol change";
971
+ readonly 'history.changeTimeframe': "timeframe change";
972
+ readonly 'history.changeChartStyle': "chart style change";
973
+ readonly 'history.changePriceScale': "price scale change";
974
+ readonly 'history.changeAppearance': "appearance change";
975
+ readonly 'history.changeAddCompare': "add comparison";
976
+ readonly 'history.changeRemoveCompare': "remove comparison";
977
+ readonly 'history.changeCompare': "comparison change";
978
+ readonly 'history.changeAddIndicator': "add indicator";
979
+ readonly 'history.changeRemoveIndicator': "remove indicator";
980
+ readonly 'history.changeIndicator': "indicator change";
981
+ readonly 'history.changeAddDrawing': "add drawing";
982
+ readonly 'history.changeRemoveDrawing': "remove drawing";
983
+ readonly 'history.changeDrawing': "drawing change";
984
+ readonly 'chrome.topBar': "Chart toolbar";
985
+ readonly 'chrome.bottomBar': "Chart footer";
986
+ readonly 'chrome.symbolSearch': "Search symbol";
987
+ readonly 'chrome.compare': "Compare or add symbol";
988
+ readonly 'chrome.chartStyle': "Chart style";
989
+ readonly 'chrome.indicators': "Indicators";
990
+ readonly 'chrome.replay': "Bar replay";
991
+ readonly 'chrome.replayChip': "Replay";
992
+ readonly 'chrome.image': "Chart image";
993
+ readonly 'chrome.session': "Trading session";
994
+ readonly 'chrome.sessionsHeading': "Sessions";
995
+ readonly 'chrome.navigation': "Chart navigation";
996
+ readonly 'chrome.activeChart': "{symbol}, {timeframe}";
997
+ readonly 'command.extension': "Host command";
998
+ readonly 'command.viewReset': "Reset view";
999
+ readonly 'command.viewGoLive': "Go to the live edge";
1000
+ readonly 'command.viewZoomIn': "Zoom in";
1001
+ readonly 'command.viewZoomOut': "Zoom out";
1002
+ readonly 'command.viewScrollLeft': "Scroll back";
1003
+ readonly 'command.viewScrollRight': "Scroll forward";
1004
+ readonly 'command.priceCopy': "Copy price";
1005
+ readonly 'command.symbolSet': "Change symbol";
1006
+ readonly 'command.styleCandles': "Candles";
1007
+ readonly 'command.styleHollow': "Hollow candles";
1008
+ readonly 'command.styleBars': "Bars";
1009
+ readonly 'command.styleLine': "Line";
1010
+ readonly 'command.styleArea': "Area";
1011
+ readonly 'command.styleBaseline': "Baseline";
1012
+ readonly 'command.styleStepline': "Step line";
1013
+ readonly 'command.appearanceApply': "Chart appearance";
1014
+ readonly 'command.appearanceReset': "Reset defaults";
1015
+ readonly 'command.scaleNormal': "Regular price scale";
1016
+ readonly 'command.scaleLog': "Logarithmic price scale";
1017
+ readonly 'command.scalePercent': "Percentage price scale";
1018
+ readonly 'command.scaleIndexed': "Indexed price scale";
1019
+ readonly 'command.historyUndo': "Undo";
1020
+ readonly 'command.historyRedo': "Redo";
1021
+ readonly 'command.indicatorAdd': "Add indicator";
1022
+ readonly 'command.indicatorUpdate': "Update indicator";
1023
+ readonly 'command.indicatorsRemoveAll': "Remove indicators";
1024
+ readonly 'command.indicatorRemove': "Remove indicator";
1025
+ readonly 'command.indicatorHide': "Hide indicator";
1026
+ readonly 'command.indicatorShow': "Show indicator";
1027
+ readonly 'command.drawingsRemoveAll': "Remove drawings";
1028
+ readonly 'command.drawingDeleteSelected': "Delete selected drawing";
1029
+ readonly 'command.drawingArm': "Drawing tool";
1030
+ readonly 'command.drawingCursor': "Cursor mode";
1031
+ readonly 'command.drawingMagnet': "Magnet";
1032
+ readonly 'command.drawingStayInMode': "Stay in drawing mode";
1033
+ readonly 'command.drawingLockAll': "Lock all drawings";
1034
+ readonly 'command.drawingHide': "Hide drawings or indicators";
1035
+ readonly 'command.drawingSync': "Sync drawings across the layout";
1036
+ readonly 'command.drawingRemoveLockedPolicy': "Always remove locked drawings";
1037
+ readonly 'command.drawingFavorite': "Favorite drawing tool";
1038
+ readonly 'command.drawingFavoritesBar': "Favorite drawing tools toolbar";
1039
+ readonly 'command.drawingStyle': "Drawing style";
1040
+ readonly 'command.drawingProps': "Drawing properties";
1041
+ readonly 'command.drawingLock': "Lock drawing";
1042
+ readonly 'command.drawingClone': "Clone drawing";
1043
+ readonly 'command.drawingCopy': "Copy drawing";
1044
+ readonly 'command.drawingPaste': "Paste drawing";
1045
+ readonly 'command.drawingBringToFront': "Bring drawing to front";
1046
+ readonly 'command.drawingSendToBack': "Send drawing to back";
1047
+ readonly 'command.drawingBringForward': "Bring drawing forward";
1048
+ readonly 'command.drawingSendBackward': "Send drawing backward";
1049
+ readonly 'command.drawingHideSelected': "Hide drawing";
1050
+ readonly 'command.drawingVisibility': "Drawing visibility on timeframes";
1051
+ readonly 'command.drawingSettings': "Drawing settings";
1052
+ readonly 'command.drawingCommitEdit': "Apply drawing settings";
1053
+ readonly 'command.drawingPlaceImage': "Place image";
1054
+ readonly 'command.drawingTemplateApply': "Apply drawing template";
1055
+ readonly 'command.drawingTemplateSave': "Save drawing template";
1056
+ readonly 'command.drawingTemplateRemove': "Remove drawing template";
1057
+ readonly 'command.drawingTableAddRow': "Add table row";
1058
+ readonly 'command.drawingTableAddColumn': "Add table column";
1059
+ readonly 'command.drawingTableRemoveRow': "Remove table row";
1060
+ readonly 'command.drawingTableRemoveColumn': "Remove table column";
1061
+ readonly 'command.drawingCancel': "Cancel drawing";
1062
+ readonly 'command.compareOpen': "Compare or add symbol";
1063
+ readonly 'command.compareAdd': "Add comparison";
1064
+ readonly 'command.compareRemove': "Remove comparison";
1065
+ readonly 'command.compareVisible': "Show or hide a comparison";
1066
+ readonly 'command.compareChangeSymbol': "Change compared symbol";
1067
+ readonly 'command.replayStart': "Start bar replay";
1068
+ readonly 'command.replayStartFirst': "Start bar replay at the first available date";
1069
+ readonly 'command.replayExit': "Exit bar replay";
1070
+ readonly 'command.replayPlay': "Play replay";
1071
+ readonly 'command.replayPause': "Pause replay";
1072
+ readonly 'command.replayStepForward': "Step forward";
1073
+ readonly 'command.replayStepBack': "Step back";
1074
+ readonly 'command.replayGoLive': "Replay to the live edge";
1075
+ readonly 'command.replaySpeed': "Replay speed";
1076
+ readonly 'command.replayTimeframe': "Replay update timeframe";
1077
+ readonly 'command.timeframeSet': "Timeframe";
1078
+ readonly 'command.subsessionRegular': "Regular hours";
1079
+ readonly 'command.subsessionExtended': "Extended hours";
1080
+ readonly 'command.rangeSet': "Date range";
1081
+ readonly 'command.timezoneSet': "Timezone";
1082
+ readonly 'command.themeLight': "Light theme";
1083
+ readonly 'command.themeDark': "Dark theme";
1084
+ readonly 'command.themeToggle': "Switch theme";
1085
+ readonly 'command.themeSet': "Set theme";
1086
+ readonly 'command.localeSet': "Language";
1087
+ readonly 'command.fullscreenEnter': "Fullscreen";
1088
+ readonly 'command.fullscreenExit': "Exit fullscreen";
1089
+ readonly 'command.fullscreenToggle': "Toggle fullscreen";
1090
+ readonly 'command.imageCapture': "Capture image";
1091
+ readonly 'command.imageDownload': "Download image";
1092
+ readonly 'command.dataDownload': "Download chart data";
1093
+ readonly 'command.imageCopy': "Copy image";
1094
+ readonly 'command.layoutArrangement': "Layout";
1095
+ readonly 'command.layoutActive': "Active chart";
1096
+ readonly 'command.layoutSync': "Chart synchronization";
1097
+ readonly 'command.layoutActivateNext': "Next chart in layout";
1098
+ readonly 'command.layoutActivatePrevious': "Previous chart in layout";
1099
+ readonly 'command.layoutMaximize': "Maximize or restore the active chart";
1100
+ readonly 'command.layoutSave': "Save layout";
1101
+ readonly 'command.layoutRename': "Rename layout";
1102
+ readonly 'command.layoutLoad': "Open layout";
1103
+ readonly 'command.layoutOpen': "Open layout…";
1104
+ readonly 'command.layoutDelete': "Delete layout";
1105
+ readonly 'command.layoutCreate': "Create new layout";
1106
+ readonly 'command.layoutAutosave': "Autosave layout";
1107
+ readonly 'drawing.toolbar': "Drawing tools";
1108
+ readonly 'drawing.groupTrend': "Trend tools";
1109
+ readonly 'drawing.groupFibGann': "Fibonacci & Gann";
1110
+ readonly 'drawing.groupPatterns': "Patterns";
1111
+ readonly 'drawing.groupForecast': "Forecast & measure";
1112
+ readonly 'drawing.groupGlyphs': "Emojis & stickers";
1113
+ readonly 'drawing.shapes': "Shapes";
1114
+ readonly 'drawing.textNotes': "Text & notes";
1115
+ readonly 'drawing.groupMenu': "{group} menu";
1116
+ readonly 'drawing.sectionLines': "Lines";
1117
+ readonly 'drawing.sectionChannels': "Channels";
1118
+ readonly 'drawing.sectionPitchforks': "Pitchforks";
1119
+ readonly 'drawing.sectionFibonacci': "Fibonacci";
1120
+ readonly 'drawing.sectionGann': "Gann";
1121
+ readonly 'drawing.sectionChartPatterns': "Chart patterns";
1122
+ readonly 'drawing.sectionElliott': "Elliott waves";
1123
+ readonly 'drawing.sectionCycles': "Cycles";
1124
+ readonly 'drawing.sectionForecasting': "Forecasting";
1125
+ readonly 'drawing.sectionVolumeBased': "Volume based";
1126
+ readonly 'drawing.sectionMeasures': "Measures";
1127
+ readonly 'drawing.sectionBrushes': "Brushes";
1128
+ readonly 'drawing.sectionArrows': "Arrows";
1129
+ readonly 'drawing.sectionContent': "Content";
1130
+ readonly 'drawing.sectionGlyphs': "Emojis, stickers, icons";
1131
+ readonly 'drawing.cursor': "Cursor";
1132
+ readonly 'drawing.cursorMenu': "Cursor menu";
1133
+ readonly 'drawing.cursorCross': "Cross";
1134
+ readonly 'drawing.cursorDot': "Dot";
1135
+ readonly 'drawing.cursorArrow': "Arrow";
1136
+ readonly 'drawing.cursorEraser': "Eraser";
1137
+ readonly 'drawing.measure': "Measure";
1138
+ readonly 'drawing.zoomIn': "Zoom in";
1139
+ readonly 'drawing.magnet': "Magnet";
1140
+ readonly 'drawing.magnetMenu': "Magnet menu";
1141
+ readonly 'drawing.magnetWeak': "Weak magnet";
1142
+ readonly 'drawing.magnetStrong': "Strong magnet";
1143
+ readonly 'drawing.stayInDrawingMode': "Stay in drawing mode";
1144
+ readonly 'drawing.lockAll': "Lock all drawings";
1145
+ readonly 'drawing.unlockAll': "Unlock all drawings";
1146
+ readonly 'drawing.hideMenu': "Hide menu";
1147
+ readonly 'drawing.hideDrawings': "Hide drawings";
1148
+ readonly 'drawing.showDrawings': "Show drawings";
1149
+ readonly 'drawing.hideIndicators': "Hide indicators";
1150
+ readonly 'drawing.showIndicators': "Show indicators";
1151
+ readonly 'drawing.hideAll': "Hide all";
1152
+ readonly 'drawing.showAll': "Show all";
1153
+ readonly 'drawing.syncLabel': "Sync drawings across the layout";
1154
+ readonly 'drawing.syncOnHelp': "New drawings are replicated to all charts in the layout and shown when the same ticker is selected";
1155
+ readonly 'drawing.syncOffHelp': "New drawings stay on the chart that drew them";
1156
+ readonly 'drawing.removeMenu': "Remove menu";
1157
+ readonly 'drawing.removeDrawings': "Remove drawings";
1158
+ readonly 'drawing.countDrawings': {
1159
+ readonly one: "{count} drawing";
1160
+ readonly other: "{count} drawings";
1161
+ };
1162
+ readonly 'drawing.countIndicators': {
1163
+ readonly one: "{count} indicator";
1164
+ readonly other: "{count} indicators";
1165
+ };
1166
+ readonly 'drawing.removeItems': "Remove {items}";
1167
+ readonly 'drawing.removeBoth': "Remove {drawings} & {indicators}";
1168
+ readonly 'drawing.nothingToRemove': "Nothing to remove";
1169
+ readonly 'drawing.alwaysRemoveLocked': "Always remove locked drawings";
1170
+ readonly 'drawing.favTools': "Favorite drawing tools";
1171
+ readonly 'drawing.favToolsBar': "Favorite drawing tools toolbar";
1172
+ readonly 'drawing.favAdd': "Add {tool} to favorites";
1173
+ readonly 'drawing.favRemove': "Remove {tool} from favorites";
1174
+ readonly 'drawing.moveToolbar': "Move toolbar";
1175
+ readonly 'drawing.moveFavoritesToolbar': "Move favorites toolbar";
1176
+ readonly 'drawing.settingsBar': "Selected drawing";
1177
+ readonly 'drawing.templates': "Templates";
1178
+ readonly 'drawing.drawingTemplates': "Drawing templates";
1179
+ readonly 'drawing.saveTemplateAs': "Save drawing template as...";
1180
+ readonly 'drawing.applyDefaultTemplate': "Apply default drawing template";
1181
+ readonly 'drawing.removeTemplateNamed': "Remove template {name}";
1182
+ readonly 'drawing.remove': "Remove";
1183
+ readonly 'drawing.drawingColor': "Drawing color";
1184
+ readonly 'drawing.backgroundColor': "Background color";
1185
+ readonly 'drawing.thickness': "Thickness";
1186
+ readonly 'drawing.lineThickness': "Line thickness";
1187
+ readonly 'drawing.thicknessValue': "Thickness {n}px";
1188
+ readonly 'drawing.lineStyle': "Line style";
1189
+ readonly 'drawing.lineStyleValue': "Line style {name}";
1190
+ readonly 'drawing.lineSolid': "Line";
1191
+ readonly 'drawing.lineDashed': "Dashed line";
1192
+ readonly 'drawing.lineDotted': "Dotted line";
1193
+ readonly 'drawing.settings': "Settings";
1194
+ readonly 'drawing.drawingSettings': "Drawing settings";
1195
+ readonly 'drawing.lock': "Lock";
1196
+ readonly 'drawing.unlock': "Unlock";
1197
+ readonly 'drawing.lockDrawing': "Lock drawing";
1198
+ readonly 'drawing.unlockDrawing': "Unlock drawing";
1199
+ readonly 'drawing.deleteDrawing': "Delete drawing";
1200
+ readonly 'drawing.more': "More";
1201
+ readonly 'drawing.moreActions': "More drawing actions";
1202
+ readonly 'drawing.visualOrder': "Visual order";
1203
+ readonly 'drawing.visibilityOnTimeframes': "Visibility on timeframes";
1204
+ readonly 'drawing.clone': "Clone";
1205
+ readonly 'drawing.copy': "Copy";
1206
+ readonly 'drawing.modifierControl': "Ctrl";
1207
+ readonly 'drawing.modifierCommand': "Cmd";
1208
+ readonly 'drawing.hintClone': "{modifier} + Drag";
1209
+ readonly 'drawing.hintCopy': "{modifier} + C";
1210
+ readonly 'drawing.hintPaste': "{modifier} + V";
1211
+ readonly 'drawing.deleteWithKey': "Delete (Del)";
1212
+ readonly 'drawing.statusDrawingsHidden': "Drawings hidden";
1213
+ readonly 'drawing.statusDrawingsShown': "Drawings shown";
1214
+ readonly 'drawing.statusIndicatorsHidden': "Indicators hidden";
1215
+ readonly 'drawing.statusIndicatorsShown': "Indicators shown";
1216
+ readonly 'drawing.statusAllHidden': "Drawings and indicators hidden";
1217
+ readonly 'drawing.statusAllShown': "Drawings and indicators shown";
1218
+ readonly 'drawing.statusAllLocked': "All drawings locked";
1219
+ readonly 'drawing.statusAllUnlocked': "All drawings unlocked";
1220
+ readonly 'drawing.hide': "Hide";
1221
+ readonly 'drawing.bringToFront': "Bring to front";
1222
+ readonly 'drawing.sendToBack': "Send to back";
1223
+ readonly 'drawing.bringForward': "Bring forward";
1224
+ readonly 'drawing.sendBackward': "Send backward";
1225
+ readonly 'drawing.visCurrentAndAbove': "Current timeframe and above";
1226
+ readonly 'drawing.visCurrentAndBelow': "Current timeframe and below";
1227
+ readonly 'drawing.visCurrentOnly': "Current timeframe only";
1228
+ readonly 'drawing.visAll': "All timeframes";
1229
+ readonly 'drawing.saveTemplate': "Save drawing template";
1230
+ readonly 'drawing.templateName': "Template name";
1231
+ readonly 'drawing.save': "Save";
1232
+ readonly 'drawing.deleteTemplateTitle': "Delete this template?";
1233
+ readonly 'drawing.deleteTemplateBody': "Doing this will permanently delete your \"{name}\" drawing template.";
1234
+ readonly 'drawing.settingsTitle': "{tool} settings";
1235
+ readonly 'drawing.rename': "Rename";
1236
+ readonly 'drawing.name': "Name";
1237
+ readonly 'drawing.tabInputs': "Inputs";
1238
+ readonly 'drawing.tabStyle': "Style";
1239
+ readonly 'drawing.tabText': "Text";
1240
+ readonly 'drawing.tabCoordinates': "Coordinates";
1241
+ readonly 'drawing.tabVisibility': "Visibility";
1242
+ readonly 'drawing.template': "Template";
1243
+ readonly 'drawing.saveAs': "Save as…";
1244
+ readonly 'drawing.applyDefaults': "Apply defaults";
1245
+ readonly 'drawing.cancel': "Cancel";
1246
+ readonly 'drawing.ok': "Ok";
1247
+ readonly 'drawing.delete': "Delete";
1248
+ readonly 'drawing.close': "Close";
1249
+ readonly 'drawing.color': "Color";
1250
+ readonly 'drawing.rowLine': "Line";
1251
+ readonly 'drawing.background': "Background";
1252
+ readonly 'drawing.border': "Border";
1253
+ readonly 'drawing.profitColor': "Target color";
1254
+ readonly 'drawing.stopColor': "Stop color";
1255
+ readonly 'drawing.textColor': "Text color";
1256
+ readonly 'drawing.fontSize': "Font size";
1257
+ readonly 'drawing.opacity': "Opacity";
1258
+ readonly 'drawing.transparency': "Transparency";
1259
+ readonly 'drawing.label': "Label";
1260
+ readonly 'drawing.labelColor': "Label color";
1261
+ readonly 'drawing.labels': "Labels";
1262
+ readonly 'drawing.left': "Left";
1263
+ readonly 'drawing.center': "Center";
1264
+ readonly 'drawing.right': "Right";
1265
+ readonly 'drawing.up': "Up";
1266
+ readonly 'drawing.down': "Down";
1267
+ readonly 'drawing.rowVisible': "{name} visible";
1268
+ readonly 'drawing.leftEnd': "Left end";
1269
+ readonly 'drawing.rightEnd': "Right end";
1270
+ readonly 'drawing.lineEndNormal': "Normal";
1271
+ readonly 'drawing.lineEndArrow': "Arrow";
1272
+ readonly 'drawing.increase': "Increase";
1273
+ readonly 'drawing.decrease': "Decrease";
1274
+ readonly 'drawing.rangeFrom': "From";
1275
+ readonly 'drawing.rangeTo': "To";
1276
+ readonly 'drawing.pickColor': "Pick a color";
1277
+ readonly 'drawing.extend': "Extend";
1278
+ readonly 'drawing.extendNone': "Don't extend";
1279
+ readonly 'drawing.extendLeft': "Extend left";
1280
+ readonly 'drawing.extendRight': "Extend right";
1281
+ readonly 'drawing.extendBoth': "Extend both";
1282
+ readonly 'drawing.extendLines': "Extend lines";
1283
+ readonly 'drawing.middlePoint': "Middle point";
1284
+ readonly 'drawing.middleLine': "Middle line";
1285
+ readonly 'drawing.priceLabel': "Price label";
1286
+ readonly 'drawing.priceLabels': "Price labels";
1287
+ readonly 'drawing.timeLabel': "Time label";
1288
+ readonly 'drawing.rowStyle': "Style";
1289
+ readonly 'drawing.variantOriginal': "Original";
1290
+ readonly 'drawing.variantSchiff': "Schiff";
1291
+ readonly 'drawing.variantModifiedSchiff': "Modified Schiff";
1292
+ readonly 'drawing.variantInside': "Inside";
1293
+ readonly 'drawing.sectionStats': "Stats";
1294
+ readonly 'drawing.percentChange': "Percent change";
1295
+ readonly 'drawing.dateTimeRange': "Date/time range";
1296
+ readonly 'drawing.volume': "Volume";
1297
+ readonly 'drawing.sectionInfo': "Info";
1298
+ readonly 'drawing.priceRange': "Price range";
1299
+ readonly 'drawing.barsRange': "Bars range";
1300
+ readonly 'drawing.angle': "Angle";
1301
+ readonly 'drawing.statsPosition': "Stats position";
1302
+ readonly 'drawing.statsHidden': "Hidden";
1303
+ readonly 'drawing.changeInPips': "Change in pips";
1304
+ readonly 'drawing.alwaysShowStats': "Always show stats";
1305
+ readonly 'drawing.auto': "Auto";
1306
+ readonly 'drawing.extendLeftLine': "Extend left line";
1307
+ readonly 'drawing.extendRightLine': "Extend right line";
1308
+ readonly 'drawing.direction': "Direction";
1309
+ readonly 'drawing.prices': "Prices";
1310
+ readonly 'drawing.levels': "Levels";
1311
+ readonly 'drawing.reverse': "Reverse";
1312
+ readonly 'drawing.fullCircles': "Full circles";
1313
+ readonly 'drawing.coeffsAsPercents': "Coeffs as percents";
1314
+ readonly 'drawing.image': "Image";
1315
+ readonly 'drawing.rowsLayout': "Rows Layout";
1316
+ readonly 'drawing.rowsByNumber': "Number Of Rows";
1317
+ readonly 'drawing.ticksPerRow': "Ticks Per Row";
1318
+ readonly 'drawing.rowSize': "Row Size";
1319
+ readonly 'drawing.upDown': "Up/Down";
1320
+ readonly 'drawing.total': "Total";
1321
+ readonly 'drawing.delta': "Delta";
1322
+ readonly 'drawing.valueAreaVolume': "Value Area Volume";
1323
+ readonly 'drawing.widthPercent': "Width (% of the box)";
1324
+ readonly 'drawing.placement': "Placement";
1325
+ readonly 'drawing.developingPoc': "Developing POC";
1326
+ readonly 'drawing.developingVa': "Developing VA";
1327
+ readonly 'drawing.source': "Source";
1328
+ readonly 'drawing.mode': "Mode";
1329
+ readonly 'drawing.modeHlBars': "HL bars";
1330
+ readonly 'drawing.modeOcBars': "OC bars";
1331
+ readonly 'drawing.modeLineOpen': "Line - open";
1332
+ readonly 'drawing.modeLineHigh': "Line - high";
1333
+ readonly 'drawing.modeLineLow': "Line - low";
1334
+ readonly 'drawing.modeLineClose': "Line - close";
1335
+ readonly 'drawing.modeLineHl2': "Line - HL/2";
1336
+ readonly 'drawing.mirrored': "Mirrored";
1337
+ readonly 'drawing.flipped': "Flipped";
1338
+ readonly 'drawing.avgHlMinticks': "Avg HL in minticks";
1339
+ readonly 'drawing.variance': "Variance";
1340
+ readonly 'drawing.candles': "Candles";
1341
+ readonly 'drawing.borders': "Borders";
1342
+ readonly 'drawing.wick': "Wick";
1343
+ readonly 'drawing.useUpperDeviation': "Use Upper Deviation";
1344
+ readonly 'drawing.useLowerDeviation': "Use Lower Deviation";
1345
+ readonly 'drawing.risk': "Risk";
1346
+ readonly 'drawing.accountSize': "Account size";
1347
+ readonly 'drawing.lotSize': "Lot size";
1348
+ readonly 'drawing.leverage': "Leverage";
1349
+ readonly 'drawing.compactStatsMode': "Compact stats mode";
1350
+ readonly 'drawing.levelVisible': "Level {value} visible";
1351
+ readonly 'drawing.levelText': "Level {value} text";
1352
+ readonly 'drawing.removeLevel': "Remove level {value}";
1353
+ readonly 'drawing.addLevel': "Add level";
1354
+ readonly 'drawing.trendLine': "Trend line";
1355
+ readonly 'drawing.levelsLine': "Levels line";
1356
+ readonly 'drawing.extendLinesLeft': "Extend lines left";
1357
+ readonly 'drawing.extendLinesRight': "Extend lines right";
1358
+ readonly 'drawing.levelOn': "Level {n}";
1359
+ readonly 'drawing.levelValue': "Level {n} value";
1360
+ readonly 'drawing.levelColor': "Level {n} color";
1361
+ readonly 'drawing.useOneColor': "Use one color";
1362
+ readonly 'drawing.backgroundOpacity': "Background opacity";
1363
+ readonly 'drawing.values': "Values";
1364
+ readonly 'drawing.percents': "Percents";
1365
+ readonly 'drawing.levelWords': "Text";
1366
+ readonly 'drawing.levelsOnLogScale': "Fib levels based on log scale";
1367
+ readonly 'drawing.median': "Median";
1368
+ readonly 'drawing.counterclockwise': "Counterclockwise";
1369
+ readonly 'drawing.fans': "Fans";
1370
+ readonly 'drawing.arcs': "Arcs";
1371
+ readonly 'drawing.fanOn': "Fan {n}";
1372
+ readonly 'drawing.fanColor': "Fan {n} color";
1373
+ readonly 'drawing.arcOn': "Arc {n}";
1374
+ readonly 'drawing.arcColor': "Arc {n} color";
1375
+ readonly 'drawing.priceBarRatio': "Price/bar ratio";
1376
+ readonly 'drawing.rangesAndRatio': "Ranges and ratio";
1377
+ readonly 'drawing.wave': "Wave";
1378
+ readonly 'drawing.lines': "Lines";
1379
+ readonly 'drawing.degree': "Degree";
1380
+ readonly 'drawing.degreeSupermillennium': "Supermillennium";
1381
+ readonly 'drawing.degreeMillennium': "Millennium";
1382
+ readonly 'drawing.degreeSubmillennium': "Submillennium";
1383
+ readonly 'drawing.degreeGrandSupercycle': "Grand supercycle";
1384
+ readonly 'drawing.degreeSupercycle': "Supercycle";
1385
+ readonly 'drawing.degreeCycle': "Cycle";
1386
+ readonly 'drawing.degreePrimary': "Primary";
1387
+ readonly 'drawing.degreeIntermediate': "Intermediate";
1388
+ readonly 'drawing.degreeMinor': "Minor";
1389
+ readonly 'drawing.degreeMinute': "Minute";
1390
+ readonly 'drawing.degreeMinuette': "Minuette";
1391
+ readonly 'drawing.degreeSubminuette': "Subminuette";
1392
+ readonly 'drawing.degreeMicro': "Micro";
1393
+ readonly 'drawing.degreeSubmicro': "Submicro";
1394
+ readonly 'drawing.degreeMinuscule': "Minuscule";
1395
+ readonly 'drawing.upperDeviation': "Upper Deviation";
1396
+ readonly 'drawing.lowerDeviation': "Lower Deviation";
1397
+ readonly 'drawing.base': "Base";
1398
+ readonly 'drawing.pearsonsR': "Pearson's R";
1399
+ readonly 'drawing.sourceOpen': "Open";
1400
+ readonly 'drawing.sourceHigh': "High";
1401
+ readonly 'drawing.sourceLow': "Low";
1402
+ readonly 'drawing.sourceClose': "Close";
1403
+ readonly 'drawing.sourceVolume': "Volume";
1404
+ readonly 'drawing.sourceHl2': "(H + L)/2";
1405
+ readonly 'drawing.sourceHlc3': "(H + L + C)/3";
1406
+ readonly 'drawing.sourceOhlc4': "(O + H + L + C)/4";
1407
+ readonly 'drawing.sourceHlcc4': "(H + L + C + C)/4";
1408
+ readonly 'drawing.pricesColor': "Prices color";
1409
+ readonly 'drawing.priceOffset': "Price offset";
1410
+ readonly 'drawing.textWrap': "Text wrap";
1411
+ readonly 'drawing.labelBorder': "Label border";
1412
+ readonly 'drawing.labelText': "Label text";
1413
+ readonly 'drawing.lineColor': "Line color";
1414
+ readonly 'drawing.emojiPin': "Emoji pin";
1415
+ readonly 'drawing.emoji': "Emoji";
1416
+ readonly 'drawing.plateColor': "Plate color";
1417
+ readonly 'drawing.arrowMark': "Arrow";
1418
+ readonly 'drawing.flag': "Flag";
1419
+ readonly 'drawing.coordPositionBar': "#{n} (vertical position %, bar)";
1420
+ readonly 'drawing.verticalPosition': "Vertical position %";
1421
+ readonly 'drawing.riskUnit': "Risk unit";
1422
+ readonly 'drawing.riskAmount': "Amount";
1423
+ readonly 'drawing.entryPrice': "Entry price";
1424
+ readonly 'drawing.profitLevel': "Profit level";
1425
+ readonly 'drawing.stopLevel': "Stop level";
1426
+ readonly 'drawing.ticks': "Ticks";
1427
+ readonly 'drawing.price': "Price";
1428
+ readonly 'drawing.qtyPrecision': "QTY precision";
1429
+ readonly 'drawing.qtyDefault': "Default";
1430
+ readonly 'drawing.qtyInteger': "Integer";
1431
+ readonly 'drawing.qtyOneDecimal': "1 decimal";
1432
+ readonly 'drawing.qtyDecimals': "{n} decimals";
1433
+ readonly 'drawing.text': "Text";
1434
+ readonly 'drawing.statTpPriceOffset': "TP price offset";
1435
+ readonly 'drawing.statTpPercentOffset': "TP percent offset";
1436
+ readonly 'drawing.statTpTickOffset': "TP tick offset";
1437
+ readonly 'drawing.statTpAmount': "TP amount";
1438
+ readonly 'drawing.statTpPl': "TP PL";
1439
+ readonly 'drawing.statOpenClosePl': "Open/closed PL";
1440
+ readonly 'drawing.statQty': "Qty";
1441
+ readonly 'drawing.statRiskRewardRatio': "Risk/reward ratio";
1442
+ readonly 'drawing.statSlPriceOffset': "SL price offset";
1443
+ readonly 'drawing.statSlPercentOffset': "SL percent offset";
1444
+ readonly 'drawing.statSlTickOffset': "SL tick offset";
1445
+ readonly 'drawing.statSlAmount': "SL amount";
1446
+ readonly 'drawing.statSlPl': "SL PL";
1447
+ readonly 'drawing.profileExtendRight': "Extend Right";
1448
+ readonly 'drawing.volumeProfile': "Volume profile";
1449
+ readonly 'drawing.valuesColor': "Values color";
1450
+ readonly 'drawing.upVolume': "Up Volume";
1451
+ readonly 'drawing.downVolume': "Down Volume";
1452
+ readonly 'drawing.valueAreaUp': "Value Area Up";
1453
+ readonly 'drawing.valueAreaDown': "Value Area Down";
1454
+ readonly 'drawing.vah': "VAH";
1455
+ readonly 'drawing.val': "VAL";
1456
+ readonly 'drawing.poc': "POC";
1457
+ readonly 'drawing.histogramBox': "Histogram Box";
1458
+ readonly 'drawing.labelsOnPriceScale': "Labels on price scale";
1459
+ readonly 'drawing.bandsSettings': "Bands Settings";
1460
+ readonly 'drawing.bandsMode': "Bands Calculation Mode";
1461
+ readonly 'drawing.bandsStdev': "Standard Deviation";
1462
+ readonly 'drawing.bandsPercent': "Percentage";
1463
+ readonly 'drawing.bandsMultiplier': "Bands Multiplier #{n}";
1464
+ readonly 'drawing.vwap': "VWAP";
1465
+ readonly 'drawing.upperBand': "Upper band #{n}";
1466
+ readonly 'drawing.lowerBand': "Lower band #{n}";
1467
+ readonly 'drawing.bandBackground': "Background #{n}";
1468
+ readonly 'drawing.extendTop': "Extend top";
1469
+ readonly 'drawing.extendBottom': "Extend bottom";
1470
+ readonly 'drawing.labelBackground': "Label background";
1471
+ readonly 'drawing.sourceText': "Source text";
1472
+ readonly 'drawing.sourceBackground': "Source background";
1473
+ readonly 'drawing.sourceBorder': "Source border";
1474
+ readonly 'drawing.targetText': "Target text";
1475
+ readonly 'drawing.targetBackground': "Target background";
1476
+ readonly 'drawing.targetBorder': "Target border";
1477
+ readonly 'drawing.successText': "Success text";
1478
+ readonly 'drawing.successBackground': "Success background";
1479
+ readonly 'drawing.failureText': "Failure text";
1480
+ readonly 'drawing.failureBackground': "Failure background";
1481
+ readonly 'drawing.backgroundFirst': "First background";
1482
+ readonly 'drawing.backgroundSecond': "Second background";
1483
+ readonly 'drawing.priceLevels': "Price levels";
1484
+ readonly 'drawing.timeLevels': "Time levels";
1485
+ readonly 'drawing.priceLevelOn': "Price level {n}";
1486
+ readonly 'drawing.priceLevelValue': "Price level {n} value";
1487
+ readonly 'drawing.priceLevelColor': "Price level {n} color";
1488
+ readonly 'drawing.timeLevelOn': "Time level {n}";
1489
+ readonly 'drawing.timeLevelValue': "Time level {n} value";
1490
+ readonly 'drawing.timeLevelColor': "Time level {n} color";
1491
+ readonly 'drawing.leftLabels': "Left labels";
1492
+ readonly 'drawing.rightLabels': "Right labels";
1493
+ readonly 'drawing.topLabels': "Top labels";
1494
+ readonly 'drawing.bottomLabels': "Bottom labels";
1495
+ readonly 'drawing.grid': "Grid";
1496
+ readonly 'drawing.angles': "Angles";
1497
+ readonly 'drawing.bold': "Bold";
1498
+ readonly 'drawing.italic': "Italic";
1499
+ readonly 'drawing.addText': "Add text";
1500
+ readonly 'drawing.textAlignment': "Text alignment";
1501
+ readonly 'drawing.top': "Top";
1502
+ readonly 'drawing.middle': "Middle";
1503
+ readonly 'drawing.bottom': "Bottom";
1504
+ readonly 'drawing.inside': "Inside";
1505
+ readonly 'drawing.textOrientation': "Text orientation";
1506
+ readonly 'drawing.horizontal': "Horizontal";
1507
+ readonly 'drawing.vertical': "Vertical";
1508
+ readonly 'drawing.textPlaceholder': "Text";
1509
+ readonly 'drawing.textEditor': "Drawing text";
1510
+ readonly 'drawing.addColumnRight': "Add column to right";
1511
+ readonly 'drawing.addRowBelow': "Add row below";
1512
+ readonly 'drawing.removeRow': "Remove row";
1513
+ readonly 'drawing.removeColumn': "Remove column";
1514
+ readonly 'drawing.coordBar': "#{n} (bar)";
1515
+ readonly 'drawing.coordPrice': "#{n} (price)";
1516
+ readonly 'drawing.coordPriceBar': "#{n} (price, bar)";
1517
+ readonly 'drawing.unitTicks': "Ticks";
1518
+ readonly 'drawing.unitSeconds': "Seconds";
1519
+ readonly 'drawing.unitMinutes': "Minutes";
1520
+ readonly 'drawing.unitHours': "Hours";
1521
+ readonly 'drawing.unitDays': "Days";
1522
+ readonly 'drawing.unitWeeks': "Weeks";
1523
+ readonly 'drawing.unitMonths': "Months";
1524
+ readonly 'drawing.timeframePinnedNote': "A drawing stays on at least one timeframe, so it can always be reached again.";
1525
+ readonly 'drawing.colorSwatch': "Color {hex}";
1526
+ readonly 'drawing.addCustomColor': "Add custom color";
1527
+ readonly 'drawing.saturationValue': "Saturation and brightness";
1528
+ readonly 'drawing.hue': "Hue";
1529
+ readonly 'drawing.hexColor': "Hex color";
1530
+ readonly 'drawing.add': "Add";
1531
+ readonly 'drawing.glyphPicker': "Glyph picker";
1532
+ readonly 'drawing.kindEmojis': "Emojis";
1533
+ readonly 'drawing.kindStickers': "Stickers";
1534
+ readonly 'drawing.kindIcons': "Icons";
1535
+ readonly 'drawing.recentlyUsed': "Recently used";
1536
+ readonly 'drawing.recentGlyph': "Recent {glyph}";
1537
+ readonly 'drawing.stickersSoon': "No sticker set is installed.";
1538
+ readonly 'drawing.glyphCatSmileys': "Smileys & People";
1539
+ readonly 'drawing.glyphCatNature': "Animals & Nature";
1540
+ readonly 'drawing.glyphCatFood': "Food & Drink";
1541
+ readonly 'drawing.glyphCatActivity': "Activity";
1542
+ readonly 'drawing.glyphCatTravel': "Travel & Places";
1543
+ readonly 'drawing.glyphCatObjects': "Objects";
1544
+ readonly 'drawing.glyphCatSymbols': "Symbols";
1545
+ readonly 'drawing.glyphCatFlags': "Flags";
1546
+ readonly 'drawing.glyphCatIconArrows': "Arrows";
1547
+ readonly 'drawing.glyphCatIconCurrency': "Currency";
1548
+ readonly 'drawing.glyphCatIconGestures': "Gestures and smileys";
1549
+ readonly 'drawing.glyphCatIconNature': "Nature";
1550
+ readonly 'drawing.glyphCatIconSpecial': "Special";
1551
+ readonly 'drawing.glyphCatIconSymbols': "Symbols and flags";
1552
+ readonly 'drawing.imageReading': "Reading...";
1553
+ readonly 'drawing.chooseImage': "Choose image";
1554
+ readonly 'drawing.imageFormats': "JPG, PNG or WEBP";
1555
+ readonly 'drawing.imageMaxSize': "Max size 2MB";
1556
+ readonly 'drawing.imageDimensions': "{width} x {height}";
1557
+ readonly 'drawing.imageErrorType': "That file is not a JPG, PNG or WEBP. Pick one of those three formats.";
1558
+ readonly 'drawing.imageErrorSize': "That image is {size}. The limit is 2MB.";
1559
+ readonly 'drawing.imageErrorRead': "That file could not be read. Try picking it again.";
1560
+ readonly 'drawing.imageErrorDecode': "That image could not be opened. It may be damaged.";
1561
+ readonly 'search.title': "Symbol search";
1562
+ readonly 'search.compareTitle': "Compare symbols";
1563
+ readonly 'search.changeSymbolTitle': "Change symbol";
1564
+ readonly 'search.placeholder': "Search symbol";
1565
+ readonly 'search.clear': "Clear";
1566
+ readonly 'search.close': "Close";
1567
+ readonly 'search.noMatches': "No symbols match your criteria";
1568
+ readonly 'search.loadingMore': "Loading more";
1569
+ readonly 'search.failed': "Search failed.";
1570
+ readonly 'search.results': "Symbols";
1571
+ readonly 'search.samePercent': "Same % scale";
1572
+ readonly 'search.newScale': "New price scale";
1573
+ readonly 'search.newPane': "New pane";
1574
+ readonly 'search.added': "Added symbols";
1575
+ readonly 'search.recent': "Recent symbols";
1576
+ readonly 'search.addedMark': "{symbol} is on the chart. Click to remove.";
1577
+ readonly 'search.compareEmpty': "No symbols here yet. Why not add some?";
1578
+ readonly 'search.allClasses': "All";
1579
+ readonly 'search.classFilter': "Asset class";
1580
+ readonly 'search.limitToScope': "Limit search to {scope}";
1581
+ readonly 'search.opDivision': "Division";
1582
+ readonly 'search.opSubtraction': "Subtraction";
1583
+ readonly 'search.opAddition': "Addition";
1584
+ readonly 'search.opMultiplication': "Multiplication";
1585
+ readonly 'search.opExponentiation': "Exponentiation";
1586
+ readonly 'search.opReciprocal': "Reciprocal";
1587
+ readonly 'search.opsHide': "Hide spread operators";
1588
+ readonly 'search.opsShow': "Show spread operators";
1589
+ readonly 'search.ops': "Spread operators";
1590
+ readonly 'status.title': "Market status";
1591
+ readonly 'status.unknownTitle': "Session unknown";
1592
+ readonly 'status.unknown': "This symbol's trading session has not resolved yet.";
1593
+ readonly 'status.endOfDayTitle': "End of day";
1594
+ readonly 'status.endOfDay': "Prices update once a day, after the session closes.";
1595
+ readonly 'status.delayed': "Prices are delayed.";
1596
+ readonly 'status.delayedPair': "{status} {delay}";
1597
+ readonly 'status.continuousTitle': "Open 24/7";
1598
+ readonly 'status.continuous': "This market trades around the clock and never closes.";
1599
+ readonly 'status.open': "Market is open for regular trading.";
1600
+ readonly 'status.openCloses': "Market is open for regular trading. Closes in {until}.";
1601
+ readonly 'status.extended': "Market is open for extended-hours trading.";
1602
+ readonly 'status.extendedRegular': "Market is open for extended-hours trading. Regular hours start in {until}.";
1603
+ readonly 'status.extendedCloses': "Market is open for extended-hours trading. Closes in {until}.";
1604
+ readonly 'status.pre': "Market is open for pre-market trading.";
1605
+ readonly 'status.preRegular': "Market is open for pre-market trading. Regular hours start in {until}.";
1606
+ readonly 'status.after': "Market is open for after-hours trading.";
1607
+ readonly 'status.afterEnds': "Market is open for after-hours trading. Ends in {until}.";
1608
+ readonly 'status.closed': "Market is closed.";
1609
+ readonly 'status.closedPre': "Market is closed. Pre-market starts in {until}.";
1610
+ readonly 'status.closedOpens': "Market is closed. Opens in {until}.";
1611
+ readonly 'status.exchangeTimezone': "Exchange timezone: {zone}";
1612
+ readonly 'status.durationDays': {
1613
+ readonly one: "{count} day";
1614
+ readonly other: "{count} days";
1615
+ };
1616
+ readonly 'status.durationHours': {
1617
+ readonly one: "{count} hour";
1618
+ readonly other: "{count} hours";
1619
+ };
1620
+ readonly 'status.durationMinutes': {
1621
+ readonly one: "{count} minute";
1622
+ readonly other: "{count} minutes";
1623
+ };
1624
+ readonly 'status.durationPair': "{major} {minor}";
1625
+ readonly 'range.oneDay': "1 Day";
1626
+ readonly 'range.fiveDays': "5 Days";
1627
+ readonly 'range.oneMonth': "1 Month";
1628
+ readonly 'range.threeMonths': "3 Months";
1629
+ readonly 'range.sixMonths': "6 Months";
1630
+ readonly 'range.yearToDate': "Year to date";
1631
+ readonly 'range.oneYear': "1 Year";
1632
+ readonly 'range.fiveYears': "5 Years";
1633
+ readonly 'range.all': "All data";
1634
+ readonly 'range.tip': "{range} · {timeframe} bars";
1635
+ readonly 'range.zoomIn': "Zoom in";
1636
+ readonly 'range.zoomOut': "Zoom out";
1637
+ readonly 'range.scrollLeft': "Scroll left";
1638
+ readonly 'range.scrollRight': "Scroll right";
1639
+ readonly 'range.reset': "Reset chart view";
1640
+ readonly 'range.maximizeChart': "Maximize chart";
1641
+ readonly 'range.restoreChart': "Restore chart";
1642
+ readonly 'timezone.title': "Chart timezone";
1643
+ readonly 'timezone.exchange': "Exchange";
1644
+ readonly 'timeframe.title': "Timeframe";
1645
+ readonly 'timeframe.all': "All timeframes";
1646
+ readonly 'timeframe.unitTicks': "Ticks";
1647
+ readonly 'timeframe.unitSeconds': "Seconds";
1648
+ readonly 'timeframe.unitMinutes': "Minutes";
1649
+ readonly 'timeframe.unitHours': "Hours";
1650
+ readonly 'timeframe.unitDays': "Days";
1651
+ readonly 'timeframe.unitWeeks': "Weeks";
1652
+ readonly 'timeframe.unitMonths': "Months";
1653
+ readonly 'timeframe.countTicks': {
1654
+ readonly one: "{count} Tick";
1655
+ readonly other: "{count} Ticks";
1656
+ };
1657
+ readonly 'timeframe.countSeconds': {
1658
+ readonly one: "{count} Second";
1659
+ readonly other: "{count} Seconds";
1660
+ };
1661
+ readonly 'timeframe.countMinutes': {
1662
+ readonly one: "{count} Minute";
1663
+ readonly other: "{count} Minutes";
1664
+ };
1665
+ readonly 'timeframe.countHours': {
1666
+ readonly one: "{count} Hour";
1667
+ readonly other: "{count} Hours";
1668
+ };
1669
+ readonly 'timeframe.countDays': {
1670
+ readonly one: "{count} Day";
1671
+ readonly other: "{count} Days";
1672
+ };
1673
+ readonly 'timeframe.countWeeks': {
1674
+ readonly one: "{count} Week";
1675
+ readonly other: "{count} Weeks";
1676
+ };
1677
+ readonly 'timeframe.countMonths': {
1678
+ readonly one: "{count} Month";
1679
+ readonly other: "{count} Months";
1680
+ };
1681
+ readonly 'timeframe.delete': "Delete {timeframe}";
1682
+ readonly 'timeframe.save': "Save {timeframe}";
1683
+ readonly 'timeframe.exists': "{timeframe} already exists";
1684
+ readonly 'timeframe.custom': "Custom timeframe";
1685
+ readonly 'timeframe.customCount': "Custom timeframe count";
1686
+ readonly 'timeframe.customUnit': "Custom timeframe unit";
1687
+ readonly 'timeframe.addCustom': "Add custom timeframe";
1688
+ readonly 'timeframe.increment': "Increment";
1689
+ readonly 'timeframe.decrement': "Decrement";
1690
+ readonly 'indicator.smaName': "Simple Moving Average";
1691
+ readonly 'indicator.smaDescription': "Smoothed average over a fixed window";
1692
+ readonly 'indicator.emaName': "Exponential Moving Average";
1693
+ readonly 'indicator.emaDescription': "Recency-weighted moving average";
1694
+ readonly 'indicator.hmaName': "Hull Moving Average";
1695
+ readonly 'indicator.hmaDescription': "Low-lag weighted moving average";
1696
+ readonly 'indicator.vwmaName': "Volume Weighted MA";
1697
+ readonly 'indicator.vwmaDescription': "Moving average weighted by volume";
1698
+ readonly 'indicator.bollingerName': "Bollinger Bands";
1699
+ readonly 'indicator.bollingerDescription': "SMA envelope at two standard deviations";
1700
+ readonly 'indicator.donchianName': "Donchian Channels";
1701
+ readonly 'indicator.donchianDescription': "Rolling highest-high and lowest-low channel";
1702
+ readonly 'indicator.keltnerName': "Keltner Channels";
1703
+ readonly 'indicator.keltnerDescription': "EMA midline with ATR-scaled bands";
1704
+ readonly 'indicator.supertrendName': "Supertrend";
1705
+ readonly 'indicator.supertrendDescription': "ATR trend band that flips with direction";
1706
+ readonly 'indicator.psarName': "Parabolic SAR";
1707
+ readonly 'indicator.psarDescription': "Stop-and-reverse trailing dots";
1708
+ readonly 'indicator.rsiName': "Relative Strength Index";
1709
+ readonly 'indicator.rsiDescription': "Momentum oscillator from 0 to 100";
1710
+ readonly 'indicator.macdName': "MACD";
1711
+ readonly 'indicator.macdDescription': "Moving Average Convergence Divergence";
1712
+ readonly 'indicator.stochasticName': "Stochastic Oscillator";
1713
+ readonly 'indicator.stochasticDescription': "%K and %D momentum from 0 to 100";
1714
+ readonly 'indicator.stochrsiName': "Stochastic RSI";
1715
+ readonly 'indicator.stochrsiDescription': "Stochastic applied to the RSI series";
1716
+ readonly 'indicator.adxName': "Average Directional Index";
1717
+ readonly 'indicator.adxDescription': "Trend strength with +DI and -DI";
1718
+ readonly 'indicator.atrName': "Average True Range";
1719
+ readonly 'indicator.atrDescription': "Volatility: Wilder's true-range average";
1720
+ readonly 'indicator.cciName': "Commodity Channel Index";
1721
+ readonly 'indicator.cciDescription': "Deviation from the typical-price average";
1722
+ readonly 'indicator.williamsName': "Williams %R";
1723
+ readonly 'indicator.williamsDescription': "Overbought and oversold momentum from -100 to 0";
1724
+ readonly 'indicator.rocName': "Rate of Change";
1725
+ readonly 'indicator.rocDescription': "Percent change over the period";
1726
+ readonly 'indicator.momentumName': "Momentum";
1727
+ readonly 'indicator.momentumDescription': "Price difference over the period";
1728
+ readonly 'indicator.volumeName': "Volume";
1729
+ readonly 'indicator.volumeDescription': "Per-bar traded volume histogram";
1730
+ readonly 'indicator.vwapName': "Volume Weighted Avg Price";
1731
+ readonly 'indicator.vwapDescription': "Cumulative volume-weighted average price";
1732
+ readonly 'indicator.obvName': "On-Balance Volume";
1733
+ readonly 'indicator.obvDescription': "Cumulative volume by close direction";
1734
+ readonly 'indicator.mfiName': "Money Flow Index";
1735
+ readonly 'indicator.mfiDescription': "Volume-weighted RSI from 0 to 100";
1736
+ readonly 'host.noVolume': "No volume from this feed";
1737
+ readonly 'host.saveConflict': "Saved elsewhere since you opened it. Load the newer version before saving.";
1738
+ readonly 'host.saveNotFound': "This was deleted elsewhere. Save it again as new.";
1739
+ readonly 'host.loadInvalid': "This could not be opened. Nothing on screen changed.";
1740
+ readonly 'host.loadUnavailable': "Your saved work could not be reached. Nothing on screen changed.";
1741
+ 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.";
1742
+ 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.";
1743
+ readonly 'layout.s': "Single chart";
1744
+ readonly 'layout.2h': "2 columns";
1745
+ readonly 'layout.2v': "2 rows";
1746
+ readonly 'layout.3h': "3 columns";
1747
+ readonly 'layout.3v': "3 rows";
1748
+ readonly 'layout.3s': "Large left, 2 stacked right";
1749
+ readonly 'layout.3r': "2 stacked left, large right";
1750
+ readonly 'layout.2_1': "2 above, 1 below";
1751
+ readonly 'layout.1_2': "1 above, 2 below";
1752
+ readonly 'layout.4': "2 × 2 grid";
1753
+ readonly 'layout.4v': "4 rows";
1754
+ readonly 'layout.4h': "4 columns";
1755
+ readonly 'layout.4s': "Large left, 3 stacked right";
1756
+ readonly 'layout.4s_l': "3 stacked left, large right";
1757
+ readonly 'layout.1_3': "1 above, 3 below";
1758
+ readonly 'layout.3_1': "3 above, 1 below";
1759
+ readonly 'layout.2_2_l': "2 columns, 2 stacked right";
1760
+ readonly 'layout.2_2_r': "2 stacked left, 2 columns";
1761
+ readonly 'layout.2_2': "2 above, 2 full-width rows below";
1762
+ readonly 'layout.1_4': "1 above, 4 below";
1763
+ readonly 'layout.5h': "5 columns";
1764
+ readonly 'layout.5v': "5 rows";
1765
+ readonly 'layout.5s': "Large left, 4 stacked right";
1766
+ readonly 'layout.5s_l': "4 stacked left, large right";
1767
+ readonly 'layout.2_3': "2 above, 3 below";
1768
+ readonly 'layout.3_2': "3 above, 2 below";
1769
+ readonly 'layout.4_1': "4 above, 1 below";
1770
+ readonly 'layout.2_3_l': "2 columns, 3 stacked right";
1771
+ readonly 'layout.2_3_r': "3 stacked left, 2 columns";
1772
+ readonly 'layout.6': "3 × 2 grid";
1773
+ readonly 'layout.6h': "6 columns";
1774
+ readonly 'layout.6v': "6 rows";
1775
+ readonly 'layout.6c': "2 × 3 grid";
1776
+ readonly 'layout.2_4': "2 above, 4 below";
1777
+ readonly 'layout.4_2': "4 above, 2 below";
1778
+ readonly 'layout.4_3': "4 above, 3 below";
1779
+ readonly 'layout.7h': "7 columns";
1780
+ readonly 'layout.7s': "Large left, 6 stacked right";
1781
+ readonly 'layout.8': "4 × 2 grid";
1782
+ readonly 'layout.8c': "2 × 4 grid";
1783
+ readonly 'layout.8h': "8 columns";
1784
+ readonly 'layout.8v': "8 rows";
1785
+ readonly 'layout.9s': "3 × 3 grid";
1786
+ readonly 'layout.5_4': "5 above, 4 below";
1787
+ readonly 'layout.9h': "9 columns";
1788
+ readonly 'layout.9v': "9 rows";
1789
+ readonly 'layout.10c5': "5 × 2 grid";
1790
+ readonly 'layout.10h': "10 columns";
1791
+ readonly 'layout.10v': "10 rows";
1792
+ readonly 'layout.12c6': "6 × 2 grid";
1793
+ readonly 'layout.12c4': "4 × 3 grid";
1794
+ readonly 'layout.12h': "12 columns";
1795
+ readonly 'layout.14c7': "7 × 2 grid";
1796
+ readonly 'layout.16c8': "8 × 2 grid";
1797
+ readonly 'layout.16c4': "4 × 4 grid";
1798
+ readonly 'layouts.setup': "Layout setup";
1799
+ readonly 'layouts.arrangement': "Chart arrangement";
1800
+ readonly 'layouts.syncInLayout': "Sync in layout";
1801
+ readonly 'layouts.syncSymbol': "Symbol";
1802
+ readonly 'layouts.syncTimeframe': "Timeframe";
1803
+ readonly 'layouts.syncCrosshair': "Crosshair";
1804
+ readonly 'layouts.syncTime': "Time";
1805
+ readonly 'layouts.syncDateRange': "Date range";
1806
+ readonly 'layouts.syncSymbolTip': "Symbol changes on all charts within the layout";
1807
+ readonly 'layouts.syncTimeframeTip': "Timeframe changes on all charts within the layout";
1808
+ readonly 'layouts.syncCrosshairTip': "Crosshair is synced across all charts within the layout";
1809
+ readonly 'layouts.syncTimeTip': "When a chart is clicked, all charts within the layout display the same point of time";
1810
+ readonly 'layouts.syncDateRangeTip': "Date range changes on all charts within the layout";
1811
+ readonly 'layouts.syncSymbolToggle': "Sync symbol";
1812
+ readonly 'layouts.syncTimeframeToggle': "Sync timeframe";
1813
+ readonly 'layouts.syncCrosshairToggle': "Sync crosshair";
1814
+ readonly 'layouts.syncTimeToggle': "Sync time";
1815
+ readonly 'layouts.syncDateRangeToggle': "Sync date range";
1816
+ readonly 'layouts.unnamed': "Unnamed";
1817
+ readonly 'layouts.unsavedChanges': "Unsaved changes";
1818
+ readonly 'layouts.allSaved': "All changes saved";
1819
+ readonly 'layouts.notSaving': "Not saving until this is restored";
1820
+ readonly 'layouts.manage': "Manage layouts";
1821
+ readonly 'layouts.saveLayout': "Save layout";
1822
+ readonly 'layouts.hintSave': "{modifier} + S";
1823
+ readonly 'layouts.hintOpen': "Dot";
1824
+ readonly 'layouts.save': "Save";
1825
+ readonly 'layouts.autosave': "Autosave";
1826
+ readonly 'layouts.rename': "Rename";
1827
+ readonly 'layouts.copyOfName': "{name} copy";
1828
+ readonly 'layouts.saveNewTitle': "Save New Chart Layout";
1829
+ readonly 'layouts.saveNewLabel': "Enter a new chart layout name:";
1830
+ readonly 'layouts.copyTitle': "Make copy of chart layout";
1831
+ readonly 'layouts.renameTitle': "Rename chart layout";
1832
+ readonly 'layouts.createTitle': "Create layout";
1833
+ readonly 'layouts.newLayoutName': "New layout name";
1834
+ readonly 'layouts.createPlaceholder': "My layout";
1835
+ readonly 'layouts.create': "Create";
1836
+ readonly 'layouts.makeCopyRow': "Make a copy…";
1837
+ readonly 'layouts.renameRow': "Rename…";
1838
+ readonly 'layouts.downloadDataRow': "Download chart data";
1839
+ readonly 'layouts.createNewRow': "Create new layout…";
1840
+ readonly 'layouts.recentlyUsed': "Recently used";
1841
+ readonly 'layouts.loading': "Loading";
1842
+ readonly 'layouts.emptyNone': "No saved layouts yet.";
1843
+ readonly 'layouts.openLayoutRow': "Open layout…";
1844
+ readonly 'layouts.listingFacts': "{symbol}, {timeframe}";
1845
+ readonly 'layouts.listingDated': "{facts} ({date})";
1846
+ readonly 'layouts.dialogTitle': "Layouts";
1847
+ readonly 'layouts.search': "Search";
1848
+ readonly 'layouts.columnName': "Layout name";
1849
+ readonly 'layouts.sortBy': "Sort by layout name, date changed";
1850
+ readonly 'layouts.sortNameAsc': "Layout name (A to Z)";
1851
+ readonly 'layouts.sortNameDesc': "Layout name (Z to A)";
1852
+ readonly 'layouts.sortModifiedAsc': "Date modified (oldest first)";
1853
+ readonly 'layouts.sortModifiedDesc': "Date modified (newest first)";
1854
+ readonly 'layouts.favorite': "Add to favorites";
1855
+ readonly 'layouts.unfavorite': "Remove from favorites";
1856
+ readonly 'layouts.noMatches': "Nothing matches.";
1857
+ readonly 'layouts.delete': "Delete";
1858
+ readonly 'layouts.deleteNamed': "Delete {name}";
1859
+ readonly 'layouts.deleteConfirm': "Delete this chart layout?";
1860
+ readonly 'layouts.deleteConfirmBody': "Doing this will permanently delete your \"{name}\" layout.";
1861
+ readonly 'layouts.cancel': "Cancel";
1862
+ readonly 'layouts.close': "Close";
1863
+ readonly 'layouts.errList': "Could not load your saved layouts.";
1864
+ readonly 'session.pre': "Pre-market";
1865
+ readonly 'session.open': "Market open";
1866
+ readonly 'session.extended': "Extended hours";
1867
+ readonly 'session.after': "After-hours";
1868
+ readonly 'session.closed': "Market closed";
1869
+ readonly 'inputs.cancel': "Cancel";
1870
+ readonly 'inputs.apply': "Apply";
1871
+ readonly 'replay.watermark': "Replay";
1872
+ readonly 'replay.selectBar': "Select bar";
1873
+ readonly 'replay.selectDate': "Select date";
1874
+ readonly 'replay.selectStartingPoint': "Select starting point";
1875
+ readonly 'replay.startBar': "Bar";
1876
+ readonly 'replay.startDate': "Date…";
1877
+ readonly 'replay.startFirst': "First available date";
1878
+ readonly 'replay.startRandom': "Random bar";
1879
+ readonly 'replay.close': "Close";
1880
+ readonly 'replay.startDateField': "Replay start date";
1881
+ readonly 'replay.startTimeField': "Replay start time (UTC, optional)";
1882
+ readonly 'replay.dateMask': "YYYY-MM-DD";
1883
+ readonly 'replay.timeMask': "HH:MM";
1884
+ readonly 'replay.chooseTime': "Choose a time";
1885
+ readonly 'replay.previousMonth': "Previous month, {month}";
1886
+ readonly 'replay.nextMonth': "Next month, {month}";
1887
+ readonly 'replay.previousYear': "Previous year, {year}";
1888
+ readonly 'replay.nextYear': "Next year, {year}";
1889
+ readonly 'replay.previousYears': "Previous years, {years}";
1890
+ readonly 'replay.nextYears': "Next years, {years}";
1891
+ readonly 'replay.showMonths': "Switch to months, {year}";
1892
+ readonly 'replay.showYears': "Switch to years, {years}";
1893
+ readonly 'replay.showDates': "Switch to dates, {month}";
1894
+ readonly 'replay.yearRange': "{from} - {to}";
1895
+ readonly 'replay.months': "Months";
1896
+ readonly 'replay.years': "Years";
1897
+ readonly 'replay.firstAvailableDay': "Select the first available day";
1898
+ readonly 'replay.cancel': "Cancel";
1899
+ readonly 'replay.select': "Select";
1900
+ readonly 'replay.weekdayMon': "Mo";
1901
+ readonly 'replay.weekdayTue': "Tu";
1902
+ readonly 'replay.weekdayWed': "We";
1903
+ readonly 'replay.weekdayThu': "Th";
1904
+ readonly 'replay.weekdayFri': "Fr";
1905
+ readonly 'replay.weekdaySat': "Sa";
1906
+ readonly 'replay.weekdaySun': "Su";
1907
+ readonly 'replay.stepBack': "Step back one bar";
1908
+ readonly 'replay.play': "Play";
1909
+ readonly 'replay.pause': "Pause";
1910
+ readonly 'replay.stepForward': "Step forward one bar";
1911
+ readonly 'replay.goLiveTitle': "Jump to the live edge";
1912
+ readonly 'replay.exit': "Exit replay";
1913
+ readonly 'replay.speed': "Replay speed";
1914
+ readonly 'replay.updatesPerSecond': {
1915
+ readonly one: "{count} update per second";
1916
+ readonly other: "{count} updates per second";
1917
+ };
1918
+ readonly 'replay.oneUpdatePerSeconds': {
1919
+ readonly one: "1 update per {count} second";
1920
+ readonly other: "1 update per {count} seconds";
1921
+ };
1922
+ readonly 'replay.timeframe': "Update timeframe";
1923
+ readonly 'replay.timeframeHelp': "How much time each replay update advances. Finer than the chart timeframe, each bar forms from real finer bars.";
1924
+ readonly 'replay.timeframeNone': "No finer timeframe for this chart timeframe";
1925
+ readonly 'replay.auto': "Auto";
1926
+ readonly 'replay.autoSelectTimeframe': "Auto select timeframe";
1927
+ readonly 'menu.resetView': "Reset chart view";
1928
+ readonly 'menu.copyPrice': "Copy price {price}";
1929
+ readonly 'menu.paste': "Paste";
1930
+ readonly 'menu.removeIndicators': {
1931
+ readonly one: "Remove {count} indicator";
1932
+ readonly other: "Remove {count} indicators";
1933
+ };
1934
+ readonly 'menu.removeDrawings': {
1935
+ readonly one: "Remove {count} drawing";
1936
+ readonly other: "Remove {count} drawings";
1937
+ };
1938
+ readonly 'menu.settings': "Settings…";
1939
+ readonly 'tool.trend_line': "Trend line";
1940
+ readonly 'tool.ray': "Ray";
1941
+ readonly 'tool.info_line': "Info line";
1942
+ readonly 'tool.extended': "Extended line";
1943
+ readonly 'tool.trend_angle': "Trend angle";
1944
+ readonly 'tool.horizontal_line': "Horizontal line";
1945
+ readonly 'tool.horizontal_ray': "Horizontal ray";
1946
+ readonly 'tool.vertical_line': "Vertical line";
1947
+ readonly 'tool.cross_line': "Cross line";
1948
+ readonly 'tool.arrow': "Arrow";
1949
+ readonly 'tool.rectangle': "Rectangle";
1950
+ readonly 'tool.rotated_rectangle': "Rotated rectangle";
1951
+ readonly 'tool.ellipse': "Ellipse";
1952
+ readonly 'tool.circle': "Circle";
1953
+ readonly 'tool.triangle': "Triangle";
1954
+ readonly 'tool.arc': "Arc";
1955
+ readonly 'tool.curve': "Curve";
1956
+ readonly 'tool.double_curve': "Double curve";
1957
+ readonly 'tool.regression_trend': "Regression trend";
1958
+ readonly 'tool.parallel_channel': "Parallel channel";
1959
+ readonly 'tool.flat_top_bottom': "Flat top/bottom";
1960
+ readonly 'tool.disjoint_channel': "Disjoint channel";
1961
+ readonly 'tool.fib_retracement': "Fib retracement";
1962
+ readonly 'tool.fib_trend_ext': "Trend-based fib extension";
1963
+ readonly 'tool.fib_channel': "Fib channel";
1964
+ readonly 'tool.fib_timezone': "Fib time zone";
1965
+ readonly 'tool.fib_speed_resist_fan': "Fib speed resistance fan";
1966
+ readonly 'tool.fib_trend_time': "Trend-based fib time";
1967
+ readonly 'tool.fib_circles': "Fib circles";
1968
+ readonly 'tool.fib_spiral': "Fib spiral";
1969
+ readonly 'tool.fib_speed_resist_arcs': "Fib speed resistance arcs";
1970
+ readonly 'tool.fib_wedge': "Fib wedge";
1971
+ readonly 'tool.pitchfan': "Pitchfan";
1972
+ readonly 'tool.pitchfork': "Pitchfork";
1973
+ readonly 'tool.schiff_pitchfork': "Schiff pitchfork";
1974
+ readonly 'tool.schiff_pitchfork_modified': "Modified Schiff pitchfork";
1975
+ readonly 'tool.inside_pitchfork': "Inside pitchfork";
1976
+ readonly 'tool.gannbox': "Gann box";
1977
+ readonly 'tool.gannbox_square': "Gann square";
1978
+ readonly 'tool.gannbox_fixed': "Gann square fixed";
1979
+ readonly 'tool.gannbox_fan': "Gann fan";
1980
+ readonly 'tool.xabcd_pattern': "XABCD pattern";
1981
+ readonly 'tool.cypher_pattern': "Cypher pattern";
1982
+ readonly 'tool.abcd_pattern': "ABCD pattern";
1983
+ readonly 'tool.three_drives': "Three drives pattern";
1984
+ readonly 'tool.triangle_pattern': "Triangle pattern";
1985
+ readonly 'tool.head_and_shoulders': "Head and shoulders";
1986
+ readonly 'tool.elliott_impulse_wave': "Elliott impulse (12345)";
1987
+ readonly 'tool.elliott_correction': "Elliott correction (ABC)";
1988
+ readonly 'tool.elliott_triangle_wave': "Elliott triangle (ABCDE)";
1989
+ readonly 'tool.elliott_double_combo': "Elliott double combo (WXY)";
1990
+ readonly 'tool.elliott_triple_combo': "Elliott triple combo (WXYXZ)";
1991
+ readonly 'tool.cyclic_lines': "Cyclic lines";
1992
+ readonly 'tool.time_cycles': "Time cycles";
1993
+ readonly 'tool.sine_line': "Sine line";
1994
+ readonly 'tool.long_position': "Long position";
1995
+ readonly 'tool.short_position': "Short position";
1996
+ readonly 'tool.forecast': "Position forecast";
1997
+ readonly 'tool.sector': "Sector";
1998
+ readonly 'tool.bars_pattern': "Bars pattern";
1999
+ readonly 'tool.ghost_feed': "Ghost feed";
2000
+ readonly 'tool.anchored_vwap': "Anchored VWAP";
2001
+ readonly 'tool.fixed_range_volume_profile': "Fixed range volume profile";
2002
+ readonly 'tool.anchored_volume_profile': "Anchored volume profile";
2003
+ readonly 'tool.image': "Image";
2004
+ readonly 'tool.emoji': "Emoji";
2005
+ readonly 'tool.sticker': "Sticker";
2006
+ readonly 'tool.icon': "Icon";
2007
+ readonly 'tool.text': "Text";
2008
+ readonly 'tool.note': "Note";
2009
+ readonly 'tool.comment': "Comment";
2010
+ readonly 'tool.callout': "Callout";
2011
+ readonly 'tool.price_label': "Price label";
2012
+ readonly 'tool.arrow_up': "Arrow mark up";
2013
+ readonly 'tool.arrow_down': "Arrow mark down";
2014
+ readonly 'tool.arrow_marker': "Arrow marker";
2015
+ readonly 'tool.flag': "Flag mark";
2016
+ readonly 'tool.price_note': "Price note";
2017
+ readonly 'tool.pin': "Pin";
2018
+ readonly 'tool.signpost': "Signpost";
2019
+ readonly 'tool.table': "Table";
2020
+ readonly 'tool.brush': "Brush";
2021
+ readonly 'tool.highlighter': "Highlighter";
2022
+ readonly 'tool.path': "Path";
2023
+ readonly 'tool.polyline': "Polyline";
2024
+ readonly 'tool.price_range': "Price range";
2025
+ readonly 'tool.date_range': "Date range";
2026
+ readonly 'tool.date_and_price_range': "Date and price range";
2027
+ readonly 'tool.measure': "Measure";
2028
+ readonly 'legend.open': "O";
2029
+ readonly 'legend.high': "H";
2030
+ readonly 'legend.low': "L";
2031
+ readonly 'legend.close': "C";
2032
+ readonly 'legend.change': "{change} ({percent}%)";
2033
+ readonly 'legend.indicatorSettings': "Indicator settings";
2034
+ readonly 'legend.showRows': "Show indicator rows";
2035
+ readonly 'legend.hideRows': "Hide indicator rows";
2036
+ readonly 'legend.restorePane': "Restore pane";
2037
+ readonly 'legend.collapsePane': "Collapse pane";
2038
+ readonly 'legend.maximizePane': "Maximize pane";
2039
+ readonly 'legend.showIndicator': "Show indicator";
2040
+ readonly 'legend.hideIndicator': "Hide indicator";
2041
+ readonly 'legend.scaleNormal': "Reg";
2042
+ readonly 'legend.scaleLog': "Log";
2043
+ readonly 'legend.scalePercent': "%";
2044
+ readonly 'legend.scaleIndexed': "100";
2045
+ readonly 'legend.changeSymbol': "Change symbol";
2046
+ readonly 'legend.removeCompare': "Remove comparison";
2047
+ readonly 'legend.removeIndicator': "Remove indicator";
2048
+ }, ChartLocaleCode>;
2049
+ /** A drawing tool's display name for a registry `type`: the catalog's when it knows the type, else
2050
+ * the registry's own English `name`, so a tool the catalog has not met still has a name. */
2051
+ declare function toolName(t: ChartTranslate, type: string, fallback: string): string;
2052
+ /** A multi-chart arrangement's display name for its code, else the arrangement catalog's English
2053
+ * label. An arrangement code separates its parts with hyphens (`2-2-l`) where a catalog key uses
2054
+ * underscores, so the code is converted rather than asking every caller to. */
2055
+ declare function arrangementName(t: ChartTranslate, code: string, fallback: string): string;
2056
+ /** A `ChartI18n` over the widget's own catalog, starting in `initial` (English when omitted): one
2057
+ * of the built-in codes, or a code the `locales` option registers. */
2058
+ declare function createChartI18n(initial?: string, options?: ChartI18nOptions): ChartI18n;
2059
+
2060
+ /** The session an instant classifies into. `extended` is trading outside regular hours when the
2061
+ * symbol does not split it into pre-market and after-hours. */
2062
+ type SessionState = 'pre' | 'open' | 'extended' | 'after' | 'closed';
2063
+ /** One subsession of an extended-hours symbol: `regular`,
2064
+ * `extended`, `premarket` or `postmarket`, each with its own session string and, optionally,
2065
+ * the corrections that shorten it. `SymbolInfo.subsessions` satisfies it; an id the chart has
2066
+ * no state for is ignored. */
2067
+ interface SubsessionSource {
2068
+ readonly id: string;
2069
+ readonly session: string;
2070
+ readonly sessionCorrections?: string;
2071
+ }
2072
+ /** What a session model is built from: the symbology triple plus the optional corrections and
2073
+ * subsessions. `SymbolInfo` satisfies it. */
2074
+ interface SessionSource {
2075
+ readonly timezone: string;
2076
+ readonly session: string;
2077
+ readonly sessionHolidays?: string;
2078
+ readonly corrections?: string;
2079
+ readonly subsessions?: readonly SubsessionSource[];
2080
+ }
2081
+ /** One trading stretch of a trading day, in minutes from that day's exchange-local midnight. The
2082
+ * start may be negative (the stretch begins on a previous day) and the end may pass 1440 (it
2083
+ * runs into the next day); the end is exclusive. */
2084
+ interface SessionSegment {
2085
+ readonly start: number;
2086
+ readonly end: number;
2087
+ }
2088
+ /** A schedule: the stretches per weekday (0 = Sunday), and dated overrides keyed 'YYYYMMDD'. */
2089
+ interface SessionSchedule {
2090
+ readonly week: readonly (readonly SessionSegment[])[];
2091
+ readonly corrections: ReadonlyMap<string, readonly SessionSegment[]>;
2092
+ }
2093
+ interface SessionModel {
2094
+ /** The exchange zone every minute here is read in. */
2095
+ readonly timezone: string;
2096
+ /** A `24x7` symbol: always open, no transitions, no timeline. */
2097
+ readonly continuous: boolean;
2098
+ /** The regular session. */
2099
+ readonly regular: SessionSchedule;
2100
+ /** Extended-hours stretches by the state they classify into, from the subsessions. */
2101
+ readonly extended: readonly {
2102
+ readonly state: Exclude<SessionState, 'open' | 'closed'>;
2103
+ readonly schedule: SessionSchedule;
2104
+ }[];
2105
+ /** Full-closure dates, 'YYYYMMDD'. */
2106
+ readonly holidays: ReadonlySet<string>;
2107
+ }
2108
+ /** Build the session model from a symbol's metadata. Null when the grammar cannot read any part
2109
+ * of it: a chart then shows no bands, no status and no timeline for the symbol rather than a
2110
+ * session it guessed. A `regular` subsession, when given, is the regular session; the symbol's
2111
+ * `session` is otherwise. Subsessions with ids the chart has no state for are ignored. */
2112
+ declare function parseSessionModel(source: SessionSource): SessionModel | null;
2113
+ /** Which of a symbol's named sessions a chart displays:
2114
+ * `regular` shows regular hours only, `extended` shows the extended-hours bars as well. A
2115
+ * per-chart preference a host persists. `extended` is the DEFAULT and shows every bar the feed
2116
+ * served; narrowing to `regular` is the opt-in, because a chart that silently hid bars it had
2117
+ * would be lying about the market by default. A symbol without extended hours has nothing to
2118
+ * choose, and every bar shows either way. */
2119
+ type ActiveSubsession = 'regular' | 'extended';
2120
+ declare const DEFAULT_SUBSESSION: ActiveSubsession;
2121
+ /** Whether the symbol declared any hours outside its regular session. Only such a symbol offers a
2122
+ * subsession choice or shades extended hours. */
2123
+ declare function hasExtendedHours(model: SessionModel): boolean;
2124
+ /** The bar filter for the active subsession: under `regular`, on a symbol with extended hours,
2125
+ * keep the bars whose open falls in regular hours; otherwise nothing is filtered (null). For
2126
+ * intraday timeframes only: a daily bar spans whole sessions, so a caller applies the filter on
2127
+ * intraday timeframes and shows every daily bar. */
2128
+ declare function subsessionBarFilter(model: SessionModel, active: ActiveSubsession): ((epochSecs: number) => boolean) | null;
2129
+ /** The session state at an instant (epoch seconds), under the symbol's exchange clock. */
2130
+ declare function sessionStateAt(model: SessionModel, epochSecs: number): SessionState;
2131
+ /** The next session transition after an instant, exact to the minute, or null when there is
2132
+ * none within eight days (a continuous market, or a long closure). */
2133
+ declare function nextSessionChange(model: SessionModel, epochSecs: number): {
2134
+ atSecs: number;
2135
+ state: SessionState;
2136
+ } | null;
2137
+ interface SessionTimeline {
2138
+ /** The exchange-local day's stretches, closed gaps included, covering 0 to 1440 minutes. */
2139
+ readonly segments: readonly {
2140
+ readonly start: number;
2141
+ readonly end: number;
2142
+ readonly state: SessionState;
2143
+ }[];
2144
+ /** Now, in exchange-local minutes from midnight. */
2145
+ readonly nowMins: number;
2146
+ /** The exchange-local weekday, written in the language of `tag` and upper-cased ("MON"). */
2147
+ readonly dayLabel: string;
2148
+ readonly timezone: string;
2149
+ }
2150
+ /** The exchange-local day's timeline for a status popup. `tag` is the BCP 47 tag the weekday is
2151
+ * written in: a date part, so it comes from Intl rather than the catalog. */
2152
+ declare function sessionTimeline(model: SessionModel, epochSecs: number, tag: string): SessionTimeline;
2153
+ /** A symbol's market status at an instant: the session state and the feed's liveness together,
2154
+ * so a consumer cannot present an end-of-day or delayed feed as a live open market. */
2155
+ interface MarketStatus {
2156
+ readonly state: SessionState;
2157
+ /** The feed's liveness, an explicit part of the status. */
2158
+ readonly dataStatus: DataStatus;
2159
+ /** A `24x7` symbol. */
2160
+ readonly continuous: boolean;
2161
+ /** The next transition, or null when there is none to count down to. */
2162
+ readonly next: {
2163
+ readonly atSecs: number;
2164
+ readonly state: SessionState;
2165
+ } | null;
2166
+ }
2167
+ declare function marketStatus(model: SessionModel, dataStatus: DataStatus, nowSecs: number): MarketStatus;
2168
+ /** The market status straight from a resolved symbol, or null when its session cannot be read. */
2169
+ declare function marketStatusFor(symbol: Pick<SymbolInfo, 'timezone' | 'session' | 'sessionHolidays' | 'corrections' | 'subsessions' | 'dataStatus'>, nowSecs: number): MarketStatus | null;
2170
+ /** The catalog key of a session state's name: the same five words the legend's status dot and
2171
+ * a status popup's title use. */
2172
+ declare const SESSION_STATE_TITLE: Readonly<Record<SessionState, ChartMessageKey>>;
2173
+ /** The title line of a status popup: the feed's liveness when it is not a live stream, the
2174
+ * continuous market's own word, or the session state's name. */
2175
+ declare function marketStatusTitle(t: ChartTranslate, status: MarketStatus): string;
2176
+ /** "3 days 4 hours": the coarsest unit, and the next one down when it is non-zero. Each unit is a
2177
+ * whole phrase and `status.durationPair` owns the order and the separator, so a language decides
2178
+ * both rather than inheriting English's. A duration under a minute reads as one minute. */
2179
+ declare function formatDuration(t: ChartTranslate, secs: number): string;
2180
+ /** The sentence under a status popup's title. An end-of-day feed states that and nothing about
2181
+ * hours; a continuous market states that it never closes; otherwise the session state with a
2182
+ * countdown to the next transition when one is known, and a delayed stream adds that its prices
2183
+ * are delayed. */
2184
+ declare function marketStatusText(t: ChartTranslate, status: MarketStatus, nowSecs: number): string;
2185
+ /** The footer naming the exchange zone a timeline is drawn in: "Exchange timezone: New York
2186
+ * (UTC-4)". */
2187
+ declare function exchangeTimezoneText(t: ChartTranslate, timezone: string, at?: Date): string;
2188
+
2189
+ /** Paints a market's mark into a box the chart owns, and answers what takes it down again. */
2190
+ type SymbolMarkPainter = (request: {
2191
+ symbol: string;
2192
+ host: HTMLElement;
2193
+ size: number;
2194
+ }) => (() => void) | void;
2195
+ /** Paints the mark of the venue a market lists on, the same way. */
2196
+ type VenueMarkPainter = (request: {
2197
+ exchange: string;
2198
+ host: HTMLElement;
2199
+ size: number;
2200
+ }) => (() => void) | void;
2201
+ /** Paints the mark of a data source, where a row names a data source rather than a venue. */
2202
+ type DataSourceMarkPainter = (request: {
2203
+ dataSource: string;
2204
+ host: HTMLElement;
2205
+ size: number;
2206
+ }) => (() => void) | void;
2207
+ /** Every painter the host lent, as the chart carries them: null where it lent none. */
2208
+ interface MarkPainters {
2209
+ readonly symbol: SymbolMarkPainter | null;
2210
+ readonly venue: VenueMarkPainter | null;
2211
+ readonly dataSource: DataSourceMarkPainter | null;
2212
+ }
2213
+ /** The host's hooks, as an entry point takes them. Each is the host's to lend or withhold, and
2214
+ * every entry point that paints marks takes exactly these, so a host writes them once and hands
2215
+ * the same three to a chart and to a picker it opens away from one. */
2216
+ interface MarkPainterHooks {
2217
+ /** The host's mark for a market, called WHEREVER the chart names one: each chart's legend, the
2218
+ * compare rows under it, every row of the symbol search and compare dialogs, and the market tag
2219
+ * an extension's notice wears. It receives the element to paint into and the symbol it stands for,
2220
+ * and returns a disposer that takes the mark down again.
2221
+ *
2222
+ * One hook rather than one per surface, so a market wears the same mark everywhere it appears and
2223
+ * a host implements it once. The chart ships no artwork and fetches none: absent this, every mark
2224
+ * is the neutral monogram the package draws itself. */
2225
+ symbolMark?: SymbolMarkPainter;
2226
+ /** The host's mark for the venue a market lists on, painted beside the venue's name in every row
2227
+ * of the symbol search and compare dialogs. Like `symbolMark`, it receives the element to paint
2228
+ * into and the size of the box, and returns a disposer; absent, a venue wears its initial on the
2229
+ * neutral disc the package draws itself. */
2230
+ venueMark?: VenueMarkPainter;
2231
+ /** The host's mark for the data source a row names where it names no venue, painted in that
2232
+ * row's source cell the same way. Absent, a data source wears its initial on a neutral disc. */
2233
+ dataSourceMark?: DataSourceMarkPainter;
2234
+ }
2235
+
2236
+ /** One glyph: its own grid and the inner markup drawn on it. */
2237
+ interface Glyph {
2238
+ viewBox: string;
2239
+ body: string;
2240
+ /** A glyph that is not square keeps its grid's proportion: the size is its HEIGHT and the width
2241
+ * follows this ratio. Square glyphs omit it. */
2242
+ aspect?: number;
2243
+ /** The height the glyph is drawn at when a caller names none. Glyphs drawn at 28 omit it. */
2244
+ size?: number;
2245
+ }
2246
+
2247
+ interface ChartOverrides {
2248
+ appearance: {
2249
+ background: string;
2250
+ upColor: string;
2251
+ downColor: string;
2252
+ /** Candle anatomy: the border ring and the wick are their OWN colors per direction. They do
2253
+ * NOT follow upColor/downColor; each is set independently. */
2254
+ borderUpColor: string;
2255
+ borderDownColor: string;
2256
+ wickUpColor: string;
2257
+ wickDownColor: string;
2258
+ grid: boolean;
2259
+ /** Shade pre-market / after-hours / overnight stretches. */
2260
+ sessions: boolean;
2261
+ /** Bar-close countdown pill on the price scale. */
2262
+ countdown: boolean;
2263
+ };
2264
+ }
2265
+ /** The brand palette, single-sourced: a host's own surfaces on the chart read these (an
2266
+ * extension's lines among them), and a rebrand edits two strings. The candle bodies keep their
2267
+ * own pair; see the note on DEFAULT_OVERRIDES for why. */
2268
+ declare const BRAND_UP = "#4c98fb";
2269
+ declare const BRAND_DOWN = "#f23645";
2270
+ declare const DEFAULT_OVERRIDES: ChartOverrides;
2271
+ /** A recursive partial of the tree — what a host supplies. */
2272
+ type PartialOverrides = {
2273
+ [S in keyof ChartOverrides]?: Partial<ChartOverrides[S]>;
2274
+ };
2275
+ /** Deep-fill a partial over the defaults. One level of nesting by design — the tree is two levels
2276
+ * (section → leaf) and stays that way; new leaves are additive. */
2277
+ declare function mergeOverrides(partial?: PartialOverrides | null): ChartOverrides;
2278
+ /** The precedence composer: deep-fill any number of partials over an explicit BASE, later layers
2279
+ * winning leaf by leaf. The widget's look resolves through this — its theme-derived floor, then
2280
+ * the host's constructor partial, then runtime applyAppearance calls: one ladder where runtime
2281
+ * beats constructor beats theme, expressed as one pure function. */
2282
+ declare function layerOverrides(base: ChartOverrides, ...partials: (PartialOverrides | null | undefined)[]): ChartOverrides;
2283
+
2284
+ /** One resolved role as it is written to the DOM. */
2285
+ interface ThemeDeclaration {
2286
+ /** The private custom-property name. */
2287
+ property: string;
2288
+ /** The resolved value, already a CSS token. */
2289
+ value: string;
2057
2290
  }
2058
2291
 
2059
2292
  /** Everything the widget writes on its own root element for one resolved theme. */
@@ -2198,233 +2431,71 @@ declare const TOOL_ICONS: {
2198
2431
  signpost: string;
2199
2432
  flag: string;
2200
2433
  image: string;
2201
- content_card: string;
2202
2434
  pin: string;
2203
2435
  };
2204
2436
  /** A drawing tool that wears a miniature, by its registry type. */
2205
2437
  type MiniatureTool = keyof typeof TOOL_ICONS;
2206
2438
 
2439
+ interface ArrangementIcon {
2440
+ viewBox: string;
2441
+ body: string;
2442
+ }
2207
2443
  declare const ARRANGEMENT_ICONS: {
2208
- s: {
2209
- viewBox: string;
2210
- body: string;
2211
- };
2212
- '2h': {
2213
- viewBox: string;
2214
- body: string;
2215
- };
2216
- '2v': {
2217
- viewBox: string;
2218
- body: string;
2219
- };
2220
- '3h': {
2221
- viewBox: string;
2222
- body: string;
2223
- };
2224
- '3v': {
2225
- viewBox: string;
2226
- body: string;
2227
- };
2228
- '3s': {
2229
- viewBox: string;
2230
- body: string;
2231
- };
2232
- '3r': {
2233
- viewBox: string;
2234
- body: string;
2235
- };
2236
- '2-1': {
2237
- viewBox: string;
2238
- body: string;
2239
- };
2240
- '1-2': {
2241
- viewBox: string;
2242
- body: string;
2243
- };
2244
- '4': {
2245
- viewBox: string;
2246
- body: string;
2247
- };
2248
- '4v': {
2249
- viewBox: string;
2250
- body: string;
2251
- };
2252
- '4h': {
2253
- viewBox: string;
2254
- body: string;
2255
- };
2256
- '4s': {
2257
- viewBox: string;
2258
- body: string;
2259
- };
2260
- '4s-l': {
2261
- viewBox: string;
2262
- body: string;
2263
- };
2264
- '1-3': {
2265
- viewBox: string;
2266
- body: string;
2267
- };
2268
- '3-1': {
2269
- viewBox: string;
2270
- body: string;
2271
- };
2272
- '2-2-l': {
2273
- viewBox: string;
2274
- body: string;
2275
- };
2276
- '2-2-r': {
2277
- viewBox: string;
2278
- body: string;
2279
- };
2280
- '2-2': {
2281
- viewBox: string;
2282
- body: string;
2283
- };
2284
- '1-4': {
2285
- viewBox: string;
2286
- body: string;
2287
- };
2288
- '5h': {
2289
- viewBox: string;
2290
- body: string;
2291
- };
2292
- '5v': {
2293
- viewBox: string;
2294
- body: string;
2295
- };
2296
- '5s': {
2297
- viewBox: string;
2298
- body: string;
2299
- };
2300
- '5s-l': {
2301
- viewBox: string;
2302
- body: string;
2303
- };
2304
- '2-3': {
2305
- viewBox: string;
2306
- body: string;
2307
- };
2308
- '3-2': {
2309
- viewBox: string;
2310
- body: string;
2311
- };
2312
- '4-1': {
2313
- viewBox: string;
2314
- body: string;
2315
- };
2316
- '2-3-l': {
2317
- viewBox: string;
2318
- body: string;
2319
- };
2320
- '2-3-r': {
2321
- viewBox: string;
2322
- body: string;
2323
- };
2324
- '6': {
2325
- viewBox: string;
2326
- body: string;
2327
- };
2328
- '6h': {
2329
- viewBox: string;
2330
- body: string;
2331
- };
2332
- '6v': {
2333
- viewBox: string;
2334
- body: string;
2335
- };
2336
- '6c': {
2337
- viewBox: string;
2338
- body: string;
2339
- };
2340
- '2-4': {
2341
- viewBox: string;
2342
- body: string;
2343
- };
2344
- '4-2': {
2345
- viewBox: string;
2346
- body: string;
2347
- };
2348
- '4-3': {
2349
- viewBox: string;
2350
- body: string;
2351
- };
2352
- '7h': {
2353
- viewBox: string;
2354
- body: string;
2355
- };
2356
- '7s': {
2357
- viewBox: string;
2358
- body: string;
2359
- };
2360
- '8': {
2361
- viewBox: string;
2362
- body: string;
2363
- };
2364
- '8c': {
2365
- viewBox: string;
2366
- body: string;
2367
- };
2368
- '8h': {
2369
- viewBox: string;
2370
- body: string;
2371
- };
2372
- '8v': {
2373
- viewBox: string;
2374
- body: string;
2375
- };
2376
- '9s': {
2377
- viewBox: string;
2378
- body: string;
2379
- };
2380
- '5-4': {
2381
- viewBox: string;
2382
- body: string;
2383
- };
2384
- '9h': {
2385
- viewBox: string;
2386
- body: string;
2387
- };
2388
- '9v': {
2389
- viewBox: string;
2390
- body: string;
2391
- };
2392
- '10c5': {
2393
- viewBox: string;
2394
- body: string;
2395
- };
2396
- '10h': {
2397
- viewBox: string;
2398
- body: string;
2399
- };
2400
- '10v': {
2401
- viewBox: string;
2402
- body: string;
2403
- };
2404
- '12c6': {
2405
- viewBox: string;
2406
- body: string;
2407
- };
2408
- '12c4': {
2409
- viewBox: string;
2410
- body: string;
2411
- };
2412
- '12h': {
2413
- viewBox: string;
2414
- body: string;
2415
- };
2416
- '14c7': {
2417
- viewBox: string;
2418
- body: string;
2419
- };
2420
- '16c8': {
2421
- viewBox: string;
2422
- body: string;
2423
- };
2424
- '16c4': {
2425
- viewBox: string;
2426
- body: string;
2427
- };
2444
+ s: ArrangementIcon;
2445
+ '2h': ArrangementIcon;
2446
+ '2v': ArrangementIcon;
2447
+ '3h': ArrangementIcon;
2448
+ '3v': ArrangementIcon;
2449
+ '3s': ArrangementIcon;
2450
+ '3r': ArrangementIcon;
2451
+ '2-1': ArrangementIcon;
2452
+ '1-2': ArrangementIcon;
2453
+ '4': ArrangementIcon;
2454
+ '4v': ArrangementIcon;
2455
+ '4h': ArrangementIcon;
2456
+ '4s': ArrangementIcon;
2457
+ '4s-l': ArrangementIcon;
2458
+ '1-3': ArrangementIcon;
2459
+ '3-1': ArrangementIcon;
2460
+ '2-2-l': ArrangementIcon;
2461
+ '2-2-r': ArrangementIcon;
2462
+ '2-2': ArrangementIcon;
2463
+ '1-4': ArrangementIcon;
2464
+ '5h': ArrangementIcon;
2465
+ '5v': ArrangementIcon;
2466
+ '5s': ArrangementIcon;
2467
+ '5s-l': ArrangementIcon;
2468
+ '2-3': ArrangementIcon;
2469
+ '3-2': ArrangementIcon;
2470
+ '4-1': ArrangementIcon;
2471
+ '2-3-l': ArrangementIcon;
2472
+ '2-3-r': ArrangementIcon;
2473
+ '6': ArrangementIcon;
2474
+ '6h': ArrangementIcon;
2475
+ '6v': ArrangementIcon;
2476
+ '6c': ArrangementIcon;
2477
+ '2-4': ArrangementIcon;
2478
+ '4-2': ArrangementIcon;
2479
+ '4-3': ArrangementIcon;
2480
+ '7h': ArrangementIcon;
2481
+ '7s': ArrangementIcon;
2482
+ '8': ArrangementIcon;
2483
+ '8c': ArrangementIcon;
2484
+ '8h': ArrangementIcon;
2485
+ '8v': ArrangementIcon;
2486
+ '9s': ArrangementIcon;
2487
+ '5-4': ArrangementIcon;
2488
+ '9h': ArrangementIcon;
2489
+ '9v': ArrangementIcon;
2490
+ '10c5': ArrangementIcon;
2491
+ '10h': ArrangementIcon;
2492
+ '10v': ArrangementIcon;
2493
+ '12c6': ArrangementIcon;
2494
+ '12c4': ArrangementIcon;
2495
+ '12h': ArrangementIcon;
2496
+ '14c7': ArrangementIcon;
2497
+ '16c8': ArrangementIcon;
2498
+ '16c4': ArrangementIcon;
2428
2499
  };
2429
2500
  /** A layout arrangement that wears a glyph, by its code. */
2430
2501
  type ArrangementGlyphCode = keyof typeof ARRANGEMENT_ICONS;
@@ -2459,7 +2530,7 @@ interface ChartIconDiagnostic {
2459
2530
  }
2460
2531
 
2461
2532
  /** The glyphs of the chart's own controls, by meaning, each with every drawing that carries it. */
2462
- declare const CONTROL_ICONS: Readonly<Record<"info" | "search" | "indicators" | "visible" | "textColor" | "lineColor" | "open" | "close" | "template" | "fillColor" | "locked" | "sync" | "measure" | "image" | "eraser" | "delete" | "remove" | "hidden" | "copy" | "pause" | "play" | "reset" | "scroll" | "add" | "magnet" | "compare" | "replay" | "settings" | "fullscreen" | "marketStatus" | "paneCollapse" | "paneRestore" | "paneMaximize" | "replayStatus" | "replayMark" | "replayCut" | "undo" | "redo" | "tileMaximize" | "tileRestore" | "download" | "chevronDown" | "chevronUp" | "chevronLeft" | "chevronRight" | "check" | "clear" | "goLive" | "stepForward" | "stepBack" | "selectBar" | "firstAvailable" | "randomBar" | "cursorCross" | "cursorDot" | "cursorArrow" | "magnetStrong" | "drawingsShown" | "drawingsHidden" | "indicatorsShown" | "indicatorsHidden" | "allShown" | "allHidden" | "zoomIn" | "grip" | "favoritesBar" | "lineSolid" | "lineDashed" | "lineDotted" | "lineThickness1" | "lineThickness2" | "lineThickness3" | "lineThickness4" | "lineEndNormal" | "lineEndArrow" | "fullscreenExit" | "caret" | "collapse" | "zoomOut" | "rename" | "duplicate" | "favorite" | "favorited" | "sortAscending" | "sortDescending" | "flyout" | "submenu" | "more" | "emptySearch" | "emptyCompare" | "operatorsShow" | "operatorsHide" | "operatorAdd" | "operatorSubtract" | "operatorMultiply" | "operatorDivide" | "operatorPower" | "operatorReciprocal" | "selectDate" | "zoomTool" | "stayInMode" | "stayInModeOn" | "unlocked" | "hide" | "glyphTools" | "visualOrder", readonly Glyph[]>>;
2533
+ declare const CONTROL_ICONS: Readonly<Record<"info" | "search" | "bold" | "indicators" | "visible" | "textColor" | "lineColor" | "open" | "close" | "template" | "fillColor" | "italic" | "locked" | "sync" | "caret" | "measure" | "image" | "eraser" | "delete" | "remove" | "hidden" | "copy" | "pause" | "play" | "reset" | "scroll" | "magnet" | "compare" | "replay" | "settings" | "fullscreen" | "marketStatus" | "paneCollapse" | "paneRestore" | "paneMaximize" | "replayStatus" | "replayMark" | "replayCut" | "undo" | "redo" | "tileMaximize" | "tileRestore" | "download" | "chevronDown" | "chevronUp" | "chevronLeft" | "chevronRight" | "check" | "clear" | "goLive" | "stepForward" | "stepBack" | "calendar" | "selectBar" | "firstAvailable" | "randomBar" | "clock" | "cursorCross" | "cursorDot" | "cursorArrow" | "magnetStrong" | "drawingsShown" | "drawingsHidden" | "indicatorsShown" | "indicatorsHidden" | "allShown" | "allHidden" | "zoomIn" | "grip" | "tableAddColumn" | "tableAddRow" | "favoritesBar" | "lineSolid" | "lineDashed" | "lineDotted" | "lineThickness1" | "lineThickness2" | "lineThickness3" | "lineThickness4" | "lineEndNormal" | "lineEndArrow" | "fullscreenExit" | "collapse" | "zoomOut" | "add" | "rename" | "duplicate" | "favorite" | "favorited" | "sortAscending" | "sortDescending" | "flyout" | "submenu" | "more" | "emptySearch" | "emptyCompare" | "operatorsShow" | "operatorsHide" | "operatorAdd" | "operatorSubtract" | "operatorMultiply" | "operatorDivide" | "operatorPower" | "operatorReciprocal" | "selectDate" | "zoomTool" | "stayInMode" | "stayInModeOn" | "unlocked" | "hide" | "glyphTools" | "visualOrder", readonly Glyph[]>>;
2463
2534
  /** An icon of one of the chart's own controls. */
2464
2535
  type ControlIconId = keyof typeof CONTROL_ICONS;
2465
2536
  /** Every icon a host may draw: a control's glyph by its meaning, a chart style by its id, a drawing
@@ -3641,6 +3712,32 @@ interface TextEditSession {
3641
3712
  row: number;
3642
3713
  col: number;
3643
3714
  };
3715
+ /** Set when the drawing types its words on the chart: it paints them as they are typed, so the
3716
+ * editor is an invisible field laid exactly over them. Absent, the editor shows the words. */
3717
+ inline?: TextInlineEdit;
3718
+ }
3719
+ /** The live side of an edit on a drawing that types its words on the chart. The drawing paints the
3720
+ * words, their caret, their selection and their placeholder; the editor takes the keys in a field
3721
+ * nobody sees, reports what it holds, and follows the words wherever a repaint stands them. The
3722
+ * words commit through `commitText`, kept exactly as typed. */
3723
+ interface TextInlineEdit {
3724
+ /** Where the words stand now: the field's place, size and type, in pane-local pixels. */
3725
+ frame(): TextEditFrame | null;
3726
+ /** Hear the words move or resize as the chart repaints. Answers the unsubscribe. */
3727
+ onFrame(listener: (frame: TextEditFrame | null) => void): () => void;
3728
+ /** Show what the field holds on the chart: the words typed so far, the selection, the run an
3729
+ * input method is composing, and whether the caret is lit. */
3730
+ update(draft: TextDraft): void;
3731
+ /** A double-click that began with the click that opened this edit landed in the field. Answers
3732
+ * whether it opened the drawing's settings, which ends the edit, rather than selecting a word. */
3733
+ doubleClick(): boolean;
3734
+ /** Tab, or Shift with Tab, in the field. Answers whether the edit moved on to the next place of
3735
+ * the drawing's words, or back to the one before, as a table's cells take turns; that commits
3736
+ * what was typed and opens a new edit there. Answering false leaves the key to the page. */
3737
+ tab(backward: boolean): boolean;
3738
+ /** The viewer ended the edit from the field, with Escape or with Ctrl or Cmd and Enter: nothing
3739
+ * of the drawing stays marked as being typed in. The field commits its words after. */
3740
+ finished(): void;
3644
3741
  }
3645
3742
  /** A picture ready to place: what the image picker or a paste hands the layer. */
3646
3743
  interface PlacedImage {
@@ -3691,7 +3788,9 @@ type DrawingRejectionReason =
3691
3788
  | 'foreign-pane'
3692
3789
  /** Its group was deleted. The row is not applied under a group that no longer exists. */
3693
3790
  | 'deleted-group'
3694
- /** Its state is not a drawing this build can read. */
3791
+ /** Its state is not a drawing this build can read: no drawing at all, or one the catalog does not
3792
+ * restore (a type it does not hold, anchors that are not a list, or options that are null). The
3793
+ * row stays in the document as it was written. */
3695
3794
  | 'unreadable';
3696
3795
  interface DrawingRejection {
3697
3796
  id: string;
@@ -3804,6 +3903,13 @@ interface AttachDrawingsOptions {
3804
3903
  /** The ink the dot cursor's ring is drawn in, read when the cursor is set: the chart passes its
3805
3904
  * text role, so the ring follows the theme. */
3806
3905
  ink?: () => string;
3906
+ /** The words a drawing that types on the chart shows while it holds none, read as it paints: the
3907
+ * chart passes its catalog's, in the viewer's language. Absent, the catalog's English. */
3908
+ placeholder?: () => string;
3909
+ /** The chart's own inks drawings paint with where their tools take no color of their own (a
3910
+ * handle's ring and center, words in the chart's ink, a quiet edge), read as they paint: the
3911
+ * chart passes its theme's. Absent, the built-in light theme's. */
3912
+ inks?: () => DrawingInks;
3807
3913
  /** Whether the HOST has taken the pointer over for a gesture of its own. While it has, this layer
3808
3914
  * paints no pointer glyph at all: the host is drawing the mark that says where a click lands, and
3809
3915
  * a cursor beside it would be a second claim about the same point. This layer writes the plot's
@@ -3897,6 +4003,9 @@ interface DrawingsHandle {
3897
4003
  /** The symbol's smallest price move (tick-denominated readouts on measure-style drawings); null
3898
4004
  * while the symbol is unresolved. */
3899
4005
  setTick(tick: number | null): void;
4006
+ /** The currency the symbol is quoted in: the unit a position's risk amount is offered in. Null
4007
+ * while the symbol is unresolved or states none. */
4008
+ setCurrency(code: string | null): void;
3900
4009
  /** The symbol's price formatter: every drawing label, pill and readout writes prices through it.
3901
4010
  * Null returns the layer to the drawings package's declared stand-in. */
3902
4011
  setPriceFormatter(format: ((price: number) => string) | null): void;
@@ -3961,7 +4070,7 @@ type ReplayPhase = 'off' | 'arming' | 'on';
3961
4070
  * timeframe, tick, price format, teardown) and minus the session verbs only the package's own
3962
4071
  * surfaces use (the live `IDrawing`, the preview and edit session, the inline text session, the
3963
4072
  * presets). The public surface grows on demand, not by exposure. */
3964
- type ChartDrawingsApi = Omit<DrawingsHandle, 'setSymbol' | 'setTimeframe' | 'setTick' | 'setPriceFormatter' | 'destroy' | 'selectedDrawing' | 'commitEdit' | 'beginPreview' | 'endPreview' | 'textEdit' | 'commitText' | 'cancelText' | 'presets'>;
4073
+ type ChartDrawingsApi = Omit<DrawingsHandle, 'setSymbol' | 'setTimeframe' | 'setTick' | 'setCurrency' | 'setPriceFormatter' | 'destroy' | 'selectedDrawing' | 'commitEdit' | 'beginPreview' | 'endPreview' | 'textEdit' | 'commitText' | 'cancelText' | 'presets'>;
3965
4074
 
3966
4075
  /** What a preset frames: seconds of history, the year to date, or everything loaded. */
3967
4076
  type RangeSpan = number | 'ytd' | 'all';
@@ -5248,9 +5357,9 @@ declare function isCollapsed(height: number | undefined): boolean;
5248
5357
 
5249
5358
  /** Every action the menu can offer. A host handles the ids it supports and passes `has` flags for
5250
5359
  * the rest — an unsupported action simply never becomes a row. */
5251
- type ChartMenuAction = 'reset-view' | 'copy-price' | 'paste' | 'remove-indicators' | 'remove-drawings' | 'settings';
5360
+ type ChartMenuAction = 'table-add-column' | 'table-add-row' | 'table-remove-row' | 'table-remove-column' | 'reset-view' | 'copy-price' | 'paste' | 'remove-indicators' | 'remove-drawings' | 'settings';
5252
5361
  /** The glyph a row wears, named rather than drawn — the host owns the artwork. */
5253
- type ChartMenuIcon = 'reset' | 'settings' | 'check';
5362
+ type ChartMenuIcon = 'reset' | 'settings' | 'check' | 'table-add-column' | 'table-add-row' | 'delete';
5254
5363
  type ChartMenuRow = {
5255
5364
  kind: 'separator';
5256
5365
  } | {
@@ -5276,6 +5385,12 @@ interface ChartMenuContext {
5276
5385
  canPaste?: boolean;
5277
5386
  /** A settings surface exists to open. Default true; a host without one omits the row. */
5278
5387
  canSettings?: boolean;
5388
+ /** The level lies on a table. Its rows add a column right of the cell being typed in and a row
5389
+ * below it, or at the table's ends where no cell is, and with a cell, remove its row and its
5390
+ * column. Omitted where the level lies on none. */
5391
+ table?: {
5392
+ cell: boolean;
5393
+ };
5279
5394
  /** The widget's language for the row labels. Omitted ⇒ English. */
5280
5395
  t?: ChartTranslate;
5281
5396
  }
@@ -5678,4 +5793,4 @@ declare function mountTimeframePicker(options: TimeframePickerOptions & {
5678
5793
  container: HTMLElement;
5679
5794
  }): MountedTimeframePicker;
5680
5795
 
5681
- export { ARRANGEMENTS, type AccessPolicy, type ActiveSubsession, type Arrangement, type AttachDrawingsOptions, BRAND_DOWN, BRAND_UP, BUILT_IN_INDICATORS, BUILT_IN_LOCALES, type BuiltInIndicator, CHART_ICON_IDS, CHART_STYLES, COLLAPSED_H, COMPARE_COLORS, type CanvasTheme, type Capabilities, ChartBody, type ChartChrome, type ChartCompareApi, type ChartCustomLocale, ChartDatafeed, type ChartDictionary, type ChartDrawingsApi, type ChartEvents, type ChartExtension, type ChartExtensionChart, type ChartExtensionCommand, type ChartExtensionContext, type ChartExtensionHandle, type ChartExtensionIcon, type ChartExtensionIconPath, type ChartExtensionMenuBuilder, type ChartExtensionMenuContext, type ChartExtensionMenuItem, type ChartExtensionPane, type ChartExtensionPriceLine, type ChartExtensionReplayState, type ChartExtensionScope, type ChartExtensionSeries, type ChartHandle, type ChartHistoryApi, type ChartI18n, type ChartI18nOptions, type ChartIconArtwork, type ChartIconContext, type ChartIconDiagnostic, type ChartIconFactory, type ChartIconFailure, type ChartIconId, type ChartIcons, type ChartLegendRow, type ChartLocale, type ChartLocaleCode, type ChartMenuAction, type ChartMenuContext, type ChartMenuIcon, type ChartMenuRow, ChartMessageKey, ChartMeta, type ChartOverrides, type ChartPaneSyncApi, type ChartPreferences, type ChartPriceFormatter, type ChartReplayApi, ChartSaveLoadAdapter, type ChartSaveLoadApi, type ChartStorage, type ChartStyleId, type ChartTimezone, type ChartTranslate, type ChartWidget, type ChartWidgetOptions, type CommandRegistry, type CommandResult, type CommandScope, type CommandSpec, type CompareDeps, type CompareEntry, type CompareHandle, type ComparePlacement, type CompareSnapshot, type CompareSymbol, type ContextMenuHandle, type CrosshairUi, type CustomThemes, DEFAULT_OVERRIDES, DEFAULT_SUBSESSION, DEFAULT_TIMEZONE, type DataSourceMarkPainter, DataStatus, DatafeedSearchOptions, type DrawingApplyOutcome, DrawingAssetPort, DrawingContextKind, type DrawingDocumentApi, type DrawingDocumentPort, type DrawingDocumentRefusal, type DrawingEvent, type DrawingOwner, DrawingPreferences, type DrawingPresets, type DrawingReadOutcome, type DrawingRejection, type DrawingRejectionReason, DrawingResourceContext, DrawingsBody, type DrawingsEvents, type DrawingsHandle, DrawingsMeta, type DrawingsWorkflow, EXCHANGE_TIMEZONE, type FeatureConfig, FeedBar, type FetchLike, FillBetweenPrimitive, type FullscreenApi, type FullscreenOptions, type HistoryChange, type HistoryEventState, IMAGE_HEADER_H, type ImageApi, type ImageEvent, type ImageHeader, type ImageOptions, type ImageTextRun, type ImageTile, type IndicatorCategory, type IndicatorDefinition, type IndicatorEvent, type IndicatorFill, type IndicatorInstance, type IndicatorLevel, type IndicatorManifest, type IndicatorOverrides, type IndicatorPickerAction, type IndicatorPickerBuiltInState, type IndicatorPickerCollection, type IndicatorPickerItem, type IndicatorPickerSource, type IndicatorPlot, type IndicatorPlots, type IndicatorsApi, type IndicatorsRenderer, LAYOUT_MENU_ROWS, type LayoutApi, LayoutBody, type LayoutEvent, LayoutMeta, type LayoutOptions, type LayoutSaveLoadApi, type LayoutSyncFlags, type LegendUi, type LogicalRange, MAIN_MIN_H, MIN_BAR_SPACING, MIRRORED_ICONS, type ManifestFill, type ManifestInput, type ManifestLevel, type ManifestPlot, type ManifestRun, type MarkPainters, type MarketStatus, type MatchSegment, type MountedSymbolSearch, type MountedTimeframePicker, type OpenResource, PRICE_SCALE_MODE, type PaneOp, type PanePlan, type PaneRect, type PaneState, type PartialOverrides, type PlacedImage, type PlotArea, type PlotPoint, PriceFormat, PriceFormatter, RANGE_PRESETS, RECENT_SYMBOLS_CAP, REPLAY_SPEEDS, type RangeFrameTarget, type RangePreset, type RangeSpan, type RecentsPort, type ReplayEventState, type ReplaySpeed, type ResourceLoadOutcome, ResourceRef, type ResourceRemoveOutcome, type ResourceSaveOutcome, ResourceStore, SCALE_MODES, SCALE_MODE_OPTIONS, SCROLL_STEP_BARS, SESSION_DOT, SESSION_LABEL, SESSION_STATE_TITLE, SPREAD_OPERATORS, type SaveConflictInfo, type ScaleMode, type SearchClassFilter, SearchClassNode, type SearchController, type SearchControllerOptions, type SearchDisplayOptions, SearchPage, type SearchScope, type SearchState, type SelectedDrawing, type SemanticTheme, type SessionBandsPrimitive, type SessionModel, type SessionSchedule, type SessionSegment, type SessionSource, type SessionState, type SessionTimeline, type SettingsMenuUi, ShadePrimitive, type SpreadOperator, type SpreadOperatorId, type SubsessionSource, SymbolInfo, type SymbolMarkPainter, type SymbolPriceFormat, SymbolRow, type SymbolSearchCache, type SymbolSearchHandle, type SymbolSearchOptions, THEME_ROLES, TIMEFRAME_MAX, TIMEFRAME_PRESETS, TIMEFRAME_PRESET_TOKENS, TIMEFRAME_UNITS, TIMEFRAME_UNIT_NAME, TIMEFRAME_UNIT_SECONDS, TIMEZONES, TOP_BAR_SLOTS, TemplateBody, TemplateMeta, type TextEditSession, type ThemeChangeListener, type ThemeController, type ThemeControllerOptions, type ThemeDeclaration, type ThemeDiagnostic, type ThemeDiagnosticCode, type ThemeMode, type ThemeOptions, type ThemeRole, type ThemeRoleFamily, type ThemeRoleId, type ThemeRoleKind, type ThemeRootStyle, type TimeRange, type Timeframe, type TimeframeGroup, type TimeframePickerHandle, type TimeframePickerOptions, type TimeframeRestrictions, type TimeframeUnit, type TimezoneRow, type ToolbarButton, type ToolbarButtonOptions, type ToolbarButtonState, type TopBarSlot, type TopBarUi, type TouchOptions, type TransitionOptions, type UdfDatafeedOptions, type UdfSymbolResponse, type UiConfig, type VenueMarkPainter, type WidgetEvents, ZOOM_FACTOR, type ZoneClock, allowedTimeframes, applyBar, applyPlotOverrides, arrangementName, arrangementOf, attachCompare, attachDrawings, attachIndicators, autoTimeframeFor, buildManifestPlots, canvasTheme, canvasToBlob, chartContextMenu, chartDictionaries, chartIconArtwork, clipToWindow, coerceChartStyle, coerceScaleMode, compareTimeframes, composeFormingBar, composeImage, createChart, createChartI18n, createSearchController, createSessionBands, createSymbolSearchCache, createThemeController, createUdfDatafeed, effectivePlotColor, exchangeTimezoneText, formatClock, formatDuration, formatTimeframe, frameRange, hasExtendedHours, imageFileName, imageHeaderRuns, imageLayoutHeaderRuns, imageTileRuns, indicatorHidden, isChartStyle, isCollapsed, isIntradayTimeframe, isSymbolPair, isTimezoneChoice, latestPlotValue, layerOverrides, looksLikeSpread, makeCrosshairTimeFormatter, makeTickMarkFormatter, manifestInputDefaults, marketStatus, marketStatusFor, marketStatusText, marketStatusTitle, matchSegments, memoryChartStorage, memoryRecents, mergeOverrides, mountContextMenu, mountSymbolSearch, mountTimeframePicker, nextSessionChange, openInputsEditor, openSymbolSearch, openTimeframePicker, overriddenManifest, parseSessionModel, parseTimeframe, pickCompareColor, placeableByWidget, planPaneOp, promoteRecent, rangeAvailable, rangePresetTip, rangeSpanSeconds, resolveDisplayTimezone, resolveInitialTf, scrolledPosition, seriesTargetOf, sessionStateAt, sessionTimeline, spreadExpression, spreadSearchQuery, subTimeframesFor, subsessionBarFilter, tfSeconds, tfToUdfResolution, timeframeAllowed, timeframeGroupUnit, timeframeLabel, timeframeOrder, timeframeSeconds, timezoneCity, timezoneLabel, timezoneListing, toolName, tzOffsetLabel, tzOffsetMinutes, udfPriceFormat, udfResolutionToTf, udfSymbolInfo, valueShaped, withFoldedHistory, zoneClock, zoomedBarSpacing };
5796
+ export { ARRANGEMENTS, type AccessPolicy, type ActiveSubsession, type Arrangement, type AttachDrawingsOptions, BRAND_DOWN, BRAND_UP, BUILT_IN_INDICATORS, BUILT_IN_LOCALES, type BuiltInIndicator, CHART_ICON_IDS, CHART_STYLES, COLLAPSED_H, COMPARE_COLORS, type CanvasTheme, type Capabilities, ChartBody, type ChartChrome, type ChartCompareApi, type ChartCustomLocale, ChartDatafeed, type ChartDictionary, type ChartDrawingsApi, type ChartEvents, type ChartExtension, type ChartExtensionChart, type ChartExtensionCommand, type ChartExtensionContext, type ChartExtensionHandle, type ChartExtensionIcon, type ChartExtensionIconPath, type ChartExtensionMenuBuilder, type ChartExtensionMenuContext, type ChartExtensionMenuItem, type ChartExtensionPane, type ChartExtensionPriceLine, type ChartExtensionReplayState, type ChartExtensionScope, type ChartExtensionSeries, type ChartHandle, type ChartHistoryApi, type ChartI18n, type ChartI18nOptions, type ChartIconArtwork, type ChartIconContext, type ChartIconDiagnostic, type ChartIconFactory, type ChartIconFailure, type ChartIconId, type ChartIcons, type ChartLegendRow, type ChartLocale, type ChartLocaleCode, type ChartMenuAction, type ChartMenuContext, type ChartMenuIcon, type ChartMenuRow, ChartMessageKey, ChartMeta, type ChartOverrides, type ChartPaneSyncApi, type ChartPreferences, type ChartPriceFormatter, type ChartReplayApi, ChartSaveLoadAdapter, type ChartSaveLoadApi, type ChartStorage, type ChartStyleId, type ChartTimezone, type ChartTranslate, type ChartWidget, type ChartWidgetOptions, type CommandRegistry, type CommandResult, type CommandScope, type CommandSpec, type CompareDeps, type CompareEntry, type CompareHandle, type ComparePlacement, type CompareSnapshot, type CompareSymbol, type ContextMenuHandle, type CrosshairUi, type CustomThemes, DEFAULT_OVERRIDES, DEFAULT_SUBSESSION, DEFAULT_TIMEZONE, type DataSourceMarkPainter, DataStatus, DatafeedSearchOptions, type DrawingApplyOutcome, DrawingAssetPort, DrawingContextKind, type DrawingDocumentApi, type DrawingDocumentPort, type DrawingDocumentRefusal, type DrawingEvent, type DrawingInks, type DrawingOwner, DrawingPreferences, type DrawingPresets, type DrawingReadOutcome, type DrawingRejection, type DrawingRejectionReason, DrawingResourceContext, DrawingsBody, type DrawingsEvents, type DrawingsHandle, DrawingsMeta, type DrawingsWorkflow, EXCHANGE_TIMEZONE, type FeatureConfig, FeedBar, type FetchLike, FillBetweenPrimitive, type FullscreenApi, type FullscreenOptions, type HistoryChange, type HistoryEventState, IMAGE_HEADER_H, type ImageApi, type ImageEvent, type ImageHeader, type ImageOptions, type ImageTextRun, type ImageTile, type IndicatorCategory, type IndicatorDefinition, type IndicatorEvent, type IndicatorFill, type IndicatorInstance, type IndicatorLevel, type IndicatorManifest, type IndicatorOverrides, type IndicatorPickerAction, type IndicatorPickerBuiltInState, type IndicatorPickerCollection, type IndicatorPickerItem, type IndicatorPickerSource, type IndicatorPlot, type IndicatorPlots, type IndicatorsApi, type IndicatorsRenderer, LAYOUT_MENU_ROWS, type LayoutApi, LayoutBody, type LayoutEvent, LayoutMeta, type LayoutOptions, type LayoutSaveLoadApi, type LayoutSyncFlags, type LegendUi, type LogicalRange, MAIN_MIN_H, MIN_BAR_SPACING, MIRRORED_ICONS, type ManifestFill, type ManifestInput, type ManifestLevel, type ManifestPlot, type ManifestRun, type MarkPainters, type MarketStatus, type MatchSegment, type MountedSymbolSearch, type MountedTimeframePicker, type OpenResource, PRICE_SCALE_MODE, type PaneOp, type PanePlan, type PaneRect, type PaneState, type PartialOverrides, type PlacedImage, type PlotArea, type PlotPoint, PriceFormat, PriceFormatter, RANGE_PRESETS, RECENT_SYMBOLS_CAP, REPLAY_SPEEDS, type RangeFrameTarget, type RangePreset, type RangeSpan, type RecentsPort, type ReplayEventState, type ReplaySpeed, type ResourceLoadOutcome, ResourceRef, type ResourceRemoveOutcome, type ResourceSaveOutcome, ResourceStore, SCALE_MODES, SCALE_MODE_OPTIONS, SCROLL_STEP_BARS, SESSION_DOT, SESSION_LABEL, SESSION_STATE_TITLE, SPREAD_OPERATORS, type SaveConflictInfo, type ScaleMode, type SearchClassFilter, SearchClassNode, type SearchController, type SearchControllerOptions, type SearchDisplayOptions, SearchPage, type SearchScope, type SearchState, type SelectedDrawing, type SemanticTheme, type SessionBandsPrimitive, type SessionModel, type SessionSchedule, type SessionSegment, type SessionSource, type SessionState, type SessionTimeline, type SettingsMenuUi, ShadePrimitive, type SpreadOperator, type SpreadOperatorId, type SubsessionSource, SymbolInfo, type SymbolMarkPainter, type SymbolPriceFormat, SymbolRow, type SymbolSearchCache, type SymbolSearchHandle, type SymbolSearchOptions, THEME_ROLES, TIMEFRAME_MAX, TIMEFRAME_PRESETS, TIMEFRAME_PRESET_TOKENS, TIMEFRAME_UNITS, TIMEFRAME_UNIT_NAME, TIMEFRAME_UNIT_SECONDS, TIMEZONES, TOP_BAR_SLOTS, TemplateBody, TemplateMeta, TextDraft, TextEditFrame, type TextEditSession, type TextInlineEdit, type ThemeChangeListener, type ThemeController, type ThemeControllerOptions, type ThemeDeclaration, type ThemeDiagnostic, type ThemeDiagnosticCode, type ThemeMode, type ThemeOptions, type ThemeRole, type ThemeRoleFamily, type ThemeRoleId, type ThemeRoleKind, type ThemeRootStyle, type TimeRange, type Timeframe, type TimeframeGroup, type TimeframePickerHandle, type TimeframePickerOptions, type TimeframeRestrictions, type TimeframeUnit, type TimezoneRow, type ToolbarButton, type ToolbarButtonOptions, type ToolbarButtonState, type TopBarSlot, type TopBarUi, type TouchOptions, type TransitionOptions, type UdfDatafeedOptions, type UdfSymbolResponse, type UiConfig, type VenueMarkPainter, type WidgetEvents, ZOOM_FACTOR, type ZoneClock, allowedTimeframes, applyBar, applyPlotOverrides, arrangementName, arrangementOf, attachCompare, attachDrawings, attachIndicators, autoTimeframeFor, buildManifestPlots, canvasTheme, canvasToBlob, chartContextMenu, chartDictionaries, chartIconArtwork, clipToWindow, coerceChartStyle, coerceScaleMode, compareTimeframes, composeFormingBar, composeImage, createChart, createChartI18n, createSearchController, createSessionBands, createSymbolSearchCache, createThemeController, createUdfDatafeed, effectivePlotColor, exchangeTimezoneText, formatClock, formatDuration, formatTimeframe, frameRange, hasExtendedHours, imageFileName, imageHeaderRuns, imageLayoutHeaderRuns, imageTileRuns, indicatorHidden, isChartStyle, isCollapsed, isIntradayTimeframe, isSymbolPair, isTimezoneChoice, latestPlotValue, layerOverrides, looksLikeSpread, makeCrosshairTimeFormatter, makeTickMarkFormatter, manifestInputDefaults, marketStatus, marketStatusFor, marketStatusText, marketStatusTitle, matchSegments, memoryChartStorage, memoryRecents, mergeOverrides, mountContextMenu, mountSymbolSearch, mountTimeframePicker, nextSessionChange, openInputsEditor, openSymbolSearch, openTimeframePicker, overriddenManifest, parseSessionModel, parseTimeframe, pickCompareColor, placeableByWidget, planPaneOp, promoteRecent, rangeAvailable, rangePresetTip, rangeSpanSeconds, resolveDisplayTimezone, resolveInitialTf, scrolledPosition, seriesTargetOf, sessionStateAt, sessionTimeline, spreadExpression, spreadSearchQuery, subTimeframesFor, subsessionBarFilter, tfSeconds, tfToUdfResolution, timeframeAllowed, timeframeGroupUnit, timeframeLabel, timeframeOrder, timeframeSeconds, timezoneCity, timezoneLabel, timezoneListing, toolName, tzOffsetLabel, tzOffsetMinutes, udfPriceFormat, udfResolutionToTf, udfSymbolInfo, valueShaped, withFoldedHistory, zoneClock, zoomedBarSpacing };