@firestitch/report 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/app/reports/components/component-chart/component-chart.component.d.ts +16 -0
  2. package/app/reports/components/component-kpi/component-kpi.component.d.ts +12 -0
  3. package/app/reports/components/component-list/component-list.component.d.ts +27 -0
  4. package/app/reports/components/report-canvas/report-canvas.component.d.ts +84 -0
  5. package/app/reports/components/report-component/report-component.component.d.ts +71 -0
  6. package/app/reports/components/timezone-select/timezone-select.component.d.ts +18 -0
  7. package/app/reports/data/report.data.d.ts +48 -0
  8. package/app/reports/dialogs/component-settings/component-settings.component.d.ts +49 -0
  9. package/app/reports/dialogs/report-settings/report-settings.component.d.ts +25 -0
  10. package/app/reports/export/offscreen-chart.d.ts +2 -0
  11. package/app/reports/export/report-export-collector.service.d.ts +26 -0
  12. package/app/reports/export/report-pdf.service.d.ts +13 -0
  13. package/app/reports/export/report-pptx.service.d.ts +14 -0
  14. package/app/reports/format.d.ts +1 -0
  15. package/app/reports/interfaces/report.interface.d.ts +174 -0
  16. package/app/reports/layout.d.ts +11 -0
  17. package/app/reports/option-builder.d.ts +15 -0
  18. package/app/reports/report-filter-items.d.ts +9 -0
  19. package/app/reports/services/report-filter-state.service.d.ts +25 -0
  20. package/app/reports/services/report.service.d.ts +15 -0
  21. package/app/reports/theme/echarts.d.ts +2 -0
  22. package/app/reports/theme/palette.d.ts +2 -0
  23. package/app/reports/views/report/report.component.d.ts +50 -0
  24. package/esm2022/app/reports/components/component-chart/component-chart.component.mjs +47 -0
  25. package/esm2022/app/reports/components/component-kpi/component-kpi.component.mjs +33 -0
  26. package/esm2022/app/reports/components/component-list/component-list.component.mjs +178 -0
  27. package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +347 -0
  28. package/esm2022/app/reports/components/report-component/report-component.component.mjs +453 -0
  29. package/esm2022/app/reports/components/timezone-select/timezone-select.component.mjs +70 -0
  30. package/esm2022/app/reports/data/report.data.mjs +152 -0
  31. package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +221 -0
  32. package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +109 -0
  33. package/esm2022/app/reports/export/offscreen-chart.mjs +33 -0
  34. package/esm2022/app/reports/export/report-export-collector.service.mjs +94 -0
  35. package/esm2022/app/reports/export/report-pdf.service.mjs +155 -0
  36. package/esm2022/app/reports/export/report-pptx.service.mjs +224 -0
  37. package/esm2022/app/reports/format.mjs +25 -0
  38. package/esm2022/app/reports/interfaces/report.interface.mjs +16 -0
  39. package/esm2022/app/reports/layout.mjs +50 -0
  40. package/esm2022/app/reports/option-builder.mjs +293 -0
  41. package/esm2022/app/reports/report-filter-items.mjs +125 -0
  42. package/esm2022/app/reports/services/report-filter-state.service.mjs +177 -0
  43. package/esm2022/app/reports/services/report.service.mjs +56 -0
  44. package/esm2022/app/reports/theme/echarts.mjs +59 -0
  45. package/esm2022/app/reports/theme/palette.mjs +10 -0
  46. package/esm2022/app/reports/views/report/report.component.mjs +354 -0
  47. package/esm2022/firestitch-report.mjs +5 -0
  48. package/esm2022/public_api.mjs +13 -0
  49. package/fesm2022/firestitch-report-echarts-BxYnpz7n.mjs +60 -0
  50. package/fesm2022/firestitch-report-echarts-BxYnpz7n.mjs.map +1 -0
  51. package/fesm2022/firestitch-report-firestitch-report-Cnotycly.mjs +3107 -0
  52. package/fesm2022/firestitch-report-firestitch-report-Cnotycly.mjs.map +1 -0
  53. package/fesm2022/firestitch-report.mjs +2 -0
  54. package/fesm2022/firestitch-report.mjs.map +1 -0
  55. package/index.d.ts +5 -0
  56. package/package.json +39 -0
  57. package/public_api.d.ts +5 -0
  58. package/styles.scss +1 -0
@@ -0,0 +1,16 @@
1
+ import { OnChanges } from '@angular/core';
2
+ import type { EChartsOption, ECharts } from 'echarts';
3
+ import { ComponentData, ReportComponent } from '../../interfaces/report.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class ComponentChartComponent implements OnChanges {
6
+ component: ReportComponent;
7
+ data: ComponentData | null;
8
+ options: EChartsOption | null;
9
+ private _chart;
10
+ ngOnChanges(): void;
11
+ onChartInit(chart: ECharts): void;
12
+ resize(): void;
13
+ getDataURL(pixelRatio?: number): string | null;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComponentChartComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComponentChartComponent, "app-report-component-chart", never, { "component": { "alias": "component"; "required": false; }; "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
16
+ }
@@ -0,0 +1,12 @@
1
+ import { OnChanges } from '@angular/core';
2
+ import { ComponentData, ReportComponent } from '../../interfaces/report.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ComponentKpiComponent implements OnChanges {
5
+ component: ReportComponent;
6
+ data: ComponentData | null;
7
+ value: string;
8
+ label: string;
9
+ ngOnChanges(): void;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComponentKpiComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComponentKpiComponent, "app-report-component-kpi", never, { "component": { "alias": "component"; "required": false; }; "data": { "alias": "data"; "required": false; }; }, {}, never, never, true, never>;
12
+ }
@@ -0,0 +1,27 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { FsListComponent, FsListConfig } from '@firestitch/list';
3
+ import { ReportComponent, ReportFilterGroup } from '../../interfaces/report.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class ComponentListComponent implements OnInit {
6
+ reportId: number;
7
+ component: ReportComponent;
8
+ groups: Map<number, ReportFilterGroup>;
9
+ listComponent: FsListComponent;
10
+ listConfig: FsListConfig;
11
+ columns: {
12
+ column: string;
13
+ label?: string;
14
+ format?: string;
15
+ }[];
16
+ private _reportData;
17
+ private _filterState;
18
+ private _destroyRef;
19
+ ngOnInit(): void;
20
+ private _initListConfig;
21
+ private _ownFilters;
22
+ private _filterItem;
23
+ private _fetch;
24
+ private _barValues;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComponentListComponent, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComponentListComponent, "app-report-component-list", never, { "reportId": { "alias": "reportId"; "required": false; }; "component": { "alias": "component"; "required": false; }; "groups": { "alias": "groups"; "required": false; }; }, {}, never, never, true, never>;
27
+ }
@@ -0,0 +1,84 @@
1
+ import { AfterViewInit, EventEmitter, OnChanges } from '@angular/core';
2
+ import { FsZoomPanComponent } from '@firestitch/zoom-pan';
3
+ import { Report, ReportComponent, ReportFilterGroup, ReportPage } from '../../interfaces/report.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare const PX_PER_INCH = 96;
6
+ export interface GuideLine {
7
+ orientation: 'v' | 'h';
8
+ position: number;
9
+ }
10
+ export interface CanvasSnapper {
11
+ snapMove(component: ReportComponent, x: number, y: number): {
12
+ x: number;
13
+ y: number;
14
+ };
15
+ snapResize(component: ReportComponent, geometry: {
16
+ x: number;
17
+ y: number;
18
+ w: number;
19
+ h: number;
20
+ }, handle: string): {
21
+ x: number;
22
+ y: number;
23
+ w: number;
24
+ h: number;
25
+ };
26
+ clear(): void;
27
+ }
28
+ export declare class ReportCanvasComponent implements OnChanges, AfterViewInit {
29
+ report: Report;
30
+ editMode: boolean;
31
+ componentSettings: EventEmitter<ReportComponent>;
32
+ reportChanged: EventEmitter<void>;
33
+ editDone: EventEmitter<void>;
34
+ zoomPan: FsZoomPanComponent;
35
+ private _viewport;
36
+ private _guides;
37
+ readonly PX = 96;
38
+ readonly flowPadding = 0.25;
39
+ activePageIndex: number;
40
+ zoom: number;
41
+ groups: Map<number, ReportFilterGroup>;
42
+ selectedComponentId: number | null;
43
+ readonly snapper: CanvasSnapper;
44
+ private _reportData;
45
+ private _cdRef;
46
+ private _destroyRef;
47
+ private _fitted;
48
+ private _previousPageCount;
49
+ ngOnChanges(): void;
50
+ get headingSizePx(): number;
51
+ ngAfterViewInit(): void;
52
+ get isFlow(): boolean;
53
+ get activePage(): ReportPage | null;
54
+ get flowComponents(): ReportComponent[];
55
+ selectPage(index: number): void;
56
+ addPage(): void;
57
+ pageLabel(page: ReportPage, index: number): string;
58
+ selectComponent(componentId: number | null): void;
59
+ onCanvasPointerDown(): void;
60
+ onZoomed(scale: number): void;
61
+ zoomIn(): void;
62
+ zoomOut(): void;
63
+ zoomFit(): void;
64
+ zoomActual(): void;
65
+ onPositionChanged(position: {
66
+ componentId: number;
67
+ } & Record<string, number>): void;
68
+ onFlowReorder(event: {
69
+ componentId: number;
70
+ clientX: number;
71
+ clientY: number;
72
+ }): void;
73
+ private _flowDropIndex;
74
+ private get _snapThreshold();
75
+ private _snapMove;
76
+ private _snapResize;
77
+ private _candidates;
78
+ private _snapAxis;
79
+ private _nearest;
80
+ private _renderGuides;
81
+ private _clearGuides;
82
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportCanvasComponent, never>;
83
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReportCanvasComponent, "app-report-canvas", never, { "report": { "alias": "report"; "required": false; }; "editMode": { "alias": "editMode"; "required": false; }; }, { "componentSettings": "componentSettings"; "reportChanged": "reportChanged"; "editDone": "editDone"; }, never, never, true, never>;
84
+ }
@@ -0,0 +1,71 @@
1
+ import { EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
2
+ import { FilterConfig } from '@firestitch/filter';
3
+ import { ComponentData, ReportComponent as ReportComponentModel, ReportFilterGroup, ReportLayout } from '../../interfaces/report.interface';
4
+ import { ComponentChartComponent } from '../component-chart/component-chart.component';
5
+ import { CanvasSnapper } from '../report-canvas/report-canvas.component';
6
+ import * as i0 from "@angular/core";
7
+ declare const HANDLES: readonly ["nw", "n", "ne", "e", "se", "s", "sw", "w"];
8
+ type Handle = typeof HANDLES[number];
9
+ export declare class ReportComponentComponent implements OnInit, OnChanges {
10
+ reportId: number;
11
+ component: ReportComponentModel;
12
+ groups: Map<number, ReportFilterGroup>;
13
+ editMode: boolean;
14
+ layout: ReportLayout;
15
+ zoom: number;
16
+ snapper: CanvasSnapper | null;
17
+ selected: boolean;
18
+ selectComponent: EventEmitter<number>;
19
+ positionChanged: EventEmitter<{
20
+ componentId: number;
21
+ } & Record<string, number>>;
22
+ flowReorder: EventEmitter<{
23
+ componentId: number;
24
+ clientX: number;
25
+ clientY: number;
26
+ }>;
27
+ openSettings: EventEmitter<ReportComponentModel>;
28
+ chartComponent: ComponentChartComponent;
29
+ get resizeHandles(): readonly Handle[];
30
+ filterConfig: FilterConfig;
31
+ data: ComponentData | null;
32
+ loading: boolean;
33
+ error: string | null;
34
+ private _refresh$;
35
+ private _reportData;
36
+ private _filterState;
37
+ private _process;
38
+ private _destroyRef;
39
+ private _cdRef;
40
+ private _zone;
41
+ private _host;
42
+ ngOnInit(): void;
43
+ ngOnChanges(changes: SimpleChanges): void;
44
+ get filterKey(): string;
45
+ get truncated(): boolean;
46
+ get bodyPadding(): string;
47
+ get componentFilterGroups(): ReportFilterGroup[];
48
+ settings(): void;
49
+ exportCsv(): void;
50
+ stopCanvasPan(event: Event): void;
51
+ onComponentPointerDown(event: PointerEvent): void;
52
+ onDragStart(event: PointerEvent): void;
53
+ onResizeStart(event: PointerEvent, handle: Handle): void;
54
+ private _buildFilterConfig;
55
+ private _flowResize;
56
+ private _flowDrag;
57
+ private _origin;
58
+ private _track;
59
+ private _emitGeometry;
60
+ private get _isTimeSeries();
61
+ private get _heightAuto();
62
+ get heightAuto(): boolean;
63
+ private _inches;
64
+ private _round;
65
+ private _snapFlowWidth;
66
+ private _applyGeometry;
67
+ private _load;
68
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportComponentComponent, never>;
69
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReportComponentComponent, "app-report-component", never, { "reportId": { "alias": "reportId"; "required": false; }; "component": { "alias": "component"; "required": false; }; "groups": { "alias": "groups"; "required": false; }; "editMode": { "alias": "editMode"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "zoom": { "alias": "zoom"; "required": false; }; "snapper": { "alias": "snapper"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; }, { "selectComponent": "selectComponent"; "positionChanged": "positionChanged"; "flowReorder": "flowReorder"; "openSettings": "openSettings"; }, never, never, true, never>;
70
+ }
71
+ export {};
@@ -0,0 +1,18 @@
1
+ import { EventEmitter, OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class TimezoneSelectComponent implements OnInit {
4
+ placeholder: string;
5
+ required: boolean;
6
+ disabled: boolean;
7
+ timezoneChange: EventEmitter<string>;
8
+ set timezone(value: string);
9
+ get timezone(): string;
10
+ guid: string;
11
+ timezones: string[];
12
+ private _browserTimezone;
13
+ private _timezone;
14
+ ngOnInit(): void;
15
+ private _supportedTimezones;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<TimezoneSelectComponent, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<TimezoneSelectComponent, "fs-ai-report-timezone-select", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "timezone": { "alias": "timezone"; "required": false; }; }, { "timezoneChange": "timezoneChange"; }, never, never, true, never>;
18
+ }
@@ -0,0 +1,48 @@
1
+ import { RequestConfig } from '@firestitch/api';
2
+ import { Observable } from 'rxjs';
3
+ import { ComponentDataState, ReportFilterLevel, ResolvedFilterValue } from '../interfaces/report.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class ReportData<T = any> {
6
+ private _api;
7
+ basePath: string;
8
+ private _path;
9
+ reports(query?: any, config?: RequestConfig): Observable<T>;
10
+ create(name: string, config?: RequestConfig): Observable<T>;
11
+ rename(reportId: number, name: string, config?: RequestConfig): Observable<T>;
12
+ update(reportId: number, settings: Record<string, unknown>, config?: RequestConfig): Observable<T>;
13
+ addPage(reportId: number, config?: RequestConfig): Observable<T>;
14
+ updateComponent(reportId: number, componentId: number, settings: Record<string, unknown>, config?: RequestConfig): Observable<T>;
15
+ delete(reportId: number, config?: RequestConfig): Observable<T>;
16
+ get(reportId: number, config?: RequestConfig): Observable<T>;
17
+ savePositions(reportId: number, positions: ({
18
+ componentId: number;
19
+ } & Partial<{
20
+ x: number;
21
+ y: number;
22
+ w: number;
23
+ h: number;
24
+ flowWidth: number;
25
+ order: number;
26
+ }>)[], config?: RequestConfig): Observable<T>;
27
+ componentData(reportId: number, componentId: number, filters?: ResolvedFilterValue[], state?: ComponentDataState, config?: RequestConfig): Observable<T>;
28
+ exportComponent(reportId: number, componentId: number, filters?: ResolvedFilterValue[], state?: ComponentDataState, config?: RequestConfig): Observable<T>;
29
+ filterOptions(reportId: number, filterId: number, config?: RequestConfig): Observable<T>;
30
+ componentColumns(reportId: number, componentId: number, config?: RequestConfig): Observable<T>;
31
+ addFilter(reportId: number, componentId: number, filter: {
32
+ filterColumn: string;
33
+ type?: string;
34
+ label?: string;
35
+ level?: string;
36
+ optionsSql?: string;
37
+ groupId?: number;
38
+ }, config?: RequestConfig): Observable<T>;
39
+ updateFilter(reportId: number, filterId: number, changes: {
40
+ label?: string;
41
+ optionsSql?: string;
42
+ enabled?: boolean;
43
+ }, config?: RequestConfig): Observable<T>;
44
+ deleteFilter(reportId: number, filterId: number, config?: RequestConfig): Observable<T>;
45
+ setFilterGroupLevel(reportId: number, groupId: number, level: ReportFilterLevel, config?: RequestConfig): Observable<T>;
46
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportData<any>, never>;
47
+ static ɵprov: i0.ɵɵInjectableDeclaration<ReportData<any>>;
48
+ }
@@ -0,0 +1,49 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { Report, ReportComponent, ReportFilterType } from '../../interfaces/report.interface';
4
+ import * as i0 from "@angular/core";
5
+ interface FilterRow {
6
+ column: string;
7
+ type: ReportFilterType;
8
+ label: string;
9
+ report: boolean;
10
+ component: boolean;
11
+ }
12
+ export declare class ComponentSettingsComponent implements OnInit {
13
+ component: ReportComponent;
14
+ report: Report;
15
+ selectedTab: string;
16
+ title: string;
17
+ paddingTop: number;
18
+ paddingRight: number;
19
+ paddingBottom: number;
20
+ paddingLeft: number;
21
+ configJson: string;
22
+ rows: FilterRow[];
23
+ columnsError: string | null;
24
+ private _filterableColumns;
25
+ private _filters;
26
+ private _groupsById;
27
+ private readonly _typeLabels;
28
+ private _changed;
29
+ private readonly _data;
30
+ private readonly _dialogRef;
31
+ private readonly _reportData;
32
+ private readonly _message;
33
+ private readonly _cdRef;
34
+ ngOnInit(): void;
35
+ get hasChanges(): boolean;
36
+ typeLabel(type: ReportFilterType): string;
37
+ save: () => Observable<any>;
38
+ setExposure(row: FilterRow, target: 'report' | 'component', on: boolean): void;
39
+ private _run;
40
+ private _rebuildRows;
41
+ private _afterMutation;
42
+ private _mutationError;
43
+ private _seedFilters;
44
+ private _loadColumns;
45
+ private _humanize;
46
+ static ɵfac: i0.ɵɵFactoryDeclaration<ComponentSettingsComponent, never>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<ComponentSettingsComponent, "ng-component", never, {}, {}, never, never, true, never>;
48
+ }
49
+ export {};
@@ -0,0 +1,25 @@
1
+ import { OnInit } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export interface ReportSettingsResult {
4
+ action: 'saved' | 'deleted';
5
+ }
6
+ export declare class ReportSettingsComponent implements OnInit {
7
+ selectedTab: string;
8
+ name: string;
9
+ pageSize: 'widescreen' | 'letter';
10
+ pageOrientation: 'landscape' | 'portrait';
11
+ layout: 'freeform' | 'flow';
12
+ timezone: string;
13
+ headingSize: number;
14
+ private readonly _data;
15
+ private readonly _dialogRef;
16
+ private readonly _reportData;
17
+ private readonly _message;
18
+ private readonly _prompt;
19
+ private readonly _destroyRef;
20
+ ngOnInit(): void;
21
+ delete(): void;
22
+ save: () => import("rxjs").Observable<any>;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportSettingsComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<ReportSettingsComponent, "ng-component", never, {}, {}, never, never, true, never>;
25
+ }
@@ -0,0 +1,2 @@
1
+ import { ComponentData, ReportComponent } from '../interfaces/report.interface';
2
+ export declare function renderChartImage(component: ReportComponent, data: ComponentData, width: number, height: number, pixelRatio?: number): Promise<string>;
@@ -0,0 +1,26 @@
1
+ import { Observable } from 'rxjs';
2
+ import { ComponentData, Report, ReportComponent, ReportPage } from '../interfaces/report.interface';
3
+ import * as i0 from "@angular/core";
4
+ export interface CollectedComponent {
5
+ component: ReportComponent;
6
+ data: ComponentData | null;
7
+ }
8
+ export interface CollectedPage {
9
+ page: ReportPage;
10
+ components: CollectedComponent[];
11
+ }
12
+ export interface CollectedReport {
13
+ report: Report;
14
+ pages: CollectedPage[];
15
+ filterSummary: string[];
16
+ }
17
+ export declare class ReportExportCollectorService {
18
+ private _reportData;
19
+ private _filterState;
20
+ collect(report: Report): Observable<CollectedReport>;
21
+ private _componentData;
22
+ private _filterSummary;
23
+ private _date;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportExportCollectorService, never>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<ReportExportCollectorService>;
26
+ }
@@ -0,0 +1,13 @@
1
+ import { CollectedReport } from './report-export-collector.service';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ReportPdfService {
4
+ export(collected: CollectedReport): Promise<void>;
5
+ private _titlePage;
6
+ private _renderComponent;
7
+ private _renderTable;
8
+ private _renderKpi;
9
+ private _cell;
10
+ private _slug;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportPdfService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<ReportPdfService>;
13
+ }
@@ -0,0 +1,14 @@
1
+ import { CollectedReport } from './report-export-collector.service';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ReportPptxService {
4
+ export(collected: CollectedReport): Promise<void>;
5
+ private _titleSlide;
6
+ private _renderComponent;
7
+ private _renderChart;
8
+ private _renderTable;
9
+ private _renderKpi;
10
+ private _cell;
11
+ private _slug;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportPptxService, never>;
13
+ static ɵprov: i0.ɵɵInjectableDeclaration<ReportPptxService>;
14
+ }
@@ -0,0 +1 @@
1
+ export declare function formatMeasureValue(value: unknown, format?: string): string;
@@ -0,0 +1,174 @@
1
+ export type ReportLayout = 'freeform' | 'flow';
2
+ export interface Report {
3
+ id: number;
4
+ name: string;
5
+ pageSize: 'widescreen' | 'letter';
6
+ pageOrientation: 'landscape' | 'portrait';
7
+ layout: ReportLayout;
8
+ timezone: string | null;
9
+ config: ReportConfig;
10
+ pageWidth: number;
11
+ pageHeight: number;
12
+ pages: ReportPage[];
13
+ filterGroups: ReportFilterGroup[];
14
+ }
15
+ export interface ReportConfig {
16
+ styles?: ReportStyles;
17
+ }
18
+ export interface ReportStyles {
19
+ heading?: {
20
+ size?: number;
21
+ };
22
+ }
23
+ export interface ComponentPadding {
24
+ top?: number;
25
+ right?: number;
26
+ bottom?: number;
27
+ left?: number;
28
+ }
29
+ export interface ReportPage {
30
+ id: number;
31
+ name: string | null;
32
+ order: number;
33
+ components: ReportComponent[];
34
+ }
35
+ export type ReportComponentType = 'chart' | 'list' | 'kpi';
36
+ export interface ReportComponent {
37
+ id: number;
38
+ type: ReportComponentType;
39
+ title: string | null;
40
+ x: number;
41
+ y: number;
42
+ w: number;
43
+ h: number;
44
+ autoHeight: boolean;
45
+ flowWidth: number;
46
+ order: number;
47
+ sql: string | null;
48
+ config: ChartConfig & ListConfig & KpiConfig & ComponentLayoutConfig & Record<string, unknown>;
49
+ filters: ReportFilter[];
50
+ }
51
+ export interface ComponentLayoutConfig {
52
+ padding?: ComponentPadding;
53
+ }
54
+ export type LegendPosition = 'top' | 'bottom' | 'left' | 'right' | 'hidden';
55
+ export type ChartGranularity = 'day' | 'week' | 'month' | 'quarter' | 'year';
56
+ export declare const FREQUENCY_OPTIONS: {
57
+ value: ChartGranularity;
58
+ name: string;
59
+ }[];
60
+ export interface ChartConfig {
61
+ chartType?: 'bar' | 'line' | 'area' | 'pie' | 'donut';
62
+ xAxis?: {
63
+ column: string;
64
+ kind?: 'category' | 'time';
65
+ granularity?: ChartGranularity;
66
+ label?: string;
67
+ };
68
+ measures?: ChartMeasure[];
69
+ splitBy?: {
70
+ column: string;
71
+ label?: string;
72
+ };
73
+ colorBy?: {
74
+ column: string;
75
+ label?: string;
76
+ };
77
+ orientation?: 'vertical' | 'horizontal';
78
+ stacked?: boolean;
79
+ legend?: LegendPosition;
80
+ sort?: ReportSort;
81
+ limit?: number;
82
+ }
83
+ export interface ChartMeasure {
84
+ column: string;
85
+ aggregation?: 'sum' | 'count' | 'avg' | 'min' | 'max';
86
+ label?: string;
87
+ format?: 'number' | 'percent' | 'currency';
88
+ }
89
+ export interface ListConfig {
90
+ columns?: {
91
+ column: string;
92
+ label?: string;
93
+ format?: 'date' | 'number';
94
+ }[];
95
+ sort?: ReportSort;
96
+ pageSize?: number;
97
+ }
98
+ export interface KpiConfig {
99
+ measure?: ChartMeasure;
100
+ }
101
+ export interface ReportSort {
102
+ column: string;
103
+ direction?: 'asc' | 'desc';
104
+ }
105
+ export type ReportFilterType = 'dateRange' | 'select' | 'keyword';
106
+ export type ReportFilterLevel = 'component' | 'report' | 'both';
107
+ export interface ReportFilterableColumn {
108
+ column: string;
109
+ type: ReportFilterType;
110
+ }
111
+ export interface ReportFilter {
112
+ id: number;
113
+ componentId: number;
114
+ filterGroupId: number;
115
+ filterColumn: string;
116
+ label: string | null;
117
+ enabled: boolean;
118
+ hasOptions: boolean;
119
+ config: Record<string, unknown>;
120
+ }
121
+ export interface ReportFilterGroup {
122
+ id: number;
123
+ label: string | null;
124
+ type: ReportFilterType;
125
+ level: ReportFilterLevel;
126
+ order: number;
127
+ config: {
128
+ default?: FilterGroupDefault;
129
+ } & Record<string, unknown>;
130
+ filters: ReportFilter[];
131
+ }
132
+ export interface FilterGroupDefault {
133
+ relative?: string;
134
+ start?: string;
135
+ end?: string;
136
+ }
137
+ export interface FilterGroupValue {
138
+ start?: Date | string | null;
139
+ end?: Date | string | null;
140
+ values?: unknown[];
141
+ value?: string;
142
+ }
143
+ export interface ResolvedFilterValue {
144
+ filterId: number;
145
+ start?: string;
146
+ end?: string;
147
+ values?: unknown[];
148
+ value?: string;
149
+ }
150
+ export interface ComponentDataState {
151
+ sort?: ReportSort;
152
+ page?: number;
153
+ pageSize?: number;
154
+ frequency?: ChartGranularity;
155
+ }
156
+ export interface ComponentData {
157
+ columns: string[];
158
+ rows: Record<string, unknown>[];
159
+ paging?: {
160
+ total: number;
161
+ page: number;
162
+ pageSize: number;
163
+ };
164
+ truncated: boolean;
165
+ granularity?: ChartGranularity | null;
166
+ }
167
+ export interface ReportListItem {
168
+ id: number;
169
+ name: string;
170
+ }
171
+ export interface ReportChatResponse {
172
+ reportChanged?: boolean;
173
+ reportRenamed?: boolean;
174
+ }
@@ -0,0 +1,11 @@
1
+ import { Report, ReportPage } from './interfaces/report.interface';
2
+ export declare const FLOW_PADDING = 0.25;
3
+ export declare const DEFAULT_COMPONENT_PADDING = 0.125;
4
+ export declare const DEFAULT_HEADING_SIZE = 16;
5
+ export interface ComponentGeometry {
6
+ x: number;
7
+ y: number;
8
+ w: number;
9
+ h: number;
10
+ }
11
+ export declare function pageGeometry(report: Report, page: ReportPage): Map<number, ComponentGeometry>;
@@ -0,0 +1,15 @@
1
+ import type { EChartsOption } from 'echarts';
2
+ import { ChartConfig, ChartGranularity, ComponentData, LegendPosition, ReportComponent } from './interfaces/report.interface';
3
+ export declare function isColorBy(config: ChartConfig): boolean;
4
+ export interface ExtractedChartSeries {
5
+ categories: string[];
6
+ series: {
7
+ name: string;
8
+ values: (number | null)[];
9
+ }[];
10
+ }
11
+ export declare function extractChartSeries(component: ReportComponent, data: ComponentData): ExtractedChartSeries;
12
+ export declare function buildChartOption(component: ReportComponent, data: ComponentData): EChartsOption;
13
+ export declare function resolveLegendPosition(config: ChartConfig, seriesCount: number, colorBy?: boolean): LegendPosition;
14
+ export declare function spansMultipleYears(categories: string[]): boolean;
15
+ export declare function formatPeriodLabel(value: string, granularity: ChartGranularity, multiYear: boolean): string;
@@ -0,0 +1,9 @@
1
+ import { IFilterConfigItem } from '@firestitch/filter';
2
+ import { ReportData } from './data/report.data';
3
+ import { FilterGroupValue, ReportFilterGroup } from './interfaces/report.interface';
4
+ export declare function dateBoundString(value: Date | string | null | undefined): string | undefined;
5
+ export declare function filterItemForGroup(group: ReportFilterGroup, reportData: ReportData, reportId: number, initial?: FilterGroupValue): IFilterConfigItem;
6
+ export declare function groupValuesFromQuery(query: Record<string, any>, groups: ReportFilterGroup[]): {
7
+ groupId: number;
8
+ value: FilterGroupValue | null;
9
+ }[];
@@ -0,0 +1,25 @@
1
+ import { Observable } from 'rxjs';
2
+ import { ChartGranularity, FilterGroupValue, Report, ReportComponent, ResolvedFilterValue } from '../interfaces/report.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ReportFilterStateService {
5
+ private _values;
6
+ private _groups;
7
+ private _sessionDisabled;
8
+ private _frequency;
9
+ private _frequencyChanged$;
10
+ private _changed$;
11
+ init(report: Report): void;
12
+ value(groupId: number): FilterGroupValue | undefined;
13
+ setValue(groupId: number, value: FilterGroupValue | null): void;
14
+ frequency(): ChartGranularity | null;
15
+ setFrequency(frequency: ChartGranularity | null): void;
16
+ frequencyChanges(): Observable<void>;
17
+ isFilterDisabled(filterId: number): boolean;
18
+ toggleFilter(filterId: number, groupId: number): void;
19
+ changesFor(component: ReportComponent): Observable<number | null>;
20
+ resolveForComponent(component: ReportComponent): ResolvedFilterValue[];
21
+ private _defaultValue;
22
+ private _relativeRange;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportFilterStateService, never>;
24
+ static ɵprov: i0.ɵɵInjectableDeclaration<ReportFilterStateService>;
25
+ }