@tradecanvas/chart 1.3.0 → 1.7.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 (205) hide show
  1. package/README.md +131 -49
  2. package/dist/Chart.d.ts +724 -18
  3. package/dist/Chart.d.ts.map +1 -1
  4. package/dist/DataManager.d.ts +5 -0
  5. package/dist/DataManager.d.ts.map +1 -1
  6. package/dist/HistoryPager.d.ts +58 -0
  7. package/dist/HistoryPager.d.ts.map +1 -0
  8. package/dist/LayoutSession-CTZB90NX.cjs +2 -0
  9. package/dist/LayoutSession-CTZB90NX.cjs.map +1 -0
  10. package/dist/LayoutSession-CWn3sdbs.js +3967 -0
  11. package/dist/LayoutSession-CWn3sdbs.js.map +1 -0
  12. package/dist/PaneManager.d.ts.map +1 -1
  13. package/dist/ThemeManager.d.ts +5 -1
  14. package/dist/ThemeManager.d.ts.map +1 -1
  15. package/dist/chartA11y.d.ts +59 -0
  16. package/dist/chartA11y.d.ts.map +1 -0
  17. package/dist/charts/ChartTypeStrategy.d.ts +11 -4
  18. package/dist/charts/ChartTypeStrategy.d.ts.map +1 -1
  19. package/dist/grid/ChartGrid.d.ts +7 -1
  20. package/dist/grid/ChartGrid.d.ts.map +1 -1
  21. package/dist/i18n-CiQ8EDVs.js +1469 -0
  22. package/dist/i18n-CiQ8EDVs.js.map +1 -0
  23. package/dist/i18n-WsLA9SmD.cjs +2 -0
  24. package/dist/i18n-WsLA9SmD.cjs.map +1 -0
  25. package/dist/index.cjs +1 -1
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.ts +24 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +74 -89
  30. package/dist/index.js.map +1 -1
  31. package/dist/indicatorLabel.d.ts +7 -0
  32. package/dist/indicatorLabel.d.ts.map +1 -0
  33. package/dist/layout/LayoutManager.d.ts +50 -0
  34. package/dist/layout/LayoutManager.d.ts.map +1 -1
  35. package/dist/layout/priceAxisWidth.d.ts +2 -0
  36. package/dist/layout/priceAxisWidth.d.ts.map +1 -1
  37. package/dist/regularHours.d.ts +10 -0
  38. package/dist/regularHours.d.ts.map +1 -0
  39. package/dist/state/LayoutSession.d.ts +101 -0
  40. package/dist/state/LayoutSession.d.ts.map +1 -0
  41. package/dist/state/layoutStorage.d.ts +46 -0
  42. package/dist/state/layoutStorage.d.ts.map +1 -0
  43. package/dist/trading/wireExecution.d.ts +7 -3
  44. package/dist/trading/wireExecution.d.ts.map +1 -1
  45. package/dist/widget/ChartWidget.d.ts +283 -10
  46. package/dist/widget/ChartWidget.d.ts.map +1 -1
  47. package/dist/widget/ChartWidgetGrid.d.ts +166 -0
  48. package/dist/widget/ChartWidgetGrid.d.ts.map +1 -0
  49. package/dist/widget/DrawingTemplateStore.d.ts +29 -8
  50. package/dist/widget/DrawingTemplateStore.d.ts.map +1 -1
  51. package/dist/widget/WatchlistStore.d.ts +65 -0
  52. package/dist/widget/WatchlistStore.d.ts.map +1 -0
  53. package/dist/widget/WidgetAccountPanel.d.ts +72 -0
  54. package/dist/widget/WidgetAccountPanel.d.ts.map +1 -0
  55. package/dist/widget/WidgetAlertsPanel.d.ts +50 -3
  56. package/dist/widget/WidgetAlertsPanel.d.ts.map +1 -1
  57. package/dist/widget/WidgetBracketBar.d.ts +3 -1
  58. package/dist/widget/WidgetBracketBar.d.ts.map +1 -1
  59. package/dist/widget/WidgetChartNav.d.ts +36 -0
  60. package/dist/widget/WidgetChartNav.d.ts.map +1 -0
  61. package/dist/widget/WidgetCommandPalette.d.ts +5 -1
  62. package/dist/widget/WidgetCommandPalette.d.ts.map +1 -1
  63. package/dist/widget/WidgetContextMenu.d.ts +40 -0
  64. package/dist/widget/WidgetContextMenu.d.ts.map +1 -0
  65. package/dist/widget/WidgetDataWindow.d.ts +3 -1
  66. package/dist/widget/WidgetDataWindow.d.ts.map +1 -1
  67. package/dist/widget/WidgetDepthLadder.d.ts +3 -1
  68. package/dist/widget/WidgetDepthLadder.d.ts.map +1 -1
  69. package/dist/widget/WidgetDrawingSettings.d.ts +108 -0
  70. package/dist/widget/WidgetDrawingSettings.d.ts.map +1 -0
  71. package/dist/widget/WidgetDrawingSidebar.d.ts +26 -1
  72. package/dist/widget/WidgetDrawingSidebar.d.ts.map +1 -1
  73. package/dist/widget/WidgetDrawingStyle.d.ts +3 -1
  74. package/dist/widget/WidgetDrawingStyle.d.ts.map +1 -1
  75. package/dist/widget/WidgetDropdown.d.ts.map +1 -1
  76. package/dist/widget/WidgetGoToDate.d.ts +46 -0
  77. package/dist/widget/WidgetGoToDate.d.ts.map +1 -0
  78. package/dist/widget/WidgetHistoryPill.d.ts +23 -0
  79. package/dist/widget/WidgetHistoryPill.d.ts.map +1 -0
  80. package/dist/widget/WidgetHotkeySheet.d.ts +3 -1
  81. package/dist/widget/WidgetHotkeySheet.d.ts.map +1 -1
  82. package/dist/widget/WidgetIndicatorLegend.d.ts +98 -0
  83. package/dist/widget/WidgetIndicatorLegend.d.ts.map +1 -0
  84. package/dist/widget/WidgetIndicatorSettings.d.ts +62 -7
  85. package/dist/widget/WidgetIndicatorSettings.d.ts.map +1 -1
  86. package/dist/widget/WidgetIntervalInput.d.ts +34 -0
  87. package/dist/widget/WidgetIntervalInput.d.ts.map +1 -0
  88. package/dist/widget/WidgetLayoutsDialog.d.ts +39 -0
  89. package/dist/widget/WidgetLayoutsDialog.d.ts.map +1 -0
  90. package/dist/widget/WidgetLayoutsUI.d.ts +37 -0
  91. package/dist/widget/WidgetLayoutsUI.d.ts.map +1 -0
  92. package/dist/widget/WidgetLoadingOverlay.d.ts.map +1 -1
  93. package/dist/widget/WidgetNamePrompt.d.ts +31 -0
  94. package/dist/widget/WidgetNamePrompt.d.ts.map +1 -0
  95. package/dist/widget/WidgetObjectTree.d.ts +21 -3
  96. package/dist/widget/WidgetObjectTree.d.ts.map +1 -1
  97. package/dist/widget/WidgetOrderTicket.d.ts +49 -0
  98. package/dist/widget/WidgetOrderTicket.d.ts.map +1 -0
  99. package/dist/widget/WidgetReplayBar.d.ts +52 -7
  100. package/dist/widget/WidgetReplayBar.d.ts.map +1 -1
  101. package/dist/widget/WidgetSettings.d.ts +26 -2
  102. package/dist/widget/WidgetSettings.d.ts.map +1 -1
  103. package/dist/widget/WidgetStatusBar.d.ts +19 -1
  104. package/dist/widget/WidgetStatusBar.d.ts.map +1 -1
  105. package/dist/widget/WidgetStyles.d.ts +3 -1
  106. package/dist/widget/WidgetStyles.d.ts.map +1 -1
  107. package/dist/widget/WidgetSymbolInfo.d.ts +64 -0
  108. package/dist/widget/WidgetSymbolInfo.d.ts.map +1 -0
  109. package/dist/widget/WidgetSymbolSearch.d.ts +28 -5
  110. package/dist/widget/WidgetSymbolSearch.d.ts.map +1 -1
  111. package/dist/widget/WidgetToolbar.d.ts +42 -4
  112. package/dist/widget/WidgetToolbar.d.ts.map +1 -1
  113. package/dist/widget/WidgetTooltip.d.ts +43 -0
  114. package/dist/widget/WidgetTooltip.d.ts.map +1 -0
  115. package/dist/widget/WidgetWatchlist.d.ts +53 -13
  116. package/dist/widget/WidgetWatchlist.d.ts.map +1 -1
  117. package/dist/widget/chartMenu.d.ts +40 -0
  118. package/dist/widget/chartMenu.d.ts.map +1 -0
  119. package/dist/widget/drawingMenu.d.ts +21 -0
  120. package/dist/widget/drawingMenu.d.ts.map +1 -0
  121. package/dist/widget/escapeHtml.d.ts +3 -0
  122. package/dist/widget/escapeHtml.d.ts.map +1 -0
  123. package/dist/widget/focusTrap.d.ts +8 -0
  124. package/dist/widget/focusTrap.d.ts.map +1 -0
  125. package/dist/widget/i18n.d.ts +20 -63
  126. package/dist/widget/i18n.d.ts.map +1 -1
  127. package/dist/widget/iconSet.d.ts +26 -0
  128. package/dist/widget/iconSet.d.ts.map +1 -0
  129. package/dist/widget/icons.d.ts +5 -0
  130. package/dist/widget/icons.d.ts.map +1 -1
  131. package/dist/widget/index.cjs +2145 -405
  132. package/dist/widget/index.cjs.map +1 -1
  133. package/dist/widget/index.d.ts +18 -1
  134. package/dist/widget/index.d.ts.map +1 -1
  135. package/dist/widget/index.js +7376 -1274
  136. package/dist/widget/index.js.map +1 -1
  137. package/dist/widget/indicatorTemplates.d.ts +24 -0
  138. package/dist/widget/indicatorTemplates.d.ts.map +1 -0
  139. package/dist/widget/keyTarget.d.ts +11 -0
  140. package/dist/widget/keyTarget.d.ts.map +1 -0
  141. package/dist/widget/legendValues.d.ts +19 -0
  142. package/dist/widget/legendValues.d.ts.map +1 -0
  143. package/dist/widget/locales/ar.d.ts +4 -0
  144. package/dist/widget/locales/ar.d.ts.map +1 -0
  145. package/dist/widget/locales/de.d.ts +4 -0
  146. package/dist/widget/locales/de.d.ts.map +1 -0
  147. package/dist/widget/locales/en.d.ts +722 -0
  148. package/dist/widget/locales/en.d.ts.map +1 -0
  149. package/dist/widget/locales/es.d.ts +4 -0
  150. package/dist/widget/locales/es.d.ts.map +1 -0
  151. package/dist/widget/locales/fr.d.ts +4 -0
  152. package/dist/widget/locales/fr.d.ts.map +1 -0
  153. package/dist/widget/locales/he.d.ts +4 -0
  154. package/dist/widget/locales/he.d.ts.map +1 -0
  155. package/dist/widget/locales/id.d.ts +4 -0
  156. package/dist/widget/locales/id.d.ts.map +1 -0
  157. package/dist/widget/locales/index.cjs +2 -0
  158. package/dist/widget/locales/index.cjs.map +1 -0
  159. package/dist/widget/locales/index.d.ts +33 -0
  160. package/dist/widget/locales/index.d.ts.map +1 -0
  161. package/dist/widget/locales/index.js +10089 -0
  162. package/dist/widget/locales/index.js.map +1 -0
  163. package/dist/widget/locales/ja.d.ts +4 -0
  164. package/dist/widget/locales/ja.d.ts.map +1 -0
  165. package/dist/widget/locales/ko.d.ts +4 -0
  166. package/dist/widget/locales/ko.d.ts.map +1 -0
  167. package/dist/widget/locales/pt.d.ts +4 -0
  168. package/dist/widget/locales/pt.d.ts.map +1 -0
  169. package/dist/widget/locales/ru.d.ts +4 -0
  170. package/dist/widget/locales/ru.d.ts.map +1 -0
  171. package/dist/widget/locales/th.d.ts +4 -0
  172. package/dist/widget/locales/th.d.ts.map +1 -0
  173. package/dist/widget/locales/tr.d.ts +4 -0
  174. package/dist/widget/locales/tr.d.ts.map +1 -0
  175. package/dist/widget/locales/vi.d.ts +4 -0
  176. package/dist/widget/locales/vi.d.ts.map +1 -0
  177. package/dist/widget/locales/zh.d.ts +4 -0
  178. package/dist/widget/locales/zh.d.ts.map +1 -0
  179. package/dist/widget/locales/zhHant.d.ts +4 -0
  180. package/dist/widget/locales/zhHant.d.ts.map +1 -0
  181. package/dist/widget/orderTicket.d.ts +27 -0
  182. package/dist/widget/orderTicket.d.ts.map +1 -0
  183. package/dist/widget/settingsControls.d.ts +24 -0
  184. package/dist/widget/settingsControls.d.ts.map +1 -0
  185. package/dist/widget/types.d.ts +215 -13
  186. package/dist/widget/types.d.ts.map +1 -1
  187. package/dist/widget/widgetConfig.d.ts +1 -5
  188. package/dist/widget/widgetConfig.d.ts.map +1 -1
  189. package/dist/widget/widgetLayout.d.ts +22 -0
  190. package/dist/widget/widgetLayout.d.ts.map +1 -0
  191. package/dist/widget/widgetLocales.d.ts +17 -0
  192. package/dist/widget/widgetLocales.d.ts.map +1 -0
  193. package/dist/widget/widgetTimeframes.d.ts +28 -0
  194. package/dist/widget/widgetTimeframes.d.ts.map +1 -0
  195. package/dist/widget/widgetTimezones.d.ts +32 -0
  196. package/dist/widget/widgetTimezones.d.ts.map +1 -0
  197. package/dist/widget/widgetUI.d.ts +126 -0
  198. package/dist/widget/widgetUI.d.ts.map +1 -0
  199. package/package.json +8 -3
  200. package/dist/DragDropImporter-BazeSQPD.cjs +0 -2
  201. package/dist/DragDropImporter-BazeSQPD.cjs.map +0 -1
  202. package/dist/DragDropImporter-cURSpfUb.js +0 -1883
  203. package/dist/DragDropImporter-cURSpfUb.js.map +0 -1
  204. package/dist/charts/IndicatorPriceRange.d.ts +0 -20
  205. package/dist/charts/IndicatorPriceRange.d.ts.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { Translator } from './i18n.js';
1
2
  export interface ObjectTreeIndicator {
2
3
  instanceId: string;
3
4
  name: string;
@@ -8,6 +9,11 @@ export interface ObjectTreeDrawing {
8
9
  label: string;
9
10
  visible: boolean;
10
11
  locked: boolean;
12
+ /** The group it belongs to; a group's drawings are listed under one row. */
13
+ group?: {
14
+ id: string;
15
+ name: string;
16
+ };
11
17
  }
12
18
  export interface ObjectTreeCompare {
13
19
  id: string;
@@ -21,6 +27,13 @@ export interface ObjectTreeCallbacks {
21
27
  onRemoveDrawing: (id: string) => void;
22
28
  onToggleDrawingVisible: (id: string, visible: boolean) => void;
23
29
  onToggleDrawingLocked: (id: string, locked: boolean) => void;
30
+ /** When provided, each drawing row gets a settings button. */
31
+ onConfigureDrawing?: (id: string) => void;
32
+ /** Group rows: hide, lock, rename (or double-click its name) and ungroup the group. */
33
+ onToggleGroupVisible?: (groupId: string, visible: boolean) => void;
34
+ onToggleGroupLocked?: (groupId: string, locked: boolean) => void;
35
+ onUngroup?: (groupId: string) => void;
36
+ onRenameGroup?: (groupId: string, name: string) => void;
24
37
  /** When provided, a Compare section with an "add" button is shown. */
25
38
  onAddCompare?: () => void;
26
39
  onRemoveCompare?: (id: string) => void;
@@ -32,13 +45,14 @@ export interface ObjectTreeCallbacks {
32
45
  * from the toolbar layers button; the host wires actions back to the chart.
33
46
  */
34
47
  export declare class WidgetObjectTree {
48
+ private readonly t;
35
49
  private el;
36
50
  private indicatorsEl;
37
51
  private drawingsEl;
38
52
  private compareEl;
39
53
  private callbacks;
40
54
  private open;
41
- constructor(host: HTMLElement, callbacks: ObjectTreeCallbacks);
55
+ constructor(host: HTMLElement, callbacks: ObjectTreeCallbacks, t?: Translator);
42
56
  isOpen(): boolean;
43
57
  toggle(): void;
44
58
  openPanel(): void;
@@ -49,11 +63,15 @@ export declare class WidgetObjectTree {
49
63
  private makeSection;
50
64
  private renderIndicators;
51
65
  private renderDrawings;
66
+ private groupRow;
67
+ /** Swap a group's name for a text box: Enter or leaving it renames, Escape keeps the name. */
68
+ private renameGroup;
69
+ private drawingRow;
52
70
  private renderCompares;
53
71
  private row;
54
72
  private emptyRow;
55
73
  private iconButton;
56
74
  }
57
- /** Human-readable label for a drawing type, falling back to the raw key. */
58
- export declare function drawingTypeLabel(type: string): string;
75
+ /** Label for a drawing type in the widget's language, falling back to English, then the raw key. */
76
+ export declare function drawingTypeLabel(type: string, t?: Translator): string;
59
77
  //# sourceMappingURL=WidgetObjectTree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetObjectTree.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetObjectTree.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,wBAAwB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1E,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,sBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/D,qBAAqB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7D,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB;IA8B7D,MAAM,IAAI,OAAO;IAIjB,MAAM,IAAI,IAAI;IAId,SAAS,IAAI,IAAI;IAKjB,KAAK,IAAI,IAAI;IAKb,OAAO,IAAI,IAAI;IAIf,kEAAkE;IAClE,UAAU,CACR,UAAU,EAAE,mBAAmB,EAAE,EACjC,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,QAAQ,GAAE,iBAAiB,EAAO,GACjC,IAAI;IAMP,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,GAAG;IAWX,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,UAAU;CAUnB;AA8CD,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
1
+ {"version":3,"file":"WidgetObjectTree.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetObjectTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { OrderPlaceIntent, OrderSide } from '@tradecanvas/commons';
2
+ import { Translator } from './i18n.js';
3
+ export interface OrderTicketCallbacks {
4
+ onSubmit: (intent: OrderPlaceIntent) => void;
5
+ formatPrice: (price: number) => string;
6
+ }
7
+ /** Where a ticket starts: a side and a price (a click on the chart), and the market. */
8
+ export interface OrderTicketStart {
9
+ side?: OrderSide;
10
+ price?: number;
11
+ lastPrice: number | null;
12
+ }
13
+ /**
14
+ * An order ticket: side, type, quantity, price, stop-loss, take-profit and
15
+ * time in force, checked as it is filled in; Place sends an `orderPlace`
16
+ * intent. Escape, Cancel or a click outside close it.
17
+ */
18
+ export declare class WidgetOrderTicket {
19
+ private readonly callbacks;
20
+ private readonly t;
21
+ private backdrop;
22
+ private modal;
23
+ private body;
24
+ private problemsEl;
25
+ private submit;
26
+ private draft;
27
+ private lastPrice;
28
+ private returnFocus;
29
+ private readonly uid;
30
+ constructor(host: HTMLElement, callbacks: OrderTicketCallbacks, t?: Translator);
31
+ open(start: OrderTicketStart): void;
32
+ close(): void;
33
+ isOpen(): boolean;
34
+ /** The latest price, while the ticket is open (a market order's price, the checks). */
35
+ setLastPrice(price: number | null): void;
36
+ destroy(): void;
37
+ private place;
38
+ private set;
39
+ private render;
40
+ /** Buy or Sell, as two pressed buttons. */
41
+ private sideToggle;
42
+ /** A number checked as it is typed (not only when it is left). */
43
+ private number;
44
+ /** A price that is off unless switched on (a stop-loss, a take-profit). */
45
+ private optionalPrice;
46
+ /** Show what is wrong and the reward:risk, and enable Place only for a sound order. */
47
+ private check;
48
+ }
49
+ //# sourceMappingURL=WidgetOrderTicket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetOrderTicket.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetOrderTicket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAe,MAAM,sBAAsB,CAAC;AAErF,OAAO,EAAwC,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAUlF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED,wFAAwF;AACxF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAID;;;;GAIG;AACH,qBAAa,iBAAiB;IAWG,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAwB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAVnG,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAEvB,IAAI,EAAE,WAAW,EAAmB,SAAS,EAAE,oBAAoB,EAAmB,CAAC,GAAE,UAA0B;IA8D/H,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAgBnC,KAAK,IAAI,IAAI;IAQb,MAAM,IAAI,OAAO;IAIjB,uFAAuF;IACvF,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAMxC,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,GAAG;IAOX,OAAO,CAAC,MAAM;IAoCd,2CAA2C;IAC3C,OAAO,CAAC,UAAU;IAiBlB,kEAAkE;IAClE,OAAO,CAAC,MAAM;IAWd,2EAA2E;IAC3E,OAAO,CAAC,aAAa;IAkBrB,uFAAuF;IACvF,OAAO,CAAC,KAAK;CAiBd"}
@@ -1,37 +1,82 @@
1
1
  /**
2
- * Replay scrubber bar — surfaces the chart's existing replay engine as a
3
- * visible bottom-of-chart control. Mounts under the chart container, owns
4
- * its own lifecycle, and reports user intent up via callbacks (no chart
5
- * coupling — the host calls chart.replayStart() / replayPause() / etc.).
2
+ * Replay control bar. Surfaces the chart's replay engine as a floating
3
+ * bottom-of-chart control and reports user intent through callbacks (no
4
+ * chart coupling — the host calls chart.replayStart() / replayPause() / …).
5
+ *
6
+ * Two modes: `select` (pick the start bar: a hint, "random bar", play from a
7
+ * default start) and `replay` (step, play/pause, scrub, speed). "Back to
8
+ * realtime" is always there and is highlighted once the replay reaches the
9
+ * last bar.
6
10
  */
7
11
  export interface ReplayBarCallbacks {
8
12
  onPlay: () => void;
9
13
  onPause: () => void;
10
- onStop: () => void;
11
14
  onStepBack: () => void;
12
15
  onStepForward: () => void;
13
16
  onSeek: (index: number) => void;
17
+ /** Bars revealed per second. */
14
18
  onSpeedChange: (barsPerSecond: number) => void;
19
+ onRandomStart: () => void;
15
20
  onClose: () => void;
21
+ /** The step picked: `'bar'`, or a finer interval to replay through. */
22
+ onStepChange?: (step: string) => void;
16
23
  }
24
+ /** A replay step on offer: `'bar'` or a finer interval. */
25
+ export interface ReplayStepOption {
26
+ value: string;
27
+ label: string;
28
+ }
29
+ export interface ReplayBarLabels {
30
+ selectHint: string;
31
+ random: string;
32
+ realtime: string;
33
+ barsPerSecond: string;
34
+ play: string;
35
+ pause: string;
36
+ stepBack: string;
37
+ stepForward: string;
38
+ replay: string;
39
+ position: string;
40
+ speed: string;
41
+ step: string;
42
+ }
43
+ export declare const DEFAULT_REPLAY_LABELS: ReplayBarLabels;
17
44
  export type ReplayBarState = 'playing' | 'paused' | 'stopped';
45
+ export type ReplayBarMode = 'select' | 'replay';
46
+ /** Replay speeds, in bars revealed per second. */
47
+ export declare const REPLAY_SPEEDS: readonly [1, 2, 3, 5, 10, 25, 50];
48
+ export declare const DEFAULT_REPLAY_SPEED = 5;
18
49
  export declare class WidgetReplayBar {
50
+ private readonly callbacks;
19
51
  private root;
20
52
  private scrubber;
21
53
  private progressLabel;
22
54
  private playBtn;
55
+ private realtimeBtn;
23
56
  private state;
57
+ private mode;
58
+ private ended;
24
59
  private total;
25
60
  private speed;
26
- private callbacks;
27
- constructor(callbacks: ReplayBarCallbacks);
61
+ private steps;
62
+ private step;
63
+ private readonly labels;
64
+ constructor(callbacks: ReplayBarCallbacks, labels?: Partial<ReplayBarLabels>);
28
65
  mount(host: HTMLElement, opts: {
29
66
  total: number;
30
67
  speed?: number;
68
+ mode?: ReplayBarMode;
69
+ steps?: readonly ReplayStepOption[];
70
+ step?: string;
31
71
  }): void;
32
72
  unmount(): void;
33
73
  isMounted(): boolean;
74
+ getMode(): ReplayBarMode;
75
+ setMode(mode: ReplayBarMode): void;
34
76
  setState(state: ReplayBarState): void;
77
+ /** The replay sits on its last bar: nothing left to play. */
78
+ setEnded(ended: boolean): void;
79
+ /** `current`: index of the bar on screen. */
35
80
  setProgress(current: number, total: number): void;
36
81
  destroy(): void;
37
82
  private markup;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetReplayBar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetReplayBar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAI9D,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAqB;gBAE1B,SAAS,EAAE,kBAAkB;IAIzC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAevE,OAAO,IAAI,IAAI;IASf,SAAS,IAAI,OAAO;IAIpB,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAKrC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAWjD,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,UAAU;IA2BlB,OAAO,CAAC,MAAM;CAKf"}
1
+ {"version":3,"file":"WidgetReplayBar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetReplayBar.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
+ import { ChartType } from '@tradecanvas/commons';
1
2
  import { ChartSettingsState, SettingsCallbacks } from './types.js';
2
3
  import { Translator } from './i18n.js';
3
4
  export declare class WidgetSettings {
5
+ private readonly available;
6
+ /** Where the panel mounts (the widget's portal: themed, and inside it when fullscreen). */
7
+ private readonly host;
4
8
  private callbacks;
5
9
  private t;
6
10
  private backdrop;
@@ -9,14 +13,34 @@ export declare class WidgetSettings {
9
13
  private currentSettings;
10
14
  private bodyEl;
11
15
  private tabButtons;
12
- constructor(callbacks: SettingsCallbacks, t: Translator);
13
- open(currentSettings: ChartSettingsState): void;
16
+ /** The chart's type, whose settings the Style tab offers. */
17
+ private chartType;
18
+ /**
19
+ * `barCountdown` / `logScale` false leave out the controls for features the
20
+ * chart has switched off.
21
+ */
22
+ constructor(callbacks: SettingsCallbacks, t: Translator, available?: {
23
+ barCountdown?: boolean;
24
+ logScale?: boolean;
25
+ /** Offer the exchange's time zone; returns it (null while unknown). */
26
+ exchangeZone?: () => string | null;
27
+ },
28
+ /** Where the panel mounts (the widget's portal: themed, and inside it when fullscreen). */
29
+ host?: () => HTMLElement);
30
+ open(currentSettings: ChartSettingsState, chartType?: ChartType | null): void;
31
+ isOpen(): boolean;
32
+ /** The settings as they are now (after an undo), on the tab that's open. */
33
+ refresh(settings: ChartSettingsState): void;
14
34
  close(): void;
15
35
  private buildModal;
16
36
  private renderTabContent;
17
37
  private renderStyleTab;
18
38
  private renderDisplayTab;
19
39
  private renderScaleTab;
40
+ /** The settings of the chart's type, when it has any (Renko's box, Kagi's reversal…). */
41
+ private renderChartTypeSection;
42
+ /** A number field; empty means "worked out from the data" (shown as Auto). Only numbers above 0 are taken. */
43
+ private numberRow;
20
44
  private patch;
21
45
  private section;
22
46
  private colorRow;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetSettings.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAExE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAK5C,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAA2B;gBAEjC,SAAS,EAAE,iBAAiB,EAAE,CAAC,EAAE,UAAU;IAKvD,IAAI,CAAC,eAAe,EAAE,kBAAkB,GAAG,IAAI;IAM/C,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,UAAU;IAuFlB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,gBAAgB;IAyDxB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,QAAQ;IA+BhB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,SAAS;IA4BjB,OAAO,CAAC,QAAQ;IA2ChB,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"WidgetSettings.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSettings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAoB,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAK5C,qBAAa,cAAc;IAmBvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAM1B,2FAA2F;IAC3F,OAAO,CAAC,QAAQ,CAAC,IAAI;IAzBvB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,UAAU,CAA2B;IAC7C,6DAA6D;IAC7D,OAAO,CAAC,SAAS,CAA0B;IAE3C;;;OAGG;gBAED,SAAS,EAAE,iBAAiB,EAC5B,CAAC,EAAE,UAAU,EACI,SAAS,GAAE;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,uEAAuE;QACvE,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;KAC/B;IACN,2FAA2F;IAC1E,IAAI,GAAE,MAAM,WAAiC;IAMhE,IAAI,CAAC,eAAe,EAAE,kBAAkB,EAAE,SAAS,GAAE,SAAS,GAAG,IAAW,GAAG,IAAI;IAOnF,MAAM,IAAI,OAAO;IAIjB,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAM3C,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,UAAU;IAuFlB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,gBAAgB;IAqDxB,OAAO,CAAC,cAAc;IAmBtB,yFAAyF;IACzF,OAAO,CAAC,sBAAsB;IA8C9B,8GAA8G;IAC9G,OAAO,CAAC,SAAS;IA+BjB,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,QAAQ;IA+BhB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,SAAS;IA4BjB,OAAO,CAAC,QAAQ;IA2ChB,OAAO,IAAI,IAAI;CAGhB"}
@@ -1,15 +1,33 @@
1
+ import { RangePreset } from '@tradecanvas/core';
2
+ export interface StatusBarRange {
3
+ presets: readonly RangePreset[];
4
+ /** Button text per preset; the preset itself when missing. */
5
+ presetLabels?: Partial<Record<RangePreset, string>>;
6
+ groupLabel: string;
7
+ goToLabel: string;
8
+ onPreset: (preset: RangePreset) => void;
9
+ onGoTo: () => void;
10
+ }
11
+ /**
12
+ * Bottom bar: range presets and "go to date" on the left (when `range` is
13
+ * given), connection state and symbol on the right.
14
+ */
1
15
  export declare class WidgetStatusBar {
2
16
  private el;
3
17
  private dotEl;
4
18
  private messageEl;
5
19
  private infoEl;
6
- constructor(host: HTMLElement);
20
+ private marketEl;
21
+ constructor(host: HTMLElement, range?: StatusBarRange);
7
22
  update(state: {
8
23
  connectionState: string;
9
24
  message: string;
10
25
  symbol: string;
11
26
  timeframe: string;
12
27
  }): void;
28
+ /** The market's status (open or closed); hidden for a market around the clock. */
29
+ setMarket(state: 'open' | 'closed' | 'always', text: string): void;
13
30
  destroy(): void;
31
+ private buildRange;
14
32
  }
15
33
  //# sourceMappingURL=WidgetStatusBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetStatusBar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetStatusBar.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAkB;gBAEpB,IAAI,EAAE,WAAW;IAsB7B,MAAM,CAAC,KAAK,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAYpG,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"WidgetStatusBar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetStatusBar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,8DAA8D;IAC9D,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,cAAc;IAkCrD,MAAM,CAAC,KAAK,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAYpG,kFAAkF;IAClF,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAMlE,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,UAAU;CA2BnB"}
@@ -1,5 +1,7 @@
1
1
  /**
2
- * Inject the widget stylesheet into `document.head`. Reference-counted so
2
+ * Inject the widget stylesheet at the top of `document.head`, so the page's
3
+ * own CSS wins a tie of specificity (a `.tcw-root { --tcw-radius: 0 }` of
4
+ * yours sets the token). Reference-counted so
3
5
  * multiple `ChartWidget` instances share the same `<style>` tag and the last
4
6
  * to detach removes it. CSS lives in a sibling `.css` file and is inlined at
5
7
  * build time via Vite's `?raw` query — consumers see a plain string at runtime.
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetStyles.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetStyles.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CASzC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC"}
1
+ {"version":3,"file":"WidgetStyles.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetStyles.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CASzC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC"}
@@ -0,0 +1,64 @@
1
+ import { Translator } from './i18n.js';
2
+ /** What the symbol info panel shows, formatted by the widget. */
3
+ export interface SymbolInfoView {
4
+ symbol: string;
5
+ description?: string;
6
+ /** Exchange, type, currency, joined. */
7
+ meta?: string;
8
+ price?: string;
9
+ change?: {
10
+ text: string;
11
+ up: boolean;
12
+ };
13
+ status: {
14
+ state: 'open' | 'closed' | 'always';
15
+ text: string;
16
+ };
17
+ stats: {
18
+ label: string;
19
+ value: string;
20
+ }[];
21
+ }
22
+ export interface SymbolInfoNewsItem {
23
+ title: string;
24
+ url?: string;
25
+ /** Source and age, joined. */
26
+ meta: string;
27
+ }
28
+ /** The news part: no source, loading, failed, or the headlines (maybe none). */
29
+ export type SymbolInfoNews = {
30
+ kind: 'none';
31
+ } | {
32
+ kind: 'loading';
33
+ } | {
34
+ kind: 'failed';
35
+ } | {
36
+ kind: 'items';
37
+ items: SymbolInfoNewsItem[];
38
+ };
39
+ export interface SymbolInfoCallbacks {
40
+ /** After it opens or closes. */
41
+ onToggle?: (open: boolean) => void;
42
+ }
43
+ /**
44
+ * Symbol info — a floating panel with the symbol's names, price and move,
45
+ * market status, the day's numbers, its hours, and news. It only renders:
46
+ * the widget builds what it shows.
47
+ */
48
+ export declare class WidgetSymbolInfo {
49
+ private readonly t;
50
+ private readonly callbacks;
51
+ private el;
52
+ private bodyEl;
53
+ private newsEl;
54
+ private shown;
55
+ constructor(host: HTMLElement, t?: Translator, callbacks?: SymbolInfoCallbacks);
56
+ isOpen(): boolean;
57
+ toggle(): void;
58
+ open(): void;
59
+ close(): void;
60
+ render(view: SymbolInfoView): void;
61
+ renderNews(news: SymbolInfoNews): void;
62
+ destroy(): void;
63
+ }
64
+ //# sourceMappingURL=WidgetSymbolInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetSymbolInfo.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSymbolInfo.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAE3D,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;IACvC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,gFAAgF;AAChF,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAQzB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAR5B,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAS;gBAGpB,IAAI,EAAE,WAAW,EACA,CAAC,GAAE,UAA0B,EAC7B,SAAS,GAAE,mBAAwB;IA+BtD,MAAM,IAAI,OAAO;IAIjB,MAAM,IAAI,IAAI;IAKd,IAAI,IAAI,IAAI;IAOZ,KAAK,IAAI,IAAI;IAOb,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IA+BlC,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAkCtC,OAAO,IAAI,IAAI;CAGhB"}
@@ -1,13 +1,24 @@
1
+ import { SymbolInfo } from '@tradecanvas/commons';
2
+ import { Translator } from './i18n.js';
1
3
  /**
2
- * Lightweight fuzzy symbol picker. Reuses the command-palette CSS for visual
3
- * consistency. Scoring is a cheap subsequence match — good enough for symbol
4
- * lists in the low thousands without pulling in a fuzzy-search dependency.
4
+ * Symbol picker. Reuses the command-palette CSS for visual consistency.
5
+ *
6
+ * - Without a search function it filters the symbols it was given with a
7
+ * cheap subsequence match, good enough for lists in the low thousands.
8
+ * - With one (a feed's `searchSymbols`) it asks once typing pauses, cancels a
9
+ * query a newer one replaced, and lists names and exchanges.
5
10
  */
6
11
  export interface SymbolSearchCallbacks {
7
12
  onPick: (symbol: string) => void;
8
13
  onClose: () => void;
9
14
  }
15
+ /** Symbols matching a query, best first; aborted when a newer query replaces it. */
16
+ export type SymbolSearchFn = (query: string, signal: AbortSignal) => Promise<SymbolInfo[]>;
17
+ /** How long typing must pause before a search function is asked. */
18
+ export declare const SYMBOL_SEARCH_DEBOUNCE_MS = 150;
10
19
  export declare class WidgetSymbolSearch {
20
+ private readonly host;
21
+ private readonly t;
11
22
  private backdrop;
12
23
  private modal;
13
24
  private input;
@@ -20,12 +31,24 @@ export declare class WidgetSymbolSearch {
20
31
  private boundKeydown;
21
32
  /** One-shot pick override — when set, this open() routes picks here instead. */
22
33
  private pickOverride;
23
- constructor(callbacks: SymbolSearchCallbacks);
24
- open(symbols: string[], current: string, onPick?: (symbol: string) => void): void;
34
+ private searchFn;
35
+ private searchTimer;
36
+ private searchAbort;
37
+ private status;
38
+ /** Enter came before the results for what was typed: take the top one when they land. */
39
+ private pickOnResults;
40
+ /** Where the overlay mounts (the widget's portal: themed, and inside it when fullscreen). */
41
+ constructor(callbacks: SymbolSearchCallbacks, host?: () => HTMLElement, t?: Translator);
42
+ open(symbols: string[], current: string, onPick?: (symbol: string) => void, search?: SymbolSearchFn): void;
25
43
  close(): void;
26
44
  isOpen(): boolean;
27
45
  destroy(): void;
28
46
  private filter;
47
+ private scheduleSearch;
48
+ /** Run the search the pause would have started, now. */
49
+ private searchNow;
50
+ private runSearch;
51
+ private cancelSearch;
29
52
  private renderList;
30
53
  private updateSelection;
31
54
  private pick;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetSymbolSearch.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSymbolSearch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAOD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,YAAY,CAA6B;IACjD,gFAAgF;IAChF,OAAO,CAAC,YAAY,CAA2C;gBAEnD,SAAS,EAAE,qBAAqB;IAK5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAwDjF,KAAK,IAAI,IAAI;IAYb,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,UAAU;IA0ClB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,aAAa;CA0BtB"}
1
+ {"version":3,"file":"WidgetSymbolSearch.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSymbolSearch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC3D;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,oFAAoF;AACpF,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAE3F,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAU7C,qBAAa,kBAAkB;IAuB3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,CAAC;IAvBpB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,YAAY,CAA6B;IACjD,gFAAgF;IAChF,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,WAAW,CAA8C;IACjE,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,MAAM,CAA2C;IACzD,yFAAyF;IACzF,OAAO,CAAC,aAAa,CAAS;IAE9B,6FAA6F;gBAE3F,SAAS,EAAE,qBAAqB,EACf,IAAI,GAAE,MAAM,WAAiC,EAC7C,CAAC,GAAE,UAA0B;IAMhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI;IA2D1G,KAAK,IAAI,IAAI;IAeb,MAAM,IAAI,OAAO;IAIjB,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,MAAM;IAqBd,OAAO,CAAC,cAAc;IAQtB,wDAAwD;IACxD,OAAO,CAAC,SAAS;YAMH,SAAS;IAgCvB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,UAAU;IA0DlB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,aAAa;CAgCtB"}
@@ -1,5 +1,8 @@
1
- import { ToolbarConfig, ToolbarCallbacks, WidgetState } from './types.js';
1
+ import { TimeFrame } from '@tradecanvas/commons';
2
+ import { ToolbarButtonSpec, ToolbarConfig, ToolbarCallbacks, WidgetState } from './types.js';
2
3
  import { Translator } from './i18n.js';
4
+ /** A host button's name: its label, with the text it shows when that says more ("News: 3"). */
5
+ export declare function setHostButtonName(btn: HTMLButtonElement, label: string): void;
3
6
  export declare class WidgetToolbar {
4
7
  private config;
5
8
  private callbacks;
@@ -7,16 +10,51 @@ export declare class WidgetToolbar {
7
10
  private el;
8
11
  private chartTypeDropdown;
9
12
  private indicatorDropdown;
10
- private tfButtons;
11
- private chipsContainer;
13
+ private tfGroup;
14
+ private tfDropdown;
15
+ private tfFavorites;
16
+ /** Tells this toolbar's element ids apart from another widget's on the page. */
17
+ private readonly uid;
18
+ private tfRendered;
12
19
  private themeBtn;
20
+ /** Indicator templates' names, listed atop the indicators menu. */
21
+ private indicatorTemplates;
22
+ private fullscreenBtn;
23
+ /** Where hosts' own buttons go: after the chart controls, and before the panel buttons. */
24
+ private hostLeft;
25
+ private hostRight;
13
26
  constructor(host: HTMLElement, config: ToolbarConfig, callbacks: ToolbarCallbacks, t: Translator);
14
27
  private build;
28
+ /** A host's own button, on the left or the right of the toolbar. */
29
+ addHostButton(spec: ToolbarButtonSpec): HTMLButtonElement;
30
+ private hostGroup;
31
+ /** Show a panel button (by its role: 'account', 'objects'…) as on or off. */
32
+ setActive(role: string, on: boolean): void;
33
+ /** The layout open now on its button (`null`: none saved yet), with a dot while it has unsaved changes. */
34
+ setLayout(name: string | null, dirty: boolean): void;
35
+ /** Swap the fullscreen button between enter and exit. */
36
+ setFullscreen(on: boolean): void;
15
37
  private chartTypeLabel;
16
38
  private buildChartTypeMenu;
39
+ /** The symbol's name on its button, as a tooltip ("Apple Inc. · NASDAQ"). */
40
+ setSymbolDescription(text: string | null): void;
41
+ /** A new list of timeframes (a custom one added or removed), with its pins. */
42
+ setTimeframes(timeframes: ToolbarConfig['timeframes'], favorites: TimeFrame[]): void;
43
+ /** Re-pin after the user starred or unstarred a timeframe. */
44
+ setTimeframeFavorites(favorites: TimeFrame[]): void;
45
+ private buildTimeframeMenu;
46
+ /** The custom-interval field: Enter or + adds it; text that isn't an interval is marked and kept. */
47
+ private wireCustomTimeframe;
48
+ private renderTimeframes;
49
+ /**
50
+ * The indicator templates to list (names), after one is saved or deleted.
51
+ * `keepFocus`: focus was in the menu (a delete), so it goes to "Save…".
52
+ */
53
+ setIndicatorTemplates(names: readonly string[], keepFocus?: boolean): void;
54
+ /** Templates atop the indicators menu: apply one, delete one, save the chart's. */
55
+ private templatesMenuHtml;
17
56
  private buildIndicatorMenu;
18
57
  update(state: WidgetState): void;
19
- private getActiveIndicatorList;
20
58
  private sep;
21
59
  private spacer;
22
60
  private iconBtn;
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetToolbar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetToolbar.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAmB,MAAM,YAAY,CAAC;AAGhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAkC;gBAEtC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU;IAUhG,OAAO,CAAC,KAAK;IAgHb,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,kBAAkB;IA8B1B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAyDhC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,OAAO;IASf,OAAO,IAAI,IAAI;CAKhB"}
1
+ {"version":3,"file":"WidgetToolbar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetToolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIlG,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAKlD,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAI7E;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,CAAC,CAAa;IACtB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAAmB;IACtC,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiC;IACrD,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,mEAAmE;IACnE,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,aAAa,CAAkC;IACvD,2FAA2F;IAC3F,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,SAAS,CAA+B;gBAEpC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU;IAUhG,OAAO,CAAC,KAAK;IAwJb,oEAAoE;IACpE,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,iBAAiB;IAsBzD,OAAO,CAAC,SAAS;IAMjB,6EAA6E;IAC7E,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI;IAO1C,2GAA2G;IAC3G,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAYpD,yDAAyD;IACzD,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAQhC,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,kBAAkB;IAkB1B,6EAA6E;IAC7E,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAO/C,+EAA+E;IAC/E,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI;IAKpF,8DAA8D;IAC9D,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI;IAMnD,OAAO,CAAC,kBAAkB;IAiD1B,qGAAqG;IACrG,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,gBAAgB;IAsBxB;;;OAGG;IACH,qBAAqB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,UAAQ,GAAG,IAAI;IAMxE,mFAAmF;IACnF,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,kBAAkB;IA6C1B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAiChC,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,OAAO;IASf,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,43 @@
1
+ /** Pause before the first tooltip shows. */
2
+ export declare const TOOLTIP_DELAY_MS = 300;
3
+ /** After one hides, the next shows at once within this window (moving along a toolbar). */
4
+ export declare const TOOLTIP_WARM_MS = 500;
5
+ /**
6
+ * Quick, styled tooltips for the widget's controls, in place of the
7
+ * browser's `title` tooltip (a fixed ~1 s wait, unstyled). Any element in
8
+ * the widget with a `title` gets one. While the pointer is on it, its title
9
+ * is lifted into `data-tip` so the browser's own tooltip can't appear, and
10
+ * put back when the pointer leaves — so the title keeps doing its other jobs
11
+ * (accessible description, selectors). Keyboard focus shows the tooltip too,
12
+ * leaving the title in place. `data-tip-side` picks a side.
13
+ */
14
+ export declare class WidgetTooltip {
15
+ private readonly root;
16
+ private readonly el;
17
+ private target;
18
+ private source;
19
+ /** The control just pressed (or keyed): no tooltip on it until the pointer leaves. */
20
+ private pressed;
21
+ private showTimer;
22
+ private watchFrame;
23
+ private warmUntil;
24
+ private readonly observer;
25
+ constructor(root: HTMLElement);
26
+ destroy(): void;
27
+ private readonly onOver;
28
+ private readonly onOut;
29
+ private readonly onPress;
30
+ private readonly onFocus;
31
+ private readonly onBlur;
32
+ private readonly hide;
33
+ private tipTarget;
34
+ private schedule;
35
+ private show;
36
+ /** While shown, follow the control: gone, hidden or disabled takes the tooltip with it. */
37
+ private watch;
38
+ /** Beside the control on its preferred side, flipped and clamped to stay inside the widget. */
39
+ private place;
40
+ private isVisible;
41
+ private clearTimer;
42
+ }
43
+ //# sourceMappingURL=WidgetTooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetTooltip.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetTooltip.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,2FAA2F;AAC3F,eAAO,MAAM,eAAe,MAAM,CAAC;AAQnC;;;;;;;;GAQG;AACH,qBAAa,aAAa;IAWZ,OAAO,CAAC,QAAQ,CAAC,IAAI;IAVjC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAoC;IAClD,sFAAsF;IACtF,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;gBAEf,IAAI,EAAE,WAAW;IA2B9C,OAAO,IAAI,IAAI;IAcf,OAAO,CAAC,QAAQ,CAAC,MAAM,CAOrB;IAEF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAQpB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAYtB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAKtB;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKrB;IAEF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAQnB;IAEF,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,IAAI;IAWZ,2FAA2F;IAC3F,OAAO,CAAC,KAAK;IASb,+FAA+F;IAC/F,OAAO,CAAC,KAAK;IAgCb,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,UAAU;CAKnB"}