@inflexa-ai/harness 0.19.0 → 0.19.2
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/dist/agents/report-session-agent.d.ts +32 -9
- package/dist/agents/report-session-agent.js +22 -6
- package/dist/app/report-session-runtime.js +26 -0
- package/dist/app/spawn-report-session.d.ts +32 -5
- package/dist/app/spawn-report-session.js +19 -0
- package/dist/auth/local-run-authorizer.d.ts +3 -2
- package/dist/auth/local-run-authorizer.js +4 -2
- package/dist/config/environment-stores.d.ts +12 -7
- package/dist/config/resource-limits.d.ts +6 -10
- package/dist/config/resource-limits.js +6 -44
- package/dist/contracts/report-reference.d.ts +4 -0
- package/dist/contracts/report-reference.js +3 -0
- package/dist/execution/run-authorizer.d.ts +18 -0
- package/dist/execution/run-canceler.d.ts +67 -0
- package/dist/execution/run-canceler.js +130 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.js +6 -1
- package/dist/lib/chrome.d.ts +14 -0
- package/dist/lib/chrome.js +7 -0
- package/dist/lib/page-capture.d.ts +47 -0
- package/dist/lib/page-capture.js +83 -0
- package/dist/loop/run-agent.js +104 -15
- package/dist/memory/ai-sdk-message-storage.d.ts +9 -4
- package/dist/memory/ai-sdk-message-storage.js +9 -4
- package/dist/memory/count-tokens.js +34 -5
- package/dist/prompts/report-session.d.ts +1 -1
- package/dist/prompts/report-session.js +21 -0
- package/dist/providers/ai-sdk.d.ts +81 -3
- package/dist/providers/ai-sdk.js +91 -10
- package/dist/providers/types.d.ts +17 -0
- package/dist/report-model/assert-rules.d.ts +44 -0
- package/dist/report-model/assert-rules.js +97 -0
- package/dist/report-model/draft-hash.d.ts +14 -0
- package/dist/report-model/draft-hash.js +36 -0
- package/dist/report-model/fixture-resolver.js +2 -71
- package/dist/report-model/production-resolver.d.ts +124 -0
- package/dist/report-model/production-resolver.js +801 -0
- package/dist/report-model/reference-resolver.d.ts +6 -0
- package/dist/report-model/validate.js +5 -0
- package/dist/report-render/assets.d.ts +42 -0
- package/dist/report-render/assets.js +61 -0
- package/dist/report-render/chart.js +31 -10
- package/dist/report-render/design.d.ts +120 -0
- package/dist/report-render/design.js +808 -0
- package/dist/report-render/page.d.ts +51 -111
- package/dist/report-render/page.js +158 -268
- package/dist/report-render/render.js +34 -11
- package/dist/report-render/views/chart-view.d.ts +6 -3
- package/dist/report-render/views/chart-view.js +10 -5
- package/dist/report-render/views/page-view.d.ts +19 -8
- package/dist/report-render/views/page-view.js +31 -11
- package/dist/report-render/views/prose.d.ts +1 -0
- package/dist/report-render/views/prose.js +7 -13
- package/dist/report-render/views/references-view.js +5 -5
- package/dist/report-render/views/values.d.ts +15 -6
- package/dist/report-render/views/values.js +29 -10
- package/dist/runtime/assemble.d.ts +38 -4
- package/dist/runtime/assemble.js +43 -3
- package/dist/sandbox/k8s-client.js +18 -0
- package/dist/sandbox/mount-plan.d.ts +7 -0
- package/dist/sandbox/mount-plan.js +7 -2
- package/dist/sandbox/types.d.ts +6 -0
- package/dist/state/analyses.d.ts +3 -26
- package/dist/state/analyses.js +6 -64
- package/dist/state/index.d.ts +2 -2
- package/dist/state/index.js +2 -2
- package/dist/state/init.js +23 -10
- package/dist/state/report-session-state.d.ts +27 -0
- package/dist/state/report-session-state.js +29 -2
- package/dist/state/runs.d.ts +10 -0
- package/dist/state/runs.js +21 -0
- package/dist/tasks/data-profile.d.ts +4 -0
- package/dist/tasks/data-profile.js +14 -0
- package/dist/tasks/extract-values-script.d.ts +64 -0
- package/dist/tasks/extract-values-script.js +180 -0
- package/dist/tasks/extract-values.d.ts +124 -0
- package/dist/tasks/extract-values.js +193 -0
- package/dist/tools/approval/gateway.d.ts +8 -1
- package/dist/tools/approval/gateway.js +9 -2
- package/dist/tools/approval/queries.d.ts +9 -2
- package/dist/tools/approval/queries.js +12 -4
- package/dist/tools/define-tool.d.ts +29 -0
- package/dist/tools/define-tool.js +26 -0
- package/dist/tools/report/preview-snapshot.d.ts +1 -1
- package/dist/tools/report/preview-snapshot.js +11 -50
- package/dist/tools/report-authoring/authoring-tools.d.ts +54 -4
- package/dist/tools/report-authoring/authoring-tools.js +1 -1
- package/dist/tools/report-session/examine-page.d.ts +90 -0
- package/dist/tools/report-session/examine-page.js +136 -0
- package/dist/tools/report-session/index.d.ts +3 -1
- package/dist/tools/report-session/index.js +3 -1
- package/dist/tools/report-session/preview-report.d.ts +31 -6
- package/dist/tools/report-session/preview-report.js +63 -16
- package/dist/tools/report-session/record-version.d.ts +102 -0
- package/dist/tools/report-session/record-version.js +139 -0
- package/dist/tools/sandbox/list-available-packages.js +2 -1
- package/dist/tools/sandbox/list-available-refs.d.ts +5 -1
- package/dist/tools/sandbox/list-available-refs.js +13 -6
- package/dist/workflows/sandbox-step.d.ts +4 -0
- package/dist/workflows/sandbox-step.js +21 -2
- package/package.json +14 -8
|
@@ -71,9 +71,15 @@ export type ResolvedValue = {
|
|
|
71
71
|
* The `Ok` channel carries the resolved value. The `Err` channel carries the `UnresolvedReference`,
|
|
72
72
|
* which names the reason and the detail that a reference did not bind. The validator collects each such
|
|
73
73
|
* `Err` into its report, thus a caller reads the reason as data and resolution never throws.
|
|
74
|
+
*
|
|
75
|
+
* `prepare` is an optional batch step that runs one time before the per-reference loop. A realization
|
|
76
|
+
* that reads storage groups the references by artifact, reads each file one time, and fills a cache.
|
|
77
|
+
* `resolve` then answers from the cache. The method is optional, thus a realization without it keeps the
|
|
78
|
+
* per-reference behavior and the extension breaks no caller.
|
|
74
79
|
*/
|
|
75
80
|
export interface ReferenceResolver {
|
|
76
81
|
resolve(reference: Reference, snapshot: ReportSnapshot): Promise<Result<ResolvedValue, UnresolvedReference>>;
|
|
82
|
+
prepare?(references: readonly Reference[], snapshot: ReportSnapshot): Promise<void>;
|
|
77
83
|
}
|
|
78
84
|
/**
|
|
79
85
|
* Give back each name in `columns` that no row holds, in the order of `columns`.
|
|
@@ -54,6 +54,11 @@ export function checkChartEncoding(entry, value) {
|
|
|
54
54
|
*/
|
|
55
55
|
export async function resolveDocumentReferences(sections, snapshot, resolver) {
|
|
56
56
|
const { references } = walkBlocks(sections);
|
|
57
|
+
// A realization that reads storage batches its reads here, one time before the loop. It fills a cache
|
|
58
|
+
// that each `resolve` then answers from. A realization without `prepare` keeps the per-reference read.
|
|
59
|
+
if (resolver.prepare !== undefined) {
|
|
60
|
+
await resolver.prepare(references.map((entry) => entry.reference), snapshot);
|
|
61
|
+
}
|
|
57
62
|
const resolved = await allWithConcurrency(references.map((entry) => () => resolver.resolve(entry.reference, snapshot).then((result) => ({ entry, result }))), RESOLUTION_CONCURRENCY);
|
|
58
63
|
const failures = [];
|
|
59
64
|
const resolvedByBlock = new Map();
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The asset manifest of the page.
|
|
3
|
+
*
|
|
4
|
+
* The page loads its chart runtime and its fonts from the sibling `assets/` directory. Thus each entry
|
|
5
|
+
* names the staged file and the module specifier of its source. The caller resolves each specifier against
|
|
6
|
+
* its own installation, and it copies the bytes beside the page.
|
|
7
|
+
*
|
|
8
|
+
* The module holds data alone. The renderer reads no file, thus the page stays a pure function of its
|
|
9
|
+
* inputs.
|
|
10
|
+
*/
|
|
11
|
+
/** The directory of the staged assets, relative to the page. */
|
|
12
|
+
export declare const ASSETS_DIR = "assets";
|
|
13
|
+
/**
|
|
14
|
+
* One staged asset. `file` is the basename under the assets directory, and `specifier` is the module
|
|
15
|
+
* specifier of the source file inside the installed package.
|
|
16
|
+
*/
|
|
17
|
+
export interface PageAsset {
|
|
18
|
+
readonly file: string;
|
|
19
|
+
readonly specifier: string;
|
|
20
|
+
}
|
|
21
|
+
/** The relative source of a staged asset. The page directory is self-contained, thus the source is `assets/<file>`. */
|
|
22
|
+
export declare function assetSource(asset: PageAsset): string;
|
|
23
|
+
/** The chart runtime. The page-side bootstrap reads the `echarts` global that this file declares. */
|
|
24
|
+
export declare const ECHARTS_ASSET: PageAsset;
|
|
25
|
+
/** The sans font. The file is the latin subset of the variable font, thus one file carries each weight. */
|
|
26
|
+
export declare const SANS_FONT_ASSET: PageAsset;
|
|
27
|
+
/**
|
|
28
|
+
* The mono font at weight 400, for the body of a data cell.
|
|
29
|
+
*
|
|
30
|
+
* Fontsource publishes no variable IBM Plex Mono, thus each weight is a separate file and a separate entry.
|
|
31
|
+
* The identity uses four weights: 400 for a data cell, 500 for a tag, 600 for a table header and a badge,
|
|
32
|
+
* and 700 for a metric value.
|
|
33
|
+
*/
|
|
34
|
+
export declare const MONO_FONT_400_ASSET: PageAsset;
|
|
35
|
+
/** The mono font at weight 500, for a tag and a stat-card label. */
|
|
36
|
+
export declare const MONO_FONT_500_ASSET: PageAsset;
|
|
37
|
+
/** The mono font at weight 600, for a table header, a section label, and the panel badge. */
|
|
38
|
+
export declare const MONO_FONT_600_ASSET: PageAsset;
|
|
39
|
+
/** The mono font at weight 700, for a metric value. */
|
|
40
|
+
export declare const MONO_FONT_700_ASSET: PageAsset;
|
|
41
|
+
/** Each asset that the caller stages beside the page. */
|
|
42
|
+
export declare const PAGE_ASSETS: readonly PageAsset[];
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The asset manifest of the page.
|
|
3
|
+
*
|
|
4
|
+
* The page loads its chart runtime and its fonts from the sibling `assets/` directory. Thus each entry
|
|
5
|
+
* names the staged file and the module specifier of its source. The caller resolves each specifier against
|
|
6
|
+
* its own installation, and it copies the bytes beside the page.
|
|
7
|
+
*
|
|
8
|
+
* The module holds data alone. The renderer reads no file, thus the page stays a pure function of its
|
|
9
|
+
* inputs.
|
|
10
|
+
*/
|
|
11
|
+
/** The directory of the staged assets, relative to the page. */
|
|
12
|
+
export const ASSETS_DIR = "assets";
|
|
13
|
+
/** The relative source of a staged asset. The page directory is self-contained, thus the source is `assets/<file>`. */
|
|
14
|
+
export function assetSource(asset) {
|
|
15
|
+
return `${ASSETS_DIR}/${asset.file}`;
|
|
16
|
+
}
|
|
17
|
+
/** The chart runtime. The page-side bootstrap reads the `echarts` global that this file declares. */
|
|
18
|
+
export const ECHARTS_ASSET = {
|
|
19
|
+
file: "echarts.min.js",
|
|
20
|
+
specifier: "echarts/dist/echarts.min.js",
|
|
21
|
+
};
|
|
22
|
+
/** The sans font. The file is the latin subset of the variable font, thus one file carries each weight. */
|
|
23
|
+
export const SANS_FONT_ASSET = {
|
|
24
|
+
file: "space-grotesk-latin-wght-normal.woff2",
|
|
25
|
+
specifier: "@fontsource-variable/space-grotesk/files/space-grotesk-latin-wght-normal.woff2",
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* The mono font at weight 400, for the body of a data cell.
|
|
29
|
+
*
|
|
30
|
+
* Fontsource publishes no variable IBM Plex Mono, thus each weight is a separate file and a separate entry.
|
|
31
|
+
* The identity uses four weights: 400 for a data cell, 500 for a tag, 600 for a table header and a badge,
|
|
32
|
+
* and 700 for a metric value.
|
|
33
|
+
*/
|
|
34
|
+
export const MONO_FONT_400_ASSET = {
|
|
35
|
+
file: "ibm-plex-mono-latin-400-normal.woff2",
|
|
36
|
+
specifier: "@fontsource/ibm-plex-mono/files/ibm-plex-mono-latin-400-normal.woff2",
|
|
37
|
+
};
|
|
38
|
+
/** The mono font at weight 500, for a tag and a stat-card label. */
|
|
39
|
+
export const MONO_FONT_500_ASSET = {
|
|
40
|
+
file: "ibm-plex-mono-latin-500-normal.woff2",
|
|
41
|
+
specifier: "@fontsource/ibm-plex-mono/files/ibm-plex-mono-latin-500-normal.woff2",
|
|
42
|
+
};
|
|
43
|
+
/** The mono font at weight 600, for a table header, a section label, and the panel badge. */
|
|
44
|
+
export const MONO_FONT_600_ASSET = {
|
|
45
|
+
file: "ibm-plex-mono-latin-600-normal.woff2",
|
|
46
|
+
specifier: "@fontsource/ibm-plex-mono/files/ibm-plex-mono-latin-600-normal.woff2",
|
|
47
|
+
};
|
|
48
|
+
/** The mono font at weight 700, for a metric value. */
|
|
49
|
+
export const MONO_FONT_700_ASSET = {
|
|
50
|
+
file: "ibm-plex-mono-latin-700-normal.woff2",
|
|
51
|
+
specifier: "@fontsource/ibm-plex-mono/files/ibm-plex-mono-latin-700-normal.woff2",
|
|
52
|
+
};
|
|
53
|
+
/** Each asset that the caller stages beside the page. */
|
|
54
|
+
export const PAGE_ASSETS = [
|
|
55
|
+
ECHARTS_ASSET,
|
|
56
|
+
SANS_FONT_ASSET,
|
|
57
|
+
MONO_FONT_400_ASSET,
|
|
58
|
+
MONO_FONT_500_ASSET,
|
|
59
|
+
MONO_FONT_600_ASSET,
|
|
60
|
+
MONO_FONT_700_ASSET,
|
|
61
|
+
];
|
|
@@ -20,6 +20,23 @@ import { normalizeEchartSpec } from "../tools/display/normalize-echart-spec.js";
|
|
|
20
20
|
* scale maps the low value to `#440154` and the high value to `#fde725`.
|
|
21
21
|
*/
|
|
22
22
|
const VIRIDIS = ["#440154", "#482777", "#3e4989", "#31688e", "#26828e", "#1f9e89", "#35b779", "#6ece58", "#b5de2b", "#fde725"];
|
|
23
|
+
/**
|
|
24
|
+
* The distance in pixels between the x axis line and its name.
|
|
25
|
+
*
|
|
26
|
+
* The name sits under the middle of the axis, thus the gap must clear the axis labels below the line. The
|
|
27
|
+
* value is a fixed constant, thus the derivation stays deterministic.
|
|
28
|
+
*/
|
|
29
|
+
const X_AXIS_NAME_GAP = 34;
|
|
30
|
+
/**
|
|
31
|
+
* The name fields of an x axis.
|
|
32
|
+
*
|
|
33
|
+
* `normalizeEchartSpec` holds the grid to a right margin of 5 percent. The ECharts default `nameLocation`
|
|
34
|
+
* of `"end"` puts the name at the right end of the axis, thus the name runs past that margin and the panel
|
|
35
|
+
* clips it. A centered name sits under the middle of the axis, and no margin can cut it.
|
|
36
|
+
*/
|
|
37
|
+
function xAxisName(column) {
|
|
38
|
+
return { name: column, nameLocation: "middle", nameGap: X_AXIS_NAME_GAP };
|
|
39
|
+
}
|
|
23
40
|
/**
|
|
24
41
|
* Derive the ECharts option for a chart block, then pass it through `normalizeEchartSpec`.
|
|
25
42
|
*
|
|
@@ -68,7 +85,7 @@ function deriveBar(block, rows, columns) {
|
|
|
68
85
|
data: groupRows.map((row) => [row[x], row[y]]),
|
|
69
86
|
}));
|
|
70
87
|
return ok({
|
|
71
|
-
xAxis: { type: "category", data: categories,
|
|
88
|
+
xAxis: { type: "category", data: categories, ...xAxisName(x) },
|
|
72
89
|
yAxis: { type: "value", name: y },
|
|
73
90
|
series,
|
|
74
91
|
});
|
|
@@ -90,8 +107,8 @@ function deriveLine(block, rows, columns) {
|
|
|
90
107
|
data: sortByX(groupRows.map((row) => [row[x], row[y]])),
|
|
91
108
|
}));
|
|
92
109
|
return ok({
|
|
93
|
-
xAxis: inferAxis(rows, x),
|
|
94
|
-
yAxis: inferAxis(rows, y),
|
|
110
|
+
xAxis: inferAxis(rows, x, "x"),
|
|
111
|
+
yAxis: inferAxis(rows, y, "y"),
|
|
95
112
|
series,
|
|
96
113
|
});
|
|
97
114
|
}
|
|
@@ -113,8 +130,8 @@ function deriveScatter(block, rows, columns) {
|
|
|
113
130
|
data: groupRows.map((row) => [row[x], row[y]]),
|
|
114
131
|
}));
|
|
115
132
|
return ok({
|
|
116
|
-
xAxis: inferAxis(rows, x),
|
|
117
|
-
yAxis: inferAxis(rows, y),
|
|
133
|
+
xAxis: inferAxis(rows, x, "x"),
|
|
134
|
+
yAxis: inferAxis(rows, y, "y"),
|
|
118
135
|
series,
|
|
119
136
|
});
|
|
120
137
|
}
|
|
@@ -199,7 +216,7 @@ function deriveBox(block, rows, columns) {
|
|
|
199
216
|
}
|
|
200
217
|
}
|
|
201
218
|
return ok({
|
|
202
|
-
xAxis: { type: "category", data: categories,
|
|
219
|
+
xAxis: { type: "category", data: categories, ...xAxisName(x) },
|
|
203
220
|
yAxis: { type: "value", name: y },
|
|
204
221
|
series,
|
|
205
222
|
});
|
|
@@ -242,7 +259,7 @@ function deriveHeatmap(block, rows, columns) {
|
|
|
242
259
|
const min = finite.length > 0 ? Math.min(...finite) : 0;
|
|
243
260
|
const max = finite.length > 0 ? Math.max(...finite) : 1;
|
|
244
261
|
return ok({
|
|
245
|
-
xAxis: { type: "category", data: xCategories.map(String),
|
|
262
|
+
xAxis: { type: "category", data: xCategories.map(String), ...xAxisName(x), splitArea: { show: true } },
|
|
246
263
|
yAxis: { type: "category", data: yCategories.map(String), name: y, splitArea: { show: true } },
|
|
247
264
|
visualMap: {
|
|
248
265
|
type: "continuous",
|
|
@@ -355,12 +372,16 @@ function numericColumn(rows, column) {
|
|
|
355
372
|
/**
|
|
356
373
|
* The axis for a line or a scatter column. A column with any non-numeric string cell is a category axis
|
|
357
374
|
* with its distinct values as strings. Any other column is a value axis with `scale: true`.
|
|
375
|
+
*
|
|
376
|
+
* The `axis` argument names the channel that the column feeds. An x column takes the centered name, and a
|
|
377
|
+
* y column keeps the default name placement.
|
|
358
378
|
*/
|
|
359
|
-
function inferAxis(rows, column) {
|
|
379
|
+
function inferAxis(rows, column, axis) {
|
|
380
|
+
const nameFields = axis === "x" ? xAxisName(column) : { name: column };
|
|
360
381
|
if (rows.some((row) => isNonNumericString(row[column]))) {
|
|
361
|
-
return { type: "category", data: firstAppearance(rows.map((row) => row[column])).map(String),
|
|
382
|
+
return { type: "category", data: firstAppearance(rows.map((row) => row[column])).map(String), ...nameFields };
|
|
362
383
|
}
|
|
363
|
-
return { type: "value", scale: true,
|
|
384
|
+
return { type: "value", scale: true, ...nameFields };
|
|
364
385
|
}
|
|
365
386
|
/**
|
|
366
387
|
* Build one series per group, in first-appearance order of the group values. A chart with no group
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The design sheet of the report page, and the ECharts theme.
|
|
3
|
+
*
|
|
4
|
+
* The page carries no external stylesheet and no CSS framework. Thus this module holds the whole identity:
|
|
5
|
+
* the tokens, the font faces, the typography, the components, the textures, the motion rules, and the print
|
|
6
|
+
* rules. The identity source is the Inflexa design system.
|
|
7
|
+
*
|
|
8
|
+
* Two invariants bind an edit of the sheet:
|
|
9
|
+
*
|
|
10
|
+
* - Each class rule matches a class that one view emits. A rule with no emitter is dead, and a dead rule is
|
|
11
|
+
* a cost with no visible effect.
|
|
12
|
+
* - Each font URL comes from the asset manifest. Thus the sheet and the stage step of the caller cannot
|
|
13
|
+
* disagree over a file name.
|
|
14
|
+
*
|
|
15
|
+
* The token block is the exception to the first invariant. The token set is the contract of the identity,
|
|
16
|
+
* thus it stays complete even where no current rule reads a token.
|
|
17
|
+
*/
|
|
18
|
+
/** The style rules of the page. The renderer inlines them in one `<style>` block. */
|
|
19
|
+
export declare const DESIGN_CSS: string;
|
|
20
|
+
/**
|
|
21
|
+
* The registered name of the ECharts theme. The registration script writes this name, and the bootstrap
|
|
22
|
+
* reads it. One source prevents a silent mismatch between the two sites.
|
|
23
|
+
*/
|
|
24
|
+
export declare const ECHARTS_THEME_NAME = "inflexa";
|
|
25
|
+
/**
|
|
26
|
+
* The ECharts theme as a plain object. The renderer serializes this object and registers it, thus the theme
|
|
27
|
+
* never rides a JSON file and no run-time read is necessary. The palette and the axis styles mirror the
|
|
28
|
+
* light design tokens above.
|
|
29
|
+
*/
|
|
30
|
+
export declare const ECHARTS_THEME: {
|
|
31
|
+
color: string[];
|
|
32
|
+
backgroundColor: string;
|
|
33
|
+
textStyle: {
|
|
34
|
+
fontFamily: string;
|
|
35
|
+
fontSize: number;
|
|
36
|
+
color: string;
|
|
37
|
+
};
|
|
38
|
+
title: {
|
|
39
|
+
show: boolean;
|
|
40
|
+
};
|
|
41
|
+
legend: {
|
|
42
|
+
bottom: number;
|
|
43
|
+
textStyle: {
|
|
44
|
+
fontSize: number;
|
|
45
|
+
color: string;
|
|
46
|
+
};
|
|
47
|
+
itemGap: number;
|
|
48
|
+
itemWidth: number;
|
|
49
|
+
itemHeight: number;
|
|
50
|
+
};
|
|
51
|
+
grid: {
|
|
52
|
+
left: number;
|
|
53
|
+
right: number;
|
|
54
|
+
top: number;
|
|
55
|
+
bottom: number;
|
|
56
|
+
containLabel: boolean;
|
|
57
|
+
};
|
|
58
|
+
tooltip: {
|
|
59
|
+
backgroundColor: string;
|
|
60
|
+
borderColor: string;
|
|
61
|
+
textStyle: {
|
|
62
|
+
color: string;
|
|
63
|
+
fontSize: number;
|
|
64
|
+
};
|
|
65
|
+
extraCssText: string;
|
|
66
|
+
};
|
|
67
|
+
toolbox: {
|
|
68
|
+
feature: {
|
|
69
|
+
saveAsImage: {
|
|
70
|
+
title: string;
|
|
71
|
+
pixelRatio: number;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
iconStyle: {
|
|
75
|
+
borderColor: string;
|
|
76
|
+
};
|
|
77
|
+
right: number;
|
|
78
|
+
top: number;
|
|
79
|
+
};
|
|
80
|
+
xAxis: {
|
|
81
|
+
axisLine: {
|
|
82
|
+
lineStyle: {
|
|
83
|
+
color: string;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
axisTick: {
|
|
87
|
+
lineStyle: {
|
|
88
|
+
color: string;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
axisLabel: {
|
|
92
|
+
color: string;
|
|
93
|
+
fontSize: number;
|
|
94
|
+
};
|
|
95
|
+
splitLine: {
|
|
96
|
+
lineStyle: {
|
|
97
|
+
color: string;
|
|
98
|
+
type: string;
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
yAxis: {
|
|
103
|
+
axisLine: {
|
|
104
|
+
show: boolean;
|
|
105
|
+
};
|
|
106
|
+
axisTick: {
|
|
107
|
+
show: boolean;
|
|
108
|
+
};
|
|
109
|
+
axisLabel: {
|
|
110
|
+
color: string;
|
|
111
|
+
fontSize: number;
|
|
112
|
+
};
|
|
113
|
+
splitLine: {
|
|
114
|
+
lineStyle: {
|
|
115
|
+
color: string;
|
|
116
|
+
type: string;
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
};
|