@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
666 lines (658 loc) • 28.7 kB
TypeScript
import * as packages_client_lib from 'packages/client/lib';
import * as i0 from '@angular/core';
import { OnInit, OnDestroy, TemplateRef, PipeTransform, OnChanges, EventEmitter } from '@angular/core';
import { GlobalAutoRefreshWidgetConfig, OnBeforeSave, AggregationOption, DynamicComponentAlertAggregator, AlertService, DashboardChildComponent, ColorRangeBoundaries } from '@c8y/ngx-components';
import { WidgetConfigService, ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';
import { KPIDetails, DatapointSelectorModalOptions, DatapointAttributesFormConfig } from '@c8y/ngx-components/datapoint-selector';
import { GlobalContextState, AggregationOptionStatus, PresetName, GLOBAL_CONTEXT_DISPLAY_MODE, WidgetConfigMigrationService } from '@c8y/ngx-components/global-context';
import { Observable, BehaviorSubject } from 'rxjs';
import { ISeries, IFetchResponse } from '@c8y/client';
import { TimeStamp, MinMaxValues, SourceId, DataFetchingService, DatapointsValuesDataMap, ExportConfig } from '@c8y/ngx-components/datapoints-export-selector';
import { Interval } from '@c8y/ngx-components/interval-picker';
import { TranslateService } from '@ngx-translate/core';
declare const DEFAULT_DPT_REFRESH_INTERVAL_VALUE = 30000;
type DatapointTableMapKey = `${TimeStamp}_${DeviceName}`;
/**
* Represents a mapping where the key is a datapoint identifier containing the date and device name, and the value is an array of data point table items or null.
*/
type DataPointsTableMap = Map<DatapointTableMapKey, (DatapointTableItem | null)[]>;
type DeviceName = string;
/**
* Represents a map of datapoints series data.
* The key of the map is a source, and the value is the data for requested series.
*/
type DatapointsSeriesDataMap = Map<SourceId, ISeries>;
/**
* Determines which values will be displayed as values for datapoints.
* e.g. if user chose 'min', only the minimum values will be displayed.
*/
type RenderType = keyof typeof RENDER_TYPES_LABELS;
/**
* Represents an object where key is a timestamp and value is an array
* where first record contains min and max values for a corresponding timestamp.
*/
type MeasurementRanges = {
[key: TimeStamp]: Array<MinMaxValues>;
};
/**
* Represents a value object where key is an object with min and max properties with its corresponding values.
*/
type Value = {
[key in keyof MinMaxValues]: number;
};
/**
* Represents the legacy's global time context date selection of the widget.
*/
declare const DATE_SELECTION_VALUES: {
readonly dashboard_context: "dashboard_context";
readonly config: "config";
readonly view_and_config: "view_and_config";
};
declare const DATE_SELECTION_VALUES_ARR: readonly ["dashboard_context", "config", "view_and_config"];
declare const DATE_SELECTION_LABELS: {
readonly config: "Widget configuration";
readonly view_and_config: "Widget and widget configuration";
readonly dashboard_context: "Dashboard time range";
};
declare const REFRESH_INTERVAL_VALUES_ARR: number[];
declare const RENDER_TYPES_LABELS: {
readonly min: "Minimum";
readonly max: "Maximum";
readonly area: "Area";
};
declare const INTERVAL_VALUES_ARR: readonly ["minutes", "hours", "days", "weeks", "months", "custom"];
declare const TIME_RANGE_INTERVAL_LABELS: {
readonly minutes: "Last minute";
readonly hours: "Last hour";
readonly days: "Last day";
readonly weeks: "Last week";
readonly months: "Last month";
readonly custom: "Custom";
};
declare const DURATION_OPTIONS: ({
id: "minutes";
label: "Last minute";
unit: "minutes";
amount: number;
} | {
id: "hours";
label: "Last hour";
unit: "hours";
amount: number;
} | {
id: "days";
label: "Last day";
unit: "days";
amount: number;
} | {
id: "weeks";
label: "Last week";
unit: "weeks";
amount: number;
} | {
id: "months";
label: "Last month";
unit: "months";
amount: number;
} | {
id: "custom";
label: "Custom";
unit?: undefined;
amount?: undefined;
})[];
interface DatapointWithValues extends KPIDetails {
seriesUnit?: string;
values: MeasurementRanges;
}
interface Duration {
id: string;
label: string;
unit?: string;
amount?: number;
}
interface TableColumnHeader {
deviceName: string;
label: string;
renderType: string;
unit: string;
}
interface DateRange {
dateFrom: string;
dateTo: string;
}
interface DatapointsTableConfig extends Partial<GlobalContextState>, LegacyGlobalTimeContextProperties {
context?: number;
datapoints: KPIDetails[];
decimalPlaces?: number;
interval: Interval['id'];
realtime: boolean;
selected?: object | null;
sliderChange?: boolean | null;
}
interface LegacyGlobalTimeContextProperties extends GlobalAutoRefreshWidgetConfig {
/**
* Array that contains global time context dateFrom and dateTo.
*/
date?: string[];
dateFrom: string;
dateTo: string;
displayDateSelection: boolean;
displaySettings: {
globalTimeContext: boolean;
globalRealtimeContext: boolean;
globalAggregationContext: boolean;
globalAutoRefreshContext: boolean;
};
widgetInstanceGlobalTimeContext?: boolean | null;
globalDateSelector?: keyof typeof DATE_SELECTION_VALUES;
}
interface DatapointTableItem {
dateAndTime: string;
deviceName: string;
fragment: string;
label: string;
redRangeMax?: number;
redRangeMin?: number;
renderType: string;
series: string;
value: Value;
yellowRangeMax?: number;
yellowRangeMin?: number;
}
interface GroupedDatapointTableItem {
dateAndTime: string;
deviceName: string;
rowItems: ({
fragment: string;
label: string;
redRangeMax?: number;
redRangeMin?: number;
renderType: string;
series: string;
value: Value;
yellowRangeMax?: number;
yellowRangeMin?: number;
} | null)[];
}
interface SeriesDataWithResponse {
source: SourceId;
data: ISeries;
res: IFetchResponse;
}
declare class DatapointsTableWidgetConfigComponent implements OnInit, OnBeforeSave, OnDestroy {
private readonly destroyRef;
private readonly formBuilder;
private readonly parentForm;
private readonly widgetConfig;
readonly widgetConfigService: WidgetConfigService;
set previewMapSet(template: TemplateRef<any>);
config: DatapointsTableConfig;
readonly AGGREGATION_LABELS: {
readonly NONE: string;
readonly MINUTELY: string;
readonly HOURLY: string;
readonly DAILY: string;
};
readonly DATE_SELECTION_LABELS: {
readonly config: "Widget configuration";
readonly view_and_config: "Widget and widget configuration";
readonly dashboard_context: "Dashboard time range";
};
readonly DEFAULT_DATE_SELECTOR_VALUE: "dashboard_context";
readonly DEFAULT_INTERVAL_VALUE: "hours";
readonly TIME_RANGE_INTERVAL_LABELS: {
readonly minutes: "Last minute";
readonly hours: "Last hour";
readonly days: "Last day";
readonly weeks: "Last week";
readonly months: "Last month";
readonly custom: "Custom";
};
readonly AGGREGATION_VALUES_ARR: readonly ["NONE", packages_client_lib.aggregationType.MINUTELY, packages_client_lib.aggregationType.HOURLY, packages_client_lib.aggregationType.DAILY];
readonly DATE_SELECTION_VALUES_ARR: readonly ["dashboard_context", "config", "view_and_config"];
readonly INTERVAL_VALUES_ARR: readonly ["minutes", "hours", "days", "weeks", "months", "custom"];
readonly REFRESH_INTERVAL_VALUES_ARR: number[];
datapointSelectionConfig: Partial<DatapointSelectorModalOptions>;
disabledAggregationOptions: AggregationOptionStatus;
defaultFormOptions: Partial<DatapointAttributesFormConfig>;
formGroup: ReturnType<DatapointsTableWidgetConfigComponent['createForm']>;
widgetControls: "dataTable";
/**
* Debounced config for preview to prevent multiple series requests on initial load.
* Uses auditTime to batch rapid emissions (e.g., from initConfig + GlobalContext processing).
* Without it the preview may request data multiple times unnecessarily.
*/
previewConfig$: Observable<DatapointsTableConfig>;
private DATAPOINTS_TABLE_CONTROL_NAME;
ngOnInit(): void;
ngOnDestroy(): void;
onBeforeSave(config?: DatapointsTableConfig): boolean;
private initForm;
private subscribeToFormChanges;
private createForm;
static ɵfac: i0.ɵɵFactoryDeclaration<DatapointsTableWidgetConfigComponent, never>;
static ɵcmp: i0.ɵɵComponentDeclaration<DatapointsTableWidgetConfigComponent, "c8y-datapoints-table-view-config", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
}
/**
* A pipe that adjusts the aggregated time range based on the aggregation type.
*
* ```html
* '9:00' | adjustAggregatedTimeRange: config.aggregation (e.g.:HOURLY)
* ```
* The output will be '9:00-10:00'.
*/
declare class AdjustAggregatedTimeRangePipe implements PipeTransform {
/**
* Transforms the input time based on the aggregation type.
* @param inputTime The input time string.
* @param aggregationType The type of aggregation (optional).
* @returns The transformed time string.
*/
transform(inputTime: string, aggregationType?: AggregationOption): string;
/**
* Creates a date object from the input time string.
* @param inputTime The input time string.
* @returns The created Date object.
*/
private createDateFromInput;
/**
* Validates if the time string matches the required format and has valid values.
* @param time The time string to validate.
* @param originalInput The original input string (including AM/PM if present).
* @throws Error if the time format is invalid or values are out of range.
*/
private validateTimeFormat;
private validateTimeParts;
private validateTimeDigits;
private parseTimeComponents;
private validateTimeRanges;
private validateTimeFormat24Hour;
/**
* Checks if string contains only digits and is 1-2 characters long.
* @param value String to check
* @returns boolean indicating if string is valid
*/
private isValidNumberString;
/**
* Checks if the input time has AM/PM markers.
* @param input The input time string to check.
* @returns boolean indicating if the input contains AM/PM.
*/
private hasAmPm;
/**
* Adjusts the date for PM times by adding 12 hours when necessary.
* @param date The date object to adjust.
* @param isPM Boolean indicating if the time is PM.
* @returns The adjusted Date object.
*/
private adjustForPMTime;
/**
* Checks if the input time is in twelve hours format.
* @param inputTime The input time string.
* @returns True if the input time is in twelve hours format, false otherwise.
*/
private isTwelveHoursFormat;
/**
* Gets the hourly time range for the given date.
* @param date The date object.
* @param twelveHoursFormat Indicates whether to use twelve hours format.
* @returns The hourly time range string.
*/
private getHourlyTimeRange;
/**
* Gets the minutely time range for the given date.
* @param date The date object.
* @param twelveHoursFormat Indicates whether to use twelve hours format.
* @returns The minutely time range string.
*/
private getMinutelyTimeRange;
/**
* Formats the given date into a time string.
* @param date The date to format.
* @param usePeriod Indicates whether to include the period (AM/PM) in the formatted time.
* @param useHourOnly Indicates whether to include only the hour part in the formatted time.
* @returns The formatted time string.
*/
private formatTime;
static ɵfac: i0.ɵɵFactoryDeclaration<AdjustAggregatedTimeRangePipe, never>;
static ɵpipe: i0.ɵɵPipeDeclaration<AdjustAggregatedTimeRangePipe, "adjustAggregatedTimeRange", true>;
}
declare class DatapointsTableViewService {
private dataFetchingService;
constructor(dataFetchingService: DataFetchingService);
/**
* Filters out inactive data points from the given array.
*
* @param datapoints - The array of data points to filter.
* @returns An array of data points that are active.
*/
filterOutInactiveDatapoints(datapoints: KPIDetails[]): KPIDetails[];
hasMultipleDatapoints(datapoints: KPIDetails[]): boolean;
/**
* Returns a map of active data points device IDs with their corresponding series.
*
* Example output:
* ```typescript
* new Map([
* [
* "844657202",
* [
* "c8y_Temperature.T"
* ]
* ],
* [
* "32666427",
* [
* "c8y_Battery.Battery"
* ]
* ]
* ]);
* ```
* @param datapoints - An array of data points.
* @returns A map where the key is the data point ID and the value is an array of data point series.
*/
groupSeriesByDeviceId(activeDatapoints: KPIDetails[]): DatapointsValuesDataMap;
/**
* Retrieves the active data points series data and returns it as a map.
*
* @param datapointsValuesDataMap - A map of data point sources with their associated series.
* @param config - The configuration of the data points table.
* @param roundSeconds - Whether to round the seconds or not.
* If true, the seconds will be rounded to 0.
* If false, the seconds will be displayed as they are.
* @returns A Promise that resolves to a Map object with data point IDs as keys and DataObject as values or undefined when all series has forbidden access.
*/
getAllActiveSeriesDataMap(datapointsValuesDataMap: DatapointsValuesDataMap, config: DatapointsTableConfig, roundSeconds: boolean): Promise<Map<string | number, ISeries>>;
/**
* Creates an array of DatapointsWithValues based on the provided datapoints and datapointsSeriesDataMap.
*
* Finds an index of a current data point within series object and based on that index filters values array.
*
* @param datapoints - An array of data points.
* @param datapointsSeriesDataMap - A map containing series data for data points.
* @returns An array of DatapointsWithValues.
*/
getDatapointsWithValues(datapoints: KPIDetails[], datapointsSeriesDataMap: DatapointsSeriesDataMap): DatapointWithValues[];
/**
* Creates the column headers for the devices in the data points table.
*
* @param datapointsWithValues - An array of data points.
* @returns An array of column headers for the devices.
*/
getColumnHeaders(datapointsWithValues: KPIDetails[]): TableColumnHeader[];
mapDatapointsWithValuesToList(datapointsWithValues: DatapointWithValues[]): DatapointTableItem[];
/**
* Finds the overall minimum and maximum values from an array of objects containing 'min' and 'max' properties.
*
* If the array contains only one object, that object's 'min' and 'max' values will be returned.
*
* @param valuesArray - An array with objects, where each contains 'min' and 'max' properties.
* @returns An object with the smallest 'min' and largest 'max' values found in the array.
*
* @example
* const values = [
* { min: 1, max: 10 }
* ];
*
* const result = findMinMaxValues(values);
* // result is { min: 1, max: 10 }
*/
findMinMaxValues(valuesArray: MinMaxValues[]): Value | null;
/**
* Groups a list of data points by date and device, based on given references.
*
* @param dataList - The list of data points to be grouped.
* @param references - The column headers that serve as references for grouping.
* @returns An array of grouped data points, where each group corresponds to a unique date and device.
*/
groupByDateAndDevice(dataList: DatapointTableItem[], references: TableColumnHeader[]): GroupedDatapointTableItem[];
/**
* Generates and populates a map with data points.
*
* This function processes the provided data points and organizes them into a map structure
* where each key is a unique combination of date and device identifiers, and the value is an
* array of data points (or null values) associated with that key. This structured data is then
* used in the data point table to render the data appropriately.
*
* @param dataList - The list of data point table items to be processed.
* @param columnsHeadersReferences - The list of column headers used to determine the order and structure of the map values.
* @returns A map where the key is a datapoint identifier containing the date and device name, and the value is an array of data point table items or null.
*/
generateDataPointMap(dataList: DatapointTableItem[], columnsHeadersReferences: TableColumnHeader[]): DataPointsTableMap;
/**
* Merges the data points from the given map into an array of grouped data point table items.
*
* @param map - The map containing the data points to be merged.
* @returns An array of grouped data point table items.
*/
mergeDatapoints(map: DataPointsTableMap): GroupedDatapointTableItem[];
sortDataByDateDescending(data: GroupedDatapointTableItem[]): GroupedDatapointTableItem[];
/**
* Prepares the updated time range based on the selected interval.
*
* In case of a 'custom' interval or no quantity, the original date range is returned.
*
* @param interval - The selected interval type.
* @returns An object containing the `dateFrom` and `dateTo` in ISO string format.
*/
prepareTimeRange(interval: Interval['id'], dateFromInput: string, dateToInput: string): {
dateFrom: string;
dateTo: string;
};
/**
* Subtracts an amount of time from a given date.
*
* @param date - The original date.
* @param amount - The amount of time units to subtract.
* @param unit - The unit of time to subtract (e.g., minutes, hours, days, weeks, months).
* @returns A new date with the specified time subtracted.
*/
subtractTime(date: Date, amount: number, unit: string): Date;
getSeriesWithoutPermissionToRead(activeDatapointsSeriesData: Map<string | number, ISeries> | undefined, activeDatapointsIdsWithSeries: DatapointsValuesDataMap): {
key: SourceId;
value: string[];
}[];
hasSecondsAndMillisecondsEqualZero(timeString: string): boolean;
/**
* Converts a date string to ISO format.
*
* @param dateStr - The date string to convert.
* @returns The ISO format of the given date string.
*/
private toISOFormat;
private filterOutElementsWithForbiddenResponses;
private subtractMonthsAndAdjustDay;
/**
* Calculates the target month number (0-11) after subtracting months from the current month.
* Handles negative month numbers by normalizing them to the valid 0-11 range.
*
* Examples:
* - January(0) - 1 month = December(11)
* - March(2) - 4 months = November(10)
* - December(11) - 1 month = November(10)
*
* @param currentMonth - Current month (0-11, where 0 is January)
* @param monthsToSubtract - Number of months to subtract
* @returns Normalized month number in range 0-11
*/
private calculateTargetMonth;
/**
* Sets the date to the last day of the previous month.
* Using 0 as dateValue makes JavaScript automatically calculate
* last day of previous month, per JavaScript Date API behavior.
* @param date - Date to modify
*/
private setToLastDayOfPreviousMonth;
static ɵfac: i0.ɵɵFactoryDeclaration<DatapointsTableViewService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<DatapointsTableViewService>;
}
declare class DatapointsTableViewWidgetComponent implements OnInit, OnDestroy {
private alertService;
private dashboardChild;
private datapointsTableViewService;
private translateService;
private dashboardContextComponent;
private widgetConfigMigrationService;
/**
* Data points table widget config.
*/
config: DatapointsTableConfig;
/**
* Indicates whether the component is in widget preview mode.
* If true, the table will be displayed without the export selector button.
*/
isInPreviewMode: boolean;
alerts: DynamicComponentAlertAggregator;
/**
* Represents the data points where __active property is set to true.
*/
activeDatapoints: KPIDetails[];
/**
* Represents the custom CSS style for the export selector component.
*/
containerClass: string;
/**
* An array of objects representing datapoints with their corresponding values.
* Used to populate the CSV/Excel file with data.
*/
datapointsWithValues: DatapointWithValues[];
/**
* An array of `GroupedDatapointTableItem` objects representing the datapoints table items.
* Used to populate the table with data.
*/
datapointsTableItems: GroupedDatapointTableItem[];
devicesColumnHeaders: TableColumnHeader[];
/**
* Represents a configuration options used by a c8y-datapoints-export-selector.
*/
exportConfig: ExportConfig;
/**
* Indicates whether there is more than one data point.
* If is true, then a column 'Device' will be displayed in the table.
*/
hasMultipleDatapoints: boolean;
/**
* Indicates whether refreshing should be enabled or disabled.
* It's 'true' when user is not allowed to view a measurements.
*/
isRefreshDisabled: boolean;
/**
* Indicates whether the component is in the initial request state
* where data for a table structure is being prepared.
*/
isInitialRequest: boolean;
/**
* Current isLoading state. Indicates whether the data is being loaded.
*/
isLoading$: BehaviorSubject<boolean>;
isScrolling: i0.WritableSignal<boolean>;
seriesWithoutPermissionToRead: {
key: SourceId;
value: string[];
}[];
hasAnyActiveDatapoint: boolean;
displayMode: i0.WritableSignal<"config" | "view_and_config" | "dashboard">;
contextConfig: i0.WritableSignal<GlobalContextState>;
isLinkedToGlobal: i0.WritableSignal<boolean>;
widgetControls: i0.WritableSignal<PresetName>;
readonly GLOBAL_CONTEXT_DISPLAY_MODE: typeof GLOBAL_CONTEXT_DISPLAY_MODE;
private TIMEOUT_ERROR_TEXT;
private SERVER_ERROR_TEXT;
private destroy$;
private scrollingSubject$;
private subscription;
private isFailedToFetchSeriesData;
/**
* Indicates if the alert has already been displayed and can be dismissed.
* The message is only displayed when a component is initialized.
*/
private isMissingAnyPermissionAlertShown;
constructor(alertService: AlertService, dashboardChild: DashboardChildComponent, datapointsTableViewService: DatapointsTableViewService, translateService: TranslateService, dashboardContextComponent: ContextDashboardComponent, widgetConfigMigrationService: WidgetConfigMigrationService);
ngOnInit(): Promise<void>;
ngOnChanges(): Promise<void>;
ngOnDestroy(): void;
onContextChange(event: {
context: GlobalContextState;
diff: GlobalContextState;
}): void;
onRefresh(): void;
onExportModalOpen(isOpened: boolean): Promise<void>;
onScrolling(isScrolling: boolean): void;
/**
* Sets up the scrolling subscription.
*
* Ensures similar UX as in the alarms countdown-pause logic.
*/
private setScrollingSubscription;
/**
* Prepares the table data by:
* - filtering out inactive data points,
* - checking if there are multiple devices as a source of data points,
* - getting the column headers for devices,
* - getting the series data for active data points (API call),
* - preparing data points with values list,
* - mapping data points with values to list items,
* - grouping data points by date and device,
* - sorting data by date descending.
*
* @param roundSeconds - Whether to round the seconds or not.
* If true, the seconds will be rounded to 0.
* If false, the seconds will be displayed as they are.
*/
private prepareTableData;
/**
* Retrieves the active data points series data and returns it as a map.
*
* It's a wrapper method with try-catch block.
*
* @param datapointsIdsWithSeries - A map of data point IDs with their associated series.
* @param config - The configuration of the data points table.
* @param roundSeconds - Whether to round the seconds or not.
* If true, the seconds will be rounded to 0.
* If false, the seconds will be displayed as they are.
* @returns A Promise that resolves to a Map object with data point IDs as keys and DataObject as values.
*/
private getActiveDatapointsSeriesDataMap;
private handleFetchError;
private handleMissingAnyPermissionErrorMessage;
private getMissingPermissionsMessage;
private updateExportConfig;
private checkIfHasAnyActiveDatapoint;
private assignContextFromContextDashboard;
static ɵfac: i0.ɵɵFactoryDeclaration<DatapointsTableViewWidgetComponent, [null, { optional: true; }, null, null, { optional: true; }, null]>;
static ɵcmp: i0.ɵɵComponentDeclaration<DatapointsTableViewWidgetComponent, "c8y-datapoints-table-view", never, { "config": { "alias": "config"; "required": false; }; "isInPreviewMode": { "alias": "isInPreviewMode"; "required": false; }; }, {}, never, never, true, never>;
}
declare class DatapointsTableComponent implements OnChanges {
aggregationType: AggregationOption;
datapointsTableItems: GroupedDatapointTableItem[];
devicesColumnHeaders: TableColumnHeader[];
decimalPlaces: number;
hasMultipleDatapoints: boolean;
isLoading: boolean;
seriesWithoutPermissionToReadCount: number;
isScrolling: EventEmitter<boolean>;
hasNoPermissionsToReadAnyMeasurement: boolean;
missingAllPermissionsAlert: DynamicComponentAlertAggregator;
/**
* Default fraction size format for numbers with decimal places.
*/
private fractionSize;
ngOnChanges(): void;
onListScrolled(): void;
onListScrolledToTop(): void;
getRangeValues(row: KPIDetails): ColorRangeBoundaries;
/**
* Determines the fraction size format based on whether the number is an integer or has decimal places.
*
* @param value - The number to be formatted.
* @returns Returns '1.0-0' if the number is an integer, otherwise returns the current fraction size.
*/
getFractionSize(value: number): string;
private handleNoPermissionErrorMessage;
private showMessageForMissingPermissionsForAllSeries;
static ɵfac: i0.ɵɵFactoryDeclaration<DatapointsTableComponent, never>;
static ɵcmp: i0.ɵɵComponentDeclaration<DatapointsTableComponent, "c8y-datapoints-table", never, { "aggregationType": { "alias": "aggregationType"; "required": false; }; "datapointsTableItems": { "alias": "datapointsTableItems"; "required": false; }; "devicesColumnHeaders": { "alias": "devicesColumnHeaders"; "required": false; }; "decimalPlaces": { "alias": "decimalPlaces"; "required": false; }; "hasMultipleDatapoints": { "alias": "hasMultipleDatapoints"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "seriesWithoutPermissionToReadCount": { "alias": "seriesWithoutPermissionToReadCount"; "required": false; }; }, { "isScrolling": "isScrolling"; }, never, never, true, never>;
}
export { AdjustAggregatedTimeRangePipe, DATE_SELECTION_LABELS, DATE_SELECTION_VALUES, DATE_SELECTION_VALUES_ARR, DEFAULT_DPT_REFRESH_INTERVAL_VALUE, DURATION_OPTIONS, DatapointsTableComponent, DatapointsTableViewService, DatapointsTableViewWidgetComponent, DatapointsTableWidgetConfigComponent, INTERVAL_VALUES_ARR, REFRESH_INTERVAL_VALUES_ARR, RENDER_TYPES_LABELS, TIME_RANGE_INTERVAL_LABELS };
export type { DataPointsTableMap, DatapointTableItem, DatapointTableMapKey, DatapointWithValues, DatapointsSeriesDataMap, DatapointsTableConfig, DateRange, Duration, GroupedDatapointTableItem, MeasurementRanges, RenderType, SeriesDataWithResponse, TableColumnHeader, Value };
//# sourceMappingURL=index.d.ts.map