@trdrs/quickcharts 4.0.0 → 5.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 (105) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +325 -79
  3. package/dist/adapters/rest.d.ts +4 -4
  4. package/dist/adapters/rest.js +1 -1
  5. package/dist/adapters/rest.js.map +1 -1
  6. package/dist/ar-TG26ZCCE.js +1322 -0
  7. package/dist/ar-TG26ZCCE.js.map +1 -0
  8. package/dist/{assets-Gg-UquDA.d.ts → assets-DF3nozNV.d.ts} +167 -18
  9. package/dist/ca_ES-WJWH5BXU.js +1322 -0
  10. package/dist/ca_ES-WJWH5BXU.js.map +1 -0
  11. package/dist/{chunk-D3S26ARP.js → chunk-EXJAJZTN.js} +1 -1
  12. package/dist/chunk-EXJAJZTN.js.map +1 -0
  13. package/dist/{chunk-C4MEVUNK.js → chunk-Q3DCXQDW.js} +992 -284
  14. package/dist/chunk-Q3DCXQDW.js.map +1 -0
  15. package/dist/de-SUDTTPQ3.js +1322 -0
  16. package/dist/de-SUDTTPQ3.js.map +1 -0
  17. package/dist/drawings.d.ts +18 -7
  18. package/dist/drawings.js +7 -1
  19. package/dist/es-FOBXUK2X.js +1322 -0
  20. package/dist/es-FOBXUK2X.js.map +1 -0
  21. package/dist/feature-manifest.json +105 -9
  22. package/dist/fr-7KQC4IJH.js +1322 -0
  23. package/dist/fr-7KQC4IJH.js.map +1 -0
  24. package/dist/he_IL-2T6XBA6D.js +1322 -0
  25. package/dist/he_IL-2T6XBA6D.js.map +1 -0
  26. package/dist/id_ID-SI25N57C.js +1322 -0
  27. package/dist/id_ID-SI25N57C.js.map +1 -0
  28. package/dist/index.d.ts +952 -176
  29. package/dist/index.js +11905 -7472
  30. package/dist/index.js.map +1 -1
  31. package/dist/it-PMSTWZDL.js +1322 -0
  32. package/dist/it-PMSTWZDL.js.map +1 -0
  33. package/dist/ja-PABDRAXV.js +1322 -0
  34. package/dist/ja-PABDRAXV.js.map +1 -0
  35. package/dist/ko-JHRYYFCV.js +1322 -0
  36. package/dist/ko-JHRYYFCV.js.map +1 -0
  37. package/dist/ms_MY-U4EE5Q4V.js +1322 -0
  38. package/dist/ms_MY-U4EE5Q4V.js.map +1 -0
  39. package/dist/pl-4HCG3T3J.js +1322 -0
  40. package/dist/pl-4HCG3T3J.js.map +1 -0
  41. package/dist/pt-6LTNN653.js +1322 -0
  42. package/dist/pt-6LTNN653.js.map +1 -0
  43. package/dist/quickcharts.css +627 -208
  44. package/dist/{resources-Le6flcEn.d.ts → resources-XglhzzW0.d.ts} +5 -3
  45. package/dist/rest-openapi.json +16 -11
  46. package/dist/ru-LFHCSDBV.js +1322 -0
  47. package/dist/ru-LFHCSDBV.js.map +1 -0
  48. package/dist/sv-4XVUXYK6.js +1322 -0
  49. package/dist/sv-4XVUXYK6.js.map +1 -0
  50. package/dist/{symbols-6V22WaRX.d.ts → symbols-DdHLHQFC.d.ts} +77 -8
  51. package/dist/symbols.d.ts +1 -1
  52. package/dist/th-WM2PVA24.js +1322 -0
  53. package/dist/th-WM2PVA24.js.map +1 -0
  54. package/dist/theme-manifest.json +105 -21
  55. package/dist/tr-HMAZXSJM.js +1322 -0
  56. package/dist/tr-HMAZXSJM.js.map +1 -0
  57. package/dist/vi-ITFBV5B7.js +1322 -0
  58. package/dist/vi-ITFBV5B7.js.map +1 -0
  59. package/dist/zh-ZGU2RI7K.js +1322 -0
  60. package/dist/zh-ZGU2RI7K.js.map +1 -0
  61. package/dist/zh_TW-PNINSQ6F.js +1322 -0
  62. package/dist/zh_TW-PNINSQ6F.js.map +1 -0
  63. package/package.json +1 -1
  64. package/dist/ar-FXZ5QJUR.js +0 -1178
  65. package/dist/ar-FXZ5QJUR.js.map +0 -1
  66. package/dist/ca_ES-3WVKFBIF.js +0 -1178
  67. package/dist/ca_ES-3WVKFBIF.js.map +0 -1
  68. package/dist/chunk-C4MEVUNK.js.map +0 -1
  69. package/dist/chunk-D3S26ARP.js.map +0 -1
  70. package/dist/de-V72Q3OI7.js +0 -1178
  71. package/dist/de-V72Q3OI7.js.map +0 -1
  72. package/dist/es-CNQ3OJ6E.js +0 -1178
  73. package/dist/es-CNQ3OJ6E.js.map +0 -1
  74. package/dist/fr-5WQBCGR4.js +0 -1178
  75. package/dist/fr-5WQBCGR4.js.map +0 -1
  76. package/dist/he_IL-WXKA77UE.js +0 -1178
  77. package/dist/he_IL-WXKA77UE.js.map +0 -1
  78. package/dist/id_ID-XPBAYSWK.js +0 -1178
  79. package/dist/id_ID-XPBAYSWK.js.map +0 -1
  80. package/dist/it-DR2EBNWX.js +0 -1178
  81. package/dist/it-DR2EBNWX.js.map +0 -1
  82. package/dist/ja-URB2CPXO.js +0 -1178
  83. package/dist/ja-URB2CPXO.js.map +0 -1
  84. package/dist/ko-OE47NYVP.js +0 -1178
  85. package/dist/ko-OE47NYVP.js.map +0 -1
  86. package/dist/ms_MY-BKCFRK2K.js +0 -1178
  87. package/dist/ms_MY-BKCFRK2K.js.map +0 -1
  88. package/dist/pl-3IKQRG3Y.js +0 -1178
  89. package/dist/pl-3IKQRG3Y.js.map +0 -1
  90. package/dist/pt-PZHV5EZE.js +0 -1178
  91. package/dist/pt-PZHV5EZE.js.map +0 -1
  92. package/dist/ru-BAL6RQUV.js +0 -1178
  93. package/dist/ru-BAL6RQUV.js.map +0 -1
  94. package/dist/sv-Y6GBGDHM.js +0 -1178
  95. package/dist/sv-Y6GBGDHM.js.map +0 -1
  96. package/dist/th-MAMLMZKU.js +0 -1178
  97. package/dist/th-MAMLMZKU.js.map +0 -1
  98. package/dist/tr-3LQHINUZ.js +0 -1178
  99. package/dist/tr-3LQHINUZ.js.map +0 -1
  100. package/dist/vi-GR4PSDKP.js +0 -1178
  101. package/dist/vi-GR4PSDKP.js.map +0 -1
  102. package/dist/zh-2RJ5VNAI.js +0 -1178
  103. package/dist/zh-2RJ5VNAI.js.map +0 -1
  104. package/dist/zh_TW-XEBSACHU.js +0 -1178
  105. package/dist/zh_TW-XEBSACHU.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
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
- 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 { 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';
1
+ import { C as ChartDatafeed, M as MarkIconId, F as FeedBar, S as SymbolRow, D as DatafeedSearchOptions, a as SearchPage, b as SearchClassNode } from './symbols-DdHLHQFC.js';
2
+ export { B as BarMark, c as BarsEvent, d as DatafeedConfig, e as FeedUnavailableError, H as HistoryPage, f as MarkColor, g as MarkColorPair, h as MarkColorRole, i as MarkLine, j as MarkLineStyle, k as MarkPlacement, l as MarkShape, O as OlderPageVerdict, P as PricesHandlers, m as SubscribeHandlers, n as SymbolNames, o as SymbolPrices, T as TimescaleMark, p as olderPageVerdict, s as symbolNames } from './symbols-DdHLHQFC.js';
3
+ import { ao as en, C as ChartMessageKey, G as GlyphSourcePort, M as MagnetMode, d as CursorMode, Q as TextEditFrame, N as TextDraft, L as LineStyle, I as IDrawing, m as DrawingCounts, D as DrawingStyle, $ as VisibilityPreset, X as ToolPreset, Y as ToolTemplate, S as SerializedDrawing, o as DrawingPreferences, l as DrawingAssetPort } from './assets-DF3nozNV.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-XglhzzW0.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-XglhzzW0.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';
@@ -55,6 +55,11 @@ declare const THEME_ROLES: readonly [{
55
55
  readonly family: "canvas";
56
56
  readonly kind: "color";
57
57
  readonly description: "The divider between stacked panes and around the plot area.";
58
+ }, {
59
+ readonly id: "canvas.watermark";
60
+ readonly family: "canvas";
61
+ readonly kind: "color";
62
+ readonly description: "The text a watermark writes large behind the bars.";
58
63
  }, {
59
64
  readonly id: "series.up";
60
65
  readonly family: "series";
@@ -183,6 +188,15 @@ declare const THEME_ROLES: readonly [{
183
188
  readonly over: "control.neutral";
184
189
  readonly min: 4.5;
185
190
  }];
191
+ }, {
192
+ readonly id: "text.caption";
193
+ readonly family: "text";
194
+ readonly kind: "color";
195
+ readonly description: "Ink of a dialog's section heading and of the hint line under a setting, which stand on the dialog's own surface and never under the pointer.";
196
+ readonly contrast: readonly [{
197
+ readonly over: "overlay.surface";
198
+ readonly min: 4.5;
199
+ }];
186
200
  }, {
187
201
  readonly id: "text.disabled";
188
202
  readonly family: "text";
@@ -242,7 +256,7 @@ declare const THEME_ROLES: readonly [{
242
256
  readonly id: "text.fontSizeAxis";
243
257
  readonly family: "text";
244
258
  readonly kind: "length";
245
- readonly description: "Size of scale and crosshair labels drawn into the canvas.";
259
+ readonly description: "Size of the legend's reading of the bar. The price and time scales take their text size from the chart settings.";
246
260
  }, {
247
261
  readonly id: "text.fontSizeTitle";
248
262
  readonly family: "text";
@@ -341,6 +355,20 @@ declare const THEME_ROLES: readonly [{
341
355
  readonly family: "overlay";
342
356
  readonly kind: "color";
343
357
  readonly description: "The backdrop that dims the chart behind a modal dialog.";
358
+ }, {
359
+ readonly id: "overlay.tooltip";
360
+ readonly family: "overlay";
361
+ readonly kind: "color";
362
+ readonly description: "The fill of a short tooltip line.";
363
+ }, {
364
+ readonly id: "overlay.tooltipInk";
365
+ readonly family: "overlay";
366
+ readonly kind: "color";
367
+ readonly description: "The ink of a tooltip line.";
368
+ readonly contrast: readonly [{
369
+ readonly over: "overlay.tooltip";
370
+ readonly min: 4.5;
371
+ }];
344
372
  }, {
345
373
  readonly id: "state.accent";
346
374
  readonly family: "state";
@@ -542,6 +570,20 @@ declare const THEME_ROLES: readonly [{
542
570
  readonly family: "control";
543
571
  readonly kind: "color";
544
572
  readonly description: "The fill of a field that is read-only or disabled.";
573
+ }, {
574
+ readonly id: "control.tipMark";
575
+ readonly family: "control";
576
+ readonly kind: "color";
577
+ readonly description: "The mark of a tip beside a setting's label, such as a question mark, at rest.";
578
+ }, {
579
+ readonly id: "control.tipMarkHover";
580
+ readonly family: "control";
581
+ readonly kind: "color";
582
+ readonly description: "The mark of a tip under the pointer.";
583
+ readonly contrast: readonly [{
584
+ readonly over: "overlay.surface";
585
+ readonly min: 3;
586
+ }];
545
587
  }, {
546
588
  readonly id: "status.positive";
547
589
  readonly family: "status";
@@ -871,9 +913,16 @@ interface DictionaryLoader<Source extends Catalog, Code extends string = ChartLo
871
913
  has(code: Code): boolean;
872
914
  }
873
915
 
916
+ declare const KEYS_ADDED_IN_MAJOR: readonly ["chrome.autoScale", "chrome.autoScaleMark", "chrome.currencyAndUnit", "chrome.deletePane", "chrome.logScale", "chrome.logScaleMark", "chrome.paneButtons", "chrome.priceLevelMenu", "chrome.scaleAsk", "chrome.scaleBid", "chrome.scaleHigh", "chrome.scaleLow", "chrome.scaleModes", "command.drawingPlaceHorizontalLine", "command.marksRefresh", "history.changeMovePane", "legend.movePaneDown", "legend.movePaneUp", "menu.drawHorizontalLine"];
917
+ type KeyAddedInMajor = (typeof KEYS_ADDED_IN_MAJOR)[number];
918
+
874
919
  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>;
920
+ /** The widget's catalog in one language, as a dictionary of your own supplies it: the keys of the
921
+ * English source in the same shape, a string for a string and a plural for a plural. Every key of
922
+ * the major's first release is required. A key the catalog gains within the major is optional:
923
+ * until your dictionary carries it, the chart reads it in English and reports it to `onMissing`,
924
+ * and the next major makes it required. Each built-in language carries every key. */
925
+ type ChartDictionary = Omit<Translation<typeof en>, KeyAddedInMajor> & Partial<Pick<Translation<typeof en>, KeyAddedInMajor>>;
877
926
  /** A locale a host adds beyond the built-in inventory: its stable code, canonical BCP 47 tag,
878
927
  * reading direction, endonym, and the dictionary chunk to fetch the first time it is chosen. */
879
928
  interface ChartCustomLocale extends LocaleDefinition {
@@ -885,8 +934,9 @@ interface ChartI18nOptions {
885
934
  /** Locales registered beside the built-in inventory. A code or tag the inventory already holds
886
935
  * is refused: the built-in dictionaries are not overridden through this door. */
887
936
  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. */
937
+ /** Hears every key a loaded dictionary is missing; the text falls back to English. A built-in
938
+ * language carries every key, so this reports a dictionary of your own: one loaded from data,
939
+ * or one without a key the catalog gained within the major. */
890
940
  onMissing?: (key: ChartMessageKey, locale: string) => void;
891
941
  }
892
942
  interface ChartI18n {
@@ -917,19 +967,143 @@ declare const chartDictionaries: DictionaryLoader<{
917
967
  readonly other: "{count} indicators in this saved chart are not available here and were left out.";
918
968
  };
919
969
  readonly 'settings.menu': "Chart settings";
920
- readonly 'settings.sectionAppearance': "Appearance";
970
+ readonly 'settings.pageSymbol': "Symbol";
971
+ readonly 'settings.pageStatusLine': "Status line";
972
+ readonly 'settings.pageScales': "Scales and lines";
973
+ readonly 'settings.pageCanvas': "Canvas";
974
+ readonly 'settings.pageEvents': "Events";
975
+ readonly 'settings.headingCandles': "Candles";
976
+ readonly 'settings.headingHollowCandles': "Hollow candles";
977
+ readonly 'settings.headingBars': "Bars";
978
+ readonly 'settings.headingLine': "Line";
979
+ readonly 'settings.headingStepLine': "Step line";
980
+ readonly 'settings.headingArea': "Area";
981
+ readonly 'settings.headingBaseline': "Baseline";
982
+ readonly 'settings.colorOnPreviousClose': "Color bars based on previous close";
983
+ readonly 'settings.body': "Body";
984
+ readonly 'settings.borders': "Borders";
985
+ readonly 'settings.wick': "Wick";
986
+ readonly 'settings.hlcBars': "HLC bars";
987
+ readonly 'settings.upColor': "Up color";
988
+ readonly 'settings.downColor': "Down color";
989
+ readonly 'settings.thinBars': "Thin bars";
990
+ readonly 'settings.priceSource': "Price source";
991
+ readonly 'settings.sourceOpen': "Open";
992
+ readonly 'settings.sourceHigh': "High";
993
+ readonly 'settings.sourceLow': "Low";
994
+ readonly 'settings.sourceClose': "Close";
995
+ readonly 'settings.sourceHl2': "(H + L)/2";
996
+ readonly 'settings.sourceHlc3': "(H + L + C)/3";
997
+ readonly 'settings.sourceOhlc4': "(O + H + L + C)/4";
998
+ readonly 'settings.sourceHlcc4': "(H + L + C + C)/4";
999
+ readonly 'settings.lineRow': "Line";
1000
+ readonly 'settings.colorSolid': "Solid";
1001
+ readonly 'settings.colorGradient': "Gradient";
1002
+ readonly 'settings.fill': "Fill";
1003
+ readonly 'settings.topLine': "Top line";
1004
+ readonly 'settings.bottomLine': "Bottom line";
1005
+ readonly 'settings.fillTopArea': "Fill top area";
1006
+ readonly 'settings.fillBottomArea': "Fill bottom area";
1007
+ readonly 'settings.baseLevel': "Base level";
1008
+ readonly 'settings.headingDataModification': "Data modification";
1009
+ readonly 'settings.session': "Session";
1010
+ readonly 'settings.sessionRegular': "Regular";
1011
+ readonly 'settings.sessionExtended': "Extended";
1012
+ readonly 'settings.sessionAllHours': "24 hours";
1013
+ readonly 'settings.extendedHoursBackground': "Pre/post market hours background";
1014
+ readonly 'settings.allHoursBackground': "Pre/post/night market hours background";
1015
+ readonly 'settings.preMarket': "Pre-market";
1016
+ readonly 'settings.postMarket': "Post-market";
1017
+ readonly 'settings.night': "Night";
1018
+ readonly 'settings.precision': "Precision";
1019
+ readonly 'settings.precisionDefault': "Default";
1020
+ readonly 'settings.precisionInteger': "Integer";
1021
+ readonly 'settings.precisionDecimals': {
1022
+ readonly one: "{count} decimal";
1023
+ readonly other: "{count} decimals";
1024
+ };
1025
+ readonly 'settings.headingInstrument': "Instrument";
1026
+ readonly 'settings.logo': "Logo";
1027
+ readonly 'settings.title': "Title";
1028
+ readonly 'settings.titleName': "Name";
1029
+ readonly 'settings.titleSymbol': "Symbol";
1030
+ readonly 'settings.titleSymbolAndName': "Symbol and name";
1031
+ readonly 'settings.chartValues': "Chart values";
1032
+ readonly 'settings.barChangeValues': "Bar change values";
1033
+ readonly 'settings.volume': "Volume";
1034
+ readonly 'settings.lastDayChangeValues': "Last day change values";
1035
+ readonly 'settings.headingIndicators': "Indicators";
1036
+ readonly 'settings.indicatorTitles': "Titles";
1037
+ readonly 'settings.indicatorInputs': "Inputs";
1038
+ readonly 'settings.indicatorValues': "Values";
921
1039
  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
1040
  readonly 'settings.sectionScale': "Price scale";
932
- readonly 'settings.sectionTheme': "Theme";
1041
+ readonly 'settings.currencyAndUnit': "Currency and Unit";
1042
+ readonly 'settings.scaleModes': "Scale modes (A and L)";
1043
+ readonly 'settings.visibleOnMouseOver': "Visible on mouse over";
1044
+ readonly 'settings.alwaysVisible': "Always visible";
1045
+ readonly 'settings.alwaysInvisible': "Always invisible";
1046
+ readonly 'settings.lockPriceToBarRatio': "Lock price to bar ratio";
1047
+ readonly 'settings.scalesPlacement': "Scales placement";
1048
+ readonly 'settings.placementLeft': "Stack on the left";
1049
+ readonly 'settings.placementRight': "Stack on the right";
1050
+ readonly 'settings.placementAuto': "Auto";
1051
+ readonly 'settings.headingPriceLabels': "Price labels & lines";
1052
+ readonly 'settings.noOverlappingLabels': "No overlapping labels";
1053
+ readonly 'settings.plusButton': "Plus button";
1054
+ readonly 'settings.plusButtonTip': "Shows a plus beside the price under the crosshair, which opens the menu for that price";
1055
+ readonly 'settings.countdown': "Countdown to bar close";
1056
+ readonly 'settings.symbolLabel': "Symbol";
1057
+ readonly 'settings.labelName': "Name";
1058
+ readonly 'settings.labelValue': "Value";
1059
+ readonly 'settings.labelLine': "Line";
1060
+ readonly 'settings.hidden': "Hidden";
1061
+ readonly 'settings.lastValueMode': "Last value label";
1062
+ readonly 'settings.valueByScale': "Value according to scale";
1063
+ readonly 'settings.priceAndPercent': "Price and percentage value";
1064
+ readonly 'settings.indicatorsAndFinancials': "Indicators and financials";
1065
+ readonly 'settings.extendedHoursLabels': "Pre/post/night market";
1066
+ readonly 'settings.previousDayClose': "Previous day close";
1067
+ readonly 'settings.highAndLow': "High and low";
1068
+ readonly 'settings.bidAndAsk': "Bid and ask";
1069
+ readonly 'settings.bid': "Bid";
1070
+ readonly 'settings.ask': "Ask";
1071
+ readonly 'settings.headingTimeScale': "Time scale";
1072
+ readonly 'settings.dayOfWeek': "Day of week on labels";
1073
+ readonly 'settings.dateFormat': "Date format";
1074
+ readonly 'settings.timeHoursFormat': "Time hours format";
1075
+ readonly 'settings.hours24': "24-hours";
1076
+ readonly 'settings.hours12': "12-hours";
1077
+ readonly 'settings.keepLeftEdge': "Save chart left edge position when changing interval";
1078
+ readonly 'settings.headingChartStyles': "Chart basic styles";
1079
+ readonly 'settings.verticalGrid': "Vertical grid lines";
1080
+ readonly 'settings.horizontalGrid': "Horizontal grid lines";
1081
+ readonly 'settings.crosshair': "Crosshair";
1082
+ readonly 'settings.watermark': "Watermark";
1083
+ readonly 'settings.watermarkTicker': "Ticker";
1084
+ readonly 'settings.watermarkInterval': "Interval";
1085
+ readonly 'settings.watermarkDescription': "Description";
1086
+ readonly 'settings.watermarkReplay': "Replay mode";
1087
+ readonly 'settings.headingScales': "Scales";
1088
+ readonly 'settings.scaleText': "Text";
1089
+ readonly 'settings.scaleLines': "Lines";
1090
+ readonly 'settings.headingButtons': "Buttons";
1091
+ readonly 'settings.navigationButtons': "Navigation";
1092
+ readonly 'settings.paneButtons': "Pane";
1093
+ readonly 'settings.headingMargins': "Margins";
1094
+ readonly 'settings.marginTop': "Top";
1095
+ readonly 'settings.marginBottom': "Bottom";
1096
+ readonly 'settings.marginRight': "Right";
1097
+ readonly 'settings.unitPercent': "%";
1098
+ readonly 'settings.unitBars': "bars";
1099
+ readonly 'settings.sessionBreaks': "Session breaks";
1100
+ readonly 'settings.upColorOf': "{name} up color";
1101
+ readonly 'settings.downColorOf': "{name} down color";
1102
+ readonly 'settings.topColorOf': "{name} top color";
1103
+ readonly 'settings.bottomColorOf': "{name} bottom color";
1104
+ readonly 'settings.learnMore': "Learn more";
1105
+ readonly 'settings.saveTemplate': "Save chart template";
1106
+ readonly 'settings.deleteTemplateBody': "Doing this will permanently delete your \"{name}\" chart template.";
933
1107
  readonly 'settings.indicatorTitle': "{name} settings";
934
1108
  readonly 'settings.tabInputs': "Inputs";
935
1109
  readonly 'settings.tabStyle': "Style";
@@ -944,8 +1118,6 @@ declare const chartDictionaries: DictionaryLoader<{
944
1118
  readonly 'settings.lineStyleSolid': "Solid";
945
1119
  readonly 'settings.lineStyleDashed': "Dashed";
946
1120
  readonly 'settings.lineStyleDotted': "Dotted";
947
- readonly 'settings.precision': "Precision";
948
- readonly 'settings.precisionDefault': "Default";
949
1121
  readonly 'settings.labelsOnPriceScale': "Labels on price scale";
950
1122
  readonly 'settings.showIndicator': "Show this indicator";
951
1123
  readonly 'picker.title': "Indicators";
@@ -971,13 +1143,14 @@ declare const chartDictionaries: DictionaryLoader<{
971
1143
  readonly 'history.changeTimeframe': "timeframe change";
972
1144
  readonly 'history.changeChartStyle': "chart style change";
973
1145
  readonly 'history.changePriceScale': "price scale change";
974
- readonly 'history.changeAppearance': "appearance change";
1146
+ readonly 'history.changeSettings': "settings change";
975
1147
  readonly 'history.changeAddCompare': "add comparison";
976
1148
  readonly 'history.changeRemoveCompare': "remove comparison";
977
1149
  readonly 'history.changeCompare': "comparison change";
978
1150
  readonly 'history.changeAddIndicator': "add indicator";
979
1151
  readonly 'history.changeRemoveIndicator': "remove indicator";
980
1152
  readonly 'history.changeIndicator': "indicator change";
1153
+ readonly 'history.changeMovePane': "move pane";
981
1154
  readonly 'history.changeAddDrawing': "add drawing";
982
1155
  readonly 'history.changeRemoveDrawing': "remove drawing";
983
1156
  readonly 'history.changeDrawing': "drawing change";
@@ -994,6 +1167,19 @@ declare const chartDictionaries: DictionaryLoader<{
994
1167
  readonly 'chrome.sessionsHeading': "Sessions";
995
1168
  readonly 'chrome.navigation': "Chart navigation";
996
1169
  readonly 'chrome.activeChart': "{symbol}, {timeframe}";
1170
+ readonly 'chrome.scaleHigh': "High";
1171
+ readonly 'chrome.scaleLow': "Low";
1172
+ readonly 'chrome.scaleBid': "Bid";
1173
+ readonly 'chrome.scaleAsk': "Ask";
1174
+ readonly 'chrome.scaleModes': "Scale modes";
1175
+ readonly 'chrome.autoScale': "Auto scale";
1176
+ readonly 'chrome.autoScaleMark': "A";
1177
+ readonly 'chrome.logScale': "Logarithmic scale";
1178
+ readonly 'chrome.logScaleMark': "L";
1179
+ readonly 'chrome.currencyAndUnit': "{currency} · {unit}";
1180
+ readonly 'chrome.priceLevelMenu': "Price actions";
1181
+ readonly 'chrome.paneButtons': "Pane";
1182
+ readonly 'chrome.deletePane': "Delete pane";
997
1183
  readonly 'command.extension': "Host command";
998
1184
  readonly 'command.viewReset': "Reset view";
999
1185
  readonly 'command.viewGoLive': "Go to the live edge";
@@ -1002,6 +1188,7 @@ declare const chartDictionaries: DictionaryLoader<{
1002
1188
  readonly 'command.viewScrollLeft': "Scroll back";
1003
1189
  readonly 'command.viewScrollRight': "Scroll forward";
1004
1190
  readonly 'command.priceCopy': "Copy price";
1191
+ readonly 'command.marksRefresh': "Refresh marks";
1005
1192
  readonly 'command.symbolSet': "Change symbol";
1006
1193
  readonly 'command.styleCandles': "Candles";
1007
1194
  readonly 'command.styleHollow': "Hollow candles";
@@ -1010,8 +1197,8 @@ declare const chartDictionaries: DictionaryLoader<{
1010
1197
  readonly 'command.styleArea': "Area";
1011
1198
  readonly 'command.styleBaseline': "Baseline";
1012
1199
  readonly 'command.styleStepline': "Step line";
1013
- readonly 'command.appearanceApply': "Chart appearance";
1014
- readonly 'command.appearanceReset': "Reset defaults";
1200
+ readonly 'command.settingsApply': "Apply chart settings";
1201
+ readonly 'command.settingsReset': "Apply defaults";
1015
1202
  readonly 'command.scaleNormal': "Regular price scale";
1016
1203
  readonly 'command.scaleLog': "Logarithmic price scale";
1017
1204
  readonly 'command.scalePercent': "Percentage price scale";
@@ -1051,6 +1238,7 @@ declare const chartDictionaries: DictionaryLoader<{
1051
1238
  readonly 'command.drawingSettings': "Drawing settings";
1052
1239
  readonly 'command.drawingCommitEdit': "Apply drawing settings";
1053
1240
  readonly 'command.drawingPlaceImage': "Place image";
1241
+ readonly 'command.drawingPlaceHorizontalLine': "Place horizontal line";
1054
1242
  readonly 'command.drawingTemplateApply': "Apply drawing template";
1055
1243
  readonly 'command.drawingTemplateSave': "Save drawing template";
1056
1244
  readonly 'command.drawingTemplateRemove': "Remove drawing template";
@@ -1083,6 +1271,7 @@ declare const chartDictionaries: DictionaryLoader<{
1083
1271
  readonly 'command.themeDark': "Dark theme";
1084
1272
  readonly 'command.themeToggle': "Switch theme";
1085
1273
  readonly 'command.themeSet': "Set theme";
1274
+ readonly 'command.settingsOpen': "Chart settings";
1086
1275
  readonly 'command.localeSet': "Language";
1087
1276
  readonly 'command.fullscreenEnter': "Fullscreen";
1088
1277
  readonly 'command.fullscreenExit': "Exit fullscreen";
@@ -1207,6 +1396,8 @@ declare const chartDictionaries: DictionaryLoader<{
1207
1396
  readonly 'drawing.modifierCommand': "Cmd";
1208
1397
  readonly 'drawing.hintClone': "{modifier} + Drag";
1209
1398
  readonly 'drawing.hintCopy': "{modifier} + C";
1399
+ readonly 'drawing.hintRemove': "Del";
1400
+ readonly 'drawing.drawingMenu': "Drawing menu";
1210
1401
  readonly 'drawing.hintPaste': "{modifier} + V";
1211
1402
  readonly 'drawing.deleteWithKey': "Delete (Del)";
1212
1403
  readonly 'drawing.statusDrawingsHidden': "Drawings hidden";
@@ -1297,6 +1488,7 @@ declare const chartDictionaries: DictionaryLoader<{
1297
1488
  readonly 'drawing.sectionInfo': "Info";
1298
1489
  readonly 'drawing.priceRange': "Price range";
1299
1490
  readonly 'drawing.barsRange': "Bars range";
1491
+ readonly 'drawing.distance': "Distance";
1300
1492
  readonly 'drawing.angle': "Angle";
1301
1493
  readonly 'drawing.statsPosition': "Stats position";
1302
1494
  readonly 'drawing.statsHidden': "Hidden";
@@ -1641,6 +1833,7 @@ declare const chartDictionaries: DictionaryLoader<{
1641
1833
  readonly 'range.restoreChart': "Restore chart";
1642
1834
  readonly 'timezone.title': "Chart timezone";
1643
1835
  readonly 'timezone.exchange': "Exchange";
1836
+ readonly 'timezone.quarter': "Q{quarter}";
1644
1837
  readonly 'timeframe.title': "Timeframe";
1645
1838
  readonly 'timeframe.all': "All timeframes";
1646
1839
  readonly 'timeframe.unitTicks': "Ticks";
@@ -1936,6 +2129,7 @@ declare const chartDictionaries: DictionaryLoader<{
1936
2129
  readonly other: "Remove {count} drawings";
1937
2130
  };
1938
2131
  readonly 'menu.settings': "Settings…";
2132
+ readonly 'menu.drawHorizontalLine': "Draw horizontal line at {price}";
1939
2133
  readonly 'tool.trend_line': "Trend line";
1940
2134
  readonly 'tool.ray': "Ray";
1941
2135
  readonly 'tool.info_line': "Info line";
@@ -2030,12 +2224,15 @@ declare const chartDictionaries: DictionaryLoader<{
2030
2224
  readonly 'legend.low': "L";
2031
2225
  readonly 'legend.close': "C";
2032
2226
  readonly 'legend.change': "{change} ({percent}%)";
2227
+ readonly 'legend.volume': "Vol";
2033
2228
  readonly 'legend.indicatorSettings': "Indicator settings";
2034
2229
  readonly 'legend.showRows': "Show indicator rows";
2035
2230
  readonly 'legend.hideRows': "Hide indicator rows";
2036
2231
  readonly 'legend.restorePane': "Restore pane";
2037
2232
  readonly 'legend.collapsePane': "Collapse pane";
2038
2233
  readonly 'legend.maximizePane': "Maximize pane";
2234
+ readonly 'legend.movePaneUp': "Move pane up";
2235
+ readonly 'legend.movePaneDown': "Move pane down";
2039
2236
  readonly 'legend.showIndicator': "Show indicator";
2040
2237
  readonly 'legend.hideIndicator': "Hide indicator";
2041
2238
  readonly 'legend.scaleNormal': "Reg";
@@ -2244,42 +2441,246 @@ interface Glyph {
2244
2441
  size?: number;
2245
2442
  }
2246
2443
 
2247
- interface ChartOverrides {
2248
- appearance: {
2249
- background: string;
2444
+ /** When an on-chart control shows: while the pointer is over its area, always, or never. */
2445
+ type ChartControlVisibility = 'hover' | 'always' | 'never';
2446
+ /** How a line is stroked. */
2447
+ type ChartStrokeStyle = 'solid' | 'dashed' | 'dotted';
2448
+ /** Which bar value a single-value style draws. */
2449
+ type ChartPriceSource = 'open' | 'high' | 'low' | 'close' | 'hl2' | 'hlc3' | 'ohlc4' | 'hlcc4';
2450
+ /** How prices are written: the symbol's own precision, a fixed count of decimals (0 to 15), or a
2451
+ * fraction of a whole (halves through 320ths). */
2452
+ type ChartPricePrecision = 'default' | `${0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15}` | `1/${2 | 4 | 8 | 16 | 32 | 64 | 128 | 320}`;
2453
+ /** The text a legend titles the symbol with. */
2454
+ type ChartTitleSource = 'name' | 'symbol' | 'symbolAndName';
2455
+ /** What the symbol's last-value label on the price scale holds: the value as the scale states it,
2456
+ * or the price with its percentage change beneath it. */
2457
+ type ChartLastValueMode = 'scale' | 'priceAndPercent';
2458
+ /** Where the price scales stand: stacked on the left, stacked on the right, or wherever each
2459
+ * series' scale belongs. */
2460
+ type ChartScalePlacement = 'left' | 'right' | 'auto';
2461
+ /** How the crosshair's time label writes a date, in the date's own order and separators. `qq` is the
2462
+ * quarter (Q3), `MMM` the month's short name, `MM` and `dd` two-digit numbers, `d` the day without a
2463
+ * leading zero, `yyyy` the whole year and `'yy` an apostrophe before its last two digits. The
2464
+ * weekday is not a part of any pattern: `timeScale.dayOfWeek` writes it before the date. */
2465
+ type ChartDateFormat = "qq 'yy" | 'qq yyyy' | "dd MMM 'yy" | "MMM 'yy" | 'MMM dd, yyyy' | 'MMM d, yyyy' | 'MMM yyyy' | 'MMM dd' | 'dd MMM' | 'yyyy-MM-dd' | 'yy-MM-dd' | 'yy/MM/dd' | 'yyyy/MM/dd' | 'dd-MM-yyyy' | 'dd-MM-yy' | 'dd/MM/yy' | 'dd/MM/yyyy' | 'MM/dd/yy' | 'MM/dd/yyyy';
2466
+ /** The date formats the time label writes, in the order a picker offers them. */
2467
+ declare const CHART_DATE_FORMATS: readonly ChartDateFormat[];
2468
+ /** A clock of 24 hours or of 12 with a day half. */
2469
+ type ChartHoursFormat = '24' | '12';
2470
+ /** The chart's background: one color, or a vertical gradient from the top color to the bottom. */
2471
+ type ChartBackgroundType = 'solid' | 'gradient';
2472
+ /** How a single-value line is colored: one color, or a vertical gradient from the top color at the
2473
+ * highest price on screen to the bottom color at the lowest. */
2474
+ type ChartLineColorType = 'solid' | 'gradient';
2475
+ /** Which trading hours an intraday chart shows: regular hours alone, regular hours with the pre-
2476
+ * and post-market stretches, or every stretch the symbol trades including the overnight one. */
2477
+ type ChartSessionHours = 'regular' | 'extended' | 'allHours';
2478
+ /** A single-value line style: the line and the step line share it. */
2479
+ interface LineStyleSettings {
2480
+ priceSource: ChartPriceSource;
2481
+ colorType: ChartLineColorType;
2482
+ /** The solid color. */
2483
+ color: string;
2484
+ /** The gradient's color at the highest price on screen. */
2485
+ gradientTopColor: string;
2486
+ /** The gradient's color at the lowest price on screen. */
2487
+ gradientBottomColor: string;
2488
+ lineStyle: ChartStrokeStyle;
2489
+ lineWidth: number;
2490
+ }
2491
+ /** The candle family: candles and hollow candles share it. */
2492
+ interface CandleStyleSettings {
2493
+ /** Color each bar by its close against the previous bar's close, rather than against its own open. */
2494
+ colorOnPreviousClose: boolean;
2495
+ /** Fill the body. Off leaves the body hollow, so only its border and wick stand. */
2496
+ body: boolean;
2497
+ upColor: string;
2498
+ downColor: string;
2499
+ borders: boolean;
2500
+ borderUpColor: string;
2501
+ borderDownColor: string;
2502
+ wick: boolean;
2503
+ wickUpColor: string;
2504
+ wickDownColor: string;
2505
+ }
2506
+ /** Every setting of a chart. */
2507
+ interface ChartSettings {
2508
+ candles: CandleStyleSettings;
2509
+ hollowCandles: Omit<CandleStyleSettings, 'colorOnPreviousClose'>;
2510
+ bars: {
2511
+ colorOnPreviousClose: boolean;
2512
+ /** Draw high, low and close only: the open tick is left off. */
2513
+ hlcBars: boolean;
2250
2514
  upColor: string;
2251
2515
  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. */
2516
+ thinBars: boolean;
2517
+ };
2518
+ line: LineStyleSettings;
2519
+ stepLine: LineStyleSettings;
2520
+ area: {
2521
+ priceSource: ChartPriceSource;
2522
+ lineColor: string;
2523
+ lineStyle: ChartStrokeStyle;
2524
+ lineWidth: number;
2525
+ /** The fill's color at the line, fading to `bottomColor` at the pane's foot. */
2526
+ topColor: string;
2527
+ bottomColor: string;
2528
+ };
2529
+ baseline: {
2530
+ priceSource: ChartPriceSource;
2531
+ topLineColor: string;
2532
+ topLineWidth: number;
2533
+ /** The fill above the base level: its color at the line, fading to the second at the base. */
2534
+ topFillColor1: string;
2535
+ topFillColor2: string;
2536
+ bottomLineColor: string;
2537
+ bottomLineWidth: number;
2538
+ /** The fill below the base level: its color at the base, deepening to the second at the line. */
2539
+ bottomFillColor1: string;
2540
+ bottomFillColor2: string;
2541
+ /** Where the base level stands, as a percentage of the pane's height from its foot. */
2542
+ baseLevelPercentage: number;
2543
+ };
2544
+ /** Settings of the charted symbol that hold whatever its style. */
2545
+ symbol: {
2546
+ /** Which trading hours an intraday chart shows. A stretch outside regular hours is shaded in its
2547
+ * own color below. */
2548
+ session: ChartSessionHours;
2549
+ /** The shading over the pre-market stretch. */
2550
+ preMarketColor: string;
2551
+ /** The shading over the post-market stretch. */
2552
+ postMarketColor: string;
2553
+ /** The shading over the overnight stretch, under `allHours`. */
2554
+ nightColor: string;
2555
+ precision: ChartPricePrecision;
2556
+ };
2557
+ /** The legend over the pane that names the symbol and states its values. */
2558
+ statusLine: {
2559
+ logo: boolean;
2560
+ title: boolean;
2561
+ titleSource: ChartTitleSource;
2562
+ /** The bar's open, high, low and close. */
2563
+ chartValues: boolean;
2564
+ /** The bar's change and percentage change. */
2565
+ barChange: boolean;
2566
+ volume: boolean;
2567
+ /** The change since the previous session's close, from the datafeed's quotes. */
2568
+ lastDayChange: boolean;
2569
+ /** An indicator row's title. */
2570
+ indicatorTitles: boolean;
2571
+ /** An indicator row's inputs, after its title. */
2572
+ indicatorInputs: boolean;
2573
+ /** An indicator row's values. */
2574
+ indicatorValues: boolean;
2575
+ background: boolean;
2576
+ /** The background's opacity, 0 to 100. */
2577
+ backgroundOpacity: number;
2578
+ };
2579
+ priceScale: {
2580
+ /** The currency and unit box at the top of the price scale. */
2581
+ currencyAndUnit: ChartControlVisibility;
2582
+ /** The auto-scale and logarithmic buttons at the foot of the price scale. */
2583
+ scaleModeButtons: ChartControlVisibility;
2584
+ /** Hold the price-to-bar ratio while the time scale zooms. */
2585
+ lockPriceToBarRatio: boolean;
2586
+ /** The held ratio, or null to take the ratio the chart shows when the lock engages. */
2587
+ priceToBarRatio: number | null;
2588
+ placement: ChartScalePlacement;
2589
+ };
2590
+ priceLabels: {
2591
+ /** Move price-scale labels apart so none overlaps another. */
2592
+ noOverlappingLabels: boolean;
2593
+ /** The add button beside the crosshair's price label, opening the price-level menu. */
2594
+ plusButton: boolean;
2595
+ /** The time left until the bar closes, under the last-value label. */
2262
2596
  countdown: boolean;
2597
+ symbolName: boolean;
2598
+ symbolValue: boolean;
2599
+ symbolLine: boolean;
2600
+ /** Null follows the last bar's color. */
2601
+ symbolLineColor: string | null;
2602
+ symbolLineWidth: number;
2603
+ symbolValueMode: ChartLastValueMode;
2604
+ /** An indicator's name label on the price scale. */
2605
+ indicatorLabelName: boolean;
2606
+ /** An indicator's value label on the price scale. */
2607
+ indicatorLabelValue: boolean;
2608
+ /** The last value of the pre-market, post-market or overnight stretch on the price scale. */
2609
+ extendedHoursValue: boolean;
2610
+ extendedHoursLine: boolean;
2611
+ preMarketLabelColor: string;
2612
+ postMarketLabelColor: string;
2613
+ nightLabelColor: string;
2614
+ previousCloseValue: boolean;
2615
+ previousCloseLine: boolean;
2616
+ previousCloseColor: string;
2617
+ previousCloseLineWidth: number;
2618
+ highLowValue: boolean;
2619
+ highLowLine: boolean;
2620
+ /** One color for the high and low lines and labels, or null for the factory pair: grey lines
2621
+ * and navy labels. */
2622
+ highLowColor: string | null;
2623
+ highLowLineWidth: number;
2624
+ /** Bid and ask come from the datafeed's quotes. */
2625
+ bidAskValue: boolean;
2626
+ bidAskLine: boolean;
2627
+ bidColor: string;
2628
+ askColor: string;
2629
+ };
2630
+ timeScale: {
2631
+ dayOfWeek: boolean;
2632
+ dateFormat: ChartDateFormat;
2633
+ hoursFormat: ChartHoursFormat;
2634
+ /** Keep the chart's left edge at the same time when the timeframe changes. */
2635
+ keepLeftEdge: boolean;
2636
+ };
2637
+ canvas: {
2638
+ backgroundType: ChartBackgroundType;
2639
+ /** The solid color, or the gradient's top. */
2640
+ background: string;
2641
+ /** The gradient's bottom. */
2642
+ backgroundBottom: string;
2643
+ verticalGrid: boolean;
2644
+ verticalGridColor: string;
2645
+ verticalGridStyle: ChartStrokeStyle;
2646
+ horizontalGrid: boolean;
2647
+ horizontalGridColor: string;
2648
+ horizontalGridStyle: ChartStrokeStyle;
2649
+ crosshairColor: string;
2650
+ crosshairStyle: ChartStrokeStyle;
2651
+ crosshairWidth: number;
2652
+ /** The watermark's parts, written large behind the bars. */
2653
+ watermarkTicker: boolean;
2654
+ watermarkInterval: boolean;
2655
+ watermarkDescription: boolean;
2656
+ /** Name bar replay in the watermark while it runs. */
2657
+ watermarkReplay: boolean;
2658
+ watermarkColor: string;
2659
+ scaleTextColor: string;
2660
+ scaleTextSize: number;
2661
+ scaleLineColor: string;
2662
+ navigationButtons: ChartControlVisibility;
2663
+ paneButtons: ChartControlVisibility;
2664
+ /** Space above the highest bar, as a percentage of the pane's height. */
2665
+ marginTop: number;
2666
+ /** Space below the lowest bar, as a percentage of the pane's height. */
2667
+ marginBottom: number;
2668
+ /** Empty bar slots after the last bar. */
2669
+ marginRight: number;
2670
+ };
2671
+ events: {
2672
+ sessionBreaks: boolean;
2673
+ sessionBreaksColor: string;
2674
+ sessionBreaksStyle: ChartStrokeStyle;
2675
+ sessionBreaksWidth: number;
2263
2676
  };
2264
2677
  }
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]>;
2678
+ /** A section's name. */
2679
+ type ChartSettingsSection = keyof ChartSettings;
2680
+ /** What a host or a viewer supplies: any leaves of any sections. */
2681
+ type PartialChartSettings = {
2682
+ [S in ChartSettingsSection]?: Partial<ChartSettings[S]>;
2274
2683
  };
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
2684
 
2284
2685
  /** One resolved role as it is written to the DOM. */
2285
2686
  interface ThemeDeclaration {
@@ -2299,12 +2700,14 @@ interface ThemeRootStyle {
2299
2700
  /** One entry per role, ordered by role id. */
2300
2701
  declarations: readonly ThemeDeclaration[];
2301
2702
  }
2302
- /** The theme values the canvas renderer draws with. The chart appearance ladder sits above these:
2303
- * a host override of a series color wins over `up` and `down` here, which are the mode's defaults
2304
- * for anything the appearance tree does not name. */
2703
+ /** The theme values the canvas renderer draws with. The chart settings sit above these: a host or a
2704
+ * viewer setting of a series color wins over `up` and `down` here, which are the mode's defaults
2705
+ * for anything the settings do not name. */
2305
2706
  interface CanvasTheme {
2306
2707
  background: string;
2307
2708
  paneBorder: string;
2709
+ /** The ink a watermark writes behind the bars. */
2710
+ watermark: string;
2308
2711
  grid: string;
2309
2712
  axisText: string;
2310
2713
  axisBackground: string;
@@ -2530,13 +2933,14 @@ interface ChartIconDiagnostic {
2530
2933
  }
2531
2934
 
2532
2935
  /** The glyphs of the chart's own controls, by meaning, each with every drawing that carries it. */
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[]>>;
2936
+ declare const CONTROL_ICONS: Readonly<Record<"info" | "search" | "bold" | "open" | "close" | "volume" | "indicators" | "copy" | "textColor" | "visible" | "lineColor" | "template" | "fillColor" | "italic" | "locked" | "sync" | "caret" | "tip" | "measure" | "image" | "eraser" | "delete" | "remove" | "hidden" | "pause" | "play" | "reset" | "scroll" | "magnet" | "collapse" | "paneCollapse" | "paneRestore" | "paneMaximize" | "marketStatus" | "replayStatus" | "replayMark" | "replayCut" | "replay" | "undo" | "redo" | "settings" | "fullscreen" | "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" | "settingsSymbol" | "settingsStatusLine" | "settingsScales" | "settingsCanvas" | "settingsEvents" | "compare" | "fullscreenExit" | "paneMoveUp" | "paneMoveDown" | "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" | "volumeMuted", readonly Glyph[]>>;
2534
2937
  /** An icon of one of the chart's own controls. */
2535
2938
  type ControlIconId = keyof typeof CONTROL_ICONS;
2536
2939
  /** Every icon a host may draw: a control's glyph by its meaning, a chart style by its id, a drawing
2537
- * tool by its registry type, and a layout arrangement by its code. Exactly the ids in
2538
- * `CHART_ICON_IDS`, so an id the chart does not draw is a type error before it is a refusal. */
2539
- type ChartIconId = ControlIconId | `style.${ChartStyleId}` | `tool.${MiniatureTool}` | `layout.${ArrangementGlyphCode}`;
2940
+ * tool by its registry type, a layout arrangement by its code, and a time-scale mark's glyph by its
2941
+ * shape. Exactly the ids in `CHART_ICON_IDS`, so an id the chart does not draw is a type error
2942
+ * before it is a refusal. */
2943
+ type ChartIconId = ControlIconId | `style.${ChartStyleId}` | `tool.${MiniatureTool}` | `layout.${ArrangementGlyphCode}` | MarkIconId;
2540
2944
  /** A host's drawings for the chart's icons, by id. An icon left out keeps the chart's own. */
2541
2945
  type ChartIcons = {
2542
2946
  readonly [K in ChartIconId]?: ChartIconFactory;
@@ -2545,7 +2949,7 @@ type ChartIcons = {
2545
2949
  * draws the left-to-right form of these. */
2546
2950
  declare const MIRRORED_ICONS: ReadonlySet<ChartIconId>;
2547
2951
  /** Every published icon id, in catalog order: the controls, then the styles, the tools and the
2548
- * layouts in their registries' orders. */
2952
+ * layouts in their registries' orders, then the mark glyphs. */
2549
2953
  declare const CHART_ICON_IDS: readonly ChartIconId[];
2550
2954
  /** The chart's own drawing of an icon, as markup a host draws without the chart: a toolbar of its
2551
2955
  * own, a native view. */
@@ -2689,6 +3093,8 @@ interface IndicatorPlots {
2689
3093
  valuesInStatusLine?: boolean;
2690
3094
  inputsInStatusLine?: boolean;
2691
3095
  };
3096
+ /** The name written beside each plot's value label on the price scale. Absent writes none. */
3097
+ scaleTitle?: string;
2692
3098
  /** Set when the indicator can't be computed from the current feed (e.g. no volume) — no plots
2693
3099
  * are drawn and the host may surface the note. */
2694
3100
  unavailable?: string;
@@ -2794,8 +3200,187 @@ declare function attachIndicators(chart: IChartApi, options?: {
2794
3200
  * live, so a theme switch repaints the levels with everything else; the built-in dark palette's
2795
3201
  * neutral stands in for a host that supplies none. */
2796
3202
  neutral?: () => string;
3203
+ /** The index of the pane the main series stands in, where overlays are drawn and which is never
3204
+ * swept. A viewer may move it below another pane; the first pane when absent. */
3205
+ mainPane?: () => number;
2797
3206
  }): IndicatorsRenderer;
2798
3207
 
3208
+ /** The chart's own pages, in rail order. */
3209
+ type ChartSettingsPageId = 'symbol' | 'statusLine' | 'scales' | 'canvas' | 'events';
3210
+ /** Paints an icon into a box and answers the disposer that empties it. */
3211
+ type ChartSettingsIconPainter = (box: HTMLElement) => () => void;
3212
+ /** One choice of a select. */
3213
+ interface ChartSettingsOption<V extends string> {
3214
+ value: V;
3215
+ label: string;
3216
+ }
3217
+ /** A tip beside a label: a short line on hover, or a card with a title and a body. */
3218
+ type ChartSettingsTip = {
3219
+ kind: 'hint';
3220
+ text: string;
3221
+ href?: string;
3222
+ } | {
3223
+ kind: 'card';
3224
+ title: string;
3225
+ body: string;
3226
+ href?: string;
3227
+ };
3228
+ /** A row's handle, for a row whose state another row decides. */
3229
+ interface ChartSettingsRowHandle {
3230
+ setDisabled(disabled: boolean): void;
3231
+ }
3232
+ /** The form a page is built with. Every builder appends a row to the page in call order, and the
3233
+ * row's `id` names it for a contribution placed before it. The chart's own rows are named by the
3234
+ * leaf they edit (`background` on the Status line page, for one), and a section the chart shows
3235
+ * only in some contexts by its own name (`indicators` on the Status line page).
3236
+ *
3237
+ * A checkbox row that is unchecked disables its own controls and every row indented under it, and
3238
+ * a disabled row stands its checkbox and its label back. */
3239
+ interface ChartSettingsForm {
3240
+ /** A section heading, written in capitals. Every heading after a page's first stands clear of the
3241
+ * section before it. */
3242
+ heading(text: string): void;
3243
+ /** A checkbox row. `indent` makes it a sub-row of the row above, and `hint` is the grey line
3244
+ * under it. `controls` builds the row's controls after its label. */
3245
+ check(row: {
3246
+ id: string;
3247
+ label: string;
3248
+ checked: boolean;
3249
+ onChange(checked: boolean): void;
3250
+ hint?: string;
3251
+ tip?: ChartSettingsTip;
3252
+ indent?: boolean;
3253
+ disabled?: boolean;
3254
+ controls?(controls: ChartSettingsControls): void;
3255
+ }): ChartSettingsRowHandle;
3256
+ /** A labelled row whose label is plain text and whose controls follow it. */
3257
+ field(row: {
3258
+ id: string;
3259
+ label: string;
3260
+ tip?: ChartSettingsTip;
3261
+ indent?: boolean;
3262
+ disabled?: boolean;
3263
+ controls(controls: ChartSettingsControls): void;
3264
+ }): ChartSettingsRowHandle;
3265
+ }
3266
+ /** The controls a row holds, laid out after its label in call order. A control is named for a
3267
+ * reader by its row's label unless `label` names it, as each of two colors on one row needs. */
3268
+ interface ChartSettingsControls {
3269
+ /** A color swatch. `opacity` adds the picker's opacity slider; `lineStyle` and `lineWidth` make
3270
+ * it a color and line swatch whose picker also sets them. A null color follows the bars. */
3271
+ color(control: {
3272
+ color: string | null;
3273
+ onColor(color: string): void;
3274
+ opacity?: boolean;
3275
+ lineStyle?: {
3276
+ value: 'solid' | 'dashed' | 'dotted';
3277
+ onChange(style: 'solid' | 'dashed' | 'dotted'): void;
3278
+ };
3279
+ lineWidth?: {
3280
+ value: number;
3281
+ options: readonly number[];
3282
+ onChange(width: number): void;
3283
+ };
3284
+ label?: string;
3285
+ disabled?: boolean;
3286
+ }): void;
3287
+ select<V extends string>(control: {
3288
+ value: V;
3289
+ options: readonly ChartSettingsOption<V>[];
3290
+ width: number;
3291
+ onChange(value: V): void;
3292
+ label?: string;
3293
+ disabled?: boolean;
3294
+ }): void;
3295
+ /** A select whose list checks any number of its options, and whose button joins the checked
3296
+ * labels or reads `none` when none is checked. The labels after the first are joined in lower
3297
+ * case unless `asWritten`. */
3298
+ multiSelect<V extends string>(control: {
3299
+ values: readonly V[];
3300
+ options: readonly ChartSettingsOption<V>[];
3301
+ width: number;
3302
+ none: string;
3303
+ onChange(values: readonly V[]): void;
3304
+ asWritten?: boolean;
3305
+ label?: string;
3306
+ disabled?: boolean;
3307
+ }): void;
3308
+ /** A number field, 100 pixels wide unless `width` says otherwise, and the unit after it. The value
3309
+ * is reported when the field is left or a stepper is pressed. NaN leaves the field empty. */
3310
+ number(control: {
3311
+ value: number;
3312
+ min: number;
3313
+ max: number;
3314
+ step: number;
3315
+ suffix?: string;
3316
+ width?: number;
3317
+ onChange(value: number): void;
3318
+ label?: string;
3319
+ disabled?: boolean;
3320
+ }): void;
3321
+ /** A line's thickness on its own, as a field wearing the thickness, whose list offers `options`. */
3322
+ lineWidth(control: {
3323
+ value: number;
3324
+ options: readonly number[];
3325
+ onChange(width: number): void;
3326
+ label?: string;
3327
+ disabled?: boolean;
3328
+ }): void;
3329
+ /** A level from 0 to 1, as a volume with a speaker before it or as an opacity over its color. A
3330
+ * drag reports every step it passes. */
3331
+ slider(control: {
3332
+ value: number;
3333
+ kind: 'volume' | {
3334
+ opacity: string;
3335
+ };
3336
+ onChange(value: number): void;
3337
+ label?: string;
3338
+ disabled?: boolean;
3339
+ }): void;
3340
+ /** Start a second line of controls under the first, in the controls' column. */
3341
+ nextLine(): void;
3342
+ }
3343
+ /** A host's contribution to the settings dialog. */
3344
+ interface ChartSettingsContribution {
3345
+ /** Either a page of the host's own, placed after another page (or last), or rows appended to one
3346
+ * of the chart's pages, before one of its rows (or at its end). `before` may name several rows or
3347
+ * sections: the rows land before the first of them the page holds, so a placement survives a
3348
+ * section the page shows only in some contexts (the Status line page's `indicators`).
3349
+ *
3350
+ * `after` names the page to follow: one of the chart's (a `ChartSettingsPageId`) or another
3351
+ * contributed page's id. A list names several, and the first of them the dialog holds wins, so
3352
+ * `after: ['trading', 'canvas']` follows a contributed `trading` page where there is one and the
3353
+ * Canvas page otherwise. The order is read once every contribution is known, so a page stands
3354
+ * after the contributed page it names whichever attached first. Pages that name the same
3355
+ * page stand after it in the order their extensions attach, each followed by the pages that name
3356
+ * it: the order of the widget's `extensions` (an extension attached again on a symbol switch
3357
+ * keeps its place), and one extension's pages in the order it contributes them. A page whose
3358
+ * `after` names no page the dialog holds, or is absent, stands last in the same order. */
3359
+ place: {
3360
+ page: {
3361
+ id: string;
3362
+ label: string;
3363
+ icon: ChartSettingsIconPainter;
3364
+ after?: string | readonly string[];
3365
+ };
3366
+ } | {
3367
+ into: ChartSettingsPageId;
3368
+ before?: string | readonly string[];
3369
+ };
3370
+ /** Build the rows. The dialog calls it whenever the page is drawn, including after every change
3371
+ * a row reports, so it reads the host's current state each time. */
3372
+ build(form: ChartSettingsForm): void;
3373
+ /** The dialog opened: answer the state that Cancel restores. */
3374
+ open?(): unknown;
3375
+ /** The viewer cancelled: restore the state `open` answered. Changes preview as they are made, so
3376
+ * this is the only undo. */
3377
+ cancel?(state: unknown): void;
3378
+ /** The viewer pressed Ok. */
3379
+ commit?(): void;
3380
+ /** The viewer chose "Apply defaults": return every setting this contribution owns to its default. */
3381
+ applyDefaults?(): void;
3382
+ }
3383
+
2799
3384
  /** Price display as an extension reads it — the chart's own formatter, so an overlay's label and the
2800
3385
  * axis beside it can never disagree about what a number looks like. */
2801
3386
  interface ChartPriceFormatter {
@@ -2870,6 +3455,12 @@ interface ChartExtensionMenuContext {
2870
3455
  /** Viewport coordinates of the press. */
2871
3456
  clientX: number;
2872
3457
  clientY: number;
3458
+ /** The table the press landed on, and whether a cell of it is being typed in; absent where it
3459
+ * landed on none. A press on a drawing raises that drawing's own menu, which carries the rows a
3460
+ * host contributes here in the places the chart's menu gives them. */
3461
+ table?: {
3462
+ cell: boolean;
3463
+ };
2873
3464
  }
2874
3465
  /** One filled or stroked shape of a contributed glyph, on the menu's own 28-unit grid. Path data
2875
3466
  * and a closed set of paint values are the whole vocabulary: a contribution carries no markup, no
@@ -2907,9 +3498,10 @@ interface ChartExtensionMenuItem {
2907
3498
  checked?: boolean;
2908
3499
  /** The row's glyph. Omitted leaves the gutter empty and the label still aligned. */
2909
3500
  icon?: ChartExtensionIcon;
2910
- /** Where the row sits. `level` (the default) is an action on the price the pointer landed on and
2911
- * joins the group under Copy price and Paste; `view` is a switch over what the chart shows and
2912
- * joins the group under the remove rows. */
3501
+ /** Where the row sits. `level` (the default) is an action on the price the pointer landed on: it
3502
+ * joins the group under Copy price and Paste, and the price menu the price scale's plus opens,
3503
+ * where each extension's rows stand together; `view` is a switch over what the chart shows and
3504
+ * joins the group under the remove rows, and the price menu leaves it out. */
2913
3505
  group?: 'level' | 'view';
2914
3506
  run(): void;
2915
3507
  }
@@ -2942,6 +3534,42 @@ interface ChartExtensionHideLayerHandle {
2942
3534
  /** Withdraw the layer from the eye. Detach withdraws it either way. */
2943
3535
  remove(): void;
2944
3536
  }
3537
+ /** A row of an extension's own in the pane's legend: an element the extension builds and keeps,
3538
+ * which the chart places under the symbol's reading and above the indicator rows. The row wears the
3539
+ * status line's backdrop like the legend's own parts, and takes the pointer, so its controls are
3540
+ * pressed rather than the chart under them. Whether it shows, and what it holds, is the
3541
+ * extension's own state: it hides or fills the element as it likes. */
3542
+ interface ChartExtensionLegendRow {
3543
+ element: HTMLElement;
3544
+ /** Where the row stands among contributed rows: a lower rank first, then the rows of one rank
3545
+ * as they were contributed. Absent reads as 0. */
3546
+ rank?: number;
3547
+ }
3548
+ /** The frame a contribution paints an image of the chart in. */
3549
+ interface ChartExtensionCaptureFrame {
3550
+ /** The chart element's width in CSS pixels. */
3551
+ width: number;
3552
+ /** The chart element's height in CSS pixels. */
3553
+ height: number;
3554
+ /** Image pixels per CSS pixel. */
3555
+ pixelRatio: number;
3556
+ }
3557
+ /** An extension's part in an image of the chart. Every image the chart produces of itself (a
3558
+ * download, a copy, `image.capture()`) is taken through the contributions of the extensions
3559
+ * attached to it: each `before` runs, the renderer draws the image, each `paint` paints over it,
3560
+ * and each restore runs, the last answered first. A contribution that throws is contained: the
3561
+ * image is still produced and every restore still runs. */
3562
+ interface ChartExtensionCapture {
3563
+ /** Runs synchronously before the chart draws into the image; answer the restore, run after it is
3564
+ * taken. The renderer draws every pending change before it takes the image, so what a `before`
3565
+ * changed through the chart's capabilities (a price line it updated, a primitive it asked to
3566
+ * redraw) is drawn as it now stands. */
3567
+ before?(): (() => void) | void;
3568
+ /** Runs after the bitmap is taken: paint over it. The origin is the chart element's top left,
3569
+ * which is the top left of the context's `container`; pixelRatio is image pixels per CSS pixel.
3570
+ * The context arrives untransformed, and the chart puts back its state after each paint. */
3571
+ paint?(target: CanvasRenderingContext2D, frame: ChartExtensionCaptureFrame): void;
3572
+ }
2945
3573
  /** Builds an extension's context menu rows. The chart calls it on every raise with that moment's
2946
3574
  * context, so the rows can depend on the level that was pressed. An empty list contributes nothing
2947
3575
  * and costs nothing. */
@@ -2970,8 +3598,8 @@ interface ChartExtensionContext {
2970
3598
  * over every pane and over whatever the page stacks around the widget mounts HERE, at viewport
2971
3599
  * coordinates; the context menu does the same. */
2972
3600
  layer: HTMLElement;
2973
- /** The chart's effective canvas palette: the mode's resolved theme with any applied appearance
2974
- * overrides on top, projected onto the values a canvas draws with. */
3601
+ /** The chart's effective canvas palette: the mode's resolved theme under the chart settings
3602
+ * in effect, projected onto the values a canvas draws with. */
2975
3603
  theme(): CanvasTheme;
2976
3604
  formatter(): ChartPriceFormatter;
2977
3605
  /** The name symbology gives the charted market, for a surface that prints it; `chart.symbol()`
@@ -3003,6 +3631,21 @@ interface ChartExtensionContext {
3003
3631
  contributeContextMenu(build: ChartExtensionMenuBuilder): () => void;
3004
3632
  contributeCommands(commands: readonly ChartExtensionCommand[]): () => void;
3005
3633
  contributeHideLayer(layer: ChartExtensionHideLayer): ChartExtensionHideLayerHandle;
3634
+ /** Add a page of the extension's own to the chart settings dialog, or rows to one of the chart's
3635
+ * pages. The dialog lists what the active chart's extensions contribute when it opens; the
3636
+ * returned function withdraws the contribution, and detach withdraws it either way. */
3637
+ contributeSettings(contribution: ChartSettingsContribution): () => void;
3638
+ /** Place a row of the extension's own in the pane's legend. The returned function takes it out,
3639
+ * and detach takes it out either way; the element is the extension's to keep. */
3640
+ contributeLegendRow(row: ChartExtensionLegendRow): () => void;
3641
+ /** Ask the datafeed for the chart's bar marks and time-scale marks again, now, and draw what it
3642
+ * answers: for an extension whose own setting changes what the feed serves, such as a row it
3643
+ * contributes to the settings dialog, so the change shows while the dialog is open. */
3644
+ refreshMarks(): void;
3645
+ /** Take part in every image of the chart: hold out what the extension draws while the image is
3646
+ * taken, or paint over the image what the chart's canvases do not carry. The returned function
3647
+ * withdraws the contribution, and detach withdraws it either way. */
3648
+ contributeCapture(capture: ChartExtensionCapture): () => void;
3006
3649
  }
3007
3650
  /** What an extension gives back at attach. `detach` is required; the two state methods are the
3008
3651
  * opt-in for anything the viewer would expect a saved chart to bring back. */
@@ -3145,8 +3788,10 @@ declare function clipToWindow(bars: readonly FeedBar[], window: {
3145
3788
  to: number;
3146
3789
  } | null): FeedBar[];
3147
3790
  /** Placement → where the series goes. Pane index for 'new-pane' is resolved at add time (the
3148
- * chart's CURRENT pane count), matching the indicator renderer's rule. */
3149
- declare function seriesTargetOf(placement: ComparePlacement, paneCount: number): {
3791
+ * chart's CURRENT pane count), matching the indicator renderer's rule. A 'new-scale' series takes
3792
+ * the side the main series does not stand on, the left unless named. The other two stand in the
3793
+ * main pane, the first unless a viewer moved it. */
3794
+ declare function seriesTargetOf(placement: ComparePlacement, paneCount: number, secondScale?: 'left' | 'right', mainPane?: number): {
3150
3795
  paneIndex: number;
3151
3796
  priceScaleId?: string;
3152
3797
  };
@@ -3162,6 +3807,12 @@ interface CompareDeps {
3162
3807
  } | null;
3163
3808
  /** How many bars a fresh compare asks for when the main window is not yet known. */
3164
3809
  seedCountBack?: number;
3810
+ /** The side the main series' price scale stands on; the right when absent. A 'new-scale'
3811
+ * comparison takes the other side. */
3812
+ mainScale?(): 'left' | 'right';
3813
+ /** The index of the pane the main series stands in, which a 'same-percent' or 'new-scale'
3814
+ * comparison shares; the first pane when absent. */
3815
+ mainPane?(): number;
3165
3816
  /** Entries changed (add/remove/visibility/color) or a comparison's latest value moved — hosts
3166
3817
  * re-render their legend from `list()` / `latest()`. */
3167
3818
  onChange?(): void;
@@ -3191,9 +3842,9 @@ interface CompareHandle {
3191
3842
  list(): CompareEntry[];
3192
3843
  /** The latest clipped close for one comparison, or null (no bars in window / unknown symbol). */
3193
3844
  latest(symbol: string): number | null;
3194
- /** The pane the comparison's series currently lives on (0 = the main pane), or null for an
3195
- * unknown symbol — how a host places the comparison's legend row in the right pane's group. Read
3196
- * live from the series, because 'new-pane' indices shift as other panes come and go. */
3845
+ /** The pane the comparison's series currently lives on, or null for an unknown symbol: how a host
3846
+ * places the comparison's legend row in the right pane's group. Read live from the series,
3847
+ * because pane indices shift as other panes come, go and move. */
3197
3848
  paneIndexOf(symbol: string): number | null;
3198
3849
  /** Percent change across the clipped window (last close vs the window's FIRST in-window close —
3199
3850
  * the loaded-window approximation of the percent scale's first-visible-bar base), or null with
@@ -3207,6 +3858,9 @@ interface CompareHandle {
3207
3858
  sync(): void;
3208
3859
  /** The chart's timeframe changed: every comparison refetches at the new bucket size. */
3209
3860
  setTimeframe(): void;
3861
+ /** The main series' price scale moved to the other side: every 'new-scale' comparison moves to
3862
+ * the side it left, and that side shows while one lives. */
3863
+ scaleMoved(): void;
3210
3864
  serialize(): CompareSnapshot[];
3211
3865
  /** Replace the whole set from a snapshot (restore path). Unknown placements are dropped. */
3212
3866
  restore(snapshot: readonly unknown[]): void;
@@ -3502,7 +4156,7 @@ interface ChartSaveLoadApi {
3502
4156
  }
3503
4157
 
3504
4158
  /** What one step says changed, in the order a diff asks. */
3505
- type HistoryChange = 'symbol' | 'timeframe' | 'style' | 'priceScale' | 'appearance' | 'compareAdd' | 'compareRemove' | 'compareChange' | 'indicatorAdd' | 'indicatorRemove' | 'indicatorChange' | 'drawingAdd' | 'drawingRemove' | 'drawingChange';
4159
+ type HistoryChange = 'symbol' | 'timeframe' | 'style' | 'priceScale' | 'settings' | 'compareAdd' | 'compareRemove' | 'compareChange' | 'indicatorAdd' | 'indicatorRemove' | 'indicatorChange' | 'paneMove' | 'drawingAdd' | 'drawingRemove' | 'drawingChange';
3506
4160
  /** The undo surface a control and a command read. */
3507
4161
  interface ChartHistoryApi {
3508
4162
  canUndo(): boolean;
@@ -3596,8 +4250,12 @@ interface CommandSpec {
3596
4250
  labelText?: string;
3597
4251
  /** The default shortcut, in `KeyboardEvent` terms (e.g. `Alt+KeyR`). */
3598
4252
  shortcut?: string;
3599
- /** Whether the command can run right now, from capability and chart state. */
3600
- available(): boolean;
4253
+ /** Whether the command can run right now, from capability and chart state. A command whose one id
4254
+ * spans many subjects reads the argument it would run with, and answers for that subject: the
4255
+ * top pane cannot move up. Asked with none, it answers whether any subject could, unless a run
4256
+ * with none acts on a subject of its own, as the horizontal line at the crosshair's price does,
4257
+ * and then for that subject. */
4258
+ available(arg?: unknown): boolean;
3601
4259
  /** Whether the access policy refuses this argument, for a command whose one id spans many
3602
4260
  * subjects (the tool to arm). A refused argument answers `denied`, as a refused id does. */
3603
4261
  refuses?(arg: unknown): boolean;
@@ -3626,8 +4284,8 @@ interface CommandRegistry {
3626
4284
  /** Every registered command, in registration order. Unavailable and denied commands are listed:
3627
4285
  * a menu decides whether to draw a disabled row, and hiding one would leave the host guessing. */
3628
4286
  list(): readonly CommandSpec[];
3629
- /** Whether `execute` would run this command right now. */
3630
- available(id: string): boolean;
4287
+ /** Whether `execute` would run this command right now, with this argument where it takes one. */
4288
+ available(id: string, arg?: unknown): boolean;
3631
4289
  execute(id: string, arg?: unknown): CommandResult;
3632
4290
  /** Remap a shortcut, or clear it with null. */
3633
4291
  setShortcut(id: string, shortcut: string | null): void;
@@ -3982,6 +4640,8 @@ interface DrawingsHandle {
3982
4640
  setVisibilityPreset(preset: VisibilityPreset): void;
3983
4641
  /** Drop a ready picture onto the chart, centred in view, selected. */
3984
4642
  placeImage(image: PlacedImage): void;
4643
+ /** Place a horizontal line at a price in the tool's default look, selected. */
4644
+ placeHorizontalLine(price: number): void;
3985
4645
  /** Blank every drawing (the eye), without touching any drawing's own switch. */
3986
4646
  setAllHidden(hidden: boolean): void;
3987
4647
  allHidden(): boolean;
@@ -4066,11 +4726,81 @@ interface ChartReplayApi {
4066
4726
  /** Off, waiting to be told where to start, or running. */
4067
4727
  type ReplayPhase = 'off' | 'arming' | 'on';
4068
4728
 
4729
+ /** Every action the menu can offer. A host handles the ids it supports and passes `has` flags for
4730
+ * the rest — an unsupported action simply never becomes a row. */
4731
+ type ChartMenuAction = 'table-add-column' | 'table-add-row' | 'table-remove-row' | 'table-remove-column' | 'reset-view' | 'copy-price' | 'paste' | 'remove-indicators' | 'remove-drawings' | 'settings';
4732
+ /** The glyph a row wears, named rather than drawn — the host owns the artwork. */
4733
+ type ChartMenuIcon = 'reset' | 'settings' | 'check' | 'table-add-column' | 'table-add-row' | 'delete';
4734
+ type ChartMenuRow = {
4735
+ kind: 'separator';
4736
+ } | {
4737
+ kind: 'item';
4738
+ id: ChartMenuAction;
4739
+ label: string;
4740
+ shortcut?: string;
4741
+ icon?: ChartMenuIcon;
4742
+ /** A CHECKABLE row: state is marked with a checkmark in the icon cell and never by
4743
+ * rewording the label, so "Lock vertical cursor line by time" reads the same either way. */
4744
+ checked?: boolean;
4745
+ };
4746
+ interface ChartMenuContext {
4747
+ /** The level the pointer landed on, already formatted in the pane's own precision. */
4748
+ priceText: string;
4749
+ /** The pane's display symbol — a contributed row that acts on the market names it. */
4750
+ symbol: string;
4751
+ /** Counts drive both the wording and whether the row appears at all. */
4752
+ indicatorCount: number;
4753
+ drawingCount: number;
4754
+ /** A drawing clipboard exists. Default true: Paste is offered whether or not anything
4755
+ * is copied, and pasting nothing is a no-op — but a host with no clipboard at all omits it. */
4756
+ canPaste?: boolean;
4757
+ /** A settings surface exists to open. Default true; a host without one omits the row. */
4758
+ canSettings?: boolean;
4759
+ /** The level lies on a table. Its rows add a column right of the cell being typed in and a row
4760
+ * below it, or at the table's ends where no cell is, and with a cell, remove its row and its
4761
+ * column. Omitted where the level lies on none. */
4762
+ table?: {
4763
+ cell: boolean;
4764
+ };
4765
+ /** The widget's language for the row labels. Omitted ⇒ English. */
4766
+ t?: ChartTranslate;
4767
+ }
4768
+ /** The menu a level offers, in one fixed order. */
4769
+ declare function chartContextMenu(c: ChartMenuContext): ChartMenuRow[];
4770
+
4771
+ /** A row the HOST contributed for this raise (through the chart's extension seam). It carries its
4772
+ * own action, so the painter routes nothing and a contributed row can never collide with a
4773
+ * built-in id. Structural on purpose: the menu has no dependency on who contributed or why. */
4774
+ interface ContextMenuExtraRow {
4775
+ label: string;
4776
+ shortcut?: string;
4777
+ checked?: boolean;
4778
+ /** An inert vector glyph for the shared gutter. */
4779
+ icon?: ChartExtensionIcon;
4780
+ /** `level` rows (the default) group under Copy price and Paste; `view` rows under the removes. */
4781
+ group?: 'level' | 'view';
4782
+ run(): void;
4783
+ }
4784
+ interface ContextMenuHandle {
4785
+ /** Raise the menu at a viewport point, for the level the caller resolved. `extra` places the
4786
+ * contributed rows by their group between the built-ins; an empty list adds no separator. */
4787
+ open(at: {
4788
+ clientX: number;
4789
+ clientY: number;
4790
+ }, ctx: ChartMenuContext, extra?: readonly ContextMenuExtraRow[]): void;
4791
+ close(): void;
4792
+ destroy(): void;
4793
+ }
4794
+ /** `strings` is the chart's language: the rows are built through it every time the menu is raised,
4795
+ * and an open menu re-labels in place if the language changes under it. `icons` are the host's
4796
+ * drawings for the menu's own glyphs, as a chart takes them. */
4797
+ declare function mountContextMenu(container: HTMLElement, run: (id: ChartMenuAction) => void, strings?: ChartI18n, icons?: ChartIcons): ContextMenuHandle;
4798
+
4069
4799
  /** The drawing surface a host drives: the layer's handle minus what the chart owns (symbol,
4070
4800
  * timeframe, tick, price format, teardown) and minus the session verbs only the package's own
4071
4801
  * surfaces use (the live `IDrawing`, the preview and edit session, the inline text session, the
4072
4802
  * presets). The public surface grows on demand, not by exposure. */
4073
- type ChartDrawingsApi = Omit<DrawingsHandle, 'setSymbol' | 'setTimeframe' | 'setTick' | 'setCurrency' | 'setPriceFormatter' | 'destroy' | 'selectedDrawing' | 'commitEdit' | 'beginPreview' | 'endPreview' | 'textEdit' | 'commitText' | 'cancelText' | 'presets'>;
4803
+ type ChartDrawingsApi = Omit<DrawingsHandle, 'setSymbol' | 'setTimeframe' | 'setTick' | 'setCurrency' | 'setPriceFormatter' | 'destroy' | 'selectedDrawing' | 'commitEdit' | 'beginPreview' | 'endPreview' | 'textEdit' | 'commitText' | 'cancelText' | 'presets' | 'placeHorizontalLine'>;
4074
4804
 
4075
4805
  /** What a preset frames: seconds of history, the year to date, or everything loaded. */
4076
4806
  type RangeSpan = number | 'ytd' | 'all';
@@ -4249,14 +4979,24 @@ interface ChartHandle {
4249
4979
  /** Stepping back and forward through this chart's own content. Each step is one reading of the
4250
4980
  * content, so a step back puts the whole reading back rather than reversing one verb. */
4251
4981
  history: ChartHistoryApi;
4252
- /** The EFFECTIVE appearance tree: the mode's floor, the constructor partial, then every runtime
4253
- * layer. */
4254
- appearance(): ChartOverrides;
4255
- /** Apply an appearance partial at RUNTIME: the top of the precedence ladder. Later calls layer
4256
- * over earlier ones leaf by leaf, so two hosts' calls compose instead of clobbering. */
4257
- applyAppearance(partial: PartialOverrides): void;
4982
+ /** The EFFECTIVE settings tree: the theme's factory values, the host's constructor partial, then
4983
+ * the viewer's own leaves. */
4984
+ settings(): ChartSettings;
4985
+ /** Apply a partial to the viewer's own leaves: the top of the precedence ladder. Later calls layer
4986
+ * over earlier ones leaf by leaf, so two callers compose instead of clobbering. A leaf the tree
4987
+ * does not have, or a value its leaf cannot hold, is ignored. The change is a content change: it
4988
+ * marks the chart for saving and is a step of its history. */
4989
+ applySettings(partial: PartialChartSettings): void;
4990
+ /** Drop the viewer's own leaves and put the price scale back to normal. The theme's values and the
4991
+ * host's partial stand; the viewport and every other preference are untouched. */
4992
+ resetSettings(): void;
4258
4993
  /** The chart's one price formatter, in the chart's language and on the symbol's own grid. */
4259
4994
  formatter(): PriceFormatter;
4995
+ /** Ask the datafeed for this chart's bar marks and time-scale marks again, now, over the window
4996
+ * the chart holds, and draw what it answers in place of what is drawn. A host calls it when a
4997
+ * change of its own changes what its feed serves, so the change shows at once. A chart that draws
4998
+ * no marks, or holds no bars yet, asks nothing. */
4999
+ refreshMarks(): void;
4260
5000
  saveLoad: ChartSaveLoadApi;
4261
5001
  /** Pane-composition sync primitives, which a layout drives. */
4262
5002
  sync: ChartPaneSyncApi;
@@ -4652,6 +5392,8 @@ interface Capabilities {
4652
5392
  /** The feed serves neutral bar marks / time-scale marks. */
4653
5393
  marks: boolean;
4654
5394
  timescaleMarks: boolean;
5395
+ /** The feed serves a symbol's live prices: its bid, ask, last and previous close. */
5396
+ prices: boolean;
4655
5397
  /** How live the active symbol's data is; null until it resolves. */
4656
5398
  dataStatus: DataStatus | null;
4657
5399
  /** Which saved-resource families the adapter carries. All false without an adapter. */
@@ -4985,10 +5727,11 @@ interface ChartWidgetOptions extends MarkPainterHooks {
4985
5727
  drawingPersistence?: DrawingPersistenceOptions;
4986
5728
  /** The product theme: which built-in mode, and any custom semantic palettes. */
4987
5729
  theme?: ThemeOptions;
4988
- /** Chart appearance: the typed override tree over the mode's defaults. This is the other
4989
- * precedence ladder, and it wins over the palette wherever both could reach the same pixel:
4990
- * runtime `applyAppearance` beats this, and this beats what the theme resolves to. */
4991
- appearance?: PartialOverrides;
5730
+ /** The chart settings this host opens every chart with: any leaves of any sections, over the
5731
+ * theme's factory values. This is the other precedence ladder, and it wins over the palette
5732
+ * wherever both could reach the same pixel: the viewer's own settings (`applySettings`, the
5733
+ * settings dialog, a saved chart) beat this, and this beats what the theme resolves to. */
5734
+ settings?: PartialChartSettings;
4992
5735
  /** Which chart behavior exists. */
4993
5736
  features?: FeatureConfig;
4994
5737
  /** Which of the chart's own controls render. */
@@ -5334,6 +6077,9 @@ interface PaneState {
5334
6077
  heights: Readonly<Record<number, number>>;
5335
6078
  /** Heights remembered from BEFORE the pane's current collapse/maximize, by pane index. */
5336
6079
  remembered: Readonly<Record<number, number>>;
6080
+ /** The index of the main pane, which a viewer may move below another pane. The first when
6081
+ * absent. */
6082
+ main?: number;
5337
6083
  }
5338
6084
  interface PanePlan {
5339
6085
  /** Heights to apply, by pane index (only entries that change). */
@@ -5342,7 +6088,7 @@ interface PanePlan {
5342
6088
  remembered: Record<number, number>;
5343
6089
  }
5344
6090
  /** Plan one pane operation. The TOTAL height is conserved exactly — the space a pane gives up goes
5345
- * to the main pane (0) and vice versa, because the chart's own height is fixed by its container;
6091
+ * to the main pane and vice versa, because the chart's own height is fixed by its container;
5346
6092
  * handing back a different sum would make the renderer redistribute unpredictably. */
5347
6093
  declare function planPaneOp(state: PaneState, op: PaneOp): PanePlan;
5348
6094
  /** Whether a pane currently reads as collapsed (drives which control the legend shows).
@@ -5355,76 +6101,6 @@ declare function planPaneOp(state: PaneState, op: PaneOp): PanePlan;
5355
6101
  * not collapsed anything. */
5356
6102
  declare function isCollapsed(height: number | undefined): boolean;
5357
6103
 
5358
- /** Every action the menu can offer. A host handles the ids it supports and passes `has` flags for
5359
- * the rest — an unsupported action simply never becomes a row. */
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';
5361
- /** The glyph a row wears, named rather than drawn — the host owns the artwork. */
5362
- type ChartMenuIcon = 'reset' | 'settings' | 'check' | 'table-add-column' | 'table-add-row' | 'delete';
5363
- type ChartMenuRow = {
5364
- kind: 'separator';
5365
- } | {
5366
- kind: 'item';
5367
- id: ChartMenuAction;
5368
- label: string;
5369
- shortcut?: string;
5370
- icon?: ChartMenuIcon;
5371
- /** A CHECKABLE row: state is marked with a checkmark in the icon cell and never by
5372
- * rewording the label, so "Lock vertical cursor line by time" reads the same either way. */
5373
- checked?: boolean;
5374
- };
5375
- interface ChartMenuContext {
5376
- /** The level the pointer landed on, already formatted in the pane's own precision. */
5377
- priceText: string;
5378
- /** The pane's display symbol — a contributed row that acts on the market names it. */
5379
- symbol: string;
5380
- /** Counts drive both the wording and whether the row appears at all. */
5381
- indicatorCount: number;
5382
- drawingCount: number;
5383
- /** A drawing clipboard exists. Default true: Paste is offered whether or not anything
5384
- * is copied, and pasting nothing is a no-op — but a host with no clipboard at all omits it. */
5385
- canPaste?: boolean;
5386
- /** A settings surface exists to open. Default true; a host without one omits the row. */
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
- };
5394
- /** The widget's language for the row labels. Omitted ⇒ English. */
5395
- t?: ChartTranslate;
5396
- }
5397
- /** The menu a level offers, in one fixed order. */
5398
- declare function chartContextMenu(c: ChartMenuContext): ChartMenuRow[];
5399
-
5400
- /** A row the HOST contributed for this raise (through the chart's extension seam). It carries its
5401
- * own action, so the painter routes nothing and a contributed row can never collide with a
5402
- * built-in id. Structural on purpose: the menu has no dependency on who contributed or why. */
5403
- interface ContextMenuExtraRow {
5404
- label: string;
5405
- shortcut?: string;
5406
- checked?: boolean;
5407
- /** An inert vector glyph for the shared gutter. */
5408
- icon?: ChartExtensionIcon;
5409
- /** `level` rows (the default) group under Copy price and Paste; `view` rows under the removes. */
5410
- group?: 'level' | 'view';
5411
- run(): void;
5412
- }
5413
- interface ContextMenuHandle {
5414
- /** Raise the menu at a viewport point, for the level the caller resolved. `extra` places the
5415
- * contributed rows by their group between the built-ins; an empty list adds no separator. */
5416
- open(at: {
5417
- clientX: number;
5418
- clientY: number;
5419
- }, ctx: ChartMenuContext, extra?: readonly ContextMenuExtraRow[]): void;
5420
- close(): void;
5421
- destroy(): void;
5422
- }
5423
- /** `strings` is the chart's language: the rows are built through it every time the menu is raised,
5424
- * and an open menu re-labels in place if the language changes under it. `icons` are the host's
5425
- * drawings for the menu's own glyphs, as a chart takes them. */
5426
- declare function mountContextMenu(container: HTMLElement, run: (id: ChartMenuAction) => void, strings?: ChartI18n, icons?: ChartIcons): ContextMenuHandle;
5427
-
5428
6104
  /** The session's name in English — what a host renders when it shows status text of its own. The
5429
6105
  * widget's catalog carries the same five under `session.<state>`, keyed by these very names, so a
5430
6106
  * host reading the catalog and a host reading this table always say the same thing. */
@@ -5433,14 +6109,32 @@ declare const SESSION_LABEL: Readonly<Record<SessionState, string>>;
5433
6109
  * against the theme in effect, so the marker follows light or dark and a host's custom palette
5434
6110
  * instead of carrying a color of its own. */
5435
6111
  declare const SESSION_DOT: Readonly<Record<SessionState, ThemeRoleId>>;
5436
- /** A series primitive that shades every non-regular-hours stretch of the visible chart. Bars are
5437
- * read back from the price series (no second feed), classified under the symbol's CURRENT session
5438
- * model, merged into runs, and drawn as full-height rects UNDER the main series (zOrder bottom).
5439
- * Re-renders with every chart paint, so it tracks pan/zoom for free. An UNKNOWN model (null)
5440
- * never bands: drawing nothing is the only honest render before the symbol resolves. A continuous
5441
- * market never bands (it is always open), and bands render on INTRADAY timeframes only: a daily or
5442
- * larger bar spans whole sessions, so classifying its single timestamp would shade entire days by
5443
- * whichever session that instant fell in. */
6112
+ /** The bar times among `times` (ascending) that open a new trading day: each bar whose trading day,
6113
+ * read in the exchange zone, differs from the bar before it. The first bar opens nothing, because
6114
+ * the day before it is not on screen. */
6115
+ declare function sessionBreakTimes(model: SessionModel, times: readonly number[]): number[];
6116
+ /** How the bands look under the chart settings: the shading of each stretch outside regular hours
6117
+ * (null leaves it clear) and the line at each session's start (null draws none). The closed
6118
+ * stretch keeps its theme role. */
6119
+ interface SessionLook {
6120
+ pre: string | null;
6121
+ after: string | null;
6122
+ extended: string | null;
6123
+ breaks: {
6124
+ color: string;
6125
+ width: number;
6126
+ style: ChartStrokeStyle;
6127
+ } | null;
6128
+ }
6129
+ /** A series primitive that shades every non-regular-hours stretch of the visible chart and draws a
6130
+ * vertical line where each trading day starts. Bars are read back from the price series (no
6131
+ * second feed), classified under the symbol's CURRENT session model, merged into runs, and drawn as
6132
+ * full-height rects UNDER the main series (zOrder bottom). Re-renders with every chart paint, so it
6133
+ * tracks pan/zoom for free. An UNKNOWN model (null) draws nothing: drawing nothing is the only
6134
+ * honest render before the symbol resolves. A continuous market never bands (it is always open),
6135
+ * though its days still break. Both render on INTRADAY timeframes only: a daily or larger bar spans
6136
+ * whole sessions, so classifying its single timestamp would shade entire days by whichever session
6137
+ * that instant fell in, and every bar would start a day. */
5444
6138
  interface SessionBandsPrimitive {
5445
6139
  paneViews(): unknown[];
5446
6140
  attached(param: {
@@ -5453,9 +6147,14 @@ interface SessionBandsPrimitive {
5453
6147
  * repaint (on a quiet market: never). */
5454
6148
  refresh(): void;
5455
6149
  }
5456
- declare function createSessionBands(chart: IChartApi, series: ISeriesApi<SeriesType>, enabled: () => boolean, model: () => SessionModel | null, intraday: () => boolean,
6150
+ declare function createSessionBands(chart: IChartApi, series: ISeriesApi<SeriesType>,
6151
+ /** Whether the stretches outside regular hours are shaded. */
6152
+ enabled: () => boolean, model: () => SessionModel | null, intraday: () => boolean,
5457
6153
  /** The theme in effect. Read at draw time, so a mode switch repaints the bands with the pane. */
5458
- theme: () => SemanticTheme): SessionBandsPrimitive;
6154
+ theme: () => SemanticTheme,
6155
+ /** The colors and the session breaks the chart settings ask for. Without it each stretch wears
6156
+ * its theme role and no break is drawn. */
6157
+ look?: () => SessionLook): SessionBandsPrimitive;
5459
6158
 
5460
6159
  /** The compact editor beside `rect` inside `container`, its glyphs drawn from the chart's own
5461
6160
  * artwork. */
@@ -5469,6 +6168,61 @@ declare function openInputsEditor(container: HTMLElement, rect: {
5469
6168
  * field's name and an enum's options are the manifest's own vocabulary and are not translated. */
5470
6169
  strings?: ChartI18n): void;
5471
6170
 
6171
+ /** The chart settings a chart opens with under a resolved theme, before any host or viewer names a
6172
+ * leaf. */
6173
+ declare function chartSettingsDefaults(theme: SemanticTheme): ChartSettings;
6174
+ /** Every section of the tree, in its order. */
6175
+ declare const CHART_SETTINGS_SECTIONS: readonly ChartSettingsSection[];
6176
+ /** What reading a stored partial kept, and the `section.leaf` paths it had to drop because the value
6177
+ * was not one the leaf can hold. A path the tree does not have at all is ignored rather than
6178
+ * reported: it is a leaf this build does not know, not a broken one. */
6179
+ interface ReadChartSettings {
6180
+ settings: PartialChartSettings;
6181
+ rejected: string[];
6182
+ }
6183
+ /** Read a stored or supplied partial. `isColor` decides whether a string is a color the renderer can
6184
+ * paint; the portable parser is the default. */
6185
+ declare function readPartialChartSettings(raw: unknown, isColor?: (value: string) => boolean): ReadChartSettings;
6186
+ /** Layer partials over a complete tree, later partials winning leaf by leaf. A leaf the tree does
6187
+ * not have is ignored. */
6188
+ declare function layerChartSettings(base: ChartSettings, ...partials: (PartialChartSettings | null | undefined)[]): ChartSettings;
6189
+
6190
+ /** The chart settings' factory colors that are the same in both modes. */
6191
+ interface ChartFactoryColors {
6192
+ /** A single-value line drawn in one color, and the area style's line. */
6193
+ line: string;
6194
+ /** A single-value line drawn as a gradient: its color at the highest price on screen. */
6195
+ lineGradientTop: string;
6196
+ /** Its color at the lowest price on screen. */
6197
+ lineGradientBottom: string;
6198
+ /** The area style's fill at its line, fading to the second at the pane's foot. */
6199
+ areaTop: string;
6200
+ areaBottom: string;
6201
+ /** The vertical line at each session's start. */
6202
+ sessionBreaks: string;
6203
+ /** The previous session's close on the price scale. */
6204
+ previousClose: string;
6205
+ /** The visible range's high and low: their lines across the plot, and their labels on the scale,
6206
+ * while the setting names no color of its own. */
6207
+ highLowLine: string;
6208
+ highLowLabel: string;
6209
+ bid: string;
6210
+ ask: string;
6211
+ /** The text on every colored value label the price scale wears, and on the tag beside it. */
6212
+ scaleLabelText: string;
6213
+ /** The last values of the pre-market, post-market and overnight stretches on the price scale. */
6214
+ preMarketLabel: string;
6215
+ postMarketLabel: string;
6216
+ nightLabel: string;
6217
+ }
6218
+ /** The factory colors of the chart settings that do not change with the mode. */
6219
+ declare const CHART_FACTORY_COLORS: Readonly<ChartFactoryColors>;
6220
+ /** The brand pair: what a host's own surfaces on the chart read, an extension's lines among them,
6221
+ * so a rebrand edits two strings. The candles keep the series pair, because candles are the market
6222
+ * and the brand pair marks what a host draws on top of it. */
6223
+ declare const BRAND_UP = "#4c98fb";
6224
+ declare const BRAND_DOWN = "#f23645";
6225
+
5472
6226
  /** The `/symbols` fields this mapping reads. A server may send more; anything not listed here has
5473
6227
  * no place in symbology. */
5474
6228
  interface UdfSymbolResponse {
@@ -5651,12 +6405,34 @@ declare function timezoneLabel(zone: string, at?: Date): string;
5651
6405
  * `tag`. */
5652
6406
  declare function formatClock(tag: string, zone: string, at?: Date): string;
5653
6407
  /** The time-axis tick-mark formatter for lightweight-charts: each mark granularity written in the
5654
- * zone and the language. Assign it to `timeScale.tickMarkFormatter`. */
5655
- declare function makeTickMarkFormatter(tag: string, zone: string): (time: Time, tickMarkType: TickMarkType) => string;
6408
+ * zone and the language, the times on a clock of 24 hours or of 12. Assign it to
6409
+ * `timeScale.tickMarkFormatter`. */
6410
+ declare function makeTickMarkFormatter(tag: string, zone: string, hours?: ChartHoursFormat): (time: Time, tickMarkType: TickMarkType) => string;
6411
+ /** How the crosshair's time label writes a moment: the date's pattern, whether the weekday leads it,
6412
+ * the clock, and the words the quarter of a year is written with. */
6413
+ interface TimeLabelFormat {
6414
+ dateFormat: ChartDateFormat;
6415
+ dayOfWeek: boolean;
6416
+ hoursFormat: ChartHoursFormat;
6417
+ /** The quarter, 1 to 4, as the reader's language writes it (Q3). */
6418
+ quarter(quarter: number): string;
6419
+ }
6420
+ /** A date written by a pattern, in the zone and the language: the month's name from the language,
6421
+ * every number in Latin digits. */
6422
+ declare function formatChartDate(at: Date, zone: string, tag: string, pattern: ChartDateFormat, quarter: (quarter: number) => string): string;
6423
+ /** A pattern written on the sample date, in the reader's language, with or without the weekday:
6424
+ * what a date-format picker shows for each choice ("Mon 29 Sep '97"). */
6425
+ declare function chartDateSample(format: ChartDateFormat, options: {
6426
+ locale: string;
6427
+ dayOfWeek: boolean;
6428
+ t: ChartTranslate;
6429
+ }): string;
5656
6430
  /** The crosshair time label for lightweight-charts: the date always, the wall time only when
5657
6431
  * `withTime` (an intraday chart). A daily or larger bar's timestamp is a session date, and a
5658
- * shifted midnight would misread as a fill time. Assign it to `localization.timeFormatter`. */
5659
- declare function makeCrosshairTimeFormatter(tag: string, zone: string, withTime: boolean): (time: Time) => string;
6432
+ * shifted midnight would misread as a fill time. With a `format` the date follows its pattern,
6433
+ * weekday and clock; without one it is the language's own short date with its weekday, on a clock
6434
+ * of 24 hours. Assign it to `localization.timeFormatter`. */
6435
+ declare function makeCrosshairTimeFormatter(tag: string, zone: string, withTime: boolean, format?: TimeLabelFormat): (time: Time) => string;
5660
6436
  /** One row of the timezone picker: the choice it selects and the text it wears. */
5661
6437
  interface TimezoneRow {
5662
6438
  readonly id: string;
@@ -5793,4 +6569,4 @@ declare function mountTimeframePicker(options: TimeframePickerOptions & {
5793
6569
  container: HTMLElement;
5794
6570
  }): MountedTimeframePicker;
5795
6571
 
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 };
6572
+ export { ARRANGEMENTS, type AccessPolicy, type ActiveSubsession, type Arrangement, type AttachDrawingsOptions, BRAND_DOWN, BRAND_UP, BUILT_IN_INDICATORS, BUILT_IN_LOCALES, type BuiltInIndicator, CHART_DATE_FORMATS, CHART_FACTORY_COLORS, CHART_ICON_IDS, CHART_SETTINGS_SECTIONS, CHART_STYLES, COLLAPSED_H, COMPARE_COLORS, type CandleStyleSettings, type CanvasTheme, type Capabilities, type ChartBackgroundType, ChartBody, type ChartChrome, type ChartCompareApi, type ChartControlVisibility, type ChartCustomLocale, ChartDatafeed, type ChartDateFormat, type ChartDictionary, type ChartDrawingsApi, type ChartEvents, type ChartExtension, type ChartExtensionCapture, type ChartExtensionCaptureFrame, type ChartExtensionChart, type ChartExtensionCommand, type ChartExtensionContext, type ChartExtensionHandle, type ChartExtensionIcon, type ChartExtensionIconPath, type ChartExtensionLegendRow, type ChartExtensionMenuBuilder, type ChartExtensionMenuContext, type ChartExtensionMenuItem, type ChartExtensionPane, type ChartExtensionPriceLine, type ChartExtensionReplayState, type ChartExtensionScope, type ChartExtensionSeries, type ChartFactoryColors, type ChartHandle, type ChartHistoryApi, type ChartHoursFormat, type ChartI18n, type ChartI18nOptions, type ChartIconArtwork, type ChartIconContext, type ChartIconDiagnostic, type ChartIconFactory, type ChartIconFailure, type ChartIconId, type ChartIcons, type ChartLastValueMode, type ChartLegendRow, type ChartLineColorType, type ChartLocale, type ChartLocaleCode, type ChartMenuAction, type ChartMenuContext, type ChartMenuIcon, type ChartMenuRow, ChartMessageKey, ChartMeta, type ChartPaneSyncApi, type ChartPreferences, type ChartPriceFormatter, type ChartPricePrecision, type ChartPriceSource, type ChartReplayApi, ChartSaveLoadAdapter, type ChartSaveLoadApi, type ChartScalePlacement, type ChartSessionHours, type ChartSettings, type ChartSettingsContribution, type ChartSettingsControls, type ChartSettingsForm, type ChartSettingsIconPainter, type ChartSettingsOption, type ChartSettingsPageId, type ChartSettingsRowHandle, type ChartSettingsSection, type ChartSettingsTip, type ChartStorage, type ChartStrokeStyle, type ChartStyleId, type ChartTimezone, type ChartTitleSource, 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_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 LineStyleSettings, type LogicalRange, MAIN_MIN_H, MIN_BAR_SPACING, MIRRORED_ICONS, type ManifestFill, type ManifestInput, type ManifestLevel, type ManifestPlot, type ManifestRun, MarkIconId, type MarkPainters, type MarketStatus, type MatchSegment, type MountedSymbolSearch, type MountedTimeframePicker, type OpenResource, PRICE_SCALE_MODE, type PaneOp, type PanePlan, type PaneRect, type PaneState, type PartialChartSettings, type PlacedImage, type PlotArea, type PlotPoint, PriceFormat, PriceFormatter, RANGE_PRESETS, RECENT_SYMBOLS_CAP, REPLAY_SPEEDS, type RangeFrameTarget, type RangePreset, type RangeSpan, type ReadChartSettings, 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 SessionLook, 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 TimeLabelFormat, 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, chartDateSample, chartDictionaries, chartIconArtwork, chartSettingsDefaults, clipToWindow, coerceChartStyle, coerceScaleMode, compareTimeframes, composeFormingBar, composeImage, createChart, createChartI18n, createSearchController, createSessionBands, createSymbolSearchCache, createThemeController, createUdfDatafeed, effectivePlotColor, exchangeTimezoneText, formatChartDate, formatClock, formatDuration, formatTimeframe, frameRange, hasExtendedHours, imageFileName, imageHeaderRuns, imageLayoutHeaderRuns, imageTileRuns, indicatorHidden, isChartStyle, isCollapsed, isIntradayTimeframe, isSymbolPair, isTimezoneChoice, latestPlotValue, layerChartSettings, looksLikeSpread, makeCrosshairTimeFormatter, makeTickMarkFormatter, manifestInputDefaults, marketStatus, marketStatusFor, marketStatusText, marketStatusTitle, matchSegments, memoryChartStorage, memoryRecents, mountContextMenu, mountSymbolSearch, mountTimeframePicker, nextSessionChange, openInputsEditor, openSymbolSearch, openTimeframePicker, overriddenManifest, parseSessionModel, parseTimeframe, pickCompareColor, placeableByWidget, planPaneOp, promoteRecent, rangeAvailable, rangePresetTip, rangeSpanSeconds, readPartialChartSettings, resolveDisplayTimezone, resolveInitialTf, scrolledPosition, seriesTargetOf, sessionBreakTimes, 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 };