@firestitch/report 18.6.1 → 18.8.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 (97) hide show
  1. package/app/reports/components/component-chart/component-chart.component.d.ts +6 -7
  2. package/app/reports/components/component-kpi/component-kpi.component.d.ts +17 -9
  3. package/app/reports/components/component-kpi/components/sparkline/sparkline.component.d.ts +8 -0
  4. package/app/reports/components/component-list/component-list.component.d.ts +39 -10
  5. package/app/reports/components/component-note/component-note.component.d.ts +12 -0
  6. package/app/reports/components/report-canvas/report-canvas.component.d.ts +0 -10
  7. package/app/reports/components/report-component/report-component.component.d.ts +5 -12
  8. package/app/reports/data/report.data.d.ts +2 -3
  9. package/app/reports/dialogs/component-settings/component-settings.component.d.ts +34 -2
  10. package/app/reports/dialogs/list-columns/list-columns.component.d.ts +23 -0
  11. package/app/reports/dialogs/report-settings/report-locale-patch.d.ts +5 -0
  12. package/app/reports/dialogs/report-settings/report-settings.component.d.ts +20 -2
  13. package/app/reports/enums/report-change-polarity.enum.d.ts +5 -0
  14. package/app/reports/enums/report-chart-color.enum.d.ts +12 -0
  15. package/app/reports/enums/report-chart-data-labels.enum.d.ts +6 -0
  16. package/app/reports/enums/report-chart-date-label.enum.d.ts +5 -0
  17. package/app/reports/enums/report-chart-line-style.enum.d.ts +5 -0
  18. package/app/reports/enums/report-chart-mark-stat.enum.d.ts +6 -0
  19. package/app/reports/enums/report-kpi-trend.enum.d.ts +5 -0
  20. package/app/reports/enums/report-list-column-format.enum.d.ts +6 -0
  21. package/app/reports/enums/report-number-units.enum.d.ts +6 -0
  22. package/app/reports/enums/report-value-format.enum.d.ts +5 -0
  23. package/app/reports/export/offscreen-chart.d.ts +2 -2
  24. package/app/reports/export/report-export-collector.service.d.ts +37 -8
  25. package/app/reports/export/report-pdf.service.d.ts +6 -0
  26. package/app/reports/export/report-pptx.service.d.ts +24 -0
  27. package/app/reports/format.d.ts +64 -3
  28. package/app/reports/interfaces/report-chat-viewer-filter.interface.d.ts +2 -0
  29. package/app/reports/interfaces/report.interface.d.ts +205 -14
  30. package/app/reports/kpi-card.d.ts +48 -0
  31. package/app/reports/layout.d.ts +0 -9
  32. package/app/reports/list-config.d.ts +16 -0
  33. package/app/reports/option-builder.d.ts +76 -9
  34. package/app/reports/output-notes.d.ts +14 -0
  35. package/app/reports/pipes/report-date.pipe.d.ts +2 -1
  36. package/app/reports/pipes/report-number.pipe.d.ts +8 -0
  37. package/app/reports/pipes/report-output.pipe.d.ts +10 -0
  38. package/app/reports/report-filter-items.d.ts +5 -2
  39. package/app/reports/report-url-state.d.ts +4 -0
  40. package/app/reports/services/report-filter-state.service.d.ts +27 -2
  41. package/app/reports/theme/palette.d.ts +6 -0
  42. package/app/reports/theme/typography.d.ts +2 -0
  43. package/esm2022/app/reports/components/component-chart/component-chart.component.mjs +23 -20
  44. package/esm2022/app/reports/components/component-kpi/component-kpi.component.mjs +56 -29
  45. package/esm2022/app/reports/components/component-kpi/components/sparkline/sparkline.component.mjs +19 -0
  46. package/esm2022/app/reports/components/component-list/component-list.component.mjs +218 -32
  47. package/esm2022/app/reports/components/component-note/component-note.component.mjs +30 -0
  48. package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +7 -61
  49. package/esm2022/app/reports/components/report-component/report-component.component.mjs +99 -100
  50. package/esm2022/app/reports/data/report.data.mjs +20 -7
  51. package/esm2022/app/reports/dialogs/component-settings/component-settings.component.mjs +133 -13
  52. package/esm2022/app/reports/dialogs/list-columns/list-columns.component.mjs +56 -0
  53. package/esm2022/app/reports/dialogs/report-settings/report-locale-patch.mjs +13 -0
  54. package/esm2022/app/reports/dialogs/report-settings/report-settings.component.mjs +138 -20
  55. package/esm2022/app/reports/enums/report-change-polarity.enum.mjs +11 -0
  56. package/esm2022/app/reports/enums/report-chart-color.enum.mjs +19 -0
  57. package/esm2022/app/reports/enums/report-chart-data-labels.enum.mjs +13 -0
  58. package/esm2022/app/reports/enums/report-chart-date-label.enum.mjs +13 -0
  59. package/esm2022/app/reports/enums/report-chart-line-style.enum.mjs +12 -0
  60. package/esm2022/app/reports/enums/report-chart-mark-stat.enum.mjs +12 -0
  61. package/esm2022/app/reports/enums/report-kpi-trend.enum.mjs +10 -0
  62. package/esm2022/app/reports/enums/report-list-column-format.enum.mjs +14 -0
  63. package/esm2022/app/reports/enums/report-number-units.enum.mjs +14 -0
  64. package/esm2022/app/reports/enums/report-value-format.enum.mjs +13 -0
  65. package/esm2022/app/reports/export/offscreen-chart.mjs +5 -4
  66. package/esm2022/app/reports/export/report-export-collector.service.mjs +186 -40
  67. package/esm2022/app/reports/export/report-pdf.service.mjs +332 -67
  68. package/esm2022/app/reports/export/report-pptx.service.mjs +765 -106
  69. package/esm2022/app/reports/format.mjs +917 -57
  70. package/esm2022/app/reports/interfaces/report-chat-viewer-filter.interface.mjs +1 -1
  71. package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
  72. package/esm2022/app/reports/kpi-card.mjs +174 -0
  73. package/esm2022/app/reports/layout.mjs +1 -46
  74. package/esm2022/app/reports/list-config.mjs +106 -0
  75. package/esm2022/app/reports/option-builder.mjs +1457 -117
  76. package/esm2022/app/reports/output-notes.mjs +158 -0
  77. package/esm2022/app/reports/pipes/report-date.pipe.mjs +7 -6
  78. package/esm2022/app/reports/pipes/report-number.pipe.mjs +25 -0
  79. package/esm2022/app/reports/pipes/report-output.pipe.mjs +28 -0
  80. package/esm2022/app/reports/report-filter-items.mjs +28 -3
  81. package/esm2022/app/reports/report-url-state.mjs +56 -15
  82. package/esm2022/app/reports/services/report-filter-state.service.mjs +274 -22
  83. package/esm2022/app/reports/theme/echarts.mjs +8 -2
  84. package/esm2022/app/reports/theme/palette.mjs +35 -1
  85. package/esm2022/app/reports/theme/typography.mjs +8 -1
  86. package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +2 -2
  87. package/esm2022/app/reports/views/report/report.component.mjs +3 -4
  88. package/esm2022/public_api.mjs +10 -1
  89. package/fesm2022/{firestitch-report-echarts-Djtmaxj1.mjs → firestitch-report-echarts-qCBE3LqM.mjs} +9 -3
  90. package/fesm2022/firestitch-report-echarts-qCBE3LqM.mjs.map +1 -0
  91. package/fesm2022/{firestitch-report-firestitch-report-D3zseBZc.mjs → firestitch-report-firestitch-report-DbsWbE-j.mjs} +5523 -875
  92. package/fesm2022/firestitch-report-firestitch-report-DbsWbE-j.mjs.map +1 -0
  93. package/fesm2022/firestitch-report.mjs +1 -1
  94. package/package.json +1 -1
  95. package/public_api.d.ts +9 -0
  96. package/fesm2022/firestitch-report-echarts-Djtmaxj1.mjs.map +0 -1
  97. package/fesm2022/firestitch-report-firestitch-report-D3zseBZc.mjs.map +0 -1
@@ -1,21 +1,45 @@
1
+ import { ReportLocaleTag } from '../interfaces/report.interface';
1
2
  import { CollectedReport } from './report-export-collector.service';
2
3
  import * as i0 from "@angular/core";
3
4
  export declare const PPTX_LIST_ROWS = 100;
5
+ export declare const PPTX_AUTO_LABEL_MAX_POINTS = 24;
6
+ export declare function pptxRunOptions(options: Record<string, unknown>, valueLocale?: ReportLocaleTag): Record<string, unknown>;
4
7
  export declare class ReportPptxService {
5
8
  export(collected: CollectedReport): Promise<void>;
6
9
  private _titleSlide;
7
10
  private _renderText;
8
11
  private _tokens;
9
12
  private _renderComponent;
13
+ private _lineRuns;
10
14
  private _renderChart;
15
+ private _legendPosition;
16
+ private _referenceLines;
17
+ private _statLines;
18
+ private _constantEntry;
19
+ private _measureFormatCodes;
20
+ private _withDataLabels;
21
+ private _percentAxisOptions;
22
+ private _twoAxesOptions;
23
+ private _rankAxisOptions;
11
24
  private _categoryOrderOptions;
25
+ private _valueAxisCode;
12
26
  private _addChart;
27
+ private _entryPlan;
28
+ private _dataLabelPosition;
29
+ private _lineOptions;
13
30
  private _renderWaterfall;
14
31
  private _waterfallSeries;
15
32
  private _categoryLabels;
16
33
  private _axisTextOptions;
34
+ private _categoryTitleOptions;
35
+ private _valueAxisRangeOptions;
17
36
  private _renderTable;
18
37
  private _renderKpi;
38
+ private _kpiDelta;
39
+ private _estimatedWidth;
40
+ private _fitEstimate;
41
+ private _kpiTarget;
42
+ private _kpiSparkline;
19
43
  private _slug;
20
44
  static ɵfac: i0.ɵɵFactoryDeclaration<ReportPptxService, never>;
21
45
  static ɵprov: i0.ɵɵInjectableDeclaration<ReportPptxService>;
@@ -1,8 +1,69 @@
1
- import { Report } from './interfaces/report.interface';
2
- export declare function formatMeasureValue(value: unknown, format?: string, precision?: number, ratioPercent?: boolean): string;
1
+ import { ReportNumberUnits } from './enums/report-number-units.enum';
2
+ import { ChartGranularity, ChartMeasure, ComparisonAgainst, ComparisonNoteCode, ComparisonOffset, ComponentComparison, KpiNoteCode, NumberFormatSpec, OutputMeta, OutputRole, Report, ReportCurrencyCode, ReportFormatContext, ReportLocaleTag, WindowMeta, WindowNoteCode } from './interfaces/report.interface';
3
+ export declare const REPORT_FALLBACK_LOCALE: ReportLocaleTag;
4
+ export declare const REPORT_FALLBACK_CURRENCY: ReportCurrencyCode;
5
+ export declare const DEFAULT_FORMAT_CONTEXT: Readonly<ReportFormatContext>;
6
+ export declare function resolveReportLocale(tag: string | null | undefined): ReportLocaleTag;
7
+ export declare function resolveReportCurrency(code: string | null | undefined): ReportCurrencyCode;
8
+ export declare function resolveFormatContext(report: Pick<Report, 'effectiveLocale' | 'effectiveCurrency' | 'percentFormat'>): ReportFormatContext;
9
+ export declare function numberFormat(locale: string, options: Intl.NumberFormatOptions): Intl.NumberFormat;
10
+ export declare function dateFormat(locale: string, options: Intl.DateTimeFormatOptions, timeZone?: string): Intl.DateTimeFormat;
11
+ export type ResolvedUnits = ReportNumberUnits.None | ReportNumberUnits.Thousands | ReportNumberUnits.Millions;
12
+ export interface FormatNumberOptions {
13
+ empty?: string;
14
+ units?: ResolvedUnits;
15
+ decimals?: number | null;
16
+ signed?: boolean;
17
+ }
18
+ export interface ChartNumberFormat {
19
+ units: ResolvedUnits;
20
+ decimals: number | null;
21
+ }
22
+ export declare function toFiniteNumber(value: unknown): number | null;
23
+ export declare function hasNumberFormat(spec?: NumberFormatSpec | null): boolean;
24
+ export declare function resolveUnits(units: ReportNumberUnits | null | undefined, magnitude: number, decimals: number): ResolvedUnits;
25
+ export declare function formatNumber(value: unknown, spec: NumberFormatSpec | null | undefined, context: ReportFormatContext, options?: FormatNumberOptions): string;
26
+ export interface OutputValueOptions {
27
+ measureSpec?: NumberFormatSpec | null;
28
+ prior?: unknown;
29
+ floor?: string | null;
30
+ empty?: string;
31
+ }
32
+ export interface FormattedOutputValue {
33
+ text: string;
34
+ title: string | null;
35
+ }
36
+ export declare function formatOutputValue(value: unknown, output: OutputMeta | null | undefined, spec: NumberFormatSpec | null | undefined, context: ReportFormatContext, options?: OutputValueOptions): FormattedOutputValue;
37
+ export declare function laneOutputAlias(outputs: Record<string, OutputMeta> | null | undefined, alias: string, role: OutputRole): string | null;
38
+ export declare function axisNumberFormat(measures: ChartMeasure[]): NumberFormatSpec | null;
39
+ export declare function resolveChartNumberFormat(spec: NumberFormatSpec, peak: number, context: ReportFormatContext): ChartNumberFormat;
40
+ export declare function numberFormatCode(spec: NumberFormatSpec, context: ReportFormatContext, chart: ChartNumberFormat, series: (number | null)[][], stacked: boolean): string;
41
+ export declare function formatPlainNumber(value: unknown, locale: ReportLocaleTag): string;
3
42
  export declare const AXIS_SEPARATOR_THRESHOLD = 1000;
4
43
  export declare function chartAxisFormatCode(series: (number | null)[][], stacked: boolean): string;
44
+ export declare function chartValuePeak(series: (number | null)[][], stacked: boolean): number;
5
45
  export declare function resolveReportTimezone(report: Pick<Report, 'effectiveTimezone' | 'timezone'>): string;
6
- export declare function formatReportDate(value: unknown, timezone: string): string;
46
+ export declare const DAY_SHORT: Intl.DateTimeFormatOptions;
47
+ export declare const DAY_LONG: Intl.DateTimeFormatOptions;
48
+ export declare const MONTH_LONG: Intl.DateTimeFormatOptions;
49
+ export declare const MONTH_YEAR: Intl.DateTimeFormatOptions;
50
+ export declare const MONTH_DAY: Intl.DateTimeFormatOptions;
51
+ export declare function formatLocalDate(date: Date, locale: ReportLocaleTag, options: Intl.DateTimeFormatOptions, timeZone?: string): string;
52
+ export declare function formatReportDate(value: unknown, timezone: string, locale: ReportLocaleTag): string;
53
+ export declare const TIME_SHORT: Intl.DateTimeFormatOptions;
54
+ export declare function formatDayRange(start: string | null | undefined, end: string | null | undefined, locale: ReportLocaleTag, options?: Intl.DateTimeFormatOptions): string;
55
+ export declare function formatThroughTime(through: string | null | undefined, timezone: string, locale: ReportLocaleTag): string;
56
+ export declare function formatDayWindow(meta: {
57
+ start: string | null;
58
+ end: string | null;
59
+ through?: string | null;
60
+ }, timezone: string, locale: ReportLocaleTag): string;
61
+ export declare function localeName(tag: ReportLocaleTag): string;
62
+ export declare function currencyName(code: ReportCurrencyCode): string;
63
+ export declare function comparisonOffsetLabel(offset: ComparisonOffset): string;
64
+ export declare function comparisonNoteText(code: ComparisonNoteCode, comparison?: ComponentComparison | null): string;
65
+ export declare function windowText(meta: WindowMeta, locale: ReportLocaleTag, granularity?: ChartGranularity | null): string;
66
+ export declare function windowNoteText(code: WindowNoteCode, meta: WindowMeta, locale: ReportLocaleTag, granularity?: ChartGranularity | null): string;
67
+ export declare function kpiNoteText(code: KpiNoteCode, against?: ComparisonAgainst | null): string;
7
68
  export declare function getTimezoneLabel(timezone: string): string;
8
69
  export declare function getZonedNow(timezone: string): Date;
@@ -1,7 +1,9 @@
1
+ import { ReportRelativeRange } from './report.interface';
1
2
  export interface ReportChatViewerFilter {
2
3
  groupId: number;
3
4
  start?: string;
4
5
  end?: string;
5
6
  values?: unknown[];
6
7
  value?: string;
8
+ preset?: ReportRelativeRange;
7
9
  }
@@ -1,10 +1,23 @@
1
- export type ReportLayout = 'freeform' | 'flow';
1
+ import { ReportChangePolarity } from '../enums/report-change-polarity.enum';
2
+ import { ReportChartColor } from '../enums/report-chart-color.enum';
3
+ import { ReportChartDataLabels } from '../enums/report-chart-data-labels.enum';
4
+ import { ReportChartDateLabel } from '../enums/report-chart-date-label.enum';
5
+ import { ReportChartLineStyle } from '../enums/report-chart-line-style.enum';
6
+ import { ReportChartMarkStat } from '../enums/report-chart-mark-stat.enum';
7
+ import { ReportListColumnFormat } from '../enums/report-list-column-format.enum';
8
+ import { ReportNumberUnits } from '../enums/report-number-units.enum';
9
+ import { ReportValueFormat } from '../enums/report-value-format.enum';
10
+ export type ReportLocaleTag = string;
11
+ export type ReportCurrencyCode = string;
2
12
  export interface Report {
3
13
  id: number;
4
14
  name: string;
5
- layout: ReportLayout;
6
15
  timezone: string | null;
7
16
  effectiveTimezone?: string;
17
+ locale?: ReportLocaleTag | null;
18
+ effectiveLocale?: ReportLocaleTag;
19
+ currency?: ReportCurrencyCode | null;
20
+ effectiveCurrency?: ReportCurrencyCode;
8
21
  percentFormat?: 'ratio';
9
22
  config: ReportConfig;
10
23
  pageWidth: number;
@@ -17,6 +30,20 @@ export interface ReportMaster {
17
30
  id: number;
18
31
  components: ReportComponent[];
19
32
  }
33
+ export interface ReportFormatContext {
34
+ locale: ReportLocaleTag;
35
+ currency: ReportCurrencyCode;
36
+ ratioPercent: boolean;
37
+ }
38
+ export interface ReportLocaleOption {
39
+ locale: ReportLocaleTag;
40
+ defaultCurrency: ReportCurrencyCode;
41
+ }
42
+ export interface ReportLocales {
43
+ defaultLocale: ReportLocaleTag;
44
+ options: ReportLocaleOption[];
45
+ currencies: ReportCurrencyCode[];
46
+ }
20
47
  export interface ReportHeaderFooter {
21
48
  headerHeight: number;
22
49
  footerHeight: number;
@@ -59,8 +86,6 @@ export interface ReportComponent {
59
86
  w: number;
60
87
  h: number;
61
88
  autoHeight: boolean;
62
- flowWidth: number;
63
- order: number;
64
89
  sql: string | null;
65
90
  config: ChartConfig & ListConfig & KpiConfig & TextConfig & ComponentLayoutConfig & Record<string, unknown>;
66
91
  filters: ReportFilter[];
@@ -82,6 +107,12 @@ export interface ComponentLayoutConfig {
82
107
  export interface ComponentSettings {
83
108
  title: string;
84
109
  padding: ComponentPadding;
110
+ kpi?: KpiCardSettings;
111
+ }
112
+ export interface KpiCardSettings {
113
+ increaseIs: ReportChangePolarity | null;
114
+ target: KpiTargetConfig | null;
115
+ sparkline: KpiSparklineConfig | null;
85
116
  }
86
117
  export type LegendPosition = 'top' | 'bottom' | 'left' | 'right' | 'hidden';
87
118
  export type ChartGranularity = 'day' | 'week' | 'month' | 'quarter' | 'year';
@@ -98,6 +129,7 @@ export interface ChartConfig {
98
129
  kind?: 'category' | 'time';
99
130
  granularity?: ChartGranularity;
100
131
  label?: string;
132
+ dateLabel?: ReportChartDateLabel;
101
133
  };
102
134
  measures?: ChartMeasure[];
103
135
  splitBy?: {
@@ -109,25 +141,53 @@ export interface ChartConfig {
109
141
  };
110
142
  orientation?: 'vertical' | 'horizontal';
111
143
  stacked?: boolean;
144
+ percentStacked?: boolean;
145
+ dataLabels?: ReportChartDataLabels;
146
+ valueAxis?: ChartValueAxis;
147
+ secondaryAxis?: ChartValueAxis;
148
+ references?: ChartReference[];
112
149
  legend?: LegendPosition;
113
150
  sort?: ReportSort;
114
151
  limit?: number;
115
152
  }
116
- export interface ChartMeasure {
153
+ export interface ChartValueAxis {
154
+ label?: string;
155
+ min?: number;
156
+ max?: number;
157
+ interval?: number;
158
+ }
159
+ export interface ChartReference {
160
+ value: number;
161
+ label: string;
162
+ to?: number;
163
+ secondary?: boolean;
164
+ }
165
+ export interface NumberFormatSpec {
166
+ format?: ReportValueFormat | ReportListColumnFormat;
167
+ precision?: number;
168
+ units?: ReportNumberUnits;
169
+ }
170
+ export interface ChartMeasure extends NumberFormatSpec {
117
171
  column: string;
118
172
  aggregation?: 'sum' | 'count' | 'avg' | 'min' | 'max';
119
173
  label?: string;
120
174
  type?: AxisChartType;
121
- format?: 'number' | 'percent' | 'currency';
122
- precision?: number;
175
+ format?: ReportValueFormat;
176
+ secondary?: boolean;
177
+ color?: ReportChartColor;
178
+ line?: ReportChartLineStyle;
179
+ markers?: boolean;
180
+ markLine?: ReportChartMarkStat;
181
+ }
182
+ export interface ListColumn extends NumberFormatSpec {
183
+ column: string;
184
+ label?: string;
185
+ format?: ReportListColumnFormat;
186
+ sortColumn?: string;
187
+ wrap?: boolean;
123
188
  }
124
189
  export interface ListConfig {
125
- columns?: {
126
- column: string;
127
- label?: string;
128
- format?: 'date';
129
- sortColumn?: string;
130
- }[];
190
+ columns?: ListColumn[];
131
191
  rowBy?: {
132
192
  column: string;
133
193
  label?: string;
@@ -135,11 +195,27 @@ export interface ListConfig {
135
195
  pivotBy?: {
136
196
  column: string;
137
197
  };
138
- sort?: ReportSort;
198
+ sort?: ReportSort | ReportSort[];
199
+ pinnedColumns?: number | null;
139
200
  pageSize?: number;
201
+ totals?: boolean;
202
+ cellFormat?: NumberFormatSpec & {
203
+ format?: ReportValueFormat;
204
+ };
140
205
  }
141
206
  export interface KpiConfig {
142
207
  measure?: ChartMeasure;
208
+ increaseIs?: ReportChangePolarity | null;
209
+ target?: KpiTargetConfig | null;
210
+ sparkline?: KpiSparklineConfig | null;
211
+ }
212
+ export interface KpiTargetConfig {
213
+ value: number;
214
+ label?: string | null;
215
+ }
216
+ export interface KpiSparklineConfig {
217
+ granularity?: ChartGranularity | null;
218
+ periods?: number | null;
143
219
  }
144
220
  export interface ReportSort {
145
221
  column: string;
@@ -190,14 +266,19 @@ export interface FilterGroupValue {
190
266
  value?: string;
191
267
  preset?: string;
192
268
  }
269
+ export type ReportRelativeRange = 'thisWeek' | 'lastWeek' | 'last7Days' | 'last30Days' | 'last3Months' | 'last6Months' | 'last12Months' | 'thisMonth' | 'thisQuarter' | 'thisYear' | 'yearToDate';
193
270
  export interface ReportUrlParams {
194
271
  groups: Map<number, string>;
195
272
  listSorts: Map<number, string>;
273
+ listSearches: Map<number, string>;
274
+ listHidden: Map<number, string>;
196
275
  groupBy: string | null;
197
276
  }
198
277
  export interface ReportUrlSnapshot {
199
278
  groups: Map<number, FilterGroupValue | null>;
200
279
  listSorts: Map<number, ReportSort>;
280
+ listSearches: Map<number, string>;
281
+ listHidden: Map<number, string[]>;
201
282
  frequency: ChartGranularity | null;
202
283
  }
203
284
  export interface ResolvedFilterValue {
@@ -206,12 +287,15 @@ export interface ResolvedFilterValue {
206
287
  end?: string;
207
288
  values?: unknown[];
208
289
  value?: string;
290
+ preset?: ReportRelativeRange;
209
291
  }
210
292
  export interface ComponentDataState {
211
293
  sort?: ReportSort;
212
294
  page?: number;
213
295
  pageSize?: number;
214
296
  frequency?: ChartGranularity;
297
+ search?: string;
298
+ hiddenColumns?: string[];
215
299
  }
216
300
  export interface ComponentData {
217
301
  columns: string[];
@@ -223,6 +307,113 @@ export interface ComponentData {
223
307
  };
224
308
  truncated: boolean;
225
309
  granularity?: ChartGranularity | null;
310
+ searchNote?: string | null;
311
+ totals?: Record<string, unknown> | null;
312
+ totalsNote?: string | null;
313
+ timeframe?: ComponentTimeframe | null;
314
+ comparison?: ComponentComparison | null;
315
+ outputs?: Record<string, OutputMeta>;
316
+ cellMeasures?: Record<string, string>;
317
+ windows?: Record<string, WindowMeta>;
318
+ kpi?: ComponentKpi | null;
319
+ partialPeriod?: string | null;
320
+ }
321
+ export type TimeframeSource = 'filter' | 'range' | 'fixed' | 'none';
322
+ export interface ComponentTimeframe {
323
+ column: string;
324
+ start: string | null;
325
+ end: string | null;
326
+ through: string | null;
327
+ range: ReportRelativeRange | null;
328
+ source: TimeframeSource;
329
+ }
330
+ export type ComparisonMode = 'range' | 'series' | 'as_of';
331
+ export type ComparisonAlign = 'to_date' | 'full';
332
+ export type ComparisonAgainst = 'previous_period' | 'previous_week' | 'previous_month' | 'previous_quarter' | 'previous_year' | 'range';
333
+ export type ComparisonNoteCode = 'no_window' | 'unit_inferred' | 'window_in_future' | 'other_date_filter' | 'grain_followed';
334
+ export interface ComparisonWindow {
335
+ start: string;
336
+ end: string;
337
+ through: string | null;
338
+ }
339
+ export interface ComparisonOffset {
340
+ against: ComparisonAgainst;
341
+ unit: ChartGranularity | null;
342
+ count: number | null;
343
+ }
344
+ export interface ComponentComparison {
345
+ mode: ComparisonMode;
346
+ timezone: string;
347
+ align: ComparisonAlign;
348
+ current: ComparisonWindow | null;
349
+ priors: ComparisonWindow[];
350
+ offsets: ComparisonOffset[];
351
+ floor: string | null;
352
+ notes: ComparisonNoteCode[];
353
+ }
354
+ export type OutputKind = 'value' | 'rank' | 'share';
355
+ export type OutputRole = 'current' | 'prior' | 'change' | 'percent_change';
356
+ export type OutputRankMethod = 'competition' | 'dense';
357
+ export interface OutputRank {
358
+ method: OutputRankMethod;
359
+ direction: 'asc' | 'desc';
360
+ within: string[];
361
+ }
362
+ export interface OutputShare {
363
+ within: string[];
364
+ }
365
+ export interface OutputMeta {
366
+ measure: string;
367
+ kind: OutputKind;
368
+ role: OutputRole | null;
369
+ offset: number | null;
370
+ window: boolean;
371
+ rank: OutputRank | null;
372
+ share: OutputShare | null;
373
+ }
374
+ export type WindowKind = 'running' | 'to_date' | 'rolling';
375
+ export type WindowNoteCode = 'snapped_start' | 'span_converted' | 'grain_too_coarse' | 'equal_grain_plain' | 'own_filter_caps_lead_in' | 'week_by_monday' | 'incomplete_head';
376
+ export interface WindowMeta {
377
+ kind: WindowKind;
378
+ periods: number | null;
379
+ unit: ChartGranularity | null;
380
+ drawnPeriods: number | null;
381
+ resetEvery: ChartGranularity | null;
382
+ average: boolean;
383
+ fromBeginning: boolean;
384
+ dateColumn: string | null;
385
+ start: string | null;
386
+ end: string | null;
387
+ leadIn: string | null;
388
+ notes: WindowNoteCode[];
389
+ description: string;
390
+ }
391
+ export type KpiDeltaShow = 'change' | 'percent_change';
392
+ export type KpiNoteCode = 'no_prior_data' | 'up_from_zero' | 'no_change' | 'no_data_either' | 'sign_change';
393
+ export interface ComponentKpiTarget {
394
+ value: number;
395
+ label: string | null;
396
+ progress: number | null;
397
+ met: boolean | null;
398
+ }
399
+ export interface ComponentKpiSparklinePoint {
400
+ period: string;
401
+ value: number | null;
402
+ }
403
+ export interface ComponentKpiSparkline {
404
+ granularity: ChartGranularity;
405
+ partial: boolean;
406
+ points: ComponentKpiSparklinePoint[];
407
+ }
408
+ export interface ComponentKpi {
409
+ value: number | null;
410
+ prior: number | null;
411
+ change: number | null;
412
+ percentChange: number | null;
413
+ show: KpiDeltaShow;
414
+ note: KpiNoteCode | null;
415
+ target: ComponentKpiTarget | null;
416
+ sparkline: ComponentKpiSparkline | null;
226
417
  }
227
418
  export interface ComponentExportResponse {
228
419
  url: string;
@@ -0,0 +1,48 @@
1
+ import { ReportChangePolarity } from './enums/report-change-polarity.enum';
2
+ import { ReportKpiTrend } from './enums/report-kpi-trend.enum';
3
+ import { ChartGranularity, ComponentData, KpiCardSettings, KpiConfig, ReportFormatContext } from './interfaces/report.interface';
4
+ export declare const KPI_SPARKLINE_DEFAULT_GRANULARITY: ChartGranularity;
5
+ export declare const KPI_SPARKLINE_DEFAULT_PERIODS = 12;
6
+ export interface KpiCardContext {
7
+ format: ReportFormatContext;
8
+ timezone: string;
9
+ }
10
+ export interface KpiCardDelta {
11
+ text: string;
12
+ trend: ReportKpiTrend;
13
+ tone: ReportChangePolarity;
14
+ compared: string;
15
+ }
16
+ export interface KpiCardTarget {
17
+ text: string;
18
+ progress: string;
19
+ fill: number | null;
20
+ tone: ReportChangePolarity;
21
+ }
22
+ export interface KpiCardSparkline {
23
+ values: (number | null)[];
24
+ partial: boolean;
25
+ }
26
+ export interface KpiCardView {
27
+ value: string;
28
+ label: string;
29
+ delta: KpiCardDelta | null;
30
+ window: string;
31
+ target: KpiCardTarget | null;
32
+ sparkline: KpiCardSparkline | null;
33
+ }
34
+ export interface KpiSparklinePoint {
35
+ x: number;
36
+ y: number;
37
+ }
38
+ export interface KpiSparklineGeometry {
39
+ lines: string[];
40
+ dots: KpiSparklinePoint[];
41
+ last: (KpiSparklinePoint & {
42
+ hollow: boolean;
43
+ }) | null;
44
+ }
45
+ export declare function kpiCardView(config: KpiConfig | null | undefined, data: ComponentData | null | undefined, context: KpiCardContext): KpiCardView;
46
+ export declare function kpiSparklineGeometry(values: (number | null)[], partial: boolean): KpiSparklineGeometry;
47
+ export declare function kpiCardSettings(config: KpiConfig | null | undefined): KpiCardSettings;
48
+ export declare function sameKpiCardSettings(a: KpiCardSettings, b: KpiCardSettings): boolean;
@@ -1,14 +1,5 @@
1
- import { Report, ReportPage } from './interfaces/report.interface';
2
- export declare const FLOW_PADDING = 0.25;
3
1
  export declare const DEFAULT_COMPONENT_PADDING = 0.125;
4
2
  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>;
12
3
  export declare const PAGE_DIMENSION_MIN = 1;
13
4
  export declare const PAGE_DIMENSION_MAX = 50;
14
5
  export declare const HEADER_FOOTER_MAX = 3;
@@ -0,0 +1,16 @@
1
+ import { ComponentData, ListColumn, ListConfig, NumberFormatSpec, OutputMeta, ReportSort } from './interfaces/report.interface';
2
+ export declare const MAX_PINNED_COLUMNS = 3;
3
+ export declare function listSortTerms(config: ListConfig | null | undefined): ReportSort[];
4
+ export declare function listHideableColumns(config: ListConfig | null | undefined): string[];
5
+ export declare function listHiddenColumns(config: ListConfig | null | undefined, names: readonly string[]): string[];
6
+ export declare function listPinnedColumns(config: ListConfig | null | undefined): number;
7
+ export declare function columnClasses(column: ListColumn, index: number, pinned: number): string;
8
+ export declare const LIST_TOTAL_LABEL = "Total";
9
+ export declare function listTotalsLabelColumn(columns: readonly ListColumn[], totals: Record<string, unknown> | null | undefined): string | null;
10
+ export interface ListOutputColumn {
11
+ output: OutputMeta;
12
+ measureSpec: NumberFormatSpec | null;
13
+ priorAlias: string | null;
14
+ floor: string | null;
15
+ }
16
+ export declare function listOutputColumns(columns: readonly ListColumn[], data: Pick<ComponentData, 'outputs' | 'cellMeasures' | 'comparison'> | null | undefined, authored: readonly ListColumn[]): Record<string, ListOutputColumn>;
@@ -1,17 +1,67 @@
1
1
  import type { EChartsOption } from 'echarts';
2
- import { AxisChartType, ChartConfig, ChartGranularity, ComponentData, LegendPosition, ListConfig, ReportComponent, WaterfallStepKind } from './interfaces/report.interface';
2
+ import { ReportChartDataLabels } from './enums/report-chart-data-labels.enum';
3
+ import { ReportChartDateLabel } from './enums/report-chart-date-label.enum';
4
+ import { ReportChartLineStyle } from './enums/report-chart-line-style.enum';
5
+ import { ReportChartMarkStat } from './enums/report-chart-mark-stat.enum';
6
+ import { AxisChartType, ChartConfig, ChartGranularity, ChartMeasure, ChartValueAxis, ComponentData, LegendPosition, ListColumn, ListConfig, ReportComponent, ReportFormatContext, ReportLocaleTag, WaterfallStepKind } from './interfaces/report.interface';
7
+ export declare const PERCENT_AXIS_MAX = 1;
8
+ export declare const PERCENT_AXIS_INTERVAL = 0.25;
9
+ export declare const RANK_AXIS_MIN = 1;
10
+ export declare const STAT_LABEL: Record<ReportChartMarkStat, string>;
11
+ export type ValueAxisIndex = 0 | 1;
12
+ export interface DrawnReference {
13
+ label: string;
14
+ low: number;
15
+ high: number;
16
+ band: boolean;
17
+ axisIndex: ValueAxisIndex;
18
+ }
19
+ interface DataLabelParams {
20
+ value?: unknown;
21
+ data?: unknown;
22
+ dataIndex?: number;
23
+ }
24
+ export type DataLabelFormatter = (params: DataLabelParams) => string;
25
+ export type DataLabelPosition = 'top' | 'inside' | 'outside';
26
+ export interface DataLabel<P extends DataLabelPosition = DataLabelPosition> {
27
+ show: true;
28
+ position: P;
29
+ fontSize: number;
30
+ formatter: DataLabelFormatter;
31
+ }
32
+ export interface SeriesDataLabels {
33
+ text: Omit<DataLabel, 'position'>;
34
+ hideOverlap: boolean;
35
+ lastOnly: boolean;
36
+ }
37
+ export type PercentShares = Map<number, (number | null)[]>;
3
38
  export declare function isColorBy(config: ChartConfig): boolean;
4
39
  export declare function colorByColumn(config: ChartConfig): string | undefined;
5
40
  export interface ExtractedChartSeries {
6
41
  categories: string[];
7
- series: {
8
- name: string;
9
- values: (number | null)[];
10
- type?: AxisChartType;
11
- }[];
42
+ series: ExtractedChartSeriesItem[];
43
+ }
44
+ export interface ExtractedChartSeriesItem {
45
+ name: string;
46
+ values: (number | null)[];
47
+ type?: AxisChartType;
48
+ measure: ChartMeasure;
49
+ measureIndex: number;
12
50
  }
13
51
  export declare function extractChartSeries(component: ReportComponent, data: ComponentData): ExtractedChartSeries;
52
+ export declare function seriesColor(series: ExtractedChartSeriesItem): string | undefined;
53
+ export declare function seriesHex(series: ExtractedChartSeriesItem, index: number): string;
54
+ export declare function measureLineStyle(measure: ChartMeasure | undefined): ReportChartLineStyle | undefined;
55
+ export declare function measureMarkStat(measure: ChartMeasure | undefined): ReportChartMarkStat | undefined;
56
+ export declare function seriesStat(values: (number | null)[], stat: ReportChartMarkStat): number | null;
57
+ export declare function drawsStatLines(config: ChartConfig): boolean;
58
+ export declare function colorByValues(extracted: ExtractedChartSeries): (number | null)[];
59
+ export declare function chartReferences(config: ChartConfig, twoAxes: boolean): DrawnReference[];
60
+ export declare function percentShares(values: (number | null)[][]): (number | null)[][];
61
+ export declare function percentStackedShares(extracted: ExtractedChartSeries, config: ChartConfig): PercentShares | null;
62
+ export declare function percentAxisMin(shares: PercentShares): number;
14
63
  export declare function seriesTypes(extracted: ExtractedChartSeries, chartType: AxisChartType): AxisChartType[];
64
+ export declare function seriesAxisIndexes(extracted: ExtractedChartSeries, config: ChartConfig): ValueAxisIndex[];
15
65
  export interface WaterfallStep {
16
66
  category: string;
17
67
  start: number;
@@ -24,8 +74,25 @@ export interface ExtractedWaterfall {
24
74
  }
25
75
  export declare const WATERFALL_TOTAL_LABEL = "Total";
26
76
  export declare function extractWaterfall(component: ReportComponent, data: ComponentData): ExtractedWaterfall;
27
- export declare function buildChartOption(component: ReportComponent, data: ComponentData): EChartsOption;
77
+ export declare function buildChartOption(component: ReportComponent, data: ComponentData, context: ReportFormatContext): EChartsOption;
78
+ export declare function priorSeriesStyles(config: ChartConfig, data: ComponentData, extracted: ExtractedChartSeries): {
79
+ colors: string[];
80
+ priors: boolean[];
81
+ } | null;
82
+ export declare function rankValueAxes(extracted: ExtractedChartSeries, data: ComponentData, config: ChartConfig): boolean[];
83
+ export declare function referencePeak(references: DrawnReference[], axisIndex: ValueAxisIndex): number;
28
84
  export declare function resolveLegendPosition(config: ChartConfig, seriesCount: number, colorBy?: boolean): LegendPosition;
85
+ export declare function dataLabelOption(mode: ReportChartDataLabels | undefined, formatter: DataLabelFormatter): SeriesDataLabels | null;
86
+ export declare function valueAxisRange(axis: ChartValueAxis | undefined): {
87
+ min?: number;
88
+ max?: number;
89
+ interval?: number;
90
+ };
29
91
  export declare function spansMultipleYears(categories: string[]): boolean;
30
- export declare function formatPeriodLabel(value: string, granularity: ChartGranularity, multiYear: boolean): string;
31
- export declare function pivotHeadings(config: ListConfig, data: ComponentData): string[];
92
+ export declare function chartDateLabel(config: ChartConfig | undefined): ReportChartDateLabel;
93
+ export declare function formatPeriodLabel(value: string, granularity: ChartGranularity, multiYear: boolean, locale: ReportLocaleTag, dateLabel?: ReportChartDateLabel): string;
94
+ export declare function pivotHeadings(config: ListConfig, data: ComponentData, locale: ReportLocaleTag): string[];
95
+ export declare function pivotColumnSpecs(config: ListConfig, data: ComponentData, locale: ReportLocaleTag): (ListColumn & {
96
+ numeric: boolean;
97
+ })[];
98
+ export {};
@@ -0,0 +1,14 @@
1
+ import { ComponentData, ReportLocaleTag } from './interfaces/report.interface';
2
+ export type ComponentNoteData = Pick<ComponentData, 'comparison' | 'timeframe' | 'outputs' | 'cellMeasures' | 'windows' | 'granularity' | 'kpi'>;
3
+ export interface ComponentNoteContext {
4
+ locale: ReportLocaleTag;
5
+ timezone: string;
6
+ }
7
+ export interface ComponentNoteParts {
8
+ windows?: boolean;
9
+ windowDescriptions?: boolean;
10
+ windowNotes?: boolean;
11
+ }
12
+ export declare function componentNoteLines(data: ComponentNoteData | null | undefined, context: ComponentNoteContext, parts?: ComponentNoteParts): string[];
13
+ export declare function outputColumnNote(column: string, data: ComponentNoteData | null | undefined, locale: ReportLocaleTag): string;
14
+ export declare function componentWindowsLine(data: ComponentNoteData, context: ComponentNoteContext): string;
@@ -1,7 +1,8 @@
1
1
  import { PipeTransform } from '@angular/core';
2
+ import { ReportLocaleTag } from '../interfaces/report.interface';
2
3
  import * as i0 from "@angular/core";
3
4
  export declare class ReportDatePipe implements PipeTransform {
4
- transform(value: unknown, timezone: string): string;
5
+ transform(value: unknown, timezone: string, locale: ReportLocaleTag): string;
5
6
  static ɵfac: i0.ɵɵFactoryDeclaration<ReportDatePipe, never>;
6
7
  static ɵpipe: i0.ɵɵPipeDeclaration<ReportDatePipe, "fsReportDate", true>;
7
8
  }
@@ -0,0 +1,8 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import { NumberFormatSpec, ReportFormatContext } from '../interfaces/report.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ReportNumberPipe implements PipeTransform {
5
+ transform(value: unknown, column: NumberFormatSpec, context: ReportFormatContext): string;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<ReportNumberPipe, never>;
7
+ static ɵpipe: i0.ɵɵPipeDeclaration<ReportNumberPipe, "fsReportNumber", true>;
8
+ }