@ic3/reporting-api 8.1.0 → 8.2.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/dist/ApiUtils.js +1 -1
- package/dist/INotification.d.ts +8 -2
- package/dist/IReporting.d.ts +6 -0
- package/dist/IThemeManager.d.ts +5 -0
- package/dist/ITypes.d.ts +6 -0
- package/dist/ITypes.js +8 -1
- package/dist/ITypes.js.map +1 -1
- package/dist/IcEvent.d.ts +4 -0
- package/dist/PublicAmchartsData.d.ts +1 -3
- package/dist/PublicAmchartsData.js +1 -5
- package/dist/PublicAmchartsData.js.map +1 -1
- package/dist/PublicContext.d.ts +1 -0
- package/dist/PublicTemplate.d.ts +47 -3
- package/dist/PublicTemplate.js.map +1 -1
- package/dist/PublicTemplateForm.d.ts +33 -49
- package/dist/PublicTemplateForm.js +10 -1
- package/dist/PublicTemplateForm.js.map +1 -1
- package/dist/PublicTemplates.d.ts +1 -0
- package/dist/PublicTheme.d.ts +42 -9
- package/dist/PublicTheme.js.map +1 -1
- package/dist/PublicTidyColumn.d.ts +10 -3
- package/dist/PublicTidyColumn.js.map +1 -1
- package/dist/PublicTidyTable.d.ts +8 -1
- package/dist/PublicTidyTableInteractions.d.ts +31 -11
- package/dist/PublicTidyTableTypeGuards.d.ts +4 -0
- package/dist/PublicTidyTableTypeGuards.js +16 -0
- package/dist/PublicTidyTableTypeGuards.js.map +1 -0
- package/dist/PublicTidyTableTypes.d.ts +19 -7
- package/dist/PublicTidyTableTypes.js +1 -1
- package/dist/PublicTidyTableTypes.js.map +1 -1
- package/dist/theme/ThemeAmCharts4.d.ts +8 -1
- package/dist/theme/ThemeBaseTable.d.ts +6 -0
- package/dist/theme/ThemeEmbeddedReport.d.ts +3 -0
- package/dist/theme/ThemeFilterAutocomplete.d.ts +7 -0
- package/dist/theme/ThemeFilterAutocomplete.js +1 -0
- package/dist/theme/ThemeFilterAutocomplete.js.map +1 -1
- package/dist/theme/ThemeFilterPanel.d.ts +69 -8
- package/dist/theme/ThemeFilterPanel.js +43 -1
- package/dist/theme/ThemeFilterPanel.js.map +1 -1
- package/dist/theme/ThemeKpiBox.d.ts +0 -13
- package/dist/theme/ThemeKpiCard.d.ts +41 -5
- package/dist/theme/ThemeKpiCard.js +15 -0
- package/dist/theme/ThemeKpiCard.js.map +1 -1
- package/package.json +6 -6
|
@@ -445,7 +445,10 @@ export interface ITidyTable {
|
|
|
445
445
|
* Add a new index to the existing index, overwriting what already exists.
|
|
446
446
|
*/
|
|
447
447
|
addColumnIndex(index: TidyColumnIndex): void;
|
|
448
|
-
|
|
448
|
+
/**
|
|
449
|
+
* The limit used when lazy search is enabled.
|
|
450
|
+
*/
|
|
451
|
+
getLazySearchLimit(): number | undefined;
|
|
449
452
|
isTotalRow(rowIdx: number): boolean;
|
|
450
453
|
/**
|
|
451
454
|
* Transform the table to a table where each row is a bucket in the histogram for that group.
|
|
@@ -486,4 +489,8 @@ export interface ITidyTable {
|
|
|
486
489
|
* Utility class for doing maths on columns
|
|
487
490
|
*/
|
|
488
491
|
getMath(): ITidyMath;
|
|
492
|
+
/**
|
|
493
|
+
* Returns true if and only if the table is truncated by the server (too many rows otherwise).
|
|
494
|
+
*/
|
|
495
|
+
reachedMaxTidyRowCount(): boolean;
|
|
489
496
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SelectionBehaviour, WidgetTidySelectionOptions } from "./PublicTidyTableTypes";
|
|
1
|
+
import { EntityItem, ITidyTableSelection, SelectionBehaviour, WidgetTidySelectionOptions } from "./PublicTidyTableTypes";
|
|
2
2
|
import { ITidyBaseColumn, ITidyColumn } from "./PublicTidyColumn";
|
|
3
3
|
import { ILazyTreeViewLoader } from "./LazyTreeView";
|
|
4
4
|
import { PublicIcEvent } from "./IcEvent";
|
|
@@ -32,9 +32,13 @@ export declare type TidyEvent = MouseEvent | TouchEvent;
|
|
|
32
32
|
export declare type IWidgetInteractionMode = "drilldown" | "selection";
|
|
33
33
|
export interface ITidyTableInteractionSelection {
|
|
34
34
|
/**
|
|
35
|
-
* Sets the selection at the creation of the widget
|
|
35
|
+
* Sets the selection at the creation of the widget.
|
|
36
36
|
*/
|
|
37
37
|
initializeSelection(isRangeSelection?: boolean): void;
|
|
38
|
+
/**
|
|
39
|
+
* Sets the selection at the creation of the widget: autocomplete-lazy.
|
|
40
|
+
*/
|
|
41
|
+
initializeLazySelection(items?: EntityItem[]): void;
|
|
38
42
|
/**
|
|
39
43
|
* Returns true if the selection if empty. Returns false otherwise.
|
|
40
44
|
*/
|
|
@@ -47,9 +51,10 @@ export interface ITidyTableInteractionSelection {
|
|
|
47
51
|
isSelected(rowIdx: number): boolean;
|
|
48
52
|
/**
|
|
49
53
|
* Returns true if and only if the column is selected.
|
|
50
|
-
* @param colIdx
|
|
54
|
+
* @param colIdx index of the column in the tidy table.
|
|
55
|
+
* @param hierIdx optional. Use to check if the hierarchy index is selected. Leave undefined to check the column.
|
|
51
56
|
*/
|
|
52
|
-
isColumnSelected(colIdx: number): boolean;
|
|
57
|
+
isColumnSelected(colIdx: number, hierIdx?: number): boolean;
|
|
53
58
|
/**
|
|
54
59
|
* Returns true if and only if the cell is selected.
|
|
55
60
|
* @param rowIdx
|
|
@@ -61,12 +66,6 @@ export interface ITidyTableInteractionSelection {
|
|
|
61
66
|
* @param column selection should be in this column
|
|
62
67
|
*/
|
|
63
68
|
isSelectedSankey(rowIdx: number, column: ITidyColumn): boolean;
|
|
64
|
-
/**
|
|
65
|
-
*
|
|
66
|
-
* @param column
|
|
67
|
-
* @param rowIdx the index of the row
|
|
68
|
-
*/
|
|
69
|
-
isColumnRowSelected(column: ITidyBaseColumn<any>, rowIdx: number): boolean | undefined;
|
|
70
69
|
/**
|
|
71
70
|
* map function on selected rows
|
|
72
71
|
*/
|
|
@@ -88,7 +87,7 @@ export interface ITidyTableInteractionSelection {
|
|
|
88
87
|
/**
|
|
89
88
|
* Handles the click event for the selection on a given column.
|
|
90
89
|
*
|
|
91
|
-
* If the
|
|
90
|
+
* If the column is not part of the selection columns of the widget nothing will happen
|
|
92
91
|
*
|
|
93
92
|
* @param column column index of the tidy table
|
|
94
93
|
* @param event the mouse event of the click
|
|
@@ -116,6 +115,11 @@ export interface ITidyTableInteractionSelection {
|
|
|
116
115
|
* Select multiple rows at once
|
|
117
116
|
*/
|
|
118
117
|
handleMultipleRowSelection(rowIds: number[]): void;
|
|
118
|
+
/**
|
|
119
|
+
* Perform a row-selection click on multiple rows at the same time. Has similair CTRL functionality as
|
|
120
|
+
* handleClickSelection(...). SHIFT is not supported.
|
|
121
|
+
*/
|
|
122
|
+
handleMultipleRowSelectionClick(rowIds: number[], event?: TidyEvent): void;
|
|
119
123
|
/**
|
|
120
124
|
* Clear the selection and fire an empty event value. Note, this resets the
|
|
121
125
|
* selection to the initial selection.
|
|
@@ -261,11 +265,27 @@ export interface ITidyTableInteraction extends ITidyTableInteractionSelection, I
|
|
|
261
265
|
pivotTableLikeNodeStatus(column: ITidyColumn, rowIdx: number, stopDrillDownDepth?: number): TidyPivotTableLikeNodeStatus;
|
|
262
266
|
asLazyTreeViewLoader(column: ITidyColumn): ILazyTreeViewLoader;
|
|
263
267
|
getCompactedSelectionNames(): string[] | undefined;
|
|
268
|
+
/**
|
|
269
|
+
* Returns true if the column is used for the row selection.
|
|
270
|
+
*/
|
|
264
271
|
isSelectable(col: ITidyColumn): boolean;
|
|
272
|
+
isHierarchyIdxSelectable(hierIndex: number): boolean;
|
|
273
|
+
/**
|
|
274
|
+
* Returns the rows of the items currently in the selection. Note, the item must be present in the current tidy
|
|
275
|
+
* table.
|
|
276
|
+
*/
|
|
265
277
|
getSelectedRows(): number[];
|
|
266
278
|
setSortSelectionToColumnOrder(value: boolean): void;
|
|
267
279
|
/**
|
|
268
280
|
* Returns the widgets selection options.
|
|
269
281
|
*/
|
|
270
282
|
getWidgetSelectionOptions(): WidgetTidySelectionOptions;
|
|
283
|
+
/**
|
|
284
|
+
* Returns the selection in the interaction object.
|
|
285
|
+
*/
|
|
286
|
+
getSelectedItems(): ITidyTableSelection[];
|
|
287
|
+
/**
|
|
288
|
+
* Add an item to the interactions selection.
|
|
289
|
+
*/
|
|
290
|
+
setSelection(items: ITidyTableSelection | ITidyTableSelection[]): void;
|
|
271
291
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { TidyTableColumnIdentifier, TidyTableMappingColumnSelectorOptions, TidyTableRoleSelector } from "./PublicTidyTableTypes";
|
|
2
|
+
export declare function isTidyTableMappingColumnSelectorOptions(v: unknown): v is TidyTableMappingColumnSelectorOptions;
|
|
3
|
+
export declare function isTidyTableColumnIdentifier(v: unknown): v is TidyTableColumnIdentifier;
|
|
4
|
+
export declare function isTidyTableRoleSelector(v: unknown): v is TidyTableRoleSelector;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isTidyTableRoleSelector = exports.isTidyTableColumnIdentifier = exports.isTidyTableMappingColumnSelectorOptions = void 0;
|
|
4
|
+
function isTidyTableMappingColumnSelectorOptions(v) {
|
|
5
|
+
return typeof v === "string" && v.startsWith('@IC3_');
|
|
6
|
+
}
|
|
7
|
+
exports.isTidyTableMappingColumnSelectorOptions = isTidyTableMappingColumnSelectorOptions;
|
|
8
|
+
function isTidyTableColumnIdentifier(v) {
|
|
9
|
+
return typeof v === "object" && v != null && typeof v["name"] === "string";
|
|
10
|
+
}
|
|
11
|
+
exports.isTidyTableColumnIdentifier = isTidyTableColumnIdentifier;
|
|
12
|
+
function isTidyTableRoleSelector(v) {
|
|
13
|
+
return typeof v === "object" && v != null && typeof v["role"] === "string";
|
|
14
|
+
}
|
|
15
|
+
exports.isTidyTableRoleSelector = isTidyTableRoleSelector;
|
|
16
|
+
//# sourceMappingURL=PublicTidyTableTypeGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PublicTidyTableTypeGuards.js","sourceRoot":"","sources":["../src/PublicTidyTableTypeGuards.ts"],"names":[],"mappings":";;;AAOA,SAAgB,uCAAuC,CAAC,CAAU;IAC9D,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC;AAFD,0FAEC;AAED,SAAgB,2BAA2B,CAAC,CAAU;IAClD,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;AAC/E,CAAC;AAFD,kEAEC;AAED,SAAgB,uBAAuB,CAAC,CAAU;IAC9C,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;AAC/E,CAAC;AAFD,0DAEC"}
|
|
@@ -41,7 +41,7 @@ export declare enum TidyColumnsType {
|
|
|
41
41
|
*/
|
|
42
42
|
MIXED = "mixed",
|
|
43
43
|
/**
|
|
44
|
-
* The column type is not known
|
|
44
|
+
* The column type is not known
|
|
45
45
|
*/
|
|
46
46
|
UNKNOWN = "unknown",
|
|
47
47
|
/**
|
|
@@ -87,8 +87,14 @@ export interface TidyTableColumnIdentifier {
|
|
|
87
87
|
*/
|
|
88
88
|
property?: string;
|
|
89
89
|
}
|
|
90
|
-
export
|
|
91
|
-
|
|
90
|
+
export interface TidyTableRoleSelector {
|
|
91
|
+
/**
|
|
92
|
+
* Search columns by role
|
|
93
|
+
*/
|
|
94
|
+
role: string;
|
|
95
|
+
}
|
|
96
|
+
export declare type TidyTableColumnSelector = TidyTableColumnIdentifier | TidyTableMappingColumnSelectorOptions | TidyTableRoleSelector;
|
|
97
|
+
export declare type IFormFieldGranularityItem = IFormFieldGranularityItemColumn | IFormFieldGranularityItemRole | IFormFieldGranularityItemHierarchy | IFormFieldGranularityColumns;
|
|
92
98
|
export interface IFormFieldGranularityItemColumn {
|
|
93
99
|
type: "column";
|
|
94
100
|
/**
|
|
@@ -103,6 +109,9 @@ export interface IFormFieldGranularityItemRole {
|
|
|
103
109
|
*/
|
|
104
110
|
role: string;
|
|
105
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Only include columns info from this hierarchy in the selection.
|
|
114
|
+
*/
|
|
106
115
|
export interface IFormFieldGranularityItemHierarchy {
|
|
107
116
|
type: "hierarchy";
|
|
108
117
|
/**
|
|
@@ -114,6 +123,12 @@ export interface IFormFieldGranularityItemHierarchy {
|
|
|
114
123
|
*/
|
|
115
124
|
hierarchyIdx: number;
|
|
116
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* When selected, include all column info in the selection.
|
|
128
|
+
*/
|
|
129
|
+
export interface IFormFieldGranularityColumns {
|
|
130
|
+
type: "all_columns";
|
|
131
|
+
}
|
|
117
132
|
/**
|
|
118
133
|
* Coordinate of an MDX member
|
|
119
134
|
*/
|
|
@@ -216,7 +231,7 @@ export interface IMdxAxisSeriesInfo {
|
|
|
216
231
|
}
|
|
217
232
|
export interface EntityItem {
|
|
218
233
|
uniqueName: string;
|
|
219
|
-
key?:
|
|
234
|
+
key?: any;
|
|
220
235
|
name: string;
|
|
221
236
|
caption: string;
|
|
222
237
|
parentUN?: string;
|
|
@@ -239,9 +254,6 @@ export interface TidyCellError {
|
|
|
239
254
|
* scenario a coordinate might not longer match any rowIdx
|
|
240
255
|
*/
|
|
241
256
|
export interface ITidyTableSelection {
|
|
242
|
-
/**
|
|
243
|
-
* Object storing the selection coordinates.
|
|
244
|
-
*/
|
|
245
257
|
/**
|
|
246
258
|
* Fired event value. Arrays are combined into a single event.
|
|
247
259
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublicTidyTableTypes.js","sourceRoot":"","sources":["../src/PublicTidyTableTypes.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAOH,IAAY,eA0DX;AA1DD,WAAY,eAAe;IACvB;;OAEG;IACH,kCAAe,CAAA;IAEf,0CAAuB,CAAA;IACvB,wCAAqB,CAAA;IAErB;;OAEG;IACH,sDAAmC,CAAA;IAEnC;;OAEG;IACH,wCAAqB,CAAA;IAErB;;OAEG;IACH,sCAAmB,CAAA;IAEnB;;OAEG;IACH,0CAAuB,CAAA;IAEvB;;OAEG;IACH,sCAAmB,CAAA;IAEnB;;OAEG;IACH,gCAAa,CAAA;IAEb;;OAEG;IACH,kCAAe,CAAA;IAEf;;OAEG;IACH,sCAAmB,CAAA;IAEnB;;OAEG;IACH,gCAAa,CAAA;IAEb;;OAEG;IACH,8BAAW,CAAA;AACf,CAAC,EA1DW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QA0D1B;AAkBD,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC1B,qCAAe,CAAA;IACf,uDAAiC,CAAA;IACjC,yCAAmB,CAAA;AACvB,CAAC,EAJW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAI7B;AAeD,IAAY,qCAQX;AARD,WAAY,qCAAqC;IAE7C,yDAAgB,CAAA;IAChB,yEAAgC,CAAA;IAChC,6EAAoC,CAAA;IACpC,2EAAkC,CAAA;IAClC,mEAA0B,CAAA;AAE9B,CAAC,EARW,qCAAqC,GAArC,6CAAqC,KAArC,6CAAqC,QAQhD;
|
|
1
|
+
{"version":3,"file":"PublicTidyTableTypes.js","sourceRoot":"","sources":["../src/PublicTidyTableTypes.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAOH,IAAY,eA0DX;AA1DD,WAAY,eAAe;IACvB;;OAEG;IACH,kCAAe,CAAA;IAEf,0CAAuB,CAAA;IACvB,wCAAqB,CAAA;IAErB;;OAEG;IACH,sDAAmC,CAAA;IAEnC;;OAEG;IACH,wCAAqB,CAAA;IAErB;;OAEG;IACH,sCAAmB,CAAA;IAEnB;;OAEG;IACH,0CAAuB,CAAA;IAEvB;;OAEG;IACH,sCAAmB,CAAA;IAEnB;;OAEG;IACH,gCAAa,CAAA;IAEb;;OAEG;IACH,kCAAe,CAAA;IAEf;;OAEG;IACH,sCAAmB,CAAA;IAEnB;;OAEG;IACH,gCAAa,CAAA;IAEb;;OAEG;IACH,8BAAW,CAAA;AACf,CAAC,EA1DW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QA0D1B;AAkBD,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC1B,qCAAe,CAAA;IACf,uDAAiC,CAAA;IACjC,yCAAmB,CAAA;AACvB,CAAC,EAJW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAI7B;AAeD,IAAY,qCAQX;AARD,WAAY,qCAAqC;IAE7C,yDAAgB,CAAA;IAChB,yEAAgC,CAAA;IAChC,6EAAoC,CAAA;IACpC,2EAAkC,CAAA;IAClC,mEAA0B,CAAA;AAE9B,CAAC,EARW,qCAAqC,GAArC,6CAAqC,KAArC,6CAAqC,QAQhD;AAuHD,IAAY,iBAgBX;AAhBD,WAAY,iBAAiB;IACzB;;;OAGG;IACH,kCAAa,CAAA;IAEb;;OAEG;IACH,gCAAW,CAAA;IAEX;;OAEG;IACH,+BAAU,CAAA;AACd,CAAC,EAhBW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAgB5B;AAiGD,IAAY,kBAqCX;AArCD,WAAY,kBAAkB;IAC1B;;OAEG;IACH,iDAA2B,CAAA;IAE3B;;OAEG;IACH,+CAAyB,CAAA;IAEzB;;OAEG;IACH,mDAA6B,CAAA;IAE7B,iDAA2B,CAAA;IAE3B;;OAEG;IACH,iDAA2B,CAAA;IAE3B;;OAEG;IACH,iDAA2B,CAAA;IAE3B;;OAEG;IACH,6CAAuB,CAAA;IAEvB;;OAEG;IACH,yDAAmC,CAAA;AACvC,CAAC,EArCW,kBAAkB,GAAlB,0BAAkB,KAAlB,0BAAkB,QAqC7B;AAED,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,sCAAuB,CAAA;IACvB,wCAAyB,CAAA;IACzB,wCAAyB,CAAA;AAC7B,CAAC,EAJW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAItB;AAwDD,IAAY,iBAMX;AAND,WAAY,iBAAiB;IACzB,kCAAa,CAAA;IACb,gCAAW,CAAA;IACX,gCAAW,CAAA;IACX,gCAAW,CAAA;IACX,gCAAW,CAAA;AACf,CAAC,EANW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAM5B;AAyBD;;;;;GAKG;AACH,IAAY,eAIX;AAJD,WAAY,eAAe;IACvB,8BAAW,CAAA;IACX,4BAAS,CAAA;IACT,gCAAa,CAAA;AACjB,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B"}
|
|
@@ -122,7 +122,8 @@ export interface Am4LabelOptions extends FormFieldObject {
|
|
|
122
122
|
/**
|
|
123
123
|
* Text.
|
|
124
124
|
*
|
|
125
|
-
* The text displayed in the center of the chart
|
|
125
|
+
* The text displayed in the center of the chart.
|
|
126
|
+
* Use a single space to show no text and disable the label.
|
|
126
127
|
*/
|
|
127
128
|
labelText: string;
|
|
128
129
|
labelTextAlign: 'start' | 'end' | 'middle';
|
|
@@ -926,6 +927,12 @@ export interface Am4CategoryDateAxisOptions extends FormFieldObject {
|
|
|
926
927
|
* Does not work with a date axis.
|
|
927
928
|
*/
|
|
928
929
|
xAxisLabelTooltipText: string;
|
|
930
|
+
/**
|
|
931
|
+
* The date format for the labels that show when the user hovers over the chart with a chart cursor.
|
|
932
|
+
* Leave undefined to use the axis-date format.
|
|
933
|
+
* Read more about the format codes here: https://www.amcharts.com/docs/v4/concepts/formatters/formatting-date-time/#Format_codes
|
|
934
|
+
*/
|
|
935
|
+
xAxisLabelTooltipDateFormat?: string;
|
|
929
936
|
/**
|
|
930
937
|
* Title Text.
|
|
931
938
|
*
|
|
@@ -73,6 +73,12 @@ export interface BaseTableChartOptions extends FormFieldObject {
|
|
|
73
73
|
* Display the sort options. A list of boolean values: 'true', 'false'. The last value repeats itself.
|
|
74
74
|
*/
|
|
75
75
|
columnSortable: string;
|
|
76
|
+
/**
|
|
77
|
+
* Column Ordering (CSV).
|
|
78
|
+
*
|
|
79
|
+
* A list of boolean values: 'true', 'false'. The last value repeats itself.
|
|
80
|
+
*/
|
|
81
|
+
columnOrdering: string;
|
|
76
82
|
/**
|
|
77
83
|
* Pinnable (CSV).
|
|
78
84
|
*
|
|
@@ -22,4 +22,7 @@ export interface EmbeddedReportChartOptions extends FormFieldObject {
|
|
|
22
22
|
* Forwarded events.
|
|
23
23
|
*/
|
|
24
24
|
"@params"?: IFormEventMappingArrayFieldDefType;
|
|
25
|
+
inheritSchemaName: boolean;
|
|
26
|
+
inheritCubeName: boolean;
|
|
27
|
+
inheritDisableDefaultSchemaAuthCheck: boolean;
|
|
25
28
|
}
|
|
@@ -12,6 +12,7 @@ export declare class FilterAutocompleteClasses {
|
|
|
12
12
|
* @see AutocompleteClasses
|
|
13
13
|
*/
|
|
14
14
|
static readonly muiAutocomplete: string;
|
|
15
|
+
static readonly action = "MuiAutocomplete-action";
|
|
15
16
|
}
|
|
16
17
|
export declare type FilterAutocompleteClassesKey = keyof FilterAutocompleteClasses;
|
|
17
18
|
/**
|
|
@@ -43,4 +44,10 @@ export interface FilterAutocompleteChartOptions extends FilterTidyTableChartOpti
|
|
|
43
44
|
* Maximum number of items that will be visible when not focused. Set -1 to disable the limit.
|
|
44
45
|
*/
|
|
45
46
|
limitTags: number;
|
|
47
|
+
/**
|
|
48
|
+
* Limit Chips.
|
|
49
|
+
*
|
|
50
|
+
* Maximum number of chips that will be visible
|
|
51
|
+
*/
|
|
52
|
+
limitChips: number;
|
|
46
53
|
}
|
|
@@ -20,4 +20,5 @@ FilterAutocompleteClasses.root = "root";
|
|
|
20
20
|
* @see AutocompleteClasses
|
|
21
21
|
*/
|
|
22
22
|
FilterAutocompleteClasses.muiAutocomplete = autocompleteClasses_1.default.root;
|
|
23
|
+
FilterAutocompleteClasses.action = "MuiAutocomplete-action";
|
|
23
24
|
//# sourceMappingURL=ThemeFilterAutocomplete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeFilterAutocomplete.js","sourceRoot":"","sources":["../../src/theme/ThemeFilterAutocomplete.ts"],"names":[],"mappings":";;;;;;AAAA,yGAAiF;AAGjF,MAAa,yBAAyB;;AAAtC,
|
|
1
|
+
{"version":3,"file":"ThemeFilterAutocomplete.js","sourceRoot":"","sources":["../../src/theme/ThemeFilterAutocomplete.ts"],"names":[],"mappings":";;;;;;AAAA,yGAAiF;AAGjF,MAAa,yBAAyB;;AAAtC,8DAkBC;AAhBG;;GAEG;AACa,8BAAI,GAAG,MAAM,CAAC;AAE9B;;;;;;GAMG;AACa,yCAAe,GAAG,6BAAmB,CAAC,IAAI,CAAC;AAE3C,gCAAM,GAAG,wBAAwB,CAAA"}
|
|
@@ -3,31 +3,83 @@ export declare class FilterPanelClasses {
|
|
|
3
3
|
/**
|
|
4
4
|
* Main content div
|
|
5
5
|
*/
|
|
6
|
-
static readonly mainDiv
|
|
6
|
+
static readonly mainDiv = "FilterPanel-root";
|
|
7
7
|
/**
|
|
8
8
|
* Div containing the loading spinner and text
|
|
9
9
|
*/
|
|
10
|
-
static readonly loadingDiv
|
|
10
|
+
static readonly loadingDiv = "FilterPanel-loading";
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Div with add filter and remove all filters buttons
|
|
13
13
|
*/
|
|
14
|
-
static readonly headerDiv
|
|
14
|
+
static readonly headerDiv = "FilterPanel-header";
|
|
15
|
+
/**
|
|
16
|
+
* Div containing the 'Filters' text and the help icon button
|
|
17
|
+
*/
|
|
18
|
+
static readonly titleDiv = "FilterPanel-title";
|
|
19
|
+
/**
|
|
20
|
+
* Div containing the 'Filters' text
|
|
21
|
+
*/
|
|
22
|
+
static readonly titleDivText = "FilterPanel-title-text";
|
|
23
|
+
/**
|
|
24
|
+
* Div containing the add and remove all buttons
|
|
25
|
+
*/
|
|
26
|
+
static readonly headerDivButtons = "FilterPanel-header-buttons";
|
|
27
|
+
/**
|
|
28
|
+
* Add button
|
|
29
|
+
*/
|
|
30
|
+
static readonly headerDivAddButton = "FilterPanel-HeaderDivAddButton";
|
|
31
|
+
/**
|
|
32
|
+
* Remove all button
|
|
33
|
+
*/
|
|
34
|
+
static readonly headerDivRemoveAllButton = "FilterPanel-HeaderDivRemoveAllButton";
|
|
35
|
+
/**
|
|
36
|
+
* Div of the content root. Used for animation purposes.
|
|
37
|
+
*/
|
|
38
|
+
static readonly contentDivRoot = "FilterPanel-content-root";
|
|
15
39
|
/**
|
|
16
40
|
* Div with the stack of filter items
|
|
17
41
|
*/
|
|
18
|
-
static readonly contentDiv
|
|
42
|
+
static readonly contentDiv = "FilterPanel-content";
|
|
43
|
+
/**
|
|
44
|
+
* Div with no filters defined text
|
|
45
|
+
*/
|
|
46
|
+
static readonly contentNoFilters = "FilterPanel-NoFilters";
|
|
47
|
+
/**
|
|
48
|
+
* Main filter div
|
|
49
|
+
*/
|
|
50
|
+
static readonly filterItemDiv = "FilterPanel-filterItem";
|
|
19
51
|
/**
|
|
20
52
|
* Main filter div
|
|
21
53
|
*/
|
|
22
|
-
static readonly
|
|
54
|
+
static readonly filterItemDivHeader = "FilterPanel-filterItemHeader";
|
|
55
|
+
static readonly filterItemClearButton = "FilterPanel-ItemClearButton";
|
|
56
|
+
static readonly filterItemRemoveButton = "FilterPanel-ItemRemoveButton";
|
|
23
57
|
/**
|
|
24
58
|
* Classname for the TextField component
|
|
25
59
|
*/
|
|
26
|
-
static readonly inputField
|
|
60
|
+
static readonly inputField = "FilterPanel-filterInputfield";
|
|
61
|
+
/**
|
|
62
|
+
* A div with the displayed values for the value selector in preview mode
|
|
63
|
+
*/
|
|
64
|
+
static readonly inputFieldPreviewValues = "FilterPanel-PreviewValue";
|
|
27
65
|
/**
|
|
28
66
|
* Classname for the field label
|
|
29
67
|
*/
|
|
30
|
-
static readonly fieldName
|
|
68
|
+
static readonly fieldName = "FilterPanel-fieldName";
|
|
69
|
+
/**
|
|
70
|
+
* Div with selectable items for filters with few items
|
|
71
|
+
*/
|
|
72
|
+
static readonly selectableContent = "FilterPanel-selectableContent";
|
|
73
|
+
}
|
|
74
|
+
export interface FilterPanelProps {
|
|
75
|
+
/**
|
|
76
|
+
* Variant defined in the theme. If the theme has variants, then the user can select one.
|
|
77
|
+
*/
|
|
78
|
+
variant?: string;
|
|
79
|
+
/**
|
|
80
|
+
* If true, grow filter in row direction. If false, grow in column direction.
|
|
81
|
+
*/
|
|
82
|
+
filterLayoutHorizontal?: boolean;
|
|
31
83
|
}
|
|
32
84
|
export declare type FilterPanelClassesKey = keyof FilterPanelClasses;
|
|
33
85
|
/**
|
|
@@ -91,4 +143,13 @@ export interface FilterPanelChartOptions extends FormFieldObject {
|
|
|
91
143
|
* with continent Asia.
|
|
92
144
|
*/
|
|
93
145
|
measureMdx?: string;
|
|
146
|
+
/**
|
|
147
|
+
* Name template for the fields with properties. Use 'levelName' and 'propertyName' as placeholders.
|
|
148
|
+
*/
|
|
149
|
+
propertyFieldNameTemplate: string;
|
|
150
|
+
/**
|
|
151
|
+
* Use the simple selection filter if and only if `useSimpleFilterCutoff` is not null and the level
|
|
152
|
+
* has <= `useSimpleFilterCutoff` members.
|
|
153
|
+
*/
|
|
154
|
+
useSimpleFilterCutoff?: number;
|
|
94
155
|
}
|
|
@@ -13,23 +13,65 @@ FilterPanelClasses.mainDiv = "FilterPanel-root";
|
|
|
13
13
|
*/
|
|
14
14
|
FilterPanelClasses.loadingDiv = "FilterPanel-loading";
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Div with add filter and remove all filters buttons
|
|
17
17
|
*/
|
|
18
18
|
FilterPanelClasses.headerDiv = "FilterPanel-header";
|
|
19
|
+
/**
|
|
20
|
+
* Div containing the 'Filters' text and the help icon button
|
|
21
|
+
*/
|
|
22
|
+
FilterPanelClasses.titleDiv = "FilterPanel-title";
|
|
23
|
+
/**
|
|
24
|
+
* Div containing the 'Filters' text
|
|
25
|
+
*/
|
|
26
|
+
FilterPanelClasses.titleDivText = "FilterPanel-title-text";
|
|
27
|
+
/**
|
|
28
|
+
* Div containing the add and remove all buttons
|
|
29
|
+
*/
|
|
30
|
+
FilterPanelClasses.headerDivButtons = "FilterPanel-header-buttons";
|
|
31
|
+
/**
|
|
32
|
+
* Add button
|
|
33
|
+
*/
|
|
34
|
+
FilterPanelClasses.headerDivAddButton = "FilterPanel-HeaderDivAddButton";
|
|
35
|
+
/**
|
|
36
|
+
* Remove all button
|
|
37
|
+
*/
|
|
38
|
+
FilterPanelClasses.headerDivRemoveAllButton = "FilterPanel-HeaderDivRemoveAllButton";
|
|
39
|
+
/**
|
|
40
|
+
* Div of the content root. Used for animation purposes.
|
|
41
|
+
*/
|
|
42
|
+
FilterPanelClasses.contentDivRoot = "FilterPanel-content-root";
|
|
19
43
|
/**
|
|
20
44
|
* Div with the stack of filter items
|
|
21
45
|
*/
|
|
22
46
|
FilterPanelClasses.contentDiv = "FilterPanel-content";
|
|
47
|
+
/**
|
|
48
|
+
* Div with no filters defined text
|
|
49
|
+
*/
|
|
50
|
+
FilterPanelClasses.contentNoFilters = "FilterPanel-NoFilters";
|
|
23
51
|
/**
|
|
24
52
|
* Main filter div
|
|
25
53
|
*/
|
|
26
54
|
FilterPanelClasses.filterItemDiv = "FilterPanel-filterItem";
|
|
55
|
+
/**
|
|
56
|
+
* Main filter div
|
|
57
|
+
*/
|
|
58
|
+
FilterPanelClasses.filterItemDivHeader = "FilterPanel-filterItemHeader";
|
|
59
|
+
FilterPanelClasses.filterItemClearButton = "FilterPanel-ItemClearButton";
|
|
60
|
+
FilterPanelClasses.filterItemRemoveButton = "FilterPanel-ItemRemoveButton";
|
|
27
61
|
/**
|
|
28
62
|
* Classname for the TextField component
|
|
29
63
|
*/
|
|
30
64
|
FilterPanelClasses.inputField = "FilterPanel-filterInputfield";
|
|
65
|
+
/**
|
|
66
|
+
* A div with the displayed values for the value selector in preview mode
|
|
67
|
+
*/
|
|
68
|
+
FilterPanelClasses.inputFieldPreviewValues = "FilterPanel-PreviewValue";
|
|
31
69
|
/**
|
|
32
70
|
* Classname for the field label
|
|
33
71
|
*/
|
|
34
72
|
FilterPanelClasses.fieldName = "FilterPanel-fieldName";
|
|
73
|
+
/**
|
|
74
|
+
* Div with selectable items for filters with few items
|
|
75
|
+
*/
|
|
76
|
+
FilterPanelClasses.selectableContent = "FilterPanel-selectableContent";
|
|
35
77
|
//# sourceMappingURL=ThemeFilterPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeFilterPanel.js","sourceRoot":"","sources":["../../src/theme/ThemeFilterPanel.ts"],"names":[],"mappings":";;;AAEA,MAAa,kBAAkB;;AAA/B,
|
|
1
|
+
{"version":3,"file":"ThemeFilterPanel.js","sourceRoot":"","sources":["../../src/theme/ThemeFilterPanel.ts"],"names":[],"mappings":";;;AAEA,MAAa,kBAAkB;;AAA/B,gDA0FC;AAzFG;;GAEG;AACa,0BAAO,GAAG,kBAAkB,CAAC;AAE7C;;GAEG;AACa,6BAAU,GAAG,qBAAqB,CAAC;AAEnD;;GAEG;AACa,4BAAS,GAAG,oBAAoB,CAAC;AAEjD;;GAEG;AACa,2BAAQ,GAAG,mBAAmB,CAAC;AAE/C;;GAEG;AACa,+BAAY,GAAG,wBAAwB,CAAC;AAExD;;GAEG;AACa,mCAAgB,GAAG,4BAA4B,CAAC;AAEhE;;GAEG;AACa,qCAAkB,GAAG,gCAAgC,CAAC;AAEtE;;GAEG;AACa,2CAAwB,GAAG,sCAAsC,CAAC;AAElF;;GAEG;AACa,iCAAc,GAAG,0BAA0B,CAAC;AAE5D;;GAEG;AACa,6BAAU,GAAG,qBAAqB,CAAC;AAEnD;;GAEG;AACa,mCAAgB,GAAG,uBAAuB,CAAC;AAE3D;;GAEG;AACa,gCAAa,GAAG,wBAAwB,CAAC;AAEzD;;GAEG;AACa,sCAAmB,GAAG,8BAA8B,CAAC;AAErD,wCAAqB,GAAG,6BAA6B,CAAC;AAEtD,yCAAsB,GAAG,8BAA8B,CAAC;AAExE;;GAEG;AACa,6BAAU,GAAG,8BAA8B,CAAC;AAE5D;;GAEG;AACa,0CAAuB,GAAG,0BAA0B,CAAC;AAErE;;GAEG;AACa,4BAAS,GAAG,uBAAuB,CAAC;AAEpD;;GAEG;AACa,oCAAiB,GAAG,+BAA+B,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { FormFieldObject } from "../PublicTemplateForm";
|
|
2
2
|
import { HtmlBoxVariant } from "./ThemeHtmlBox";
|
|
3
|
-
import { TidyTableColumnSelector } from "../PublicTidyTableTypes";
|
|
4
3
|
/**
|
|
5
4
|
* KPI Box Options (fields of the "Chart" tab in the widget editor).
|
|
6
5
|
*
|
|
@@ -31,16 +30,4 @@ export interface KpiBoxChartOptions extends FormFieldObject {
|
|
|
31
30
|
* Expression that returns a markdown text. Evaluated once after row's markdown.
|
|
32
31
|
*/
|
|
33
32
|
postMarkdown?: string;
|
|
34
|
-
/**
|
|
35
|
-
* Column.
|
|
36
|
-
*
|
|
37
|
-
* Default column for the expression and the background color.
|
|
38
|
-
*/
|
|
39
|
-
column?: TidyTableColumnSelector;
|
|
40
|
-
/**
|
|
41
|
-
* Background Color.
|
|
42
|
-
*
|
|
43
|
-
* Use the column color to set the background color.
|
|
44
|
-
*/
|
|
45
|
-
backgroundColorFromQuery: boolean;
|
|
46
33
|
}
|
|
@@ -1,6 +1,28 @@
|
|
|
1
1
|
import { FormFieldObject } from "../PublicTemplateForm";
|
|
2
2
|
import { TidyTableColumnSelector } from "../PublicTidyTableTypes";
|
|
3
3
|
import { CompareTextInterpretationType, SparkChartType, SparklinePosition, TargetTextIconSet, TargetTextPosition } from "../ITypes";
|
|
4
|
+
export declare class KpiCardClasses {
|
|
5
|
+
static kpiValuesRoot: string;
|
|
6
|
+
static sparkChartRoot: string;
|
|
7
|
+
static kpiValueTitle: string;
|
|
8
|
+
static kpiValueText: string;
|
|
9
|
+
static kpiCompareTextRoot: string;
|
|
10
|
+
static kpiCompareTextRootEmpty: string;
|
|
11
|
+
static comparePercentageText: string;
|
|
12
|
+
static compareTargetText: string;
|
|
13
|
+
static comparePercentZero: string;
|
|
14
|
+
static comparePercentUp: string;
|
|
15
|
+
static comparePercentDown: string;
|
|
16
|
+
}
|
|
17
|
+
export declare type KpiCardClassKey = keyof KpiCardClasses;
|
|
18
|
+
export interface KpiCardProps {
|
|
19
|
+
/**
|
|
20
|
+
* Variant defined in the theme. If the theme has variants, then the user can select one.
|
|
21
|
+
*/
|
|
22
|
+
variant?: string;
|
|
23
|
+
sparklinePosition: SparklinePosition;
|
|
24
|
+
targetPosition: TargetTextPosition;
|
|
25
|
+
}
|
|
4
26
|
/**
|
|
5
27
|
* KPI Card Options (fields of the "Chart" tab in the widget editor).
|
|
6
28
|
*
|
|
@@ -11,7 +33,11 @@ import { CompareTextInterpretationType, SparkChartType, SparklinePosition, Targe
|
|
|
11
33
|
*
|
|
12
34
|
* @see WidgetTemplateChartOptions
|
|
13
35
|
*/
|
|
14
|
-
export interface KpiCartChartOptions extends
|
|
36
|
+
export interface KpiCartChartOptions extends SparkChartOptionsMeta {
|
|
37
|
+
/**
|
|
38
|
+
* Variant defined in the theme. If the theme has variants, then the user can select one.
|
|
39
|
+
*/
|
|
40
|
+
variant?: string;
|
|
15
41
|
/**
|
|
16
42
|
* Value.
|
|
17
43
|
*
|
|
@@ -73,6 +99,14 @@ export interface KpiCartChartOptions extends FormFieldObject {
|
|
|
73
99
|
* The icon that indicate the trend.
|
|
74
100
|
*/
|
|
75
101
|
iconSet: TargetTextIconSet;
|
|
102
|
+
/**
|
|
103
|
+
* Position.
|
|
104
|
+
*
|
|
105
|
+
* Where to display the sparkline.
|
|
106
|
+
*/
|
|
107
|
+
sparklinePosition: SparklinePosition;
|
|
108
|
+
}
|
|
109
|
+
export interface SparkChartOptionsMeta extends FormFieldObject {
|
|
76
110
|
/**
|
|
77
111
|
* Sparkline Type.
|
|
78
112
|
*/
|
|
@@ -90,9 +124,11 @@ export interface KpiCartChartOptions extends FormFieldObject {
|
|
|
90
124
|
*/
|
|
91
125
|
sparklineHasArea: boolean;
|
|
92
126
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* Where to display the sparkline.
|
|
127
|
+
* Radius of the columns rounded corners.
|
|
96
128
|
*/
|
|
97
|
-
|
|
129
|
+
columnSparkCornerRadius: number;
|
|
130
|
+
/**
|
|
131
|
+
* Space between columns.
|
|
132
|
+
*/
|
|
133
|
+
columnSparkColumnSpacing: number;
|
|
98
134
|
}
|
|
@@ -1,3 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KpiCardClasses = void 0;
|
|
4
|
+
class KpiCardClasses {
|
|
5
|
+
}
|
|
6
|
+
exports.KpiCardClasses = KpiCardClasses;
|
|
7
|
+
KpiCardClasses.kpiValuesRoot = "KpiValuesRoot";
|
|
8
|
+
KpiCardClasses.sparkChartRoot = "KpiSparkChartRoot";
|
|
9
|
+
KpiCardClasses.kpiValueTitle = "KpiValueNameText";
|
|
10
|
+
KpiCardClasses.kpiValueText = "KpiValueText";
|
|
11
|
+
KpiCardClasses.kpiCompareTextRoot = "KpiCompareTextRoot";
|
|
12
|
+
KpiCardClasses.kpiCompareTextRootEmpty = "KpiEmptyCompareTextEmpty";
|
|
13
|
+
KpiCardClasses.comparePercentageText = "ComparePercentageText";
|
|
14
|
+
KpiCardClasses.compareTargetText = "compareTargetText";
|
|
15
|
+
KpiCardClasses.comparePercentZero = "ComparePercentZero";
|
|
16
|
+
KpiCardClasses.comparePercentUp = "ComparePercentUp";
|
|
17
|
+
KpiCardClasses.comparePercentDown = "ComparePercentDown";
|
|
3
18
|
//# sourceMappingURL=ThemeKpiCard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeKpiCard.js","sourceRoot":"","sources":["../../src/theme/ThemeKpiCard.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"ThemeKpiCard.js","sourceRoot":"","sources":["../../src/theme/ThemeKpiCard.ts"],"names":[],"mappings":";;;AAUA,MAAa,cAAc;;AAA3B,wCAwBC;AAtBiB,4BAAa,GAAG,eAAe,CAAC;AAEhC,6BAAc,GAAG,mBAAmB,CAAC;AAErC,4BAAa,GAAG,kBAAkB,CAAC;AAEnC,2BAAY,GAAG,cAAc,CAAC;AAE9B,iCAAkB,GAAG,oBAAoB,CAAC;AAE1C,sCAAuB,GAAG,0BAA0B,CAAC;AAErD,oCAAqB,GAAG,uBAAuB,CAAC;AAEhD,gCAAiB,GAAG,mBAAmB,CAAC;AAExC,iCAAkB,GAAG,oBAAoB,CAAC;AAE1C,+BAAgB,GAAG,kBAAkB,CAAC;AAEtC,iCAAkB,GAAG,oBAAoB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ic3/reporting-api",
|
|
3
|
-
"version": "8.1
|
|
3
|
+
"version": "8.2.1",
|
|
4
4
|
"description": "icCube dashboards API",
|
|
5
5
|
"homepage": "https://github.com/ic3-software/ic3-reporting-api",
|
|
6
6
|
"repository": "https://github.com/ic3-software/ic3-reporting-api",
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
"access": "public"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@mui/material": "5.
|
|
18
|
-
"@mui/system": "5.
|
|
17
|
+
"@mui/material": "5.9.3",
|
|
18
|
+
"@mui/system": "5.9.3",
|
|
19
19
|
"@types/googlemaps": "3.43.3",
|
|
20
20
|
"@types/markerclustererplus": "2.1.33",
|
|
21
|
-
"@types/node": "
|
|
21
|
+
"@types/node": "18.6.3",
|
|
22
22
|
"@types/react": "17.0.43",
|
|
23
|
-
"del-cli": "
|
|
24
|
-
"typescript": "4.7.
|
|
23
|
+
"del-cli": "5.0.0",
|
|
24
|
+
"typescript": "4.7.4"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "del-cli dist && npx tsc",
|