oakscriptjs 0.9.6 → 0.10.1
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 +1 -1
- package/dist/cjs/array/index.d.ts +9 -23
- package/dist/cjs/array/index.d.ts.map +1 -1
- package/dist/cjs/array/index.js +4 -0
- package/dist/cjs/array/index.js.map +2 -2
- package/dist/cjs/drawing/bar-time.d.ts +24 -0
- package/dist/cjs/drawing/bar-time.d.ts.map +1 -0
- package/dist/cjs/drawing/bar-time.js +47 -0
- package/dist/cjs/drawing/bar-time.js.map +7 -0
- package/dist/cjs/drawing/output.d.ts +32 -0
- package/dist/cjs/drawing/output.d.ts.map +1 -0
- package/dist/cjs/drawing/output.js +184 -0
- package/dist/cjs/drawing/output.js.map +7 -0
- package/dist/cjs/drawing/registry.d.ts +5 -4
- package/dist/cjs/drawing/registry.d.ts.map +1 -1
- package/dist/cjs/drawing/registry.js +11 -2
- package/dist/cjs/drawing/registry.js.map +2 -2
- package/dist/cjs/index.d.ts +7 -3
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +11 -2
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/polyline/index.d.ts +3 -5
- package/dist/cjs/polyline/index.d.ts.map +1 -1
- package/dist/cjs/polyline/index.js +0 -5
- package/dist/cjs/polyline/index.js.map +2 -2
- package/dist/cjs/runtime/index.d.ts +2 -1
- package/dist/cjs/runtime/index.d.ts.map +1 -1
- package/dist/cjs/runtime/index.js +2 -0
- package/dist/cjs/runtime/index.js.map +2 -2
- package/dist/cjs/runtime/input-active.d.ts +27 -0
- package/dist/cjs/runtime/input-active.d.ts.map +1 -0
- package/dist/cjs/runtime/input-active.js +44 -0
- package/dist/cjs/runtime/input-active.js.map +7 -0
- package/dist/cjs/runtime/types.d.ts +51 -2
- package/dist/cjs/runtime/types.d.ts.map +1 -1
- package/dist/cjs/runtime/types.js.map +1 -1
- package/dist/cjs/script/index.d.ts +104 -8
- package/dist/cjs/script/index.d.ts.map +1 -1
- package/dist/cjs/script/index.js +163 -28
- package/dist/cjs/script/index.js.map +3 -3
- package/dist/cjs/str/index.d.ts +9 -3
- package/dist/cjs/str/index.d.ts.map +1 -1
- package/dist/cjs/str/index.js +11 -6
- package/dist/cjs/str/index.js.map +2 -2
- package/dist/cjs/str/numberformat.d.ts +6 -0
- package/dist/cjs/str/numberformat.d.ts.map +1 -1
- package/dist/cjs/str/numberformat.js +9 -1
- package/dist/cjs/str/numberformat.js.map +2 -2
- package/dist/cjs/table/index.d.ts +87 -0
- package/dist/cjs/table/index.d.ts.map +1 -0
- package/dist/cjs/table/index.js +150 -0
- package/dist/cjs/table/index.js.map +7 -0
- package/dist/cjs/text/index.d.ts +17 -2
- package/dist/cjs/text/index.d.ts.map +1 -1
- package/dist/cjs/text/index.js +15 -1
- package/dist/cjs/text/index.js.map +2 -2
- package/dist/cjs/types/index.d.ts +30 -1
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +12 -0
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/types/metadata.d.ts +258 -26
- package/dist/cjs/types/metadata.d.ts.map +1 -1
- package/dist/cjs/types/metadata.js.map +1 -1
- package/dist/esm/array/index.d.ts +9 -23
- package/dist/esm/array/index.d.ts.map +1 -1
- package/dist/esm/array/index.js +10 -22
- package/dist/esm/array/index.js.map +1 -1
- package/dist/esm/drawing/bar-time.d.ts +24 -0
- package/dist/esm/drawing/bar-time.d.ts.map +1 -0
- package/dist/esm/drawing/bar-time.js +44 -0
- package/dist/esm/drawing/bar-time.js.map +1 -0
- package/dist/esm/drawing/output.d.ts +32 -0
- package/dist/esm/drawing/output.d.ts.map +1 -0
- package/dist/esm/drawing/output.js +190 -0
- package/dist/esm/drawing/output.js.map +1 -0
- package/dist/esm/drawing/registry.d.ts +5 -4
- package/dist/esm/drawing/registry.d.ts.map +1 -1
- package/dist/esm/drawing/registry.js +12 -2
- package/dist/esm/drawing/registry.js.map +1 -1
- package/dist/esm/index.d.ts +7 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +8 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/polyline/index.d.ts +3 -5
- package/dist/esm/polyline/index.d.ts.map +1 -1
- package/dist/esm/polyline/index.js +3 -9
- package/dist/esm/polyline/index.js.map +1 -1
- package/dist/esm/runtime/index.d.ts +2 -1
- package/dist/esm/runtime/index.d.ts.map +1 -1
- package/dist/esm/runtime/index.js +1 -0
- package/dist/esm/runtime/index.js.map +1 -1
- package/dist/esm/runtime/input-active.d.ts +27 -0
- package/dist/esm/runtime/input-active.d.ts.map +1 -0
- package/dist/esm/runtime/input-active.js +54 -0
- package/dist/esm/runtime/input-active.js.map +1 -0
- package/dist/esm/runtime/types.d.ts +51 -2
- package/dist/esm/runtime/types.d.ts.map +1 -1
- package/dist/esm/script/index.d.ts +104 -8
- package/dist/esm/script/index.d.ts.map +1 -1
- package/dist/esm/script/index.js +194 -24
- package/dist/esm/script/index.js.map +1 -1
- package/dist/esm/str/index.d.ts +9 -3
- package/dist/esm/str/index.d.ts.map +1 -1
- package/dist/esm/str/index.js +25 -10
- package/dist/esm/str/index.js.map +1 -1
- package/dist/esm/str/numberformat.d.ts +6 -0
- package/dist/esm/str/numberformat.d.ts.map +1 -1
- package/dist/esm/str/numberformat.js +12 -0
- package/dist/esm/str/numberformat.js.map +1 -1
- package/dist/esm/table/index.d.ts +87 -0
- package/dist/esm/table/index.d.ts.map +1 -0
- package/dist/esm/table/index.js +169 -0
- package/dist/esm/table/index.js.map +1 -0
- package/dist/esm/text/index.d.ts +17 -2
- package/dist/esm/text/index.d.ts.map +1 -1
- package/dist/esm/text/index.js +17 -2
- package/dist/esm/text/index.js.map +1 -1
- package/dist/esm/types/index.d.ts +30 -1
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/esm/types/index.js +14 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/metadata.d.ts +258 -26
- package/dist/esm/types/metadata.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/array/index.ts +12 -23
- package/src/drawing/bar-time.ts +42 -0
- package/src/drawing/output.ts +214 -0
- package/src/drawing/registry.ts +16 -6
- package/src/index.ts +11 -3
- package/src/polyline/index.ts +3 -12
- package/src/runtime/index.ts +3 -0
- package/src/runtime/input-active.ts +50 -0
- package/src/runtime/types.ts +48 -2
- package/src/script/index.ts +301 -30
- package/src/str/index.ts +23 -10
- package/src/str/numberformat.ts +13 -0
- package/src/table/index.ts +221 -0
- package/src/text/index.ts +18 -2
- package/src/types/index.ts +32 -1
- package/src/types/metadata.ts +325 -26
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Table namespace
|
|
3
|
+
* Functions for creating and filling table drawing objects.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* A table is drawn at a fixed position of the pane (`position.*`), not at a bar. Tables have no getters in
|
|
7
|
+
* PineScript; the script API returns the live tables in `result.tables`.
|
|
8
|
+
*
|
|
9
|
+
* PineScript rules:
|
|
10
|
+
* - `table.cell` defines a cell: the arguments it does not give get their default, a previous definition of the
|
|
11
|
+
* cell is replaced
|
|
12
|
+
* - `table.cell_set_*` changes one property of a cell (a cell that was not defined is created)
|
|
13
|
+
* - a column or row outside the table is a runtime error
|
|
14
|
+
* - a deleted table is `na`: its functions do nothing
|
|
15
|
+
*
|
|
16
|
+
* @version 6
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { all as allDrawings, isDeleted, register, remove } from '../drawing/registry.js';
|
|
20
|
+
import type { Table, TableCell, color } from '../types/index.js';
|
|
21
|
+
|
|
22
|
+
type TablePosition = Table['position'];
|
|
23
|
+
type HAlign = 'left' | 'center' | 'right';
|
|
24
|
+
type VAlign = 'top' | 'center' | 'bottom';
|
|
25
|
+
type FontFamily = 'default' | 'monospace';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Creates a new table (PineScript `table.new`).
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const t = table.new(position.top_right, 2, 3, '#131722', '#787B86', 1);
|
|
33
|
+
* table.cell(t, 0, 0, 'RSI', 0, 0, '#FFFFFF');
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export function new_table(
|
|
37
|
+
position: TablePosition,
|
|
38
|
+
columns: number,
|
|
39
|
+
rows: number,
|
|
40
|
+
bgcolor?: color,
|
|
41
|
+
frame_color?: color,
|
|
42
|
+
frame_width?: number,
|
|
43
|
+
border_color?: color,
|
|
44
|
+
border_width?: number,
|
|
45
|
+
force_overlay?: boolean
|
|
46
|
+
): Table {
|
|
47
|
+
return register('table', {
|
|
48
|
+
position,
|
|
49
|
+
columns,
|
|
50
|
+
rows,
|
|
51
|
+
bgcolor,
|
|
52
|
+
frame_color,
|
|
53
|
+
frame_width,
|
|
54
|
+
border_color,
|
|
55
|
+
border_width,
|
|
56
|
+
force_overlay: force_overlay ?? false,
|
|
57
|
+
cells: new Map(),
|
|
58
|
+
merges: [],
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function checkCell(caller: string, id: Table, column: number, row: number): void {
|
|
63
|
+
if (!(column >= 0 && column < id.columns && row >= 0 && row < id.rows)) {
|
|
64
|
+
throw new RangeError(
|
|
65
|
+
`${caller}: column ${column}, row ${row} is outside the table (${id.columns} columns, ${id.rows} rows).`
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const key = (column: number, row: number): string => `${column},${row}`;
|
|
71
|
+
|
|
72
|
+
/** The cell at column / row, created when it was not defined. */
|
|
73
|
+
function cellOf(caller: string, id: Table, column: number, row: number): TableCell {
|
|
74
|
+
checkCell(caller, id, column, row);
|
|
75
|
+
const cells = (id.cells ??= new Map());
|
|
76
|
+
let cell = cells.get(key(column, row));
|
|
77
|
+
if (!cell) cells.set(key(column, row), (cell = { text: '' }));
|
|
78
|
+
return cell;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Defines a cell (PineScript `table.cell`): its text and properties. Omitted properties get their default.
|
|
83
|
+
*/
|
|
84
|
+
export function cell(
|
|
85
|
+
table_id: Table,
|
|
86
|
+
column: number,
|
|
87
|
+
row: number,
|
|
88
|
+
text?: string,
|
|
89
|
+
width?: number,
|
|
90
|
+
height?: number,
|
|
91
|
+
text_color?: color,
|
|
92
|
+
text_halign?: HAlign,
|
|
93
|
+
text_valign?: VAlign,
|
|
94
|
+
text_size?: string | number,
|
|
95
|
+
bgcolor?: color,
|
|
96
|
+
tooltip?: string,
|
|
97
|
+
text_font_family?: FontFamily,
|
|
98
|
+
text_formatting?: number
|
|
99
|
+
): void {
|
|
100
|
+
if (isDeleted(table_id)) return;
|
|
101
|
+
checkCell('table.cell()', table_id, column, row);
|
|
102
|
+
(table_id.cells ??= new Map()).set(key(column, row), {
|
|
103
|
+
text: text ?? '',
|
|
104
|
+
width,
|
|
105
|
+
height,
|
|
106
|
+
text_color,
|
|
107
|
+
text_halign,
|
|
108
|
+
text_valign,
|
|
109
|
+
text_size,
|
|
110
|
+
bgcolor,
|
|
111
|
+
tooltip,
|
|
112
|
+
text_font_family,
|
|
113
|
+
text_formatting,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function setCell<K extends keyof TableCell>(name: string, field: K) {
|
|
118
|
+
return (table_id: Table, column: number, row: number, value: TableCell[K]): void => {
|
|
119
|
+
if (isDeleted(table_id)) return;
|
|
120
|
+
cellOf(`table.${name}()`, table_id, column, row)[field] = value;
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Sets the text of a cell. */
|
|
125
|
+
export const cell_set_text = setCell('cell_set_text', 'text');
|
|
126
|
+
/** Sets the width of a cell (% of the chart width; 0 fits the text). */
|
|
127
|
+
export const cell_set_width = setCell('cell_set_width', 'width');
|
|
128
|
+
/** Sets the height of a cell (% of the chart height; 0 fits the text). */
|
|
129
|
+
export const cell_set_height = setCell('cell_set_height', 'height');
|
|
130
|
+
/** Sets the text colour of a cell. */
|
|
131
|
+
export const cell_set_text_color = setCell('cell_set_text_color', 'text_color');
|
|
132
|
+
/** Sets the horizontal text alignment of a cell. */
|
|
133
|
+
export const cell_set_text_halign = setCell('cell_set_text_halign', 'text_halign');
|
|
134
|
+
/** Sets the vertical text alignment of a cell. */
|
|
135
|
+
export const cell_set_text_valign = setCell('cell_set_text_valign', 'text_valign');
|
|
136
|
+
/** Sets the text size of a cell. */
|
|
137
|
+
export const cell_set_text_size = setCell('cell_set_text_size', 'text_size');
|
|
138
|
+
/** Sets the background colour of a cell. */
|
|
139
|
+
export const cell_set_bgcolor = setCell('cell_set_bgcolor', 'bgcolor');
|
|
140
|
+
/** Sets the tooltip of a cell. */
|
|
141
|
+
export const cell_set_tooltip = setCell('cell_set_tooltip', 'tooltip');
|
|
142
|
+
/** Sets the font family of a cell. */
|
|
143
|
+
export const cell_set_text_font_family = setCell('cell_set_text_font_family', 'text_font_family');
|
|
144
|
+
/** Sets the text formatting of a cell (`text.format_*` flags). */
|
|
145
|
+
export const cell_set_text_formatting = setCell('cell_set_text_formatting', 'text_formatting');
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Merges the cells from start_column / start_row to end_column / end_row (PineScript `table.merge_cells`). The
|
|
149
|
+
* merged cell shows the content of the start cell.
|
|
150
|
+
*/
|
|
151
|
+
export function merge_cells(
|
|
152
|
+
table_id: Table,
|
|
153
|
+
start_column: number,
|
|
154
|
+
start_row: number,
|
|
155
|
+
end_column: number,
|
|
156
|
+
end_row: number
|
|
157
|
+
): void {
|
|
158
|
+
if (isDeleted(table_id)) return;
|
|
159
|
+
checkCell('table.merge_cells()', table_id, start_column, start_row);
|
|
160
|
+
checkCell('table.merge_cells()', table_id, end_column, end_row);
|
|
161
|
+
if (end_column < start_column || end_row < start_row) {
|
|
162
|
+
throw new RangeError('table.merge_cells(): the end cell is before the start cell.');
|
|
163
|
+
}
|
|
164
|
+
(table_id.merges ??= []).push({ start_column, start_row, end_column, end_row });
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Removes the cells from start_column / start_row to end_column / end_row (PineScript `table.clear`; default end:
|
|
169
|
+
* the start cell), and the merges that start in that range.
|
|
170
|
+
*/
|
|
171
|
+
export function clear(
|
|
172
|
+
table_id: Table,
|
|
173
|
+
start_column: number,
|
|
174
|
+
start_row: number,
|
|
175
|
+
end_column: number = start_column,
|
|
176
|
+
end_row: number = start_row
|
|
177
|
+
): void {
|
|
178
|
+
if (isDeleted(table_id)) return;
|
|
179
|
+
checkCell('table.clear()', table_id, start_column, start_row);
|
|
180
|
+
checkCell('table.clear()', table_id, end_column, end_row);
|
|
181
|
+
const inside = (column: number, row: number): boolean =>
|
|
182
|
+
column >= start_column && column <= end_column && row >= start_row && row <= end_row;
|
|
183
|
+
for (let column = start_column; column <= end_column; column++) {
|
|
184
|
+
for (let row = start_row; row <= end_row; row++) table_id.cells?.delete(key(column, row));
|
|
185
|
+
}
|
|
186
|
+
if (table_id.merges) table_id.merges = table_id.merges.filter((m) => !inside(m.start_column, m.start_row));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function setTable<K extends keyof Table>(field: K) {
|
|
190
|
+
return (table_id: Table, value: Table[K]): void => {
|
|
191
|
+
if (isDeleted(table_id)) return;
|
|
192
|
+
table_id[field] = value;
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/** Moves the table to another position (`position.*`). */
|
|
197
|
+
export const set_position = setTable('position');
|
|
198
|
+
/** Sets the background colour of the table. */
|
|
199
|
+
export const set_bgcolor = setTable('bgcolor');
|
|
200
|
+
/** Sets the colour of the outer frame. */
|
|
201
|
+
export const set_frame_color = setTable('frame_color');
|
|
202
|
+
/** Sets the width of the outer frame. */
|
|
203
|
+
export const set_frame_width = setTable('frame_width');
|
|
204
|
+
/** Sets the colour of the cell borders. */
|
|
205
|
+
export const set_border_color = setTable('border_color');
|
|
206
|
+
/** Sets the width of the cell borders. */
|
|
207
|
+
export const set_border_width = setTable('border_width');
|
|
208
|
+
|
|
209
|
+
/** Deletes the table (PineScript `table.delete`). */
|
|
210
|
+
export function delete_table(table_id: Table): void {
|
|
211
|
+
remove('table', table_id);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/** All live tables, in creation order (PineScript `table.all`). A new array. */
|
|
215
|
+
export function all(): Table[] {
|
|
216
|
+
return allDrawings('table');
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Alias to match PineScript API
|
|
220
|
+
export { new_table as new };
|
|
221
|
+
export { delete_table as delete };
|
package/src/text/index.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Text namespace
|
|
3
|
-
* PineScript `text.format_*` constants for `label.set_text_formatting` and `box.set_text_formatting
|
|
3
|
+
* PineScript `text.format_*` constants for `label.set_text_formatting` and `box.set_text_formatting`, and the
|
|
4
|
+
* `text.align_*` / `text.wrap_*` constants.
|
|
4
5
|
*
|
|
5
|
-
* The values are flags that add up, as in PineScript (`text.format_bold + text.format_italic`).
|
|
6
|
+
* The format values are flags that add up, as in PineScript (`text.format_bold + text.format_italic`).
|
|
6
7
|
* They are the values PineScript uses for drawn labels and boxes.
|
|
7
8
|
*/
|
|
8
9
|
|
|
@@ -12,3 +13,18 @@ export const format_none = 0;
|
|
|
12
13
|
export const format_bold = 1;
|
|
13
14
|
/** Italic text. */
|
|
14
15
|
export const format_italic = 2;
|
|
16
|
+
|
|
17
|
+
/** Text aligned to the left (`table.cell`, `box.new`, `label.new` textalign). */
|
|
18
|
+
export const align_left = 'left' as const;
|
|
19
|
+
/** Text centred horizontally or vertically. */
|
|
20
|
+
export const align_center = 'center' as const;
|
|
21
|
+
/** Text aligned to the right. */
|
|
22
|
+
export const align_right = 'right' as const;
|
|
23
|
+
/** Text aligned to the top (`table.cell`, `box.new` text_valign). */
|
|
24
|
+
export const align_top = 'top' as const;
|
|
25
|
+
/** Text aligned to the bottom. */
|
|
26
|
+
export const align_bottom = 'bottom' as const;
|
|
27
|
+
/** Text wrapped to the box width (`box.new` text_wrap). */
|
|
28
|
+
export const wrap_auto = 'auto' as const;
|
|
29
|
+
/** Text not wrapped. */
|
|
30
|
+
export const wrap_none = 'none' as const;
|
package/src/types/index.ts
CHANGED
|
@@ -217,8 +217,22 @@ export interface Table {
|
|
|
217
217
|
border_width?: number;
|
|
218
218
|
/** Table background color */
|
|
219
219
|
bgcolor?: color;
|
|
220
|
-
/**
|
|
220
|
+
/** Display on the main chart pane (PineScript force_overlay) */
|
|
221
|
+
force_overlay?: boolean;
|
|
222
|
+
/** Cells by "column,row" */
|
|
221
223
|
cells?: Map<string, TableCell>;
|
|
224
|
+
/** Merged cell ranges (PineScript table.merge_cells) */
|
|
225
|
+
merges?: TableMerge[];
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Merged cell range of a table
|
|
230
|
+
*/
|
|
231
|
+
export interface TableMerge {
|
|
232
|
+
start_column: number;
|
|
233
|
+
start_row: number;
|
|
234
|
+
end_column: number;
|
|
235
|
+
end_row: number;
|
|
222
236
|
}
|
|
223
237
|
|
|
224
238
|
/**
|
|
@@ -245,6 +259,8 @@ export interface TableCell {
|
|
|
245
259
|
tooltip?: string;
|
|
246
260
|
/** Text font family */
|
|
247
261
|
text_font_family?: 'default' | 'monospace';
|
|
262
|
+
/** Text formatting flags: 0 none, 1 bold, 2 italic, 3 bold + italic (PineScript text.format_*) */
|
|
263
|
+
text_formatting?: number;
|
|
248
264
|
}
|
|
249
265
|
|
|
250
266
|
// Series types for drawing objects
|
|
@@ -349,6 +365,21 @@ export const xloc = {
|
|
|
349
365
|
bar_time: 'bar_time' as const,
|
|
350
366
|
};
|
|
351
367
|
|
|
368
|
+
/**
|
|
369
|
+
* Table position constants (PineScript `position.*`), for `table.new` and `table.set_position`
|
|
370
|
+
*/
|
|
371
|
+
export const position = {
|
|
372
|
+
top_left: 'top_left' as const,
|
|
373
|
+
top_center: 'top_center' as const,
|
|
374
|
+
top_right: 'top_right' as const,
|
|
375
|
+
middle_left: 'middle_left' as const,
|
|
376
|
+
middle_center: 'middle_center' as const,
|
|
377
|
+
middle_right: 'middle_right' as const,
|
|
378
|
+
bottom_left: 'bottom_left' as const,
|
|
379
|
+
bottom_center: 'bottom_center' as const,
|
|
380
|
+
bottom_right: 'bottom_right' as const,
|
|
381
|
+
};
|
|
382
|
+
|
|
352
383
|
/**
|
|
353
384
|
* ChartPoint interface - Represents a point on the chart
|
|
354
385
|
* @remarks
|