@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.
- package/README.md +131 -49
- package/dist/Chart.d.ts +724 -18
- package/dist/Chart.d.ts.map +1 -1
- package/dist/DataManager.d.ts +5 -0
- package/dist/DataManager.d.ts.map +1 -1
- package/dist/HistoryPager.d.ts +58 -0
- package/dist/HistoryPager.d.ts.map +1 -0
- package/dist/LayoutSession-CTZB90NX.cjs +2 -0
- package/dist/LayoutSession-CTZB90NX.cjs.map +1 -0
- package/dist/LayoutSession-CWn3sdbs.js +3967 -0
- package/dist/LayoutSession-CWn3sdbs.js.map +1 -0
- package/dist/PaneManager.d.ts.map +1 -1
- package/dist/ThemeManager.d.ts +5 -1
- package/dist/ThemeManager.d.ts.map +1 -1
- package/dist/chartA11y.d.ts +59 -0
- package/dist/chartA11y.d.ts.map +1 -0
- package/dist/charts/ChartTypeStrategy.d.ts +11 -4
- package/dist/charts/ChartTypeStrategy.d.ts.map +1 -1
- package/dist/grid/ChartGrid.d.ts +7 -1
- package/dist/grid/ChartGrid.d.ts.map +1 -1
- package/dist/i18n-CiQ8EDVs.js +1469 -0
- package/dist/i18n-CiQ8EDVs.js.map +1 -0
- package/dist/i18n-WsLA9SmD.cjs +2 -0
- package/dist/i18n-WsLA9SmD.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +24 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +74 -89
- package/dist/index.js.map +1 -1
- package/dist/indicatorLabel.d.ts +7 -0
- package/dist/indicatorLabel.d.ts.map +1 -0
- package/dist/layout/LayoutManager.d.ts +50 -0
- package/dist/layout/LayoutManager.d.ts.map +1 -1
- package/dist/layout/priceAxisWidth.d.ts +2 -0
- package/dist/layout/priceAxisWidth.d.ts.map +1 -1
- package/dist/regularHours.d.ts +10 -0
- package/dist/regularHours.d.ts.map +1 -0
- package/dist/state/LayoutSession.d.ts +101 -0
- package/dist/state/LayoutSession.d.ts.map +1 -0
- package/dist/state/layoutStorage.d.ts +46 -0
- package/dist/state/layoutStorage.d.ts.map +1 -0
- package/dist/trading/wireExecution.d.ts +7 -3
- package/dist/trading/wireExecution.d.ts.map +1 -1
- package/dist/widget/ChartWidget.d.ts +283 -10
- package/dist/widget/ChartWidget.d.ts.map +1 -1
- package/dist/widget/ChartWidgetGrid.d.ts +166 -0
- package/dist/widget/ChartWidgetGrid.d.ts.map +1 -0
- package/dist/widget/DrawingTemplateStore.d.ts +29 -8
- package/dist/widget/DrawingTemplateStore.d.ts.map +1 -1
- package/dist/widget/WatchlistStore.d.ts +65 -0
- package/dist/widget/WatchlistStore.d.ts.map +1 -0
- package/dist/widget/WidgetAccountPanel.d.ts +72 -0
- package/dist/widget/WidgetAccountPanel.d.ts.map +1 -0
- package/dist/widget/WidgetAlertsPanel.d.ts +50 -3
- package/dist/widget/WidgetAlertsPanel.d.ts.map +1 -1
- package/dist/widget/WidgetBracketBar.d.ts +3 -1
- package/dist/widget/WidgetBracketBar.d.ts.map +1 -1
- package/dist/widget/WidgetChartNav.d.ts +36 -0
- package/dist/widget/WidgetChartNav.d.ts.map +1 -0
- package/dist/widget/WidgetCommandPalette.d.ts +5 -1
- package/dist/widget/WidgetCommandPalette.d.ts.map +1 -1
- package/dist/widget/WidgetContextMenu.d.ts +40 -0
- package/dist/widget/WidgetContextMenu.d.ts.map +1 -0
- package/dist/widget/WidgetDataWindow.d.ts +3 -1
- package/dist/widget/WidgetDataWindow.d.ts.map +1 -1
- package/dist/widget/WidgetDepthLadder.d.ts +3 -1
- package/dist/widget/WidgetDepthLadder.d.ts.map +1 -1
- package/dist/widget/WidgetDrawingSettings.d.ts +108 -0
- package/dist/widget/WidgetDrawingSettings.d.ts.map +1 -0
- package/dist/widget/WidgetDrawingSidebar.d.ts +26 -1
- package/dist/widget/WidgetDrawingSidebar.d.ts.map +1 -1
- package/dist/widget/WidgetDrawingStyle.d.ts +3 -1
- package/dist/widget/WidgetDrawingStyle.d.ts.map +1 -1
- package/dist/widget/WidgetDropdown.d.ts.map +1 -1
- package/dist/widget/WidgetGoToDate.d.ts +46 -0
- package/dist/widget/WidgetGoToDate.d.ts.map +1 -0
- package/dist/widget/WidgetHistoryPill.d.ts +23 -0
- package/dist/widget/WidgetHistoryPill.d.ts.map +1 -0
- package/dist/widget/WidgetHotkeySheet.d.ts +3 -1
- package/dist/widget/WidgetHotkeySheet.d.ts.map +1 -1
- package/dist/widget/WidgetIndicatorLegend.d.ts +98 -0
- package/dist/widget/WidgetIndicatorLegend.d.ts.map +1 -0
- package/dist/widget/WidgetIndicatorSettings.d.ts +62 -7
- package/dist/widget/WidgetIndicatorSettings.d.ts.map +1 -1
- package/dist/widget/WidgetIntervalInput.d.ts +34 -0
- package/dist/widget/WidgetIntervalInput.d.ts.map +1 -0
- package/dist/widget/WidgetLayoutsDialog.d.ts +39 -0
- package/dist/widget/WidgetLayoutsDialog.d.ts.map +1 -0
- package/dist/widget/WidgetLayoutsUI.d.ts +37 -0
- package/dist/widget/WidgetLayoutsUI.d.ts.map +1 -0
- package/dist/widget/WidgetLoadingOverlay.d.ts.map +1 -1
- package/dist/widget/WidgetNamePrompt.d.ts +31 -0
- package/dist/widget/WidgetNamePrompt.d.ts.map +1 -0
- package/dist/widget/WidgetObjectTree.d.ts +21 -3
- package/dist/widget/WidgetObjectTree.d.ts.map +1 -1
- package/dist/widget/WidgetOrderTicket.d.ts +49 -0
- package/dist/widget/WidgetOrderTicket.d.ts.map +1 -0
- package/dist/widget/WidgetReplayBar.d.ts +52 -7
- package/dist/widget/WidgetReplayBar.d.ts.map +1 -1
- package/dist/widget/WidgetSettings.d.ts +26 -2
- package/dist/widget/WidgetSettings.d.ts.map +1 -1
- package/dist/widget/WidgetStatusBar.d.ts +19 -1
- package/dist/widget/WidgetStatusBar.d.ts.map +1 -1
- package/dist/widget/WidgetStyles.d.ts +3 -1
- package/dist/widget/WidgetStyles.d.ts.map +1 -1
- package/dist/widget/WidgetSymbolInfo.d.ts +64 -0
- package/dist/widget/WidgetSymbolInfo.d.ts.map +1 -0
- package/dist/widget/WidgetSymbolSearch.d.ts +28 -5
- package/dist/widget/WidgetSymbolSearch.d.ts.map +1 -1
- package/dist/widget/WidgetToolbar.d.ts +42 -4
- package/dist/widget/WidgetToolbar.d.ts.map +1 -1
- package/dist/widget/WidgetTooltip.d.ts +43 -0
- package/dist/widget/WidgetTooltip.d.ts.map +1 -0
- package/dist/widget/WidgetWatchlist.d.ts +53 -13
- package/dist/widget/WidgetWatchlist.d.ts.map +1 -1
- package/dist/widget/chartMenu.d.ts +40 -0
- package/dist/widget/chartMenu.d.ts.map +1 -0
- package/dist/widget/drawingMenu.d.ts +21 -0
- package/dist/widget/drawingMenu.d.ts.map +1 -0
- package/dist/widget/escapeHtml.d.ts +3 -0
- package/dist/widget/escapeHtml.d.ts.map +1 -0
- package/dist/widget/focusTrap.d.ts +8 -0
- package/dist/widget/focusTrap.d.ts.map +1 -0
- package/dist/widget/i18n.d.ts +20 -63
- package/dist/widget/i18n.d.ts.map +1 -1
- package/dist/widget/iconSet.d.ts +26 -0
- package/dist/widget/iconSet.d.ts.map +1 -0
- package/dist/widget/icons.d.ts +5 -0
- package/dist/widget/icons.d.ts.map +1 -1
- package/dist/widget/index.cjs +2145 -405
- package/dist/widget/index.cjs.map +1 -1
- package/dist/widget/index.d.ts +18 -1
- package/dist/widget/index.d.ts.map +1 -1
- package/dist/widget/index.js +7376 -1274
- package/dist/widget/index.js.map +1 -1
- package/dist/widget/indicatorTemplates.d.ts +24 -0
- package/dist/widget/indicatorTemplates.d.ts.map +1 -0
- package/dist/widget/keyTarget.d.ts +11 -0
- package/dist/widget/keyTarget.d.ts.map +1 -0
- package/dist/widget/legendValues.d.ts +19 -0
- package/dist/widget/legendValues.d.ts.map +1 -0
- package/dist/widget/locales/ar.d.ts +4 -0
- package/dist/widget/locales/ar.d.ts.map +1 -0
- package/dist/widget/locales/de.d.ts +4 -0
- package/dist/widget/locales/de.d.ts.map +1 -0
- package/dist/widget/locales/en.d.ts +722 -0
- package/dist/widget/locales/en.d.ts.map +1 -0
- package/dist/widget/locales/es.d.ts +4 -0
- package/dist/widget/locales/es.d.ts.map +1 -0
- package/dist/widget/locales/fr.d.ts +4 -0
- package/dist/widget/locales/fr.d.ts.map +1 -0
- package/dist/widget/locales/he.d.ts +4 -0
- package/dist/widget/locales/he.d.ts.map +1 -0
- package/dist/widget/locales/id.d.ts +4 -0
- package/dist/widget/locales/id.d.ts.map +1 -0
- package/dist/widget/locales/index.cjs +2 -0
- package/dist/widget/locales/index.cjs.map +1 -0
- package/dist/widget/locales/index.d.ts +33 -0
- package/dist/widget/locales/index.d.ts.map +1 -0
- package/dist/widget/locales/index.js +10089 -0
- package/dist/widget/locales/index.js.map +1 -0
- package/dist/widget/locales/ja.d.ts +4 -0
- package/dist/widget/locales/ja.d.ts.map +1 -0
- package/dist/widget/locales/ko.d.ts +4 -0
- package/dist/widget/locales/ko.d.ts.map +1 -0
- package/dist/widget/locales/pt.d.ts +4 -0
- package/dist/widget/locales/pt.d.ts.map +1 -0
- package/dist/widget/locales/ru.d.ts +4 -0
- package/dist/widget/locales/ru.d.ts.map +1 -0
- package/dist/widget/locales/th.d.ts +4 -0
- package/dist/widget/locales/th.d.ts.map +1 -0
- package/dist/widget/locales/tr.d.ts +4 -0
- package/dist/widget/locales/tr.d.ts.map +1 -0
- package/dist/widget/locales/vi.d.ts +4 -0
- package/dist/widget/locales/vi.d.ts.map +1 -0
- package/dist/widget/locales/zh.d.ts +4 -0
- package/dist/widget/locales/zh.d.ts.map +1 -0
- package/dist/widget/locales/zhHant.d.ts +4 -0
- package/dist/widget/locales/zhHant.d.ts.map +1 -0
- package/dist/widget/orderTicket.d.ts +27 -0
- package/dist/widget/orderTicket.d.ts.map +1 -0
- package/dist/widget/settingsControls.d.ts +24 -0
- package/dist/widget/settingsControls.d.ts.map +1 -0
- package/dist/widget/types.d.ts +215 -13
- package/dist/widget/types.d.ts.map +1 -1
- package/dist/widget/widgetConfig.d.ts +1 -5
- package/dist/widget/widgetConfig.d.ts.map +1 -1
- package/dist/widget/widgetLayout.d.ts +22 -0
- package/dist/widget/widgetLayout.d.ts.map +1 -0
- package/dist/widget/widgetLocales.d.ts +17 -0
- package/dist/widget/widgetLocales.d.ts.map +1 -0
- package/dist/widget/widgetTimeframes.d.ts +28 -0
- package/dist/widget/widgetTimeframes.d.ts.map +1 -0
- package/dist/widget/widgetTimezones.d.ts +32 -0
- package/dist/widget/widgetTimezones.d.ts.map +1 -0
- package/dist/widget/widgetUI.d.ts +126 -0
- package/dist/widget/widgetUI.d.ts.map +1 -0
- package/package.json +8 -3
- package/dist/DragDropImporter-BazeSQPD.cjs +0 -2
- package/dist/DragDropImporter-BazeSQPD.cjs.map +0 -1
- package/dist/DragDropImporter-cURSpfUb.js +0 -1883
- package/dist/DragDropImporter-cURSpfUb.js.map +0 -1
- package/dist/charts/IndicatorPriceRange.d.ts +0 -20
- package/dist/charts/IndicatorPriceRange.d.ts.map +0 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { WatchlistList } from './WatchlistStore.js';
|
|
1
2
|
/**
|
|
2
|
-
* Watchlist sidebar
|
|
3
|
-
*
|
|
3
|
+
* Watchlist sidebar: the shown list's symbols, each with last price, % change
|
|
4
|
+
* and a mini sparkline. A menu switches, creates, renames and deletes lists;
|
|
5
|
+
* rows are added, removed and reordered (drag, or Alt+↑/↓). It only renders
|
|
6
|
+
* and reports: the widget keeps the lists (see WatchlistStore).
|
|
4
7
|
*
|
|
5
|
-
* The widget tracks the
|
|
6
|
-
*
|
|
7
|
-
* `setEntry(symbol, …)` so the row reflects whatever the app already has.
|
|
8
|
+
* The widget tracks the chart's symbol from the live stream, and fills the
|
|
9
|
+
* other rows from a quote source or what the host pushes (`setEntry`).
|
|
8
10
|
*/
|
|
9
11
|
export interface WatchlistEntry {
|
|
10
12
|
symbol: string;
|
|
@@ -16,27 +18,65 @@ export interface WatchlistEntry {
|
|
|
16
18
|
}
|
|
17
19
|
export interface WatchlistCallbacks {
|
|
18
20
|
onSelect: (symbol: string) => void;
|
|
21
|
+
/** "+": add a symbol to the shown list (the widget opens its symbol search). */
|
|
22
|
+
onAdd?: () => void;
|
|
23
|
+
onRemove?: (symbol: string) => void;
|
|
24
|
+
/** Move a symbol to `index` in the shown list. */
|
|
25
|
+
onMove?: (symbol: string, index: number) => void;
|
|
26
|
+
onPickList?: (id: string) => void;
|
|
27
|
+
onCreateList?: (name: string) => void;
|
|
28
|
+
onRenameList?: (id: string, name: string) => void;
|
|
29
|
+
onDeleteList?: (id: string) => void;
|
|
30
|
+
}
|
|
31
|
+
export interface WatchlistLabels {
|
|
32
|
+
title: string;
|
|
33
|
+
lists: string;
|
|
34
|
+
newList: string;
|
|
35
|
+
rename: string;
|
|
36
|
+
deleteList: string;
|
|
37
|
+
/** `{name}`: the list's name. */
|
|
38
|
+
confirmDelete: string;
|
|
39
|
+
add: string;
|
|
40
|
+
/** `{symbol}`. */
|
|
41
|
+
remove: string;
|
|
42
|
+
empty: string;
|
|
43
|
+
listName: string;
|
|
19
44
|
}
|
|
20
45
|
export declare class WidgetWatchlist {
|
|
46
|
+
private readonly callbacks;
|
|
47
|
+
private readonly labels;
|
|
21
48
|
private el;
|
|
49
|
+
private headerEl;
|
|
50
|
+
private nameBtn;
|
|
51
|
+
private menuEl;
|
|
22
52
|
private listEl;
|
|
23
53
|
private rowMap;
|
|
24
54
|
private entries;
|
|
55
|
+
private lists;
|
|
56
|
+
private activeList;
|
|
25
57
|
private active;
|
|
26
|
-
private callbacks;
|
|
27
58
|
private locale;
|
|
28
|
-
|
|
59
|
+
private dragging;
|
|
60
|
+
private readonly onOutside;
|
|
61
|
+
constructor(host: HTMLElement, callbacks: WatchlistCallbacks, labels: WatchlistLabels);
|
|
62
|
+
/** The lists, and which one shows. Rows are diffed so prices stay. */
|
|
63
|
+
setLists(lists: WatchlistList[], activeId: string): void;
|
|
29
64
|
/** Set the BCP 47 locale used for price/percent formatting. */
|
|
30
65
|
setLocale(locale: string | undefined): void;
|
|
31
|
-
/**
|
|
32
|
-
setSymbols(symbols: string[]): void;
|
|
66
|
+
/** The chart's symbol, marked in the list. */
|
|
33
67
|
setActive(symbol: string): void;
|
|
34
|
-
/**
|
|
35
|
-
* the active symbol. Apps can call it for the rest. */
|
|
68
|
+
/** A row's price, move and sparkline. Kept for symbols not shown yet. */
|
|
36
69
|
setEntry(symbol: string, patch: Partial<WatchlistEntry>): void;
|
|
37
70
|
destroy(): void;
|
|
38
|
-
private
|
|
39
|
-
private
|
|
71
|
+
private shownList;
|
|
72
|
+
private renderRows;
|
|
73
|
+
private makeRow;
|
|
74
|
+
private onRowKey;
|
|
40
75
|
private renderRow;
|
|
76
|
+
private openMenu;
|
|
77
|
+
private closeMenu;
|
|
78
|
+
private renderMenu;
|
|
79
|
+
/** A name typed in place of the list's: Enter keeps it, Escape or leaving drops it. */
|
|
80
|
+
private editName;
|
|
41
81
|
}
|
|
42
82
|
//# sourceMappingURL=WidgetWatchlist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetWatchlist.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetWatchlist.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"WidgetWatchlist.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetWatchlist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ChartContextArea, PriceScaleMode } from '@tradecanvas/commons';
|
|
2
|
+
import { ContextMenuEntry } from './WidgetContextMenu.js';
|
|
3
|
+
import { Translator } from './i18n.js';
|
|
4
|
+
/** What a menu on the chart (a right-click, or the "+" by the price axis) can do. */
|
|
5
|
+
export type ChartMenuAction = 'alert' | 'buyLimit' | 'buyStop' | 'sellLimit' | 'sellStop' | 'orderTicket' | 'horizontalLine' | 'resetView' | 'hideDrawings' | 'showDrawings' | 'removeDrawings' | 'settings' | 'exportData' | 'autoScale' | 'logScale' | 'percentScale' | 'invertScale' | 'goToDate' | 'paneLog' | 'paneInvert' | 'panePercent';
|
|
6
|
+
/** What the widget can do here, and how the chart is set now. */
|
|
7
|
+
export interface ChartMenuContext {
|
|
8
|
+
/** The price at the click (the price pane, the price axis, the "+"). */
|
|
9
|
+
price?: number;
|
|
10
|
+
/** The latest price, to tell a limit from a stop. */
|
|
11
|
+
lastPrice: number | null;
|
|
12
|
+
formatPrice: (price: number) => string;
|
|
13
|
+
canAlert: boolean;
|
|
14
|
+
canTrade: boolean;
|
|
15
|
+
/** An order ticket to open (the account panel is on). */
|
|
16
|
+
canOrderTicket?: boolean;
|
|
17
|
+
canDraw: boolean;
|
|
18
|
+
hasDrawings: boolean;
|
|
19
|
+
drawingsHidden: boolean;
|
|
20
|
+
canGoToDate: boolean;
|
|
21
|
+
/** A download of the bars and indicator lines (`features.dataExport`). */
|
|
22
|
+
canExport?: boolean;
|
|
23
|
+
autoScale: boolean;
|
|
24
|
+
scaleMode: PriceScaleMode;
|
|
25
|
+
inverted: boolean;
|
|
26
|
+
/** For a pane's menu: its scale switches. */
|
|
27
|
+
pane?: {
|
|
28
|
+
log: boolean;
|
|
29
|
+
invert: boolean;
|
|
30
|
+
percent: boolean;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* What to do at a price: an alert, a buy and a sell (a limit on the side of
|
|
35
|
+
* the market it would wait on, else a stop), a horizontal line.
|
|
36
|
+
*/
|
|
37
|
+
export declare function priceEntries(ctx: ChartMenuContext, t: Translator): ContextMenuEntry[];
|
|
38
|
+
/** The right-click menu for where it landed. */
|
|
39
|
+
export declare function chartMenuEntries(area: ChartContextArea, ctx: ChartMenuContext, t: Translator): ContextMenuEntry[];
|
|
40
|
+
//# sourceMappingURL=chartMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartMenu.d.ts","sourceRoot":"","sources":["../../src/widget/chartMenu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAElD,qFAAqF;AACrF,MAAM,MAAM,eAAe,GACvB,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,gBAAgB,GAC9F,WAAW,GAAG,cAAc,GAAG,cAAc,GAAG,gBAAgB,GAAG,UAAU,GAAG,YAAY,GAC5F,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,aAAa,GACzD,UAAU,GACV,SAAS,GACT,YAAY,GACZ,aAAa,CAAC;AAElB,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,IAAI,CAAC,EAAE;QAAE,GAAG,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAoBrF;AAED,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAgDjH"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ContextMenuEntry } from './WidgetContextMenu.js';
|
|
2
|
+
import { Translator } from './i18n.js';
|
|
3
|
+
/** What a right-clicked drawing's menu can do. */
|
|
4
|
+
export type DrawingMenuAction = 'settings' | 'alert' | 'front' | 'forward' | 'backward' | 'back' | 'group' | 'ungroup' | 'lock' | 'unlock' | 'hide' | 'duplicate' | 'delete';
|
|
5
|
+
/** The right-clicked drawing and the selection it is part of. */
|
|
6
|
+
export interface DrawingMenuTarget {
|
|
7
|
+
/** Selected drawings: the right-clicked one, its group, or a selection it was part of. */
|
|
8
|
+
selected: readonly {
|
|
9
|
+
id: string;
|
|
10
|
+
locked: boolean;
|
|
11
|
+
groupId: string | null;
|
|
12
|
+
}[];
|
|
13
|
+
canConfigure: boolean;
|
|
14
|
+
canAlert: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The menu's entries: settings and alert for one drawing, order, grouping,
|
|
18
|
+
* then lock, hide, duplicate and delete for the whole selection.
|
|
19
|
+
*/
|
|
20
|
+
export declare function drawingMenuEntries(target: DrawingMenuTarget, t: Translator): ContextMenuEntry[];
|
|
21
|
+
//# sourceMappingURL=drawingMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawingMenu.d.ts","sourceRoot":"","sources":["../../src/widget/drawingMenu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,kDAAkD;AAClD,MAAM,MAAM,iBAAiB,GACzB,UAAU,GAAG,OAAO,GACpB,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GACzC,OAAO,GAAG,SAAS,GACnB,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExD,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,0FAA0F;IAC1F,QAAQ,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAC7E,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,EAAE,UAAU,GAAG,gBAAgB,EAAE,CA8B/F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escapeHtml.d.ts","sourceRoot":"","sources":["../../src/widget/escapeHtml.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** What Tab can land on inside a dialog. */
|
|
2
|
+
export declare const FOCUSABLE = "button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])";
|
|
3
|
+
/**
|
|
4
|
+
* Keep Tab inside `container` (a modal dialog): from its last control Tab
|
|
5
|
+
* goes to its first, and Shift+Tab the other way. Call from its keydown.
|
|
6
|
+
*/
|
|
7
|
+
export declare function keepTabInside(e: KeyboardEvent, container: HTMLElement): void;
|
|
8
|
+
//# sourceMappingURL=focusTrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"focusTrap.d.ts","sourceRoot":"","sources":["../../src/widget/focusTrap.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,eAAO,MAAM,SAAS,uIAAqI,CAAC;AAE5J;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,CAe5E"}
|
package/dist/widget/i18n.d.ts
CHANGED
|
@@ -1,70 +1,27 @@
|
|
|
1
|
+
import { EN_MESSAGES, MessageKey, WidgetMessages } from './locales/en.js';
|
|
2
|
+
import { VI_MESSAGES } from './locales/vi.js';
|
|
3
|
+
export { EN_MESSAGES, VI_MESSAGES };
|
|
4
|
+
export type { MessageKey, WidgetMessages };
|
|
5
|
+
/** The locales registered so far: English, Vietnamese and any added with `registerWidgetLocale`. */
|
|
6
|
+
export declare const BUILTIN_LOCALES: Readonly<Record<string, Partial<WidgetMessages>>>;
|
|
1
7
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* display names, drawing-tool names, timezone/locale option labels) — those
|
|
6
|
-
* stay in English for now; see README "Widget i18n" for the current
|
|
7
|
-
* coverage and how to extend it via `messages`.
|
|
8
|
+
* Make a language available to `locale` on every ChartWidget, e.g.
|
|
9
|
+
* `registerWidgetLocale('ja', ja)` with `ja` from
|
|
10
|
+
* `@tradecanvas/chart/widget/locales`. Codes match case-insensitively.
|
|
8
11
|
*/
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
readonly 'toolbar.indicators.popular': "Popular";
|
|
13
|
-
readonly 'toolbar.indicators.all': "All";
|
|
14
|
-
readonly 'indicatorType.overlay': "overlay";
|
|
15
|
-
readonly 'indicatorType.panel': "panel";
|
|
16
|
-
readonly 'toolbar.replay': "Bar replay";
|
|
17
|
-
readonly 'toolbar.longBracket': "Long bracket";
|
|
18
|
-
readonly 'toolbar.shortBracket': "Short bracket";
|
|
19
|
-
readonly 'toolbar.depthLadder': "Depth ladder";
|
|
20
|
-
readonly 'toolbar.objects': "Objects";
|
|
21
|
-
readonly 'toolbar.priceAlerts': "Price alerts";
|
|
22
|
-
readonly 'toolbar.screenshot': "Screenshot";
|
|
23
|
-
readonly 'toolbar.settings': "Chart Settings";
|
|
24
|
-
readonly 'toolbar.toggleTheme': "Toggle theme";
|
|
25
|
-
readonly 'chartType.candlestick': "Candlestick";
|
|
26
|
-
readonly 'chartType.line': "Line";
|
|
27
|
-
readonly 'chartType.area': "Area";
|
|
28
|
-
readonly 'chartType.bar': "Bar";
|
|
29
|
-
readonly 'chartType.heikinAshi': "Heikin-Ashi";
|
|
30
|
-
readonly 'chartType.hollowCandle': "Hollow Candle";
|
|
31
|
-
readonly 'chartType.baseline': "Baseline";
|
|
32
|
-
readonly 'chartType.volumeCandles': "Volume Candles";
|
|
33
|
-
readonly 'chartType.equivolume': "Equivolume";
|
|
34
|
-
readonly 'chartType.hlcArea': "HLC Area";
|
|
35
|
-
readonly 'chartType.stepLine': "Step Line";
|
|
36
|
-
readonly 'chartType.lineWithMarkers': "Line + Markers";
|
|
37
|
-
readonly 'watchlist.title': "Watchlist";
|
|
38
|
-
readonly 'status.connecting': "Connecting...";
|
|
39
|
-
readonly 'status.live': "Live";
|
|
40
|
-
readonly 'status.connectionFailed': "Connection failed";
|
|
41
|
-
readonly 'status.loading': "Loading chart...";
|
|
42
|
-
readonly 'settings.title': "Chart Settings";
|
|
43
|
-
readonly 'settings.tab.style': "style";
|
|
44
|
-
readonly 'settings.tab.display': "display";
|
|
45
|
-
readonly 'settings.tab.scale': "scale";
|
|
46
|
-
readonly 'settings.resetToDefaults': "Reset to defaults";
|
|
47
|
-
readonly 'settings.done': "Done";
|
|
48
|
-
readonly 'settings.section.candleColors': "Candle Colors";
|
|
49
|
-
readonly 'settings.section.background': "Background";
|
|
50
|
-
readonly 'hotkeys.title': "Keyboard shortcuts";
|
|
51
|
-
readonly 'hotkeys.close': "Close";
|
|
52
|
-
readonly 'hotkeys.gotIt': "Got it";
|
|
53
|
-
readonly 'hotkeys.group.searchNavigation': "Search & navigation";
|
|
54
|
-
readonly 'hotkeys.group.chartManipulation': "Chart manipulation";
|
|
55
|
-
readonly 'hotkeys.group.touch': "Touch (mobile / tablet)";
|
|
56
|
-
readonly 'hotkeys.group.keyboard': "Keyboard";
|
|
57
|
-
readonly 'hotkeys.group.drawing': "Drawing";
|
|
58
|
-
};
|
|
59
|
-
export declare const VI_MESSAGES: Partial<Record<MessageKey, string>>;
|
|
60
|
-
export declare const BUILTIN_LOCALES: Record<string, Partial<Record<MessageKey, string>>>;
|
|
12
|
+
export declare function registerWidgetLocale(code: string, messages: Partial<WidgetMessages>): void;
|
|
13
|
+
/** The table for `locale`, if one is registered for it or its language. */
|
|
14
|
+
export declare function findWidgetLocale(locale: string): Partial<WidgetMessages> | undefined;
|
|
61
15
|
/**
|
|
62
16
|
* Resolve the widget's message table: built-in English as the base, the
|
|
63
|
-
*
|
|
64
|
-
* English
|
|
65
|
-
* `messages` overrides layered last so they always win.
|
|
17
|
+
* table for `locale` (or its language) on top, falling back key by key to
|
|
18
|
+
* English, then the host's `messages` last so they always win.
|
|
66
19
|
*/
|
|
67
|
-
export declare function resolveMessages(locale: string | undefined, overrides: Partial<
|
|
20
|
+
export declare function resolveMessages(locale: string | undefined, overrides: Partial<WidgetMessages> | undefined): WidgetMessages;
|
|
68
21
|
export type Translator = (key: MessageKey) => string;
|
|
69
|
-
export declare function createTranslator(messages:
|
|
22
|
+
export declare function createTranslator(messages: WidgetMessages): Translator;
|
|
23
|
+
/** English strings, for components used without a widget. */
|
|
24
|
+
export declare const EN_TRANSLATOR: Translator;
|
|
25
|
+
/** Fill `{name}` placeholders: `fill('Comparing {symbol}', { symbol: 'ETH' })`. */
|
|
26
|
+
export declare function fill(template: string, values: Record<string, string | number>): string;
|
|
70
27
|
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/widget/i18n.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/widget/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACpC,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAO3C,oGAAoG;AACpG,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAQ5E,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAE1F;AAYD,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,CAMpF;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GAC7C,cAAc,CAahB;AAED,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,UAAU,KAAK,MAAM,CAAC;AAErD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAErE;AAED,6DAA6D;AAC7D,eAAO,MAAM,aAAa,EAAE,UAA0C,CAAC;AAEvE,mFAAmF;AACnF,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAEtF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The TradeCanvas icon set, as in the "TradeCanvas Icons" Figma file: a 24 px
|
|
3
|
+
* grid with 2 px padding, 1.75 px strokes with round caps and joins. Drawing
|
|
4
|
+
* tools mark their anchor points (where you click to draw) with filled dots.
|
|
5
|
+
*/
|
|
6
|
+
export interface IconDef {
|
|
7
|
+
/** Stroked path data. */
|
|
8
|
+
d?: string;
|
|
9
|
+
/** Dashed stroke, for guides. */
|
|
10
|
+
dash?: string;
|
|
11
|
+
/** Solid shapes, such as filled candle bodies. */
|
|
12
|
+
fills?: readonly string[];
|
|
13
|
+
/** An area filled at 22%. */
|
|
14
|
+
soft?: string;
|
|
15
|
+
/** Filled dots: [cx, cy, r = 1.75]. */
|
|
16
|
+
dots?: readonly (readonly number[])[];
|
|
17
|
+
}
|
|
18
|
+
/** Toolbar, sidebar and panel glyphs. */
|
|
19
|
+
export declare const UI_ICONS: Readonly<Record<string, IconDef>>;
|
|
20
|
+
/** One per drawing tool, keyed by tool type. */
|
|
21
|
+
export declare const DRAWING_TOOL_ICONS: Readonly<Record<string, IconDef>>;
|
|
22
|
+
/** One per chart type, keyed by chart type. */
|
|
23
|
+
export declare const CHART_TYPE_ICONS: Readonly<Record<string, IconDef>>;
|
|
24
|
+
/** The icon as an inline SVG string at `size` px, coloured by `currentColor`. */
|
|
25
|
+
export declare function iconSvg(icon: IconDef, size: number): string;
|
|
26
|
+
//# sourceMappingURL=iconSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconSet.d.ts","sourceRoot":"","sources":["../../src/widget/iconSet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,yBAAyB;IACzB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;CACvC;AAED,yCAAyC;AACzC,eAAO,MAAM,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyDtD,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAsEhE,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmB9D,CAAC;AAoBF,iFAAiF;AACjF,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3D"}
|
package/dist/widget/icons.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
+
/** An interface icon (toolbar, sidebar, panels) as inline SVG; '' for an unknown name. */
|
|
1
2
|
export declare function createIcon(name: string, size?: number): string;
|
|
3
|
+
/** A drawing tool's own icon; a pen for a tool without one (e.g. from a plugin). */
|
|
4
|
+
export declare function createToolIcon(tool: string, size?: number): string;
|
|
5
|
+
/** A chart type's icon; the generic chart glyph for a type without one. */
|
|
6
|
+
export declare function createChartTypeIcon(type: string, size?: number): string;
|
|
2
7
|
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/widget/icons.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/widget/icons.ts"],"names":[],"mappings":"AAKA,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CAG1D;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CAE9D;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CAEnE"}
|