@firestitch/report 18.10.2 → 18.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/reports/components/report-canvas/report-canvas.component.d.ts +0 -1
- package/app/reports/data/report.data.d.ts +8 -12
- package/app/reports/export/report-export-collector.service.d.ts +0 -1
- package/app/reports/export/report-filter-lines.d.ts +0 -2
- package/app/reports/interfaces/report-chat-viewer-state.interface.d.ts +0 -2
- package/app/reports/interfaces/report-export-snapshot.interface.d.ts +2 -3
- package/app/reports/interfaces/report-saved-filter-changes.interface.d.ts +4 -0
- package/app/reports/interfaces/report-saved-filter.interface.d.ts +6 -0
- package/app/reports/interfaces/{report-view-config.interface.d.ts → report-state-snapshot.interface.d.ts} +1 -2
- package/app/reports/interfaces/report-viewer-feature.type.d.ts +1 -1
- package/app/reports/report-chat-viewer-state.d.ts +3 -3
- package/app/reports/report-saved-filters.d.ts +3 -0
- package/app/reports/report-state.d.ts +15 -0
- package/app/reports/services/report-filter-state.service.d.ts +9 -25
- package/app/reports/tile-data-state.d.ts +5 -5
- package/app/reports/views/report/fs-ai-report.component.d.ts +12 -5
- package/esm2022/app/reports/canvas-landing-page.mjs +3 -3
- package/esm2022/app/reports/components/component-list/component-list.component.mjs +3 -3
- package/esm2022/app/reports/components/report-canvas/report-canvas.component.mjs +8 -12
- package/esm2022/app/reports/components/report-component/report-component.component.mjs +25 -30
- package/esm2022/app/reports/data/report.data.mjs +24 -41
- package/esm2022/app/reports/export/report-export-collector.service.mjs +11 -18
- package/esm2022/app/reports/export/report-filter-lines.mjs +5 -15
- package/esm2022/app/reports/filter-settings-rules.mjs +2 -2
- package/esm2022/app/reports/interfaces/canvas-landing-input.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-chat-viewer-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-export-snapshot.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-saved-filter-changes.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-saved-filter.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-state-snapshot.interface.mjs +2 -0
- package/esm2022/app/reports/interfaces/report-temporary-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-tile-state.interface.mjs +1 -1
- package/esm2022/app/reports/interfaces/report-viewer-feature.type.mjs +1 -1
- package/esm2022/app/reports/interfaces/report.interface.mjs +1 -1
- package/esm2022/app/reports/mark-click.mjs +2 -2
- package/esm2022/app/reports/report-chat-viewer-state.mjs +3 -3
- package/esm2022/app/reports/report-date-presets.mjs +2 -2
- package/esm2022/app/reports/report-saved-filters.mjs +92 -0
- package/esm2022/app/reports/report-state.mjs +169 -0
- package/esm2022/app/reports/report-viewer-features.mjs +2 -4
- package/esm2022/app/reports/services/report-filter-state.service.mjs +83 -310
- package/esm2022/app/reports/tile-data-state.mjs +4 -4
- package/esm2022/app/reports/tile-loads.mjs +5 -6
- package/esm2022/app/reports/views/report/fs-ai-report.component.mjs +192 -102
- package/esm2022/app/reports/views/report/report.component.mjs +14 -16
- package/esm2022/public_api.mjs +4 -8
- package/fesm2022/{firestitch-report-echarts-CyHkFToO.mjs → firestitch-report-echarts-B0RWUjR8.mjs} +2 -2
- package/fesm2022/{firestitch-report-echarts-CyHkFToO.mjs.map → firestitch-report-echarts-B0RWUjR8.mjs.map} +1 -1
- package/fesm2022/{firestitch-report-firestitch-report-DftB7M1o.mjs → firestitch-report-firestitch-report-CJW0lLdW.mjs} +480 -1450
- package/fesm2022/firestitch-report-firestitch-report-CJW0lLdW.mjs.map +1 -0
- package/fesm2022/firestitch-report.mjs +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +3 -7
- package/app/reports/components/report-view-picker/report-view-picker.component.d.ts +0 -21
- package/app/reports/dialogs/report-view/report-view-dialog.component.d.ts +0 -13
- package/app/reports/interfaces/report-view-create.interface.d.ts +0 -7
- package/app/reports/interfaces/report-view-deleted.interface.d.ts +0 -4
- package/app/reports/interfaces/report-view-dialog-data.interface.d.ts +0 -7
- package/app/reports/interfaces/report-view-dropped.interface.d.ts +0 -5
- package/app/reports/interfaces/report-view-menu-item.interface.d.ts +0 -10
- package/app/reports/interfaces/report-view-summary.interface.d.ts +0 -11
- package/app/reports/interfaces/report-view.interface.d.ts +0 -7
- package/app/reports/interfaces/report-views.interface.d.ts +0 -7
- package/app/reports/report-view-config.d.ts +0 -34
- package/app/reports/report-view-menu.d.ts +0 -15
- package/app/reports/services/report-view.service.d.ts +0 -39
- package/esm2022/app/reports/components/report-view-picker/report-view-picker.component.mjs +0 -115
- package/esm2022/app/reports/dialogs/report-view/report-view-dialog.component.mjs +0 -52
- package/esm2022/app/reports/interfaces/report-view-config.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-create.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-deleted.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-dialog-data.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-dropped.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-menu-item.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view-summary.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-view.interface.mjs +0 -2
- package/esm2022/app/reports/interfaces/report-views.interface.mjs +0 -2
- package/esm2022/app/reports/report-view-config.mjs +0 -587
- package/esm2022/app/reports/report-view-menu.mjs +0 -119
- package/esm2022/app/reports/services/report-view.service.mjs +0 -218
- package/fesm2022/firestitch-report-firestitch-report-DftB7M1o.mjs.map +0 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { dateBoundString, groupItemName } from './report-filter-items';
|
|
2
|
+
import { finiteNumber } from './report-state';
|
|
3
|
+
// The groups a saved filter holds: the report-wide ones.
|
|
4
|
+
export function savedFilterGroups(groups) {
|
|
5
|
+
return (groups ?? []).filter((group) => group.level === 'report' || group.level === 'both');
|
|
6
|
+
}
|
|
7
|
+
// A saved filter's values kept to `groups` (savedFilterGroups): each
|
|
8
|
+
// report-wide group's item value, in a shape its item takes, a date range's
|
|
9
|
+
// days as yyyy-MM-dd (a day is the same day in every zone, so everyone who
|
|
10
|
+
// picks a shared filter gets the same days). Any other key is left out, and
|
|
11
|
+
// so is a value that holds nothing or does not fit its group's type.
|
|
12
|
+
export function savedFilterValues(filters, groups) {
|
|
13
|
+
const kept = {};
|
|
14
|
+
groups.forEach((group) => {
|
|
15
|
+
const name = groupItemName(group);
|
|
16
|
+
const value = filters && Object.prototype.hasOwnProperty.call(filters, name)
|
|
17
|
+
? itemValue(group, filters[name])
|
|
18
|
+
: null;
|
|
19
|
+
if (value !== null) {
|
|
20
|
+
kept[name] = value;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return kept;
|
|
24
|
+
}
|
|
25
|
+
// One item value as a saved filter keeps it, or null.
|
|
26
|
+
function itemValue(group, value) {
|
|
27
|
+
switch (group.type) {
|
|
28
|
+
case 'dateRange':
|
|
29
|
+
return dateRangeValue(value);
|
|
30
|
+
case 'select':
|
|
31
|
+
return selectValue(value);
|
|
32
|
+
case 'numberRange':
|
|
33
|
+
// A number range shows as a keyword box where the server does not
|
|
34
|
+
// serve numberRange, and its item then holds text.
|
|
35
|
+
return isPlainObject(value) ? rangeValue(value) : textValue(value);
|
|
36
|
+
default:
|
|
37
|
+
return textValue(value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// A date range item's { from, to }, each end a calendar day.
|
|
41
|
+
function dateRangeValue(value) {
|
|
42
|
+
if (!isPlainObject(value)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const from = dayText(value.from);
|
|
46
|
+
const to = dayText(value.to);
|
|
47
|
+
if (!from && !to) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
return { ...(from ? { from } : {}), ...(to ? { to } : {}) };
|
|
51
|
+
}
|
|
52
|
+
// A select item's picks ({ name, value } pairs), or its left-out picks
|
|
53
|
+
// ({ exclude: true, selected }).
|
|
54
|
+
function selectValue(value) {
|
|
55
|
+
if (isPlainObject(value)) {
|
|
56
|
+
const selected = picks(value.selected);
|
|
57
|
+
return selected ? { exclude: value.exclude === true, selected } : null;
|
|
58
|
+
}
|
|
59
|
+
return picks(value);
|
|
60
|
+
}
|
|
61
|
+
// A range item's { min, max }; either end may be open, and 0 is an end.
|
|
62
|
+
function rangeValue(value) {
|
|
63
|
+
const min = finiteNumber(value.min);
|
|
64
|
+
const max = finiteNumber(value.max);
|
|
65
|
+
if (min === undefined && max === undefined) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return { ...(min !== undefined ? { min } : {}), ...(max !== undefined ? { max } : {}) };
|
|
69
|
+
}
|
|
70
|
+
function textValue(value) {
|
|
71
|
+
const text = typeof value === 'string' || typeof value === 'number' ? String(value).trim() : '';
|
|
72
|
+
return text || null;
|
|
73
|
+
}
|
|
74
|
+
// The picks of a select item that name a value, or null when none does.
|
|
75
|
+
function picks(value) {
|
|
76
|
+
const kept = (Array.isArray(value) ? value : [])
|
|
77
|
+
.filter((pick) => isPlainObject(pick)
|
|
78
|
+
&& pick.value !== null && pick.value !== undefined && pick.value !== '');
|
|
79
|
+
return kept.length ? kept : null;
|
|
80
|
+
}
|
|
81
|
+
// A day as yyyy-MM-dd: a Date's local day, or the first ten characters of a
|
|
82
|
+
// day already written as text. Null for anything else.
|
|
83
|
+
function dayText(value) {
|
|
84
|
+
if (value instanceof Date) {
|
|
85
|
+
return Number.isNaN(value.getTime()) ? null : dateBoundString(value) ?? null;
|
|
86
|
+
}
|
|
87
|
+
return typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value) ? value.slice(0, 10) : null;
|
|
88
|
+
}
|
|
89
|
+
function isPlainObject(value) {
|
|
90
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNhdmVkLWZpbHRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL3JlcG9ydHMvcmVwb3J0LXNhdmVkLWZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHOUMseURBQXlEO0FBQ3pELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxNQUF1RDtJQUN2RixPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBRUQscUVBQXFFO0FBQ3JFLDRFQUE0RTtBQUM1RSwyRUFBMkU7QUFDM0UsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLE9BQW1ELEVBQ25ELE1BQW9DO0lBRXBDLE1BQU0sSUFBSSxHQUE0QixFQUFFLENBQUM7SUFFekMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEtBQUssR0FBRyxPQUFPLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7WUFDMUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFVCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuQixJ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Q0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQWM7SUFDbkMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQztBQUMxRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcG9ydCBiYXIncyBzYXZlZCBmaWx0ZXJzIChAZmlyZXN0aXRjaC9maWx0ZXIncyBzYXZlZEZpbHRlcnMpOiB3aGF0IGFcbi8vIHNhdmVkIGZpbHRlciBob2xkcywgYW5kIGhvdyBpdHMgdmFsdWVzIGFyZSByZWFkIGJhY2suIFB1cmUsIHNvIHRoZSBub2RlXG4vLyBoYXJuZXNzIGNoZWNrcyB0aGVtLlxuLy9cbi8vIEEgc2F2ZWQgZmlsdGVyIGhvbGRzIHRoZSB2YWx1ZXMgb2YgdGhlIHJlcG9ydC13aWRlIGZpbHRlcnMgb25seSAobGV2ZWxcbi8vIHJlcG9ydCBvciBib3RoOiB0aGUgb25lcyB0aGUgYmFyIHNob3dzIG9uIGV2ZXJ5IHBhZ2UpLCBrZXllZCBieSB0aGVpclxuLy8gaXRlbSBuYW1lcyAoZ3JvdXBJdGVtTmFtZSkuIEEgcGFnZSdzIG93biBmaWx0ZXJzLCB0aGUgZ3JvdXAtYnkgZ3JhaW4sIHRoZVxuLy8gbWF0Y2gsIGxpc3Qgc29ydHMsIHNlYXJjaGVzLCBoaWRkZW4gY29sdW1ucywgdGhlIHBhZ2UgYW5kIGRyaWxsIHBhdGhzIGFyZVxuLy8gbmV2ZXIgcGFydCBvZiBpdC4gVGhlIHNhbWUgcnVsZSBjbGVhbnMgd2hhdCBpcyBzYXZlZCBhbmQgd2hhdCBpcyByZWFkXG4vLyBiYWNrLCBzbyBhIGtleSB0aGUgcmVwb3J0IG5vIGxvbmdlciBoYXMgYSByZXBvcnQtd2lkZSBmaWx0ZXIgZm9yLCBvciBhXG4vLyB2YWx1ZSBpdHMgZmlsdGVyIGNhbiBubyBsb25nZXIgdGFrZSwgaXMgbGVmdCBvdXQgcmF0aGVyIHRoYW4gYXBwbGllZC5cbmltcG9ydCB7IEZpbHRlckdyb3VwVmFsdWUsIFJlcG9ydEZpbHRlckdyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZGF0ZUJvdW5kU3RyaW5nLCBncm91cEl0ZW1OYW1lIH0gZnJvbSAnLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcbmltcG9ydCB7IGZpbml0ZU51bWJlciB9IGZyb20gJy4vcmVwb3J0LXN0YXRlJztcblxuXG4vLyBUaGUgZ3JvdXBzIGEgc2F2ZWQgZmlsdGVyIGhvbGRzOiB0aGUgcmVwb3J0LXdpZGUgb25lcy5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlZEZpbHRlckdyb3Vwcyhncm91cHM6IHJlYWRvbmx5IFJlcG9ydEZpbHRlckdyb3VwW10gfCBudWxsIHwgdW5kZWZpbmVkKTogUmVwb3J0RmlsdGVyR3JvdXBbXSB7XG4gIHJldHVybiAoZ3JvdXBzID8/IFtdKS5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC5sZXZlbCA9PT0gJ3JlcG9ydCcgfHwgZ3JvdXAubGV2ZWwgPT09ICdib3RoJyk7XG59XG5cbi8vIEEgc2F2ZWQgZmlsdGVyJ3MgdmFsdWVzIGtlcHQgdG8gYGdyb3Vwc2AgKHNhdmVkRmlsdGVyR3JvdXBzKTogZWFjaFxuLy8gcmVwb3J0LXdpZGUgZ3JvdXAncyBpdGVtIHZhbHVlLCBpbiBhIHNoYXBlIGl0cyBpdGVtIHRha2VzLCBhIGRhdGUgcmFuZ2Unc1xuLy8gZGF5cyBhcyB5eXl5LU1NLWRkIChhIGRheSBpcyB0aGUgc2FtZSBkYXkgaW4gZXZlcnkgem9uZSwgc28gZXZlcnlvbmUgd2hvXG4vLyBwaWNrcyBhIHNoYXJlZCBmaWx0ZXIgZ2V0cyB0aGUgc2FtZSBkYXlzKS4gQW55IG90aGVyIGtleSBpcyBsZWZ0IG91dCwgYW5kXG4vLyBzbyBpcyBhIHZhbHVlIHRoYXQgaG9sZHMgbm90aGluZyBvciBkb2VzIG5vdCBmaXQgaXRzIGdyb3VwJ3MgdHlwZS5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlZEZpbHRlclZhbHVlcyhcbiAgZmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBncm91cHM6IHJlYWRvbmx5IFJlcG9ydEZpbHRlckdyb3VwW10sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IGtlcHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgZ3JvdXBzLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IGdyb3VwSXRlbU5hbWUoZ3JvdXApO1xuICAgIGNvbnN0IHZhbHVlID0gZmlsdGVycyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmlsdGVycywgbmFtZSlcbiAgICAgID8gaXRlbVZhbHVlKGdyb3VwLCBmaWx0ZXJzW25hbWVdKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICBrZXB0W25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ga2VwdDtcbn1cblxuLy8gT25lIGl0ZW0gdmFsdWUgYXMgYSBzYXZlZCBmaWx0ZXIga2VlcHMgaXQsIG9yIG51bGwuXG5mdW5jdGlvbiBpdGVtVmFsdWUoZ3JvdXA6IFJlcG9ydEZpbHRlckdyb3VwLCB2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBzd2l0Y2ggKGdyb3VwLnR5cGUpIHtcbiAgICBjYXNlICdkYXRlUmFuZ2UnOlxuICAgICAgcmV0dXJuIGRhdGVSYW5nZVZhbHVlKHZhbHVlKTtcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICByZXR1cm4gc2VsZWN0VmFsdWUodmFsdWUpO1xuXG4gICAgY2FzZSAnbnVtYmVyUmFuZ2UnOlxuICAgICAgLy8gQSBudW1iZXIgcmFuZ2Ugc2hvd3MgYXMgYSBrZXl3b3JkIGJveCB3aGVyZSB0aGUgc2VydmVyIGRvZXMgbm90XG4gICAgICAvLyBzZXJ2ZSBudW1iZXJSYW5nZSwgYW5kIGl0cyBpdGVtIHRoZW4gaG9sZHMgdGV4dC5cbiAgICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHJhbmdlVmFsdWUodmFsdWUpIDogdGV4dFZhbHVlKHZhbHVlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdGV4dFZhbHVlKHZhbHVlKTtcbiAgfVxufVxuXG4vLyBBIGRhdGUgcmFuZ2UgaXRlbSdzIHsgZnJvbSwgdG8gfSwgZWFjaCBlbmQgYSBjYWxlbmRhciBkYXkuXG5mdW5jdGlvbiBkYXRlUmFuZ2VWYWx1ZSh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBudWxsIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZnJvbSA9IGRheVRleHQodmFsdWUuZnJvbSk7XG4gIGNvbnN0IHRvID0gZGF5VGV4dCh2YWx1ZS50byk7XG5cbiAgaWYgKCFmcm9tICYmICF0bykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHsgLi4uKGZyb20gPyB7IGZyb20gfSA6IHt9KSwgLi4uKHRvID8geyB0byB9IDoge30pIH07XG59XG5cbi8vIEEgc2VsZWN0IGl0ZW0ncyBwaWNrcyAoeyBuYW1lLCB2YWx1ZSB9IHBhaXJzKSwgb3IgaXRzIGxlZnQtb3V0IHBpY2tzXG4vLyAoeyBleGNsdWRlOiB0cnVlLCBzZWxlY3RlZCB9KS5cbmZ1bmN0aW9uIHNlbGVjdFZhbHVlKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gcGlja3ModmFsdWUuc2VsZWN0ZWQpO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkID8geyBleGNsdWRlOiB2YWx1ZS5leGNsdWRlID09PSB0cnVlLCBzZWxlY3RlZCB9IDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiBwaWNrcyh2YWx1ZSk7XG59XG5cbi8vIEEgcmFuZ2UgaXRlbSdzIHsgbWluLCBtYXggfTsgZWl0aGVyIGVuZCBtYXkgYmUgb3BlbiwgYW5kIDAgaXMgYW4gZW5kLlxuZnVuY3Rpb24gcmFuZ2VWYWx1ZSh2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQaWNrPEZpbHRlckdyb3VwVmFsdWUsICdtaW4nIHwgJ21heCc+IHwgbnVsbCB7XG4gIGNvbnN0IG1pbiA9IGZpbml0ZU51bWJlcih2YWx1ZS5taW4pO1xuICBjb25zdCBtYXggPSBmaW5pdGVOdW1iZXIodmFsdWUubWF4KTtcblxuICBpZiAobWluID09PSB1bmRlZmluZWQgJiYgbWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7IC4uLihtaW4gIT09IHVuZGVmaW5lZCA/IHsgbWluIH0gOiB7fSksIC4uLihtYXggIT09IHVuZGVmaW5lZCA/IHsgbWF4IH0gOiB7fSkgfTtcbn1cblxuZnVuY3Rpb24gdGV4dFZhbHVlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IHRleHQgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgPyBTdHJpbmcodmFsdWUpLnRyaW0oKSA6ICcnO1xuXG4gIHJldHVybiB0ZXh0IHx8IG51bGw7XG59XG5cbi8vIFRoZSBwaWNrcyBvZiBhIHNlbGVjdCBpdGVtIHRoYXQgbmFtZSBhIHZhbHVlLCBvciBudWxsIHdoZW4gbm9uZSBkb2VzLlxuZnVuY3Rpb24gcGlja3ModmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgbnVsbCB7XG4gIGNvbnN0IGtlcHQgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtdKVxuICAgIC5maWx0ZXIoKHBpY2spOiBwaWNrIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IGlzUGxhaW5PYmplY3QocGljaylcbiAgICAgICYmIHBpY2sudmFsdWUgIT09IG51bGwgJiYgcGljay52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHBpY2sudmFsdWUgIT09ICcnKTtcblxuICByZXR1cm4ga2VwdC5sZW5ndGggPyBrZXB0IDogbnVsbDtcbn1cblxuLy8gQSBkYXkgYXMgeXl5eS1NTS1kZDogYSBEYXRlJ3MgbG9jYWwgZGF5LCBvciB0aGUgZmlyc3QgdGVuIGNoYXJhY3RlcnMgb2YgYVxuLy8gZGF5IGFscmVhZHkgd3JpdHRlbiBhcyB0ZXh0LiBOdWxsIGZvciBhbnl0aGluZyBlbHNlLlxuZnVuY3Rpb24gZGF5VGV4dCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc05hTih2YWx1ZS5nZXRUaW1lKCkpID8gbnVsbCA6IGRhdGVCb3VuZFN0cmluZyh2YWx1ZSkgPz8gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0vLnRlc3QodmFsdWUpID8gdmFsdWUuc2xpY2UoMCwgMTApIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { GRANULARITY_OPTIONS, } from './interfaces/report.interface';
|
|
2
|
+
import { dateBoundString } from './report-filter-items';
|
|
3
|
+
// The server's cap on a drill path.
|
|
4
|
+
export const DRILL_MAX_DEPTH = 5;
|
|
5
|
+
// Every relative range name the server knows, in its enum's order. A record
|
|
6
|
+
// rather than a list, so the build fails when ReportRelativeRange gains a
|
|
7
|
+
// name this misses.
|
|
8
|
+
const RELATIVE_RANGES = {
|
|
9
|
+
thisWeek: true,
|
|
10
|
+
lastWeek: true,
|
|
11
|
+
last7Days: true,
|
|
12
|
+
last30Days: true,
|
|
13
|
+
last3Months: true,
|
|
14
|
+
last6Months: true,
|
|
15
|
+
last12Months: true,
|
|
16
|
+
thisMonth: true,
|
|
17
|
+
thisQuarter: true,
|
|
18
|
+
thisYear: true,
|
|
19
|
+
yearToDate: true,
|
|
20
|
+
};
|
|
21
|
+
// The same names as a list, in the server enum's order (the record's key
|
|
22
|
+
// order): the order the date picker offers them in.
|
|
23
|
+
export const RELATIVE_RANGE_NAMES = Object.keys(RELATIVE_RANGES);
|
|
24
|
+
const DAY_PATTERN = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
25
|
+
// A number as text: what a masked input sends.
|
|
26
|
+
const NUMBER_PATTERN = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i;
|
|
27
|
+
// Whether a name is a relative range the server resolves.
|
|
28
|
+
export function isRelativeRange(name) {
|
|
29
|
+
return typeof name === 'string' && Object.prototype.hasOwnProperty.call(RELATIVE_RANGES, name);
|
|
30
|
+
}
|
|
31
|
+
export function isChartGranularity(value) {
|
|
32
|
+
return GRANULARITY_OPTIONS.some((option) => option.value === value);
|
|
33
|
+
}
|
|
34
|
+
// Whether text is a real calendar day written 'yyyy-MM-dd' (no 2026-02-30).
|
|
35
|
+
export function isCalendarDay(text) {
|
|
36
|
+
const parts = DAY_PATTERN.exec(text);
|
|
37
|
+
if (!parts) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const [year, month, day] = parts.slice(1).map(Number);
|
|
41
|
+
const date = new Date(Date.UTC(year, month - 1, day));
|
|
42
|
+
return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;
|
|
43
|
+
}
|
|
44
|
+
// A number written as text (a masked input's value), or null when the text
|
|
45
|
+
// is not one finite number.
|
|
46
|
+
export function numberFromText(text) {
|
|
47
|
+
const number = NUMBER_PATTERN.test(text) ? Number(text) : NaN;
|
|
48
|
+
return Number.isFinite(number) ? number : null;
|
|
49
|
+
}
|
|
50
|
+
// A group's value in its stored shape, read for the keys its group's type
|
|
51
|
+
// owns, or null when it holds nothing. A date range that still carries its
|
|
52
|
+
// relative preset is written as that preset whatever today is.
|
|
53
|
+
export function toStoredGroupValue(type, value) {
|
|
54
|
+
if (!value) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
switch (type) {
|
|
58
|
+
case 'dateRange':
|
|
59
|
+
return isRelativeRange(value.preset)
|
|
60
|
+
? { relative: value.preset }
|
|
61
|
+
: storedOrNull({ start: dateBoundString(value.start), end: dateBoundString(value.end) });
|
|
62
|
+
case 'select': {
|
|
63
|
+
const excludeValues = keptPicks(value.excludeValues);
|
|
64
|
+
return storedOrNull(excludeValues ? { excludeValues } : { values: keptPicks(value.values) });
|
|
65
|
+
}
|
|
66
|
+
case 'numberRange':
|
|
67
|
+
return storedOrNull({ min: finiteNumber(value.min), max: finiteNumber(value.max) });
|
|
68
|
+
default:
|
|
69
|
+
return storedOrNull({ value: value.value?.trim() || undefined });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Whether the screen's state (`current`, a snapshot) differs from the
|
|
73
|
+
// report's authored defaults (`defaults`): the match, the grain, a group's
|
|
74
|
+
// value, or a tile's sort, search, hidden columns or drill path. The page is
|
|
75
|
+
// not compared (moving to another page changes no filter). Picks are
|
|
76
|
+
// compared in any order.
|
|
77
|
+
export function stateDiffers(defaults, current) {
|
|
78
|
+
return (defaults.match ?? 'all') !== (current.match ?? 'all')
|
|
79
|
+
|| (defaults.groupBy ?? null) !== (current.groupBy ?? null)
|
|
80
|
+
|| Object.entries(current.groups ?? {})
|
|
81
|
+
.some(([groupId, value]) => storedValueKey(defaults.groups?.[Number(groupId)]) !== storedValueKey(value))
|
|
82
|
+
|| tilesDiffer(defaults.tiles ?? {}, current.tiles ?? {});
|
|
83
|
+
}
|
|
84
|
+
// Whether two stored group values are the same filter: picks in any order,
|
|
85
|
+
// text trimmed, an empty value read as none.
|
|
86
|
+
export function sameStoredGroupValue(a, b) {
|
|
87
|
+
return storedValueKey(a) === storedValueKey(b);
|
|
88
|
+
}
|
|
89
|
+
// A drill path kept to what a tile can carry: its steps up to the first that
|
|
90
|
+
// is not a time level with a plain value (the steps before it are kept), at
|
|
91
|
+
// most DRILL_MAX_DEPTH of them.
|
|
92
|
+
export function cleanDrillPath(path) {
|
|
93
|
+
const kept = [];
|
|
94
|
+
for (const step of path ?? []) {
|
|
95
|
+
if (!isPlainObject(step) || !isChartGranularity(step.level) || !isDrillValue(step.value)
|
|
96
|
+
|| kept.length === DRILL_MAX_DEPTH) {
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
kept.push({ level: step.level, value: step.value });
|
|
100
|
+
}
|
|
101
|
+
return kept;
|
|
102
|
+
}
|
|
103
|
+
// Whether two drill paths are the same steps. A value is compared as text,
|
|
104
|
+
// so 2026 and '2026' are the same step.
|
|
105
|
+
export function sameDrillPath(a, b) {
|
|
106
|
+
return drillKey(a) === drillKey(b);
|
|
107
|
+
}
|
|
108
|
+
// A range end as a number. A masked input sends its number as text, so
|
|
109
|
+
// numeric text is read as its number.
|
|
110
|
+
export function finiteNumber(value) {
|
|
111
|
+
const number = typeof value === 'string' ? numberFromText(value.trim()) : value;
|
|
112
|
+
return typeof number === 'number' && Number.isFinite(number) ? number : undefined;
|
|
113
|
+
}
|
|
114
|
+
function tilesDiffer(base, current) {
|
|
115
|
+
const ids = new Set([...Object.keys(base), ...Object.keys(current)].map(Number));
|
|
116
|
+
return [...ids].some((componentId) => tileStateKey(base[componentId]) !== tileStateKey(current[componentId]));
|
|
117
|
+
}
|
|
118
|
+
// One text for a stored group value, the same for every way of writing the
|
|
119
|
+
// same filter: picks in any order, text trimmed, and an empty value read as
|
|
120
|
+
// none.
|
|
121
|
+
function storedValueKey(value) {
|
|
122
|
+
const stored = value ?? {};
|
|
123
|
+
const picks = (list) => [...(keptPicks(list) ?? [])].map(String).sort();
|
|
124
|
+
return JSON.stringify([
|
|
125
|
+
stored.relative ?? null,
|
|
126
|
+
stored.start?.slice(0, 10) ?? null,
|
|
127
|
+
stored.end?.slice(0, 10) ?? null,
|
|
128
|
+
picks(stored.values),
|
|
129
|
+
picks(stored.excludeValues),
|
|
130
|
+
(stored.value ?? '').trim(),
|
|
131
|
+
finiteNumber(stored.min) ?? null,
|
|
132
|
+
finiteNumber(stored.max) ?? null,
|
|
133
|
+
]);
|
|
134
|
+
}
|
|
135
|
+
// One text for a tile's state, over the keys this viewer reads. No direction
|
|
136
|
+
// reads as ascending, the way a list applies it.
|
|
137
|
+
function tileStateKey(tile) {
|
|
138
|
+
return JSON.stringify([
|
|
139
|
+
tile?.sort?.column ? [tile.sort.column, tile.sort.direction ?? 'asc'] : null,
|
|
140
|
+
tile?.search ?? '',
|
|
141
|
+
[...(tile?.hidden ?? [])].sort(),
|
|
142
|
+
drillKey(tile?.drill),
|
|
143
|
+
]);
|
|
144
|
+
}
|
|
145
|
+
function drillKey(path) {
|
|
146
|
+
return JSON.stringify((path ?? [])
|
|
147
|
+
.map((step) => [step.level, step.value === null || step.value === undefined ? null : String(step.value)]));
|
|
148
|
+
}
|
|
149
|
+
// The picks of a list with blanks (null, '') left out, or undefined when none
|
|
150
|
+
// is left.
|
|
151
|
+
function keptPicks(list) {
|
|
152
|
+
const kept = (list ?? []).filter((pick) => isSet(pick) && pick !== '');
|
|
153
|
+
return kept.length ? kept : undefined;
|
|
154
|
+
}
|
|
155
|
+
// Only the parts that hold something, or null when none does.
|
|
156
|
+
function storedOrNull(value) {
|
|
157
|
+
const stored = Object.fromEntries(Object.entries(value).filter(([, part]) => isSet(part)));
|
|
158
|
+
return Object.keys(stored).length ? stored : null;
|
|
159
|
+
}
|
|
160
|
+
function isDrillValue(value) {
|
|
161
|
+
return value === null || typeof value === 'string' || typeof value === 'number';
|
|
162
|
+
}
|
|
163
|
+
function isSet(value) {
|
|
164
|
+
return value !== undefined && value !== null;
|
|
165
|
+
}
|
|
166
|
+
function isPlainObject(value) {
|
|
167
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9yZXBvcnRzL3JlcG9ydC1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxPQUFPLEVBSUwsbUJBQW1CLEdBR3BCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3hELG9DQUFvQztBQUNwQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRWpDLDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsb0JBQW9CO0FBQ3BCLE1BQU0sZUFBZSxHQUFzQztJQUN6RCxRQUFRLEVBQUUsSUFBSTtJQUNkLFFBQVEsRUFBRSxJQUFJO0lBQ2QsU0FBUyxFQUFFLElBQUk7SUFDZixVQUFVLEVBQUUsSUFBSTtJQUNoQixXQUFXLEVBQUUsSUFBSTtJQUNqQixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsSUFBSTtJQUNsQixTQUFTLEVBQUUsSUFBSTtJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFFBQVEsRUFBRSxJQUFJO0lBQ2QsVUFBVSxFQUFFLElBQUk7Q0FDakIsQ0FBQztBQUVGLHlFQUF5RTtBQUN6RSxvREFBb0Q7QUFDcEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQTBCLENBQUM7QUFFMUYsTUFBTSxXQUFXLEdBQUcsMkJBQTJCLENBQUM7QUFFaEQsK0NBQStDO0FBQy9DLE1BQU0sY0FBYyxHQUFHLCtDQUErQyxDQUFDO0FBR3ZFLDBEQUEwRDtBQUMxRCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQWE7SUFDM0MsT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRyxD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QUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsOERBQThEO0FBQzlELFNBQVMsWUFBWSxDQUFDLEtBQThCO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUF1QixDQUFDO0lBRWpILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BELENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFjO0lBQ2xDLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBQ2xGLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFjO0lBQzNCLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxLQUFjO0lBQ25DLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcHVyZSBydWxlcyBvZiB0aGUgdmlld2VyJ3Mgc3RhdGUgKFJlcG9ydFN0YXRlU25hcHNob3QpOiB0aGUgcmVsYXRpdmVcbi8vIHJhbmdlcyB0aGUgc2VydmVyIHJlc29sdmVzLCBhIGdyb3VwIHZhbHVlIGluIGl0cyBzdG9yZWQgc2hhcGUsIGEgY2hhcnQnc1xuLy8gZHJpbGwgcGF0aCwgYW5kIHdoZXRoZXIgdGhlIHNjcmVlbiBzdGlsbCBzaG93cyB0aGUgcmVwb3J0J3MgZGVmYXVsdHMuXG4vLyBQdXJlLCBzbyB0aGUgbm9kZSBoYXJuZXNzIHJ1bnMgdGhlbS5cbi8vXG4vLyAtIFRoZSBzdGF0ZSBzZXJ2aWNlIHR1cm5zIGl0cyB2YWx1ZXMgaW50byB0aGUgc3RvcmVkIHNoYXBlXG4vLyAgICh0b1N0b3JlZEdyb3VwVmFsdWUpIGFuZCBhc2tzIHN0YXRlRGlmZmVycyB3aGV0aGVyIHRoZSBzY3JlZW4gZGlmZmVyc1xuLy8gICBmcm9tIHRoZSByZXBvcnQncyBhdXRob3JlZCBkZWZhdWx0cy5cbi8vIC0gQSBkcmlsbCBwYXRoIGlzIGtlcHQgdG8gd2hhdCBhIHRpbGUgY2FuIGNhcnJ5IChjbGVhbkRyaWxsUGF0aCkuXG5pbXBvcnQgeyBSZXBvcnREcmlsbFN0ZXAgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LWRyaWxsLXN0ZXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlcG9ydFN0YXRlU25hcHNob3QgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LXN0YXRlLXNuYXBzaG90LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXBvcnRUaWxlU3RhdGUgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVwb3J0LXRpbGUtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIENoYXJ0R3JhbnVsYXJpdHksXG4gIEZpbHRlckdyb3VwRGVmYXVsdCxcbiAgRmlsdGVyR3JvdXBWYWx1ZSxcbiAgR1JBTlVMQVJJVFlfT1BUSU9OUyxcbiAgUmVwb3J0RmlsdGVyVHlwZSxcbiAgUmVwb3J0UmVsYXRpdmVSYW5nZSxcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZGF0ZUJvdW5kU3RyaW5nIH0gZnJvbSAnLi9yZXBvcnQtZmlsdGVyLWl0ZW1zJztcblxuXG4vLyBUaGUgc2VydmVyJ3MgY2FwIG9uIGEgZHJpbGwgcGF0aC5cbmV4cG9ydCBjb25zdCBEUklMTF9NQVhfREVQVEggPSA1O1xuXG4vLyBFdmVyeSByZWxhdGl2ZSByYW5nZSBuYW1lIHRoZSBzZXJ2ZXIga25vd3MsIGluIGl0cyBlbnVtJ3Mgb3JkZXIuIEEgcmVjb3JkXG4vLyByYXRoZXIgdGhhbiBhIGxpc3QsIHNvIHRoZSBidWlsZCBmYWlscyB3aGVuIFJlcG9ydFJlbGF0aXZlUmFuZ2UgZ2FpbnMgYVxuLy8gbmFtZSB0aGlzIG1pc3Nlcy5cbmNvbnN0IFJFTEFUSVZFX1JBTkdFUzogUmVjb3JkPFJlcG9ydFJlbGF0aXZlUmFuZ2UsIHRydWU+ID0ge1xuICB0aGlzV2VlazogdHJ1ZSxcbiAgbGFzdFdlZWs6IHRydWUsXG4gIGxhc3Q3RGF5czogdHJ1ZSxcbiAgbGFzdDMwRGF5czogdHJ1ZSxcbiAgbGFzdDNNb250aHM6IHRydWUsXG4gIGxhc3Q2TW9udGhzOiB0cnVlLFxuICBsYXN0MTJNb250aHM6IHRydWUsXG4gIHRoaXNNb250aDogdHJ1ZSxcbiAgdGhpc1F1YXJ0ZXI6IHRydWUsXG4gIHRoaXNZZWFyOiB0cnVlLFxuICB5ZWFyVG9EYXRlOiB0cnVlLFxufTtcblxuLy8gVGhlIHNhbWUgbmFtZXMgYXMgYSBsaXN0LCBpbiB0aGUgc2VydmVyIGVudW0ncyBvcmRlciAodGhlIHJlY29yZCdzIGtleVxuLy8gb3JkZXIpOiB0aGUgb3JkZXIgdGhlIGRhdGUgcGlja2VyIG9mZmVycyB0aGVtIGluLlxuZXhwb3J0IGNvbnN0IFJFTEFUSVZFX1JBTkdFX05BTUVTID0gT2JqZWN0LmtleXMoUkVMQVRJVkVfUkFOR0VTKSBhcyBSZXBvcnRSZWxhdGl2ZVJhbmdlW107XG5cbmNvbnN0IERBWV9QQVRURVJOID0gL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KSQvO1xuXG4vLyBBIG51bWJlciBhcyB0ZXh0OiB3aGF0IGEgbWFza2VkIGlucHV0IHNlbmRzLlxuY29uc3QgTlVNQkVSX1BBVFRFUk4gPSAvXlsrLV0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPyQvaTtcblxuXG4vLyBXaGV0aGVyIGEgbmFtZSBpcyBhIHJlbGF0aXZlIHJhbmdlIHRoZSBzZXJ2ZXIgcmVzb2x2ZXMuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWxhdGl2ZVJhbmdlKG5hbWU6IHVua25vd24pOiBuYW1lIGlzIFJlcG9ydFJlbGF0aXZlUmFuZ2Uge1xuICByZXR1cm4gdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSRUxBVElWRV9SQU5HRVMsIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDaGFydEdyYW51bGFyaXR5KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ2hhcnRHcmFudWxhcml0eSB7XG4gIHJldHVybiBHUkFOVUxBUklUWV9PUFRJT05TLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSB2YWx1ZSk7XG59XG5cbi8vIFdoZXRoZXIgdGV4dCBpcyBhIHJlYWwgY2FsZW5kYXIgZGF5IHdyaXR0ZW4gJ3l5eXktTU0tZGQnIChubyAyMDI2LTAyLTMwKS5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbGVuZGFyRGF5KHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJ0cyA9IERBWV9QQVRURVJOLmV4ZWModGV4dCk7XG4gIGlmICghcGFydHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBwYXJ0cy5zbGljZSgxKS5tYXAoTnVtYmVyKTtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoIC0gMSwgZGF5KSk7XG5cbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRnVsbFllYXIoKSA9PT0geWVhciAmJiBkYXRlLmdldFVUQ01vbnRoKCkgPT09IG1vbnRoIC0gMSAmJiBkYXRlLmdldFVUQ0RhdGUoKSA9PT0gZGF5O1xufVxuXG4vLyBBIG51bWJlciB3cml0dGVuIGFzIHRleHQgKGEgbWFza2VkIGlucHV0J3MgdmFsdWUpLCBvciBudWxsIHdoZW4gdGhlIHRleHRcbi8vIGlzIG5vdCBvbmUgZmluaXRlIG51bWJlci5cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJGcm9tVGV4dCh0ZXh0OiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgbnVtYmVyID0gTlVNQkVSX1BBVFRFUk4udGVzdCh0ZXh0KSA/IE51bWJlcih0ZXh0KSA6IE5hTjtcblxuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiBudWxsO1xufVxuXG4vLyBBIGdyb3VwJ3MgdmFsdWUgaW4gaXRzIHN0b3JlZCBzaGFwZSwgcmVhZCBmb3IgdGhlIGtleXMgaXRzIGdyb3VwJ3MgdHlwZVxuLy8gb3ducywgb3IgbnVsbCB3aGVuIGl0IGhvbGRzIG5vdGhpbmcuIEEgZGF0ZSByYW5nZSB0aGF0IHN0aWxsIGNhcnJpZXMgaXRzXG4vLyByZWxhdGl2ZSBwcmVzZXQgaXMgd3JpdHRlbiBhcyB0aGF0IHByZXNldCB3aGF0ZXZlciB0b2RheSBpcy5cbmV4cG9ydCBmdW5jdGlvbiB0b1N0b3JlZEdyb3VwVmFsdWUoXG4gIHR5cGU6IFJlcG9ydEZpbHRlclR5cGUsXG4gIHZhbHVlOiBGaWx0ZXJHcm91cFZhbHVlIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IEZpbHRlckdyb3VwRGVmYXVsdCB8IG51bGwge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdkYXRlUmFuZ2UnOlxuICAgICAgcmV0dXJuIGlzUmVsYXRpdmVSYW5nZSh2YWx1ZS5wcmVzZXQpXG4gICAgICAgID8geyByZWxhdGl2ZTogdmFsdWUucHJlc2V0IH1cbiAgICAgICAgOiBzdG9yZWRPck51bGwoeyBzdGFydDogZGF0ZUJvdW5kU3RyaW5nKHZhbHVlLnN0YXJ0KSwgZW5kOiBkYXRlQm91bmRTdHJpbmcodmFsdWUuZW5kKSB9KTtcblxuICAgIGNhc2UgJ3NlbGVjdCc6IHtcbiAgICAgIGNvbnN0IGV4Y2x1ZGVWYWx1ZXMgPSBrZXB0UGlja3ModmFsdWUuZXhjbHVkZVZhbHVlcyk7XG5cbiAgICAgIHJldHVybiBzdG9yZWRPck51bGwoZXhjbHVkZVZhbHVlcyA/IHsgZXhjbHVkZVZhbHVlcyB9IDogeyB2YWx1ZXM6IGtlcHRQaWNrcyh2YWx1ZS52YWx1ZXMpIH0pO1xuICAgIH1cblxuICAgIGNhc2UgJ251bWJlclJhbmdlJzpcbiAgICAgIHJldHVybiBzdG9yZWRPck51bGwoeyBtaW46IGZpbml0ZU51bWJlcih2YWx1ZS5taW4pLCBtYXg6IGZpbml0ZU51bWJlcih2YWx1ZS5tYXgpIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdG9yZWRPck51bGwoeyB2YWx1ZTogdmFsdWUudmFsdWU/LnRyaW0oKSB8fCB1bmRlZmluZWQgfSk7XG4gIH1cbn1cblxuLy8gV2hldGhlciB0aGUgc2NyZWVuJ3Mgc3RhdGUgKGBjdXJyZW50YCwgYSBzbmFwc2hvdCkgZGlmZmVycyBmcm9tIHRoZVxuLy8gcmVwb3J0J3MgYXV0aG9yZWQgZGVmYXVsdHMgKGBkZWZhdWx0c2ApOiB0aGUgbWF0Y2gsIHRoZSBncmFpbiwgYSBncm91cCdzXG4vLyB2YWx1ZSwgb3IgYSB0aWxlJ3Mgc29ydCwgc2VhcmNoLCBoaWRkZW4gY29sdW1ucyBvciBkcmlsbCBwYXRoLiBUaGUgcGFnZSBpc1xuLy8gbm90IGNvbXBhcmVkIChtb3ZpbmcgdG8gYW5vdGhlciBwYWdlIGNoYW5nZXMgbm8gZmlsdGVyKS4gUGlja3MgYXJlXG4vLyBjb21wYXJlZCBpbiBhbnkgb3JkZXIuXG5leHBvcnQgZnVuY3Rpb24gc3RhdGVEaWZmZXJzKGRlZmF1bHRzOiBSZXBvcnRTdGF0ZVNuYXBzaG90LCBjdXJyZW50OiBSZXBvcnRTdGF0ZVNuYXBzaG90KTogYm9vbGVhbiB7XG4gIHJldHVybiAoZGVmYXVsdHMubWF0Y2ggPz8gJ2FsbCcpICE9PSAoY3VycmVudC5tYXRjaCA/PyAnYWxsJylcbiAgICB8fCAoZGVmYXVsdHMuZ3JvdXBCeSA/PyBudWxsKSAhPT0gKGN1cnJlbnQuZ3JvdXBCeSA/PyBudWxsKVxuICAgIHx8IE9iamVjdC5lbnRyaWVzKGN1cnJlbnQuZ3JvdXBzID8/IHt9KVxuICAgICAgLnNvbWUoKFtncm91cElkLCB2YWx1ZV0pID0+IHN0b3JlZFZhbHVlS2V5KGRlZmF1bHRzLmdyb3Vwcz8uW051bWJlcihncm91cElkKV0pICE9PSBzdG9yZWRWYWx1ZUtleSh2YWx1ZSkpXG4gICAgfHwgdGlsZXNEaWZmZXIoZGVmYXVsdHMudGlsZXMgPz8ge30sIGN1cnJlbnQudGlsZXMgPz8ge30pO1xufVxuXG4vLyBXaGV0aGVyIHR3byBzdG9yZWQgZ3JvdXAgdmFsdWVzIGFyZSB0aGUgc2FtZSBmaWx0ZXI6IHBpY2tzIGluIGFueSBvcmRlcixcbi8vIHRleHQgdHJpbW1lZCwgYW4gZW1wdHkgdmFsdWUgcmVhZCBhcyBub25lLlxuZXhwb3J0IGZ1bmN0aW9uIHNhbWVTdG9yZWRHcm91cFZhbHVlKFxuICBhOiBGaWx0ZXJHcm91cERlZmF1bHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBiOiBGaWx0ZXJHcm91cERlZmF1bHQgfCBudWxsIHwgdW5kZWZpbmVkLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBzdG9yZWRWYWx1ZUtleShhKSA9PT0gc3RvcmVkVmFsdWVLZXkoYik7XG59XG5cbi8vIEEgZHJpbGwgcGF0aCBrZXB0IHRvIHdoYXQgYSB0aWxlIGNhbiBjYXJyeTogaXRzIHN0ZXBzIHVwIHRvIHRoZSBmaXJzdCB0aGF0XG4vLyBpcyBub3QgYSB0aW1lIGxldmVsIHdpdGggYSBwbGFpbiB2YWx1ZSAodGhlIHN0ZXBzIGJlZm9yZSBpdCBhcmUga2VwdCksIGF0XG4vLyBtb3N0IERSSUxMX01BWF9ERVBUSCBvZiB0aGVtLlxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuRHJpbGxQYXRoKHBhdGg6IHJlYWRvbmx5IHVua25vd25bXSB8IG51bGwgfCB1bmRlZmluZWQpOiBSZXBvcnREcmlsbFN0ZXBbXSB7XG4gIGNvbnN0IGtlcHQ6IFJlcG9ydERyaWxsU3RlcFtdID0gW107XG5cbiAgZm9yIChjb25zdCBzdGVwIG9mIHBhdGggPz8gW10pIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3Qoc3RlcCkgfHwgIWlzQ2hhcnRHcmFudWxhcml0eShzdGVwLmxldmVsKSB8fCAhaXNEcmlsbFZhbHVlKHN0ZXAudmFsdWUpXG4gICAgICB8fCBrZXB0Lmxlbmd0aCA9PT0gRFJJTExfTUFYX0RFUFRIKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBrZXB0LnB1c2goeyBsZXZlbDogc3RlcC5sZXZlbCwgdmFsdWU6IHN0ZXAudmFsdWUgfSk7XG4gIH1cblxuICByZXR1cm4ga2VwdDtcbn1cblxuLy8gV2hldGhlciB0d28gZHJpbGwgcGF0aHMgYXJlIHRoZSBzYW1lIHN0ZXBzLiBBIHZhbHVlIGlzIGNvbXBhcmVkIGFzIHRleHQsXG4vLyBzbyAyMDI2IGFuZCAnMjAyNicgYXJlIHRoZSBzYW1lIHN0ZXAuXG5leHBvcnQgZnVuY3Rpb24gc2FtZURyaWxsUGF0aChcbiAgYTogcmVhZG9ubHkgUmVwb3J0RHJpbGxTdGVwW10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBiOiByZWFkb25seSBSZXBvcnREcmlsbFN0ZXBbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGRyaWxsS2V5KGEpID09PSBkcmlsbEtleShiKTtcbn1cblxuLy8gQSByYW5nZSBlbmQgYXMgYSBudW1iZXIuIEEgbWFza2VkIGlucHV0IHNlbmRzIGl0cyBudW1iZXIgYXMgdGV4dCwgc29cbi8vIG51bWVyaWMgdGV4dCBpcyByZWFkIGFzIGl0cyBudW1iZXIuXG5leHBvcnQgZnVuY3Rpb24gZmluaXRlTnVtYmVyKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbnVtYmVyID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IG51bWJlckZyb21UZXh0KHZhbHVlLnRyaW0oKSkgOiB2YWx1ZTtcblxuICByZXR1cm4gdHlwZW9mIG51bWJlciA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHRpbGVzRGlmZmVyKGJhc2U6IFJlY29yZDxudW1iZXIsIFJlcG9ydFRpbGVTdGF0ZT4sIGN1cnJlbnQ6IFJlY29yZDxudW1iZXIsIFJlcG9ydFRpbGVTdGF0ZT4pOiBib29sZWFuIHtcbiAgY29uc3QgaWRzID0gbmV3IFNldChbLi4uT2JqZWN0LmtleXMoYmFzZSksIC4uLk9iamVjdC5rZXlzKGN1cnJlbnQpXS5tYXAoTnVtYmVyKSk7XG5cbiAgcmV0dXJuIFsuLi5pZHNdLnNvbWUoKGNvbXBvbmVudElkKSA9PiB0aWxlU3RhdGVLZXkoYmFzZVtjb21wb25lbnRJZF0pICE9PSB0aWxlU3RhdGVLZXkoY3VycmVudFtjb21wb25lbnRJZF0pKTtcbn1cblxuLy8gT25lIHRleHQgZm9yIGEgc3RvcmVkIGdyb3VwIHZhbHVlLCB0aGUgc2FtZSBmb3IgZXZlcnkgd2F5IG9mIHdyaXRpbmcgdGhlXG4vLyBzYW1lIGZpbHRlcjogcGlja3MgaW4gYW55IG9yZGVyLCB0ZXh0IHRyaW1tZWQsIGFuZCBhbiBlbXB0eSB2YWx1ZSByZWFkIGFzXG4vLyBub25lLlxuZnVuY3Rpb24gc3RvcmVkVmFsdWVLZXkodmFsdWU6IEZpbHRlckdyb3VwRGVmYXVsdCB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBjb25zdCBzdG9yZWQgPSB2YWx1ZSA/PyB7fTtcbiAgY29uc3QgcGlja3MgPSAobGlzdDogdW5rbm93bltdIHwgdW5kZWZpbmVkKSA9PiBbLi4uKGtlcHRQaWNrcyhsaXN0KSA/PyBbXSldLm1hcChTdHJpbmcpLnNvcnQoKTtcblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoW1xuICAgIHN0b3JlZC5yZWxhdGl2ZSA/PyBudWxsLFxuICAgIHN0b3JlZC5zdGFydD8uc2xpY2UoMCwgMTApID8/IG51bGwsXG4gICAgc3RvcmVkLmVuZD8uc2xpY2UoMCwgMTApID8/IG51bGwsXG4gICAgcGlja3Moc3RvcmVkLnZhbHVlcyksXG4gICAgcGlja3Moc3RvcmVkLmV4Y2x1ZGVWYWx1ZXMpLFxuICAgIChzdG9yZWQudmFsdWUgPz8gJycpLnRyaW0oKSxcbiAgICBmaW5pdGVOdW1iZXIoc3RvcmVkLm1pbikgPz8gbnVsbCxcbiAgICBmaW5pdGVOdW1iZXIoc3RvcmVkLm1heCkgPz8gbnVsbCxcbiAgXSk7XG59XG5cbi8vIE9uZSB0ZXh0IGZvciBhIHRpbGUncyBzdGF0ZSwgb3ZlciB0aGUga2V5cyB0aGlzIHZpZXdlciByZWFkcy4gTm8gZGlyZWN0aW9uXG4vLyByZWFkcyBhcyBhc2NlbmRpbmcsIHRoZSB3YXkgYSBsaXN0IGFwcGxpZXMgaXQuXG5mdW5jdGlvbiB0aWxlU3RhdGVLZXkodGlsZTogUmVwb3J0VGlsZVN0YXRlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFtcbiAgICB0aWxlPy5zb3J0Py5jb2x1bW4gPyBbdGlsZS5zb3J0LmNvbHVtbiwgdGlsZS5zb3J0LmRpcmVjdGlvbiA/PyAnYXNjJ10gOiBudWxsLFxuICAgIHRpbGU/LnNlYXJjaCA/PyAnJyxcbiAgICBbLi4uKHRpbGU/LmhpZGRlbiA/PyBbXSldLnNvcnQoKSxcbiAgICBkcmlsbEtleSh0aWxlPy5kcmlsbCksXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBkcmlsbEtleShwYXRoOiByZWFkb25seSBSZXBvcnREcmlsbFN0ZXBbXSB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoKHBhdGggPz8gW10pXG4gICAgLm1hcCgoc3RlcCkgPT4gW3N0ZXAubGV2ZWwsIHN0ZXAudmFsdWUgPT09IG51bGwgfHwgc3RlcC52YWx1ZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IFN0cmluZyhzdGVwLnZhbHVlKV0pKTtcbn1cblxuLy8gVGhlIHBpY2tzIG9mIGEgbGlzdCB3aXRoIGJsYW5rcyAobnVsbCwgJycpIGxlZnQgb3V0LCBvciB1bmRlZmluZWQgd2hlbiBub25lXG4vLyBpcyBsZWZ0LlxuZnVuY3Rpb24ga2VwdFBpY2tzKGxpc3Q6IHVua25vd25bXSB8IG51bGwgfCB1bmRlZmluZWQpOiB1bmtub3duW10gfCB1bmRlZmluZWQge1xuICBjb25zdCBrZXB0ID0gKGxpc3QgPz8gW10pLmZpbHRlcigocGljaykgPT4gaXNTZXQocGljaykgJiYgcGljayAhPT0gJycpO1xuXG4gIHJldHVybiBrZXB0Lmxlbmd0aCA/IGtlcHQgOiB1bmRlZmluZWQ7XG59XG5cbi8vIE9ubHkgdGhlIHBhcnRzIHRoYXQgaG9sZCBzb21ldGhpbmcsIG9yIG51bGwgd2hlbiBub25lIGRvZXMuXG5mdW5jdGlvbiBzdG9yZWRPck51bGwodmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRmlsdGVyR3JvdXBEZWZhdWx0IHwgbnVsbCB7XG4gIGNvbnN0IHN0b3JlZCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh2YWx1ZSkuZmlsdGVyKChbLCBwYXJ0XSkgPT4gaXNTZXQocGFydCkpKSBhcyBGaWx0ZXJHcm91cERlZmF1bHQ7XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHN0b3JlZCkubGVuZ3RoID8gc3RvcmVkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNEcmlsbFZhbHVlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVwb3J0RHJpbGxTdGVwWyd2YWx1ZSddIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNTZXQodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbiJdfQ==
|
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
// numberRange its min/max control, matchAny the report bar's Match select,
|
|
11
11
|
// and pageScope shows a page's groups in the report bar of that page.
|
|
12
12
|
// cascadingOptions narrows a select's list by the other filters of its tile
|
|
13
|
-
// (ReportFilterOptionsService).
|
|
14
|
-
// header (ReportViewPickerComponent). drill is a time chart's click down, with
|
|
13
|
+
// (ReportFilterOptionsService). drill is a time chart's click down, with
|
|
15
14
|
// the tile header's breadcrumb and its menu's Drill up and Back to top as the
|
|
16
15
|
// way back.
|
|
17
16
|
export const VIEWER_FEATURES = [
|
|
@@ -21,7 +20,6 @@ export const VIEWER_FEATURES = [
|
|
|
21
20
|
'matchAny',
|
|
22
21
|
'pageScope',
|
|
23
22
|
'cascadingOptions',
|
|
24
|
-
'views',
|
|
25
23
|
'drill',
|
|
26
24
|
];
|
|
27
25
|
// The features a report offers on this screen: the ones its server serves
|
|
@@ -39,4 +37,4 @@ export function offersExclude(group, features) {
|
|
|
39
37
|
&& !group.multiColumn
|
|
40
38
|
&& (features ?? []).includes('excludeValues');
|
|
41
39
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXZpZXdlci1mZWF0dXJlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvcmVwb3J0cy9yZXBvcnQtdmlld2VyLWZlYXR1cmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLHdFQUF3RTtBQUN4RSwyRUFBMkU7QUFDM0UsK0VBQStFO0FBQy9FLCtFQUErRTtBQUMvRSw2RUFBNkU7QUFDN0UscUNBQXFDO0FBQ3JDLEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsMkVBQTJFO0FBQzNFLDJFQUEyRTtBQUMzRSxzRUFBc0U7QUFDdEUsNEVBQTRFO0FBQzVFLHlFQUF5RTtBQUN6RSw4RUFBOEU7QUFDOUUsWUFBWTtBQUNaLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBbUM7SUFDN0QsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsVUFBVTtJQUNWLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsT0FBTztDQUNSLENBQUM7QUFFRiwwRUFBMEU7QUFDMUUsNERBQTREO0FBQzVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUF5RDtJQUM3RixPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBQzFFLDJFQUEyRTtBQUMzRSwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLE1BQU0sVUFBVSxhQUFhLENBQzNCLEtBQXNELEVBQ3RELFFBQTJEO0lBRTNELE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO1dBQ3pCLENBQUMsS0FBSyxDQUFDLFdBQVc7V0FDbEIsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvcnRWaWV3ZXJGZWF0dXJlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC12aWV3ZXItZmVhdHVyZS50eXBlJztcbmltcG9ydCB7IFJlcG9ydEZpbHRlckdyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlcG9ydC5pbnRlcmZhY2UnO1xuXG5cbi8vIFRoZSB2aWV3ZXIgZmVhdHVyZXMgdGhpcyB2aWV3ZXIgaW1wbGVtZW50czogdGhlIHJlcG9ydCBHRVQgbmFtZXMgdGhlbVxuLy8gKGZlYXR1cmVzPTxjb21tYSBsaXN0PiksIGFuZCB0aGUgc2VydmVyIGFzc2VtYmxlcyB0aGUgcmVwb3J0IGZvciBleGFjdGx5XG4vLyB0aGVzZS4gQSBmZWF0dXJlIGpvaW5zIHRoZSBsaXN0IGluIHRoZSBjaGFuZ2UgdGhhdCBidWlsZHMgaXRzIGNvbnRyb2wsIG5ldmVyXG4vLyBiZWZvcmU6IHRoZSBzZXJ2ZXIgc2VuZHMgYSBncm91cCBvbmx5IGluIGEgc2hhcGUgdGhlIHZpZXdlciBzYXlzIGl0IGNhbiBzaG93XG4vLyBhbmQgY2xlYXIsIGFuZCBhIGxpc3RlZCBmZWF0dXJlIHdpdGhvdXQgaXRzIGNvbnRyb2wgd291bGQgZ2V0IGEgZmlsdGVyIHRoZVxuLy8gdmlld2VyIGNhbiBuZWl0aGVyIHNob3cgbm9yIGNsZWFyLlxuLy9cbi8vIHNjb3BlRmlsdGVycyBuZWVkcyBubyBjb250cm9sIG9mIGl0cyBvd246IGEgc2NvcGUgbWVtYmVyIGlzIGFuIG9yZGluYXJ5XG4vLyBmaWx0ZXIgcm93IG9uIGl0cyB0aWxlLiBleGNsdWRlVmFsdWVzIGlzIGEgc2VsZWN0J3MgJ0V4Y2x1ZGUgdGhlc2UnIHJvdyxcbi8vIG51bWJlclJhbmdlIGl0cyBtaW4vbWF4IGNvbnRyb2wsIG1hdGNoQW55IHRoZSByZXBvcnQgYmFyJ3MgTWF0Y2ggc2VsZWN0LFxuLy8gYW5kIHBhZ2VTY29wZSBzaG93cyBhIHBhZ2UncyBncm91cHMgaW4gdGhlIHJlcG9ydCBiYXIgb2YgdGhhdCBwYWdlLlxuLy8gY2FzY2FkaW5nT3B0aW9ucyBuYXJyb3dzIGEgc2VsZWN0J3MgbGlzdCBieSB0aGUgb3RoZXIgZmlsdGVycyBvZiBpdHMgdGlsZVxuLy8gKFJlcG9ydEZpbHRlck9wdGlvbnNTZXJ2aWNlKS4gZHJpbGwgaXMgYSB0aW1lIGNoYXJ0J3MgY2xpY2sgZG93biwgd2l0aFxuLy8gdGhlIHRpbGUgaGVhZGVyJ3MgYnJlYWRjcnVtYiBhbmQgaXRzIG1lbnUncyBEcmlsbCB1cCBhbmQgQmFjayB0byB0b3AgYXMgdGhlXG4vLyB3YXkgYmFjay5cbmV4cG9ydCBjb25zdCBWSUVXRVJfRkVBVFVSRVM6IHJlYWRvbmx5IFJlcG9ydFZpZXdlckZlYXR1cmVbXSA9IFtcbiAgJ3Njb3BlRmlsdGVycycsXG4gICdleGNsdWRlVmFsdWVzJyxcbiAgJ251bWJlclJhbmdlJyxcbiAgJ21hdGNoQW55JyxcbiAgJ3BhZ2VTY29wZScsXG4gICdjYXNjYWRpbmdPcHRpb25zJyxcbiAgJ2RyaWxsJyxcbl07XG5cbi8vIFRoZSBmZWF0dXJlcyBhIHJlcG9ydCBvZmZlcnMgb24gdGhpcyBzY3JlZW46IHRoZSBvbmVzIGl0cyBzZXJ2ZXIgc2VydmVzXG4vLyAoUmVwb3J0LnZpZXdlckZlYXR1cmVzKSB0aGF0IHRoaXMgdmlld2VyIGFsc28gaW1wbGVtZW50cy5cbmV4cG9ydCBmdW5jdGlvbiBvZmZlcmVkVmlld2VyRmVhdHVyZXMoc2VydmVkOiByZWFkb25seSBSZXBvcnRWaWV3ZXJGZWF0dXJlW10gfCBudWxsIHwgdW5kZWZpbmVkKTogUmVwb3J0Vmlld2VyRmVhdHVyZVtdIHtcbiAgcmV0dXJuIChzZXJ2ZWQgPz8gW10pLmZpbHRlcigoZmVhdHVyZSkgPT4gVklFV0VSX0ZFQVRVUkVTLmluY2x1ZGVzKGZlYXR1cmUpKTtcbn1cblxuLy8gV2hldGhlciBhIHNlbGVjdCBncm91cCBvZmZlcnMgJ0V4Y2x1ZGUgdGhlc2UnOiB0aGUgb25lIHJ1bGUgdGhlIHJlcG9ydCBiYXIsXG4vLyB0aGUgdGlsZSBoZWFkZXJzIGFuZCB0aGUgcmVwb3J0IHNldHRpbmdzJyBkZWZhdWx0IHJvdyBzaGFyZS4gVGhlIHNlcnZlclxuLy8gbXVzdCBzZXJ2ZSBleGNsdWRlVmFsdWVzLCBhbmQgbm8gZW5hYmxlZCBtZW1iZXIgbWF5IGJpbmQgc2V2ZXJhbCBjb2x1bW5zXG4vLyAobXVsdGlDb2x1bW4pLCBzaW5jZSB0aGUgc2VydmVyIGNhbm5vdCBsZWF2ZSB2YWx1ZXMgb3V0IHRoZXJlIChhbiBvbGRlclxuLy8gc2VydmVyIHNlbmRzIG5vIG11bHRpQ29sdW1uLCBhbmQgdGhlIHRvZ2dsZSBzaG93cyBhcyBiZWZvcmUpLlxuZXhwb3J0IGZ1bmN0aW9uIG9mZmVyc0V4Y2x1ZGUoXG4gIGdyb3VwOiBQaWNrPFJlcG9ydEZpbHRlckdyb3VwLCAndHlwZScgfCAnbXVsdGlDb2x1bW4nPixcbiAgZmVhdHVyZXM6IHJlYWRvbmx5IFJlcG9ydFZpZXdlckZlYXR1cmVbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIGdyb3VwLnR5cGUgPT09ICdzZWxlY3QnXG4gICAgJiYgIWdyb3VwLm11bHRpQ29sdW1uXG4gICAgJiYgKGZlYXR1cmVzID8/IFtdKS5pbmNsdWRlcygnZXhjbHVkZVZhbHVlcycpO1xufVxuIl19
|