@ngxsmk/cdk 1.3.1 → 2.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.
- package/README.md +1 -1
- package/cva-base/cva-base.d.ts +34 -0
- package/cva-base/cva-base.d.ts.map +1 -0
- package/cva-base/index.d.ts +2 -0
- package/cva-base/index.d.ts.map +1 -0
- package/cva-base/ngxsmk-cdk-cva-base.d.ts.map +1 -0
- package/esm2022/cva-base/cva-base.mjs +45 -0
- package/esm2022/cva-base/index.mjs +2 -0
- package/esm2022/cva-base/ngxsmk-cdk-cva-base.mjs +5 -0
- package/esm2022/input-group/index.mjs +3 -0
- package/esm2022/input-group/input-group-engine.mjs +219 -0
- package/esm2022/input-group/models/index.mjs +2 -0
- package/esm2022/input-group/models/input-group.model.mjs +2 -0
- package/esm2022/input-group/ngxsmk-cdk-input-group.mjs +5 -0
- package/esm2022/listbox-keyboard/index.mjs +2 -0
- package/esm2022/listbox-keyboard/listbox-keyboard.mjs +145 -0
- package/esm2022/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.mjs +5 -0
- package/esm2022/public-api.mjs +10 -1
- package/esm2022/scheduler/index.mjs +5 -0
- package/esm2022/scheduler/models/date-range.mjs +2 -0
- package/esm2022/scheduler/models/event.model.mjs +2 -0
- package/esm2022/scheduler/models/index.mjs +6 -0
- package/esm2022/scheduler/models/resource.model.mjs +5 -0
- package/esm2022/scheduler/models/selection.model.mjs +7 -0
- package/esm2022/scheduler/models/view.model.mjs +7 -0
- package/esm2022/scheduler/ngxsmk-cdk-scheduler.mjs +5 -0
- package/esm2022/scheduler/plugin/drag-plugin.mjs +82 -0
- package/esm2022/scheduler/plugin/index.mjs +8 -0
- package/esm2022/scheduler/plugin/keyboard-plugin.mjs +150 -0
- package/esm2022/scheduler/plugin/plugin-host.mjs +48 -0
- package/esm2022/scheduler/plugin/plugin.types.mjs +2 -0
- package/esm2022/scheduler/plugin/resize-plugin.mjs +74 -0
- package/esm2022/scheduler/plugin/selection-plugin.mjs +84 -0
- package/esm2022/scheduler/plugin/tooltip-plugin.mjs +103 -0
- package/esm2022/scheduler/scheduler-engine.mjs +316 -0
- package/esm2022/scheduler/utils/date-utils.mjs +131 -0
- package/esm2022/scheduler/utils/index.mjs +3 -0
- package/esm2022/scheduler/utils/snap.mjs +24 -0
- package/esm2022/spreadsheet/index.mjs +5 -0
- package/esm2022/spreadsheet/models/cell.model.mjs +2 -0
- package/esm2022/spreadsheet/models/column.model.mjs +2 -0
- package/esm2022/spreadsheet/models/filter.model.mjs +2 -0
- package/esm2022/spreadsheet/models/formula.model.mjs +2 -0
- package/esm2022/spreadsheet/models/index.mjs +8 -0
- package/esm2022/spreadsheet/models/row.model.mjs +2 -0
- package/esm2022/spreadsheet/models/selection.model.mjs +2 -0
- package/esm2022/spreadsheet/models/sort.model.mjs +2 -0
- package/esm2022/spreadsheet/ngxsmk-cdk-spreadsheet.mjs +5 -0
- package/esm2022/spreadsheet/plugin/clipboard-plugin.mjs +171 -0
- package/esm2022/spreadsheet/plugin/filter-plugin.mjs +87 -0
- package/esm2022/spreadsheet/plugin/formula-plugin.mjs +456 -0
- package/esm2022/spreadsheet/plugin/index.mjs +10 -0
- package/esm2022/spreadsheet/plugin/plugin-host.mjs +188 -0
- package/esm2022/spreadsheet/plugin/plugin.types.mjs +2 -0
- package/esm2022/spreadsheet/plugin/selection-plugin.mjs +114 -0
- package/esm2022/spreadsheet/plugin/sort-plugin.mjs +63 -0
- package/esm2022/spreadsheet/plugin/undo-plugin.mjs +138 -0
- package/esm2022/spreadsheet/plugin/validation-plugin.mjs +71 -0
- package/esm2022/spreadsheet/spreadsheet-engine.mjs +547 -0
- package/esm2022/spreadsheet/utils/cell-utils.mjs +129 -0
- package/esm2022/spreadsheet/utils/index.mjs +2 -0
- package/esm2022/testing/a11y.mjs +6 -3
- package/fesm2022/ngxsmk-cdk-cva-base.mjs +52 -0
- package/fesm2022/ngxsmk-cdk-cva-base.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-input-group.mjs +226 -0
- package/fesm2022/ngxsmk-cdk-input-group.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs +152 -0
- package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-scheduler.mjs +1035 -0
- package/fesm2022/ngxsmk-cdk-scheduler.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-spreadsheet.mjs +1969 -0
- package/fesm2022/ngxsmk-cdk-spreadsheet.mjs.map +1 -0
- package/fesm2022/ngxsmk-cdk-testing.mjs +5 -2
- package/fesm2022/ngxsmk-cdk-testing.mjs.map +1 -1
- package/fesm2022/ngxsmk-cdk.mjs +5 -0
- package/fesm2022/ngxsmk-cdk.mjs.map +1 -1
- package/input-group/index.d.ts +3 -0
- package/input-group/index.d.ts.map +1 -0
- package/input-group/input-group-engine.d.ts +88 -0
- package/input-group/input-group-engine.d.ts.map +1 -0
- package/input-group/models/index.d.ts +2 -0
- package/input-group/models/index.d.ts.map +1 -0
- package/input-group/models/input-group.model.d.ts +114 -0
- package/input-group/models/input-group.model.d.ts.map +1 -0
- package/input-group/ngxsmk-cdk-input-group.d.ts.map +1 -0
- package/listbox-keyboard/index.d.ts +2 -0
- package/listbox-keyboard/index.d.ts.map +1 -0
- package/listbox-keyboard/listbox-keyboard.d.ts +60 -0
- package/listbox-keyboard/listbox-keyboard.d.ts.map +1 -0
- package/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.d.ts.map +1 -0
- package/package.json +40 -1
- package/public-api.d.ts +8 -0
- package/public-api.d.ts.map +1 -1
- package/scheduler/index.d.ts +5 -0
- package/scheduler/index.d.ts.map +1 -0
- package/scheduler/models/date-range.d.ts +6 -0
- package/scheduler/models/date-range.d.ts.map +1 -0
- package/scheduler/models/event.model.d.ts +50 -0
- package/scheduler/models/event.model.d.ts.map +1 -0
- package/scheduler/models/index.d.ts +6 -0
- package/scheduler/models/index.d.ts.map +1 -0
- package/scheduler/models/resource.model.d.ts +16 -0
- package/scheduler/models/resource.model.d.ts.map +1 -0
- package/scheduler/models/selection.model.d.ts +12 -0
- package/scheduler/models/selection.model.d.ts.map +1 -0
- package/scheduler/models/view.model.d.ts +21 -0
- package/scheduler/models/view.model.d.ts.map +1 -0
- package/scheduler/ngxsmk-cdk-scheduler.d.ts.map +1 -0
- package/scheduler/plugin/drag-plugin.d.ts +28 -0
- package/scheduler/plugin/drag-plugin.d.ts.map +1 -0
- package/scheduler/plugin/index.d.ts +8 -0
- package/scheduler/plugin/index.d.ts.map +1 -0
- package/scheduler/plugin/keyboard-plugin.d.ts +24 -0
- package/scheduler/plugin/keyboard-plugin.d.ts.map +1 -0
- package/scheduler/plugin/plugin-host.d.ts +16 -0
- package/scheduler/plugin/plugin-host.d.ts.map +1 -0
- package/scheduler/plugin/plugin.types.d.ts +9 -0
- package/scheduler/plugin/plugin.types.d.ts.map +1 -0
- package/scheduler/plugin/resize-plugin.d.ts +26 -0
- package/scheduler/plugin/resize-plugin.d.ts.map +1 -0
- package/scheduler/plugin/selection-plugin.d.ts +40 -0
- package/scheduler/plugin/selection-plugin.d.ts.map +1 -0
- package/scheduler/plugin/tooltip-plugin.d.ts +41 -0
- package/scheduler/plugin/tooltip-plugin.d.ts.map +1 -0
- package/scheduler/scheduler-engine.d.ts +95 -0
- package/scheduler/scheduler-engine.d.ts.map +1 -0
- package/scheduler/utils/date-utils.d.ts +26 -0
- package/scheduler/utils/date-utils.d.ts.map +1 -0
- package/scheduler/utils/index.d.ts +3 -0
- package/scheduler/utils/index.d.ts.map +1 -0
- package/scheduler/utils/snap.d.ts +7 -0
- package/scheduler/utils/snap.d.ts.map +1 -0
- package/spreadsheet/index.d.ts +5 -0
- package/spreadsheet/index.d.ts.map +1 -0
- package/spreadsheet/models/cell.model.d.ts +44 -0
- package/spreadsheet/models/cell.model.d.ts.map +1 -0
- package/spreadsheet/models/column.model.d.ts +77 -0
- package/spreadsheet/models/column.model.d.ts.map +1 -0
- package/spreadsheet/models/filter.model.d.ts +15 -0
- package/spreadsheet/models/filter.model.d.ts.map +1 -0
- package/spreadsheet/models/formula.model.d.ts +65 -0
- package/spreadsheet/models/formula.model.d.ts.map +1 -0
- package/spreadsheet/models/index.d.ts +8 -0
- package/spreadsheet/models/index.d.ts.map +1 -0
- package/spreadsheet/models/row.model.d.ts +33 -0
- package/spreadsheet/models/row.model.d.ts.map +1 -0
- package/spreadsheet/models/selection.model.d.ts +18 -0
- package/spreadsheet/models/selection.model.d.ts.map +1 -0
- package/spreadsheet/models/sort.model.d.ts +14 -0
- package/spreadsheet/models/sort.model.d.ts.map +1 -0
- package/spreadsheet/ngxsmk-cdk-spreadsheet.d.ts.map +1 -0
- package/spreadsheet/plugin/clipboard-plugin.d.ts +24 -0
- package/spreadsheet/plugin/clipboard-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/filter-plugin.d.ts +21 -0
- package/spreadsheet/plugin/filter-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/formula-plugin.d.ts +39 -0
- package/spreadsheet/plugin/formula-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/index.d.ts +10 -0
- package/spreadsheet/plugin/index.d.ts.map +1 -0
- package/spreadsheet/plugin/plugin-host.d.ts +66 -0
- package/spreadsheet/plugin/plugin-host.d.ts.map +1 -0
- package/spreadsheet/plugin/plugin.types.d.ts +58 -0
- package/spreadsheet/plugin/plugin.types.d.ts.map +1 -0
- package/spreadsheet/plugin/selection-plugin.d.ts +28 -0
- package/spreadsheet/plugin/selection-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/sort-plugin.d.ts +18 -0
- package/spreadsheet/plugin/sort-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/undo-plugin.d.ts +40 -0
- package/spreadsheet/plugin/undo-plugin.d.ts.map +1 -0
- package/spreadsheet/plugin/validation-plugin.d.ts +29 -0
- package/spreadsheet/plugin/validation-plugin.d.ts.map +1 -0
- package/spreadsheet/spreadsheet-engine.d.ts +194 -0
- package/spreadsheet/spreadsheet-engine.d.ts.map +1 -0
- package/spreadsheet/utils/cell-utils.d.ts +26 -0
- package/spreadsheet/utils/cell-utils.d.ts.map +1 -0
- package/spreadsheet/utils/index.d.ts +2 -0
- package/spreadsheet/utils/index.d.ts.map +1 -0
- package/testing/a11y.d.ts +5 -1
- package/testing/a11y.d.ts.map +1 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
export function startOfDay(date) {
|
|
2
|
+
const d = new Date(date);
|
|
3
|
+
d.setHours(0, 0, 0, 0);
|
|
4
|
+
return d;
|
|
5
|
+
}
|
|
6
|
+
export function startOfWeek(date, firstDayOfWeek) {
|
|
7
|
+
const d = startOfDay(date);
|
|
8
|
+
const day = d.getDay();
|
|
9
|
+
const diff = (day - firstDayOfWeek + 7) % 7;
|
|
10
|
+
d.setDate(d.getDate() - diff);
|
|
11
|
+
return d;
|
|
12
|
+
}
|
|
13
|
+
export function endOfWeek(date, firstDayOfWeek) {
|
|
14
|
+
const start = startOfWeek(date, firstDayOfWeek);
|
|
15
|
+
const end = new Date(start);
|
|
16
|
+
end.setDate(end.getDate() + 7);
|
|
17
|
+
end.setMilliseconds(-1);
|
|
18
|
+
return end;
|
|
19
|
+
}
|
|
20
|
+
export function startOfMonth(date) {
|
|
21
|
+
const d = new Date(date.getFullYear(), date.getMonth(), 1);
|
|
22
|
+
d.setHours(0, 0, 0, 0);
|
|
23
|
+
return d;
|
|
24
|
+
}
|
|
25
|
+
export function endOfMonth(date) {
|
|
26
|
+
const d = new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
|
27
|
+
d.setHours(23, 59, 59, 999);
|
|
28
|
+
return d;
|
|
29
|
+
}
|
|
30
|
+
export function addDays(date, days) {
|
|
31
|
+
const d = new Date(date);
|
|
32
|
+
d.setDate(d.getDate() + days);
|
|
33
|
+
return d;
|
|
34
|
+
}
|
|
35
|
+
export function addMinutes(date, minutes) {
|
|
36
|
+
return new Date(date.getTime() + minutes * 60_000);
|
|
37
|
+
}
|
|
38
|
+
export function addWeeks(date, weeks) {
|
|
39
|
+
return addDays(date, weeks * 7);
|
|
40
|
+
}
|
|
41
|
+
export function diffMinutes(start, end) {
|
|
42
|
+
return (end.getTime() - start.getTime()) / 60_000;
|
|
43
|
+
}
|
|
44
|
+
export function diffDays(start, end) {
|
|
45
|
+
const s = startOfDay(start);
|
|
46
|
+
const e = startOfDay(end);
|
|
47
|
+
return Math.round((e.getTime() - s.getTime()) / 86_400_000);
|
|
48
|
+
}
|
|
49
|
+
export function isSameDay(a, b) {
|
|
50
|
+
return (a.getFullYear() === b.getFullYear() &&
|
|
51
|
+
a.getMonth() === b.getMonth() &&
|
|
52
|
+
a.getDate() === b.getDate());
|
|
53
|
+
}
|
|
54
|
+
export function isSameWeek(a, b, firstDayOfWeek) {
|
|
55
|
+
return isSameDay(startOfWeek(a, firstDayOfWeek), startOfWeek(b, firstDayOfWeek));
|
|
56
|
+
}
|
|
57
|
+
export function isToday(date) {
|
|
58
|
+
return isSameDay(date, new Date());
|
|
59
|
+
}
|
|
60
|
+
export function isWeekend(date) {
|
|
61
|
+
const day = date.getDay();
|
|
62
|
+
return day === 0 || day === 6;
|
|
63
|
+
}
|
|
64
|
+
export function isPast(date) {
|
|
65
|
+
return date.getTime() < Date.now();
|
|
66
|
+
}
|
|
67
|
+
export function dateRangeOverlaps(aStart, aEnd, bStart, bEnd) {
|
|
68
|
+
return aStart.getTime() < bEnd.getTime() && aEnd.getTime() > bStart.getTime();
|
|
69
|
+
}
|
|
70
|
+
export function clampDate(date, min, max) {
|
|
71
|
+
const t = date.getTime();
|
|
72
|
+
if (t < min.getTime())
|
|
73
|
+
return new Date(min);
|
|
74
|
+
if (t > max.getTime())
|
|
75
|
+
return new Date(max);
|
|
76
|
+
return new Date(date);
|
|
77
|
+
}
|
|
78
|
+
export function getHoursInRange(start, end) {
|
|
79
|
+
const hours = [];
|
|
80
|
+
const d = new Date(start);
|
|
81
|
+
while (d < end) {
|
|
82
|
+
hours.push(d.getHours());
|
|
83
|
+
d.setHours(d.getHours() + 1, 0, 0, 0);
|
|
84
|
+
}
|
|
85
|
+
return hours;
|
|
86
|
+
}
|
|
87
|
+
export function formatHour(h, locale = 'en-US') {
|
|
88
|
+
const d = new Date();
|
|
89
|
+
d.setHours(h, 0, 0, 0);
|
|
90
|
+
return d.toLocaleTimeString(locale, { hour: 'numeric', minute: undefined });
|
|
91
|
+
}
|
|
92
|
+
export function formatDateRange(start, end, locale = 'en-US') {
|
|
93
|
+
const opts = { month: 'short', day: 'numeric' };
|
|
94
|
+
const yearOpts = { month: 'short', day: 'numeric', year: 'numeric' };
|
|
95
|
+
const sameYear = start.getFullYear() === end.getFullYear();
|
|
96
|
+
const fmt = new Intl.DateTimeFormat(locale, sameYear ? opts : yearOpts);
|
|
97
|
+
return `${fmt.format(start)} – ${fmt.format(end)}${sameYear ? `, ${start.getFullYear()}` : ''}`;
|
|
98
|
+
}
|
|
99
|
+
export function getWeekDates(date, firstDayOfWeek) {
|
|
100
|
+
const start = startOfWeek(date, firstDayOfWeek);
|
|
101
|
+
return Array.from({ length: 7 }, (_, i) => addDays(start, i));
|
|
102
|
+
}
|
|
103
|
+
export function getWorkWeekDates(date, firstDayOfWeek) {
|
|
104
|
+
const weekDates = getWeekDates(date, firstDayOfWeek);
|
|
105
|
+
return weekDates.filter((d) => !isWeekend(d));
|
|
106
|
+
}
|
|
107
|
+
export function getMonthGrid(date, firstDayOfWeek) {
|
|
108
|
+
const monthStart = startOfMonth(date);
|
|
109
|
+
const gridStart = startOfWeek(monthStart, firstDayOfWeek);
|
|
110
|
+
const gridEnd = addDays(gridStart, 42);
|
|
111
|
+
const weeks = [];
|
|
112
|
+
let current = new Date(gridStart);
|
|
113
|
+
while (current < gridEnd) {
|
|
114
|
+
weeks.push(Array.from({ length: 7 }, (_, i) => addDays(current, i)));
|
|
115
|
+
current = addDays(current, 7);
|
|
116
|
+
}
|
|
117
|
+
return weeks;
|
|
118
|
+
}
|
|
119
|
+
export function getDayNames(locale = 'en-US', format = 'short') {
|
|
120
|
+
return Array.from({ length: 7 }, (_, i) => {
|
|
121
|
+
const d = new Date(2026, 0, 4 + i);
|
|
122
|
+
return d.toLocaleDateString(locale, { weekday: format });
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
export function getMonthNames(locale = 'en-US', format = 'long') {
|
|
126
|
+
return Array.from({ length: 12 }, (_, i) => {
|
|
127
|
+
const d = new Date(2026, i, 1);
|
|
128
|
+
return d.toLocaleDateString(locale, { month: format });
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zY2hlZHVsZXIvdXRpbHMvZGF0ZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVU7SUFDbkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QixPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVUsRUFBRSxjQUFzQjtJQUM1RCxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDOUIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFVLEVBQUUsY0FBc0I7SUFDMUQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQixHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEIs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b3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc3RhcnRPZkRheShkYXRlOiBEYXRlKTogRGF0ZSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlKTtcbiAgZC5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mV2VlayhkYXRlOiBEYXRlLCBmaXJzdERheU9mV2VlazogbnVtYmVyKTogRGF0ZSB7XG4gIGNvbnN0IGQgPSBzdGFydE9mRGF5KGRhdGUpO1xuICBjb25zdCBkYXkgPSBkLmdldERheSgpO1xuICBjb25zdCBkaWZmID0gKGRheSAtIGZpcnN0RGF5T2ZXZWVrICsgNykgJSA3O1xuICBkLnNldERhdGUoZC5nZXREYXRlKCkgLSBkaWZmKTtcbiAgcmV0dXJuIGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZldlZWsoZGF0ZTogRGF0ZSwgZmlyc3REYXlPZldlZWs6IG51bWJlcik6IERhdGUge1xuICBjb25zdCBzdGFydCA9IHN0YXJ0T2ZXZWVrKGRhdGUsIGZpcnN0RGF5T2ZXZWVrKTtcbiAgY29uc3QgZW5kID0gbmV3IERhdGUoc3RhcnQpO1xuICBlbmQuc2V0RGF0ZShlbmQuZ2V0RGF0ZSgpICsgNyk7XG4gIGVuZC5zZXRNaWxsaXNlY29uZHMoLTEpO1xuICByZXR1cm4gZW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZk1vbnRoKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCAxKTtcbiAgZC5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRPZk1vbnRoKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XG4gIGQuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTtcbiAgcmV0dXJuIGQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGREYXlzKGRhdGU6IERhdGUsIGRheXM6IG51bWJlcik6IERhdGUge1xuICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZSk7XG4gIGQuc2V0RGF0ZShkLmdldERhdGUoKSArIGRheXMpO1xuICByZXR1cm4gZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE1pbnV0ZXMoZGF0ZTogRGF0ZSwgbWludXRlczogbnVtYmVyKTogRGF0ZSB7XG4gIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIG1pbnV0ZXMgKiA2MF8wMDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkV2Vla3MoZGF0ZTogRGF0ZSwgd2Vla3M6IG51bWJlcik6IERhdGUge1xuICByZXR1cm4gYWRkRGF5cyhkYXRlLCB3ZWVrcyAqIDcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlmZk1pbnV0ZXMoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiAoZW5kLmdldFRpbWUoKSAtIHN0YXJ0LmdldFRpbWUoKSkgLyA2MF8wMDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmRGF5cyhzdGFydDogRGF0ZSwgZW5kOiBEYXRlKTogbnVtYmVyIHtcbiAgY29uc3QgcyA9IHN0YXJ0T2ZEYXkoc3RhcnQpO1xuICBjb25zdCBlID0gc3RhcnRPZkRheShlbmQpO1xuICByZXR1cm4gTWF0aC5yb3VuZCgoZS5nZXRUaW1lKCkgLSBzLmdldFRpbWUoKSkgLyA4Nl80MDBfMDAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FtZURheShhOiBEYXRlLCBiOiBEYXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgYS5nZXRGdWxsWWVhcigpID09PSBiLmdldEZ1bGxZZWFyKCkgJiZcbiAgICBhLmdldE1vbnRoKCkgPT09IGIuZ2V0TW9udGgoKSAmJlxuICAgIGEuZ2V0RGF0ZSgpID09PSBiLmdldERhdGUoKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTYW1lV2VlayhhOiBEYXRlLCBiOiBEYXRlLCBmaXJzdERheU9mV2VlazogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1NhbWVEYXkoc3RhcnRPZldlZWsoYSwgZmlyc3REYXlPZldlZWspLCBzdGFydE9mV2VlayhiLCBmaXJzdERheU9mV2VlaykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUb2RheShkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1NhbWVEYXkoZGF0ZSwgbmV3IERhdGUoKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dlZWtlbmQoZGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICBjb25zdCBkYXkgPSBkYXRlLmdldERheSgpO1xuICByZXR1cm4gZGF5ID09PSAwIHx8IGRheSA9PT0gNjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUGFzdChkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiBkYXRlLmdldFRpbWUoKSA8IERhdGUubm93KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlUmFuZ2VPdmVybGFwcyhhU3RhcnQ6IERhdGUsIGFFbmQ6IERhdGUsIGJTdGFydDogRGF0ZSwgYkVuZDogRGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYVN0YXJ0LmdldFRpbWUoKSA8IGJFbmQuZ2V0VGltZSgpICYmIGFFbmQuZ2V0VGltZSgpID4gYlN0YXJ0LmdldFRpbWUoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wRGF0ZShkYXRlOiBEYXRlLCBtaW46IERhdGUsIG1heDogRGF0ZSk6IERhdGUge1xuICBjb25zdCB0ID0gZGF0ZS5nZXRUaW1lKCk7XG4gIGlmICh0IDwgbWluLmdldFRpbWUoKSkgcmV0dXJuIG5ldyBEYXRlKG1pbik7XG4gIGlmICh0ID4gbWF4LmdldFRpbWUoKSkgcmV0dXJuIG5ldyBEYXRlKG1heCk7XG4gIHJldHVybiBuZXcgRGF0ZShkYXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvdXJzSW5SYW5nZShzdGFydDogRGF0ZSwgZW5kOiBEYXRlKTogbnVtYmVyW10ge1xuICBjb25zdCBob3VyczogbnVtYmVyW10gPSBbXTtcbiAgY29uc3QgZCA9IG5ldyBEYXRlKHN0YXJ0KTtcbiAgd2hpbGUgKGQgPCBlbmQpIHtcbiAgICBob3Vycy5wdXNoKGQuZ2V0SG91cnMoKSk7XG4gICAgZC5zZXRIb3VycyhkLmdldEhvdXJzKCkgKyAxLCAwLCAwLCAwKTtcbiAgfVxuICByZXR1cm4gaG91cnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRIb3VyKGg6IG51bWJlciwgbG9jYWxlID0gJ2VuLVVTJyk6IHN0cmluZyB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICBkLnNldEhvdXJzKGgsIDAsIDAsIDApO1xuICByZXR1cm4gZC50b0xvY2FsZVRpbWVTdHJpbmcobG9jYWxlLCB7IGhvdXI6ICdudW1lcmljJywgbWludXRlOiB1bmRlZmluZWQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREYXRlUmFuZ2Uoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSwgbG9jYWxlID0gJ2VuLVVTJyk6IHN0cmluZyB7XG4gIGNvbnN0IG9wdHM6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zID0geyBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycgfTtcbiAgY29uc3QgeWVhck9wdHM6IEludGwuRGF0ZVRpbWVGb3JtYXRPcHRpb25zID0geyBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIHllYXI6ICdudW1lcmljJyB9O1xuICBjb25zdCBzYW1lWWVhciA9IHN0YXJ0LmdldEZ1bGxZZWFyKCkgPT09IGVuZC5nZXRGdWxsWWVhcigpO1xuICBjb25zdCBmbXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHNhbWVZZWFyID8gb3B0cyA6IHllYXJPcHRzKTtcbiAgcmV0dXJuIGAke2ZtdC5mb3JtYXQoc3RhcnQpfSDigJMgJHtmbXQuZm9ybWF0KGVuZCl9JHtzYW1lWWVhciA/IGAsICR7c3RhcnQuZ2V0RnVsbFllYXIoKX1gIDogJyd9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXRlcyhkYXRlOiBEYXRlLCBmaXJzdERheU9mV2VlazogbnVtYmVyKTogRGF0ZVtdIHtcbiAgY29uc3Qgc3RhcnQgPSBzdGFydE9mV2VlayhkYXRlLCBmaXJzdERheU9mV2Vlayk7XG4gIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiBhZGREYXlzKHN0YXJ0LCBpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3JrV2Vla0RhdGVzKGRhdGU6IERhdGUsIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIpOiBEYXRlW10ge1xuICBjb25zdCB3ZWVrRGF0ZXMgPSBnZXRXZWVrRGF0ZXMoZGF0ZSwgZmlyc3REYXlPZldlZWspO1xuICByZXR1cm4gd2Vla0RhdGVzLmZpbHRlcigoZCkgPT4gIWlzV2Vla2VuZChkKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb250aEdyaWQoZGF0ZTogRGF0ZSwgZmlyc3REYXlPZldlZWs6IG51bWJlcik6IERhdGVbXVtdIHtcbiAgY29uc3QgbW9udGhTdGFydCA9IHN0YXJ0T2ZNb250aChkYXRlKTtcbiAgY29uc3QgZ3JpZFN0YXJ0ID0gc3RhcnRPZldlZWsobW9udGhTdGFydCwgZmlyc3REYXlPZldlZWspO1xuICBjb25zdCBncmlkRW5kID0gYWRkRGF5cyhncmlkU3RhcnQsIDQyKTtcbiAgY29uc3Qgd2Vla3M6IERhdGVbXVtdID0gW107XG4gIGxldCBjdXJyZW50ID0gbmV3IERhdGUoZ3JpZFN0YXJ0KTtcbiAgd2hpbGUgKGN1cnJlbnQgPCBncmlkRW5kKSB7XG4gICAgd2Vla3MucHVzaChBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiBhZGREYXlzKGN1cnJlbnQsIGkpKSk7XG4gICAgY3VycmVudCA9IGFkZERheXMoY3VycmVudCwgNyk7XG4gIH1cbiAgcmV0dXJuIHdlZWtzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5TmFtZXMoXG4gIGxvY2FsZSA9ICdlbi1VUycsXG4gIGZvcm1hdDogJ2xvbmcnIHwgJ3Nob3J0JyB8ICduYXJyb3cnID0gJ3Nob3J0Jyxcbik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+IHtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoMjAyNiwgMCwgNCArIGkpO1xuICAgIHJldHVybiBkLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogZm9ybWF0IH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoTmFtZXMobG9jYWxlID0gJ2VuLVVTJywgZm9ybWF0OiAnbG9uZycgfCAnc2hvcnQnID0gJ2xvbmcnKTogc3RyaW5nW10ge1xuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIGkpID0+IHtcbiAgICBjb25zdCBkID0gbmV3IERhdGUoMjAyNiwgaSwgMSk7XG4gICAgcmV0dXJuIGQudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogZm9ybWF0IH0pO1xuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './date-utils';
|
|
2
|
+
export * from './snap';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc2NoZWR1bGVyL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kYXRlLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc25hcCc7XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function snapToSlot(value, snapDuration) {
|
|
2
|
+
return Math.round(value / snapDuration) * snapDuration;
|
|
3
|
+
}
|
|
4
|
+
export function snapDateToSlot(date, snapDuration) {
|
|
5
|
+
const ms = date.getTime();
|
|
6
|
+
const snapMs = snapDuration * 60_000;
|
|
7
|
+
return new Date(Math.round(ms / snapMs) * snapMs);
|
|
8
|
+
}
|
|
9
|
+
export function minutesToPixels(minutes, hourHeight) {
|
|
10
|
+
return (minutes / 60) * hourHeight;
|
|
11
|
+
}
|
|
12
|
+
export function pixelsToMinutes(pixels, hourHeight) {
|
|
13
|
+
return (pixels / hourHeight) * 60;
|
|
14
|
+
}
|
|
15
|
+
export function timeToMinutes(date) {
|
|
16
|
+
return date.getHours() * 60 + date.getMinutes();
|
|
17
|
+
}
|
|
18
|
+
export function minutesToTime(baseDate, minutes) {
|
|
19
|
+
const d = new Date(baseDate);
|
|
20
|
+
d.setHours(0, 0, 0, 0);
|
|
21
|
+
d.setMinutes(minutes);
|
|
22
|
+
return d;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zY2hlZHVsZXIvdXRpbHMvc25hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWEsRUFBRSxZQUFvQjtJQUM1RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFVLEVBQUUsWUFBb0I7SUFDN0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzFCLE1BQU0sTUFBTSxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUM7SUFDckMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFlLEVBQUUsVUFBa0I7SUFDakUsT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBYyxFQUFFLFVBQWtCO0lBQ2hFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVU7SUFDdEMsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFjLEVBQUUsT0FBZTtJQUMzRCxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNuYXBUb1Nsb3QodmFsdWU6IG51bWJlciwgc25hcER1cmF0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAvIHNuYXBEdXJhdGlvbikgKiBzbmFwRHVyYXRpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbmFwRGF0ZVRvU2xvdChkYXRlOiBEYXRlLCBzbmFwRHVyYXRpb246IG51bWJlcik6IERhdGUge1xuICBjb25zdCBtcyA9IGRhdGUuZ2V0VGltZSgpO1xuICBjb25zdCBzbmFwTXMgPSBzbmFwRHVyYXRpb24gKiA2MF8wMDA7XG4gIHJldHVybiBuZXcgRGF0ZShNYXRoLnJvdW5kKG1zIC8gc25hcE1zKSAqIHNuYXBNcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW51dGVzVG9QaXhlbHMobWludXRlczogbnVtYmVyLCBob3VySGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKG1pbnV0ZXMgLyA2MCkgKiBob3VySGVpZ2h0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGl4ZWxzVG9NaW51dGVzKHBpeGVsczogbnVtYmVyLCBob3VySGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKHBpeGVscyAvIGhvdXJIZWlnaHQpICogNjA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVG9NaW51dGVzKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpICogNjAgKyBkYXRlLmdldE1pbnV0ZXMoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbnV0ZXNUb1RpbWUoYmFzZURhdGU6IERhdGUsIG1pbnV0ZXM6IG51bWJlcik6IERhdGUge1xuICBjb25zdCBkID0gbmV3IERhdGUoYmFzZURhdGUpO1xuICBkLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBkLnNldE1pbnV0ZXMobWludXRlcyk7XG4gIHJldHVybiBkO1xufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './spreadsheet-engine';
|
|
2
|
+
export * from './models';
|
|
3
|
+
export * from './plugin';
|
|
4
|
+
export * from './utils';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc3ByZWFkc2hlZXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3ByZWFkc2hlZXQtZW5naW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zcHJlYWRzaGVldC9tb2RlbHMvY2VsbC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFN1cHBvcnRlZCBjZWxsIHZhbHVlIHR5cGVzLiAqL1xuZXhwb3J0IHR5cGUgQ2VsbFZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4vKiogQ2VsbCB0eXBlIGRldGVybWluZXMgcmVuZGVyaW5nIGFuZCBlZGl0aW5nIGJlaGF2aW9yLiAqL1xuZXhwb3J0IHR5cGUgQ2VsbFR5cGUgPVxuICB8ICd0ZXh0J1xuICB8ICdudW1iZXInXG4gIHwgJ2N1cnJlbmN5J1xuICB8ICdwZXJjZW50YWdlJ1xuICB8ICdib29sZWFuJ1xuICB8ICdjaGVja2JveCdcbiAgfCAnZGF0ZSdcbiAgfCAnZGF0ZXRpbWUnXG4gIHwgJ3RpbWUnXG4gIHwgJ3NlbGVjdCdcbiAgfCAncmF0aW5nJ1xuICB8ICdwcm9ncmVzcydcbiAgfCAnbGluaydcbiAgfCAnaW1hZ2UnXG4gIHwgJ2ljb24nXG4gIHwgJ2JhZGdlJ1xuICB8ICdqc29uJ1xuICB8ICdjb2RlJ1xuICB8ICdodG1sJ1xuICB8ICdtYXJrZG93bidcbiAgfCAnY3VzdG9tJztcblxuLyoqIENlbGwgbWV0YWRhdGEgY2FycmllZCBhbG9uZ3NpZGUgdGhlIHJhdyB2YWx1ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbE1ldGEge1xuICByZWFkb25seSB0eXBlOiBDZWxsVHlwZTtcbiAgcmVhZG9ubHkgZWRpdGFibGU/OiBib29sZWFuO1xuICByZWFkb25seSBzZWxlY3RhYmxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBzdHlsZT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlYWRvbmx5IGNvbFNwYW4/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHJvd1NwYW4/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvb2x0aXA/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFyaWFMYWJlbD86IHN0cmluZztcbiAgLyoqIFZhbGlkYXRpb24gZXJyb3JzIGFwcGxpZWQgdG8gdGhpcyBjZWxsLiAqL1xuICByZWFkb25seSBlcnJvcnM/OiBzdHJpbmdbXTtcbiAgLyoqIEN1c3RvbSBmb3JtYXR0aW5nIHN0cmluZyAoZS5nLiAnJCMsIyMwLjAwJyBmb3IgY3VycmVuY3kpLiAqL1xuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG59XG5cbi8qKiBBIGNlbGwgaXMgYSB2YWx1ZSArIG1ldGFkYXRhIHBhaXIga2V5ZWQgYnkgaXRzIGNvbHVtbiBmaWVsZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbCB7XG4gIHJlYWRvbmx5IHZhbHVlOiBDZWxsVmFsdWU7XG4gIHJlYWRvbmx5IG1ldGE/OiBDZWxsTWV0YTtcbn1cblxuLyoqIEVkaXQgc3RhdGUgdHJhY2tzIHRoZSBsaWZlY3ljbGUgb2YgYW4gaW4tcHJvZ3Jlc3MgZWRpdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbEVkaXRTdGF0ZSB7XG4gIHJlYWRvbmx5IHJvd0luZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9yaWdpbmFsVmFsdWU6IENlbGxWYWx1ZTtcbiAgcmVhZG9ubHkgY3VycmVudFZhbHVlOiBDZWxsVmFsdWU7XG4gIHJlYWRvbmx5IGRpcnR5OiBib29sZWFuO1xufVxuXG4vKiogQ2VsbCBhZGRyZXNzIOKAkyByb3cgKyBjb2x1bW4gaW5kZXggcGFpci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbEFkZHJlc3Mge1xuICByZWFkb25seSByb3c6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29sOiBudW1iZXI7XG59XG5cbi8qKiBSZWN0YW5ndWxhciBzZWxlY3Rpb24gcmFuZ2UgaW4gZ3JpZCBjb29yZGluYXRlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFJhbmdlIHtcbiAgcmVhZG9ubHkgc3RhcnQ6IENlbGxBZGRyZXNzO1xuICByZWFkb25seSBlbmQ6IENlbGxBZGRyZXNzO1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL3NwcmVhZHNoZWV0L21vZGVscy9jb2x1bW4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2VsbFR5cGUsIENlbGxNZXRhIH0gZnJvbSAnLi9jZWxsLm1vZGVsJztcblxuLyoqIFNvcnQgZGlyZWN0aW9uLiAqL1xuZXhwb3J0IHR5cGUgU29ydERpcmVjdGlvbiA9ICdhc2MnIHwgJ2Rlc2MnIHwgbnVsbDtcblxuLyoqIENvbHVtbiB3aWR0aCBwcmVzZXQuICovXG5leHBvcnQgdHlwZSBDb2x1bW5XaWR0aFByZXNldCA9ICdhdXRvJyB8ICdjb21wYWN0JyB8ICdjb21mb3J0YWJsZScgfCAnd2lkZSc7XG5cbi8qKiBEZWZpbmVzIGEgY29sdW1uJ3Mgc2NoZW1hIGFuZCBiZWhhdmlvdXIuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkRlZiB7XG4gIC8qKiBVbmlxdWUgaWRlbnRpZmllciAvIGZpZWxkIGtleS4gKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgaGVhZGVyIHRleHQuICovXG4gIHJlYWRvbmx5IGhlYWRlcjogc3RyaW5nO1xuICAvKiogU3ViLWhlYWRlciAvIHNlY29uZGFyeSBsYWJlbC4gKi9cbiAgcmVhZG9ubHkgc3ViSGVhZGVyPzogc3RyaW5nO1xuICAvKiogVGhlIGNlbGwgdHlwZSBmb3IgYWxsIGNlbGxzIGluIHRoaXMgY29sdW1uLiBEZWZhdWx0cyB0byAndGV4dCcuICovXG4gIHJlYWRvbmx5IGNlbGxUeXBlPzogQ2VsbFR5cGU7XG4gIC8qKiBXaGV0aGVyIGNlbGxzIGluIHRoaXMgY29sdW1uIGFyZSBlZGl0YWJsZS4gKi9cbiAgcmVhZG9ubHkgZWRpdGFibGU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29sdW1uIGlzIHNvcnRhYmxlLiAqL1xuICByZWFkb25seSBzb3J0YWJsZT86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgZmlsdGVyYWJsZS4gKi9cbiAgcmVhZG9ubHkgZmlsdGVyYWJsZT86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgcmVzaXphYmxlLiAqL1xuICByZWFkb25seSByZXNpemFibGU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29sdW1uIGNhbiBiZSByZW9yZGVyZWQgdmlhIGRyYWcuICovXG4gIHJlYWRvbmx5IHJlb3JkZXJhYmxlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbHVtbiBjYW4gYmUgaGlkZGVuLiAqL1xuICByZWFkb25seSBoaWRlYWJsZT86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgY3VycmVudGx5IHZpc2libGUuICovXG4gIHJlYWRvbmx5IHZpc2libGU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29sdW1uIGlzIHBpbm5lZCAoZnJvemVuKS4gKi9cbiAgcmVhZG9ubHkgcGlubmVkPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8IGZhbHNlO1xuICAvKiogSW5pdGlhbCBzb3J0IGRpcmVjdGlvbi4gKi9cbiAgcmVhZG9ubHkgc29ydD86IFNvcnREaXJlY3Rpb247XG4gIC8qKiBTb3J0IGNvbXBhcmF0b3IgZnVuY3Rpb24uICovXG4gIHJlYWRvbmx5IGNvbXBhcmF0b3I/OiAoYTogdW5rbm93biwgYjogdW5rbm93biwgZGlyOiBTb3J0RGlyZWN0aW9uKSA9PiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIHdpZHRoIGluIHB4LiAqL1xuICByZWFkb25seSBtaW5XaWR0aD86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gd2lkdGggaW4gcHguICovXG4gIHJlYWRvbmx5IG1heFdpZHRoPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCB3aWR0aCBpbiBweC4gRmFsbHMgYmFjayB0byBhdXRvIGlmIHVuc2V0LiAqL1xuICByZWFkb25seSB3aWR0aD86IG51bWJlcjtcbiAgLyoqIEFsaWdubWVudC4gKi9cbiAgcmVhZG9ubHkgYWxpZ24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG4gIC8qKiBUb29sdGlwIC8gZGVzY3JpcHRpb24gZm9yIHRoZSBoZWFkZXIuICovXG4gIHJlYWRvbmx5IHRvb2x0aXA/OiBzdHJpbmc7XG4gIC8qKiBDdXN0b20gaGVhZGVyIENTUyBjbGFzcy4gKi9cbiAgcmVhZG9ubHkgaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIGNlbGwgQ1NTIGNsYXNzIGZhY3RvcnkuICovXG4gIHJlYWRvbmx5IGNlbGxDbGFzc05hbWU/OiBzdHJpbmcgfCAoKHZhbHVlOiB1bmtub3duLCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpO1xuICAvKiogQ3VzdG9tIGNlbGwgc3R5bGUgZmFjdG9yeS4gKi9cbiAgcmVhZG9ubHkgY2VsbFN0eWxlPzpcbiAgICBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgKCh2YWx1ZTogdW5rbm93biwgcm93SW5kZXg6IG51bWJlcikgPT4gUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG4gIC8qKiBDZWxsIG1ldGEgYXBwbGllZCB0byBldmVyeSBjZWxsIGluIHRoaXMgY29sdW1uLiAqL1xuICByZWFkb25seSBjZWxsTWV0YT86IFBhcnRpYWw8Q2VsbE1ldGE+O1xuICAvKiogRGVmYXVsdCB2YWx1ZSBmb3IgbmV3IHJvd3MuICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZT86IHVua25vd247XG4gIC8qKiBWYWx1ZSBmb3JtYXR0ZXIg4oCTIHRyYW5zZm9ybXMgcmF3IHZhbHVlIGZvciBkaXNwbGF5LiAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiAodmFsdWU6IHVua25vd24sIHJvdzogdW5rbm93bikgPT4gc3RyaW5nO1xuICAvKiogVmFsdWUgcGFyc2VyIOKAkyB0cmFuc2Zvcm1zIGRpc3BsYXkgc3RyaW5nIGJhY2sgdG8gcmF3IHZhbHVlIG9uIGVkaXQuICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IChyYXc6IHN0cmluZykgPT4gdW5rbm93bjtcbiAgLyoqIEN1c3RvbSBoZWFkZXIgdGVtcGxhdGUga2V5IChtYXRjaGVzIEluamVjdGlvblRva2VuIG5hbWUpLiAqL1xuICByZWFkb25seSBoZWFkZXJUZW1wbGF0ZT86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBjZWxsIHRlbXBsYXRlIGtleS4gKi9cbiAgcmVhZG9ubHkgY2VsbFRlbXBsYXRlPzogc3RyaW5nO1xuICAvKiogQ3VzdG9tIGVkaXRvciB0ZW1wbGF0ZSBrZXkuICovXG4gIHJlYWRvbmx5IGVkaXRvclRlbXBsYXRlPzogc3RyaW5nO1xufVxuXG4vKiogUnVudGltZSBjb2x1bW4gc3RhdGUgKG11dGFibGUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5TdGF0ZSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdpZHRoOiBudW1iZXI7XG4gIHJlYWRvbmx5IHZpc2libGU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHBpbm5lZDogJ2xlZnQnIHwgJ3JpZ2h0JyB8IGZhbHNlO1xuICByZWFkb25seSBzb3J0OiBTb3J0RGlyZWN0aW9uO1xuICByZWFkb25seSBzb3J0SW5kZXg/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9yZGVyOiBudW1iZXI7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL3NwcmVhZHNoZWV0L21vZGVscy9maWx0ZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBGaWx0ZXIgb3BlcmF0b3IgZm9yIGEgc2luZ2xlIGNvbHVtbi4gKi9cbmV4cG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yID1cbiAgfCAnZXF1YWxzJ1xuICB8ICdub3RFcXVhbHMnXG4gIHwgJ2NvbnRhaW5zJ1xuICB8ICdub3RDb250YWlucydcbiAgfCAnc3RhcnRzV2l0aCdcbiAgfCAnZW5kc1dpdGgnXG4gIHwgJ2d0J1xuICB8ICdndGUnXG4gIHwgJ2x0J1xuICB8ICdsdGUnXG4gIHwgJ2JldHdlZW4nXG4gIHwgJ2luJ1xuICB8ICdlbXB0eSdcbiAgfCAnbm90RW1wdHknO1xuXG4vKiogQSBzaW5nbGUgZmlsdGVyIGNyaXRlcmlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyQ3JpdGVyaW9uIHtcbiAgcmVhZG9ubHkgY29sSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yO1xuICByZWFkb25seSB2YWx1ZTogdW5rbm93bjtcbiAgcmVhZG9ubHkgdmFsdWVUbz86IHVua25vd247XG59XG5cbi8qKiBUaGUgZW5naW5lJ3MgZmlsdGVyIHN0YXRlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJTdGF0ZSB7XG4gIHJlYWRvbmx5IGNyaXRlcmlhOiByZWFkb25seSBGaWx0ZXJDcml0ZXJpb25bXTtcbiAgcmVhZG9ubHkgbW9kZTogJ2FuZCcgfCAnb3InO1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXVsYS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zcHJlYWRzaGVldC9tb2RlbHMvZm9ybXVsYS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEFTVCBub2RlIHR5cGVzIGZvciBwYXJzZWQgZm9ybXVsYXMuICovXG5leHBvcnQgdHlwZSBGb3JtdWxhTm9kZVR5cGUgPVxuICB8ICdjZWxsX3JlZidcbiAgfCAncmFuZ2VfcmVmJ1xuICB8ICdudW1iZXInXG4gIHwgJ3N0cmluZydcbiAgfCAnYm9vbGVhbidcbiAgfCAnYmluYXJ5X29wJ1xuICB8ICd1bmFyeV9vcCdcbiAgfCAnZnVuY3Rpb25fY2FsbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybXVsYU5vZGUge1xuICByZWFkb25seSB0eXBlOiBGb3JtdWxhTm9kZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbFJlZk5vZGUgZXh0ZW5kcyBGb3JtdWxhTm9kZSB7XG4gIHJlYWRvbmx5IHR5cGU6ICdjZWxsX3JlZic7XG4gIHJlYWRvbmx5IGNvbDogc3RyaW5nO1xuICByZWFkb25seSByb3c6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYW5nZVJlZk5vZGUgZXh0ZW5kcyBGb3JtdWxhTm9kZSB7XG4gIHJlYWRvbmx5IHR5cGU6ICdyYW5nZV9yZWYnO1xuICByZWFkb25seSBzdGFydENvbDogc3RyaW5nO1xuICByZWFkb25seSBzdGFydFJvdzogbnVtYmVyO1xuICByZWFkb25seSBlbmRDb2w6IHN0cmluZztcbiAgcmVhZG9ubHkgZW5kUm93OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyTm9kZSBleHRlbmRzIEZvcm11bGFOb2RlIHtcbiAgcmVhZG9ubHkgdHlwZTogJ251bWJlcic7XG4gIHJlYWRvbmx5IHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTm9kZSBleHRlbmRzIEZvcm11bGFOb2RlIHtcbiAgcmVhZG9ubHkgdHlwZTogJ3N0cmluZyc7XG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vbGVhbk5vZGUgZXh0ZW5kcyBGb3JtdWxhTm9kZSB7XG4gIHJlYWRvbmx5IHR5cGU6ICdib29sZWFuJztcbiAgcmVhZG9ubHkgdmFsdWU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmluYXJ5T3BOb2RlIGV4dGVuZHMgRm9ybXVsYU5vZGUge1xuICByZWFkb25seSB0eXBlOiAnYmluYXJ5X29wJztcbiAgcmVhZG9ubHkgb3A6ICcrJyB8ICctJyB8ICcqJyB8ICcvJyB8ICcmJyB8ICc9JyB8ICc8PicgfCAnPicgfCAnPCcgfCAnPj0nIHwgJzw9JztcbiAgcmVhZG9ubHkgbGVmdDogRm9ybXVsYU5vZGU7XG4gIHJlYWRvbmx5IHJpZ2h0OiBGb3JtdWxhTm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmFyeU9wTm9kZSBleHRlbmRzIEZvcm11bGFOb2RlIHtcbiAgcmVhZG9ubHkgdHlwZTogJ3VuYXJ5X29wJztcbiAgcmVhZG9ubHkgb3A6ICctJyB8ICcrJztcbiAgcmVhZG9ubHkgb3BlcmFuZDogRm9ybXVsYU5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25DYWxsTm9kZSBleHRlbmRzIEZvcm11bGFOb2RlIHtcbiAgcmVhZG9ubHkgdHlwZTogJ2Z1bmN0aW9uX2NhbGwnO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFyZ3M6IEZvcm11bGFOb2RlW107XG59XG5cbi8qKiBSZXN1bHQgb2YgZXZhbHVhdGluZyBhIGZvcm11bGEuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm11bGFSZXN1bHQge1xuICByZWFkb25seSB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGw7XG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xufVxuXG4vKiogRGVwZW5kZW5jeSBlZGdlIGluIHRoZSBmb3JtdWxhIGdyYXBoLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtdWxhRGVwZW5kZW5jeSB7XG4gIC8qKiBDZWxsIHRoYXQgY29udGFpbnMgdGhlIGZvcm11bGEuICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xuICAvKiogQ2VsbChzKSB0aGUgZm9ybXVsYSBkZXBlbmRzIG9uLiAqL1xuICByZWFkb25seSB0YXJnZXRzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqIEJ1aWx0LWluIGZ1bmN0aW9uIHNpZ25hdHVyZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybXVsYUZ1bmN0aW9uIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBtaW5BcmdzOiBudW1iZXI7XG4gIHJlYWRvbmx5IG1heEFyZ3M6IG51bWJlcjtcbiAgcmVhZG9ubHkgZm46IChhcmdzOiAobnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwpW10pID0+IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4gfCBudWxsO1xufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './cell.model';
|
|
2
|
+
export * from './column.model';
|
|
3
|
+
export * from './row.model';
|
|
4
|
+
export * from './selection.model';
|
|
5
|
+
export * from './sort.model';
|
|
6
|
+
export * from './filter.model';
|
|
7
|
+
export * from './formula.model';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jZGsvc3ByZWFkc2hlZXQvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NlbGwubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2x1bW4ubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9yb3cubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3Rpb24ubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9zb3J0Lm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsdGVyLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybXVsYS5tb2RlbCc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL3NwcmVhZHNoZWV0L21vZGVscy9yb3cubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2VsbCB9IGZyb20gJy4vY2VsbC5tb2RlbCc7XG5cbi8qKiBBIHJvdyBpcyBhIG1hcCBvZiBjb2x1bW4taWQg4oaSIENlbGwuICovXG5leHBvcnQgdHlwZSBSb3dEYXRhID0gUmVjb3JkPHN0cmluZywgQ2VsbD47XG5cbi8qKiBSb3cgZGVmaW5pdGlvbiB3aXRoIG9wdGlvbmFsIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3dEZWYge1xuICAvKiogVW5pcXVlIHJvdyBpZGVudGlmaWVyLiAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICAvKiogVGhlIGNlbGwgZGF0YSBrZXllZCBieSBjb2x1bW4gaWQuICovXG4gIHJlYWRvbmx5IGNlbGxzOiBSb3dEYXRhO1xuICAvKiogV2hldGhlciB0aGUgcm93IGlzIHNlbGVjdGFibGUuICovXG4gIHJlYWRvbmx5IHNlbGVjdGFibGU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgcm93IGlzIGVkaXRhYmxlIChvdmVycmlkZXMgY29sdW1uLWxldmVsKS4gKi9cbiAgcmVhZG9ubHkgZWRpdGFibGU/OiBib29sZWFuO1xuICAvKiogQ3VzdG9tIENTUyBjbGFzcyBhcHBsaWVkIHRvIHRoZSByb3cuICovXG4gIHJlYWRvbmx5IGNsYXNzTmFtZT86IHN0cmluZztcbiAgLyoqIEN1c3RvbSBpbmxpbmUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIHJvdy4gKi9cbiAgcmVhZG9ubHkgc3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogR3JvdXBpbmcga2V5IGZvciB0cmVlIC8gbWFzdGVyLWRldGFpbC4gKi9cbiAgcmVhZG9ubHkgZ3JvdXBLZXk/OiBzdHJpbmc7XG4gIC8qKiBQYXJlbnQgcm93IGlkIGZvciB0cmVlIGRhdGEuICovXG4gIHJlYWRvbmx5IHBhcmVudElkPzogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGlzIHJvdyBpcyBleHBhbmRlZCAodHJlZSBkYXRhKS4gKi9cbiAgcmVhZG9ubHkgZXhwYW5kZWQ/OiBib29sZWFuO1xuICAvKiogUm93IGxldmVsIGluIHRoZSB0cmVlIGhpZXJhcmNoeS4gKi9cbiAgcmVhZG9ubHkgbGV2ZWw/OiBudW1iZXI7XG4gIC8qKiBMb2FkaW5nIHBsYWNlaG9sZGVyIGZsYWcgZm9yIGxhenkgcm93cy4gKi9cbiAgcmVhZG9ubHkgbG9hZGluZz86IGJvb2xlYW47XG59XG5cbi8qKiBTdW1tYXJ5IC8gYWdncmVnYXRlIHJvdy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VtbWFyeVJvdyBleHRlbmRzIFJvd0RlZiB7XG4gIHJlYWRvbmx5IGlzU3VtbWFyeTogdHJ1ZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2RrL3NwcmVhZHNoZWV0L21vZGVscy9zZWxlY3Rpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2VsbEFkZHJlc3MsIENlbGxSYW5nZSB9IGZyb20gJy4vY2VsbC5tb2RlbCc7XG5cbi8qKiBXaGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uU3RhdGUge1xuICAvKiogQ3VycmVudGx5IGFjdGl2ZSBjZWxsIChrZXlib2FyZCBmb2N1cykuICovXG4gIHJlYWRvbmx5IGFjdGl2ZUNlbGw6IENlbGxBZGRyZXNzIHwgbnVsbDtcbiAgLyoqIFJlY3Rhbmd1bGFyIHJhbmdlIHNlbGVjdGlvbi4gKi9cbiAgcmVhZG9ubHkgcmFuZ2U6IENlbGxSYW5nZSB8IG51bGw7XG4gIC8qKiBTZXQgb2Ygc2VsZWN0ZWQgcm93IGluZGljZXMuICovXG4gIHJlYWRvbmx5IHNlbGVjdGVkUm93czogUmVhZG9ubHlTZXQ8bnVtYmVyPjtcbiAgLyoqIFNldCBvZiBzZWxlY3RlZCBjb2x1bW4gaW5kaWNlcy4gKi9cbiAgcmVhZG9ubHkgc2VsZWN0ZWRDb2xzOiBSZWFkb25seVNldDxudW1iZXI+O1xuICAvKiogU2VsZWN0aW9uIG1vZGUuICovXG4gIHJlYWRvbmx5IG1vZGU6IFNlbGVjdGlvbk1vZGU7XG4gIC8qKiBXaGV0aGVyIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBkcmFnZ2luZyB0byBleHRlbmQgc2VsZWN0aW9uLiAqL1xuICByZWFkb25seSBkcmFnZ2luZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgU2VsZWN0aW9uTW9kZSA9ICdjZWxsJyB8ICdyYW5nZScgfCAncm93JyB8ICdjb2x1bW4nIHwgJ25vbmUnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zcHJlYWRzaGVldC9tb2RlbHMvc29ydC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi9jb2x1bW4ubW9kZWwnO1xuXG4vKiogQSBzaW5nbGUgc29ydCBjcml0ZXJpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRDcml0ZXJpb24ge1xuICByZWFkb25seSBjb2xJZDogc3RyaW5nO1xuICByZWFkb25seSBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG4gIC8qKiBGb3IgbXVsdGktc29ydCwgdGhlIHByaW9yaXR5IGluZGV4LiAqL1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xufVxuXG4vKiogVGhlIGVuZ2luZSdzIHNvcnQgc3RhdGUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRTdGF0ZSB7XG4gIHJlYWRvbmx5IGNyaXRlcmlhOiByZWFkb25seSBTb3J0Q3JpdGVyaW9uW107XG4gIHJlYWRvbmx5IG11bHRpU29ydDogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4c21rLWNkay1zcHJlYWRzaGVldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zcHJlYWRzaGVldC9uZ3hzbWstY2RrLXNwcmVhZHNoZWV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClipboardPlugin handles copy/paste/cut operations.
|
|
3
|
+
* Reads from and writes to the system clipboard via the Clipboard API.
|
|
4
|
+
*/
|
|
5
|
+
export class ClipboardPlugin {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = 'clipboard';
|
|
8
|
+
this.priority = 30;
|
|
9
|
+
this._engine = null;
|
|
10
|
+
this._cutCells = null;
|
|
11
|
+
}
|
|
12
|
+
onInit(engine) {
|
|
13
|
+
this._engine = engine;
|
|
14
|
+
}
|
|
15
|
+
/** Copy the current selection to the clipboard. */
|
|
16
|
+
async copy() {
|
|
17
|
+
if (!this._engine)
|
|
18
|
+
return;
|
|
19
|
+
const sel = this._engine.selection();
|
|
20
|
+
if (!sel.range)
|
|
21
|
+
return;
|
|
22
|
+
const tsv = this._selectionToTsv(sel.range.start.row, sel.range.start.col, sel.range.end.row, sel.range.end.col);
|
|
23
|
+
try {
|
|
24
|
+
await navigator.clipboard.writeText(tsv);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Fallback: use a temporary textarea
|
|
28
|
+
this._copyToTextarea(tsv);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Cut the current selection (copy + clear). */
|
|
32
|
+
async cut() {
|
|
33
|
+
if (!this._engine)
|
|
34
|
+
return;
|
|
35
|
+
const sel = this._engine.selection();
|
|
36
|
+
if (!sel.range)
|
|
37
|
+
return;
|
|
38
|
+
const startRow = Math.min(sel.range.start.row, sel.range.end.row);
|
|
39
|
+
const startCol = Math.min(sel.range.start.col, sel.range.end.col);
|
|
40
|
+
const endRow = Math.max(sel.range.start.row, sel.range.end.row);
|
|
41
|
+
const endCol = Math.max(sel.range.start.col, sel.range.end.col);
|
|
42
|
+
this._cutCells = [];
|
|
43
|
+
const rows = [...this._engine.rowData()];
|
|
44
|
+
const cols = this._engine.columnDefs();
|
|
45
|
+
for (let r = startRow; r <= endRow; r++) {
|
|
46
|
+
for (let c = startCol; c <= endCol; c++) {
|
|
47
|
+
const colId = cols[c]?.id;
|
|
48
|
+
if (colId) {
|
|
49
|
+
this._cutCells.push({ row: r, col: c, value: rows[r]?.cells[colId]?.value ?? null });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
await this.copy();
|
|
54
|
+
this.clearSelectionContent();
|
|
55
|
+
}
|
|
56
|
+
/** Paste clipboard content starting at the active cell. */
|
|
57
|
+
async paste() {
|
|
58
|
+
if (!this._engine)
|
|
59
|
+
return;
|
|
60
|
+
const sel = this._engine.selection();
|
|
61
|
+
const activeCell = sel.activeCell;
|
|
62
|
+
if (!activeCell)
|
|
63
|
+
return;
|
|
64
|
+
let text;
|
|
65
|
+
try {
|
|
66
|
+
text = await navigator.clipboard.readText();
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (!text)
|
|
72
|
+
return;
|
|
73
|
+
const lines = text.split('\n').filter((l) => l.length > 0);
|
|
74
|
+
const cols = this._engine.columnDefs();
|
|
75
|
+
const rows = [...this._engine.rowData()];
|
|
76
|
+
const startRow = activeCell.row;
|
|
77
|
+
const startCol = activeCell.col;
|
|
78
|
+
for (let r = 0; r < lines.length; r++) {
|
|
79
|
+
const cells = lines[r].split('\t');
|
|
80
|
+
const targetRow = startRow + r;
|
|
81
|
+
if (targetRow >= rows.length)
|
|
82
|
+
break;
|
|
83
|
+
for (let c = 0; c < cells.length; c++) {
|
|
84
|
+
const targetCol = startCol + c;
|
|
85
|
+
if (targetCol >= cols.length)
|
|
86
|
+
break;
|
|
87
|
+
const colId = cols[targetCol].id;
|
|
88
|
+
const rowData = rows[targetRow];
|
|
89
|
+
if (rowData) {
|
|
90
|
+
const raw = cells[c].trim();
|
|
91
|
+
const value = parseClipboardValue(raw);
|
|
92
|
+
rows[targetRow] = {
|
|
93
|
+
...rowData,
|
|
94
|
+
cells: { ...rowData.cells, [colId]: { value, meta: rowData.cells[colId]?.meta } },
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
this._engine.rowData.set(rows);
|
|
100
|
+
}
|
|
101
|
+
/** Clear the content of selected cells. */
|
|
102
|
+
clearSelectionContent() {
|
|
103
|
+
if (!this._engine)
|
|
104
|
+
return;
|
|
105
|
+
const sel = this._engine.selection();
|
|
106
|
+
if (!sel.range)
|
|
107
|
+
return;
|
|
108
|
+
const startRow = Math.min(sel.range.start.row, sel.range.end.row);
|
|
109
|
+
const startCol = Math.min(sel.range.start.col, sel.range.end.col);
|
|
110
|
+
const endRow = Math.max(sel.range.start.row, sel.range.end.row);
|
|
111
|
+
const endCol = Math.max(sel.range.start.col, sel.range.end.col);
|
|
112
|
+
const rows = [...this._engine.rowData()];
|
|
113
|
+
const cols = this._engine.columnDefs();
|
|
114
|
+
for (let r = startRow; r <= endRow; r++) {
|
|
115
|
+
for (let c = startCol; c <= endCol; c++) {
|
|
116
|
+
const colId = cols[c]?.id;
|
|
117
|
+
if (colId && rows[r]) {
|
|
118
|
+
rows[r] = {
|
|
119
|
+
...rows[r],
|
|
120
|
+
cells: { ...rows[r].cells, [colId]: { value: null, meta: rows[r].cells[colId]?.meta } },
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
this._engine.rowData.set(rows);
|
|
126
|
+
}
|
|
127
|
+
_selectionToTsv(startRow, startCol, endRow, endCol) {
|
|
128
|
+
if (!this._engine)
|
|
129
|
+
return '';
|
|
130
|
+
const rows = this._engine.rowData();
|
|
131
|
+
const cols = this._engine.columnDefs();
|
|
132
|
+
const minRow = Math.min(startRow, endRow);
|
|
133
|
+
const maxRow = Math.max(startRow, endRow);
|
|
134
|
+
const minCol = Math.min(startCol, endCol);
|
|
135
|
+
const maxCol = Math.max(startCol, endCol);
|
|
136
|
+
const lines = [];
|
|
137
|
+
for (let r = minRow; r <= maxRow; r++) {
|
|
138
|
+
const cells = [];
|
|
139
|
+
for (let c = minCol; c <= maxCol; c++) {
|
|
140
|
+
const colId = cols[c]?.id;
|
|
141
|
+
const val = colId ? rows[r]?.cells[colId]?.value : null;
|
|
142
|
+
cells.push(val == null ? '' : String(val));
|
|
143
|
+
}
|
|
144
|
+
lines.push(cells.join('\t'));
|
|
145
|
+
}
|
|
146
|
+
return lines.join('\n');
|
|
147
|
+
}
|
|
148
|
+
_copyToTextarea(text) {
|
|
149
|
+
const ta = document.createElement('textarea');
|
|
150
|
+
ta.value = text;
|
|
151
|
+
ta.style.position = 'fixed';
|
|
152
|
+
ta.style.left = '-9999px';
|
|
153
|
+
document.body.appendChild(ta);
|
|
154
|
+
ta.select();
|
|
155
|
+
document.execCommand('copy');
|
|
156
|
+
document.body.removeChild(ta);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function parseClipboardValue(raw) {
|
|
160
|
+
if (raw === '')
|
|
161
|
+
return null;
|
|
162
|
+
if (raw === 'TRUE')
|
|
163
|
+
return true;
|
|
164
|
+
if (raw === 'FALSE')
|
|
165
|
+
return false;
|
|
166
|
+
const num = Number(raw);
|
|
167
|
+
if (!isNaN(num) && raw !== '')
|
|
168
|
+
return num;
|
|
169
|
+
return raw;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zcHJlYWRzaGVldC9wbHVnaW4vY2xpcGJvYXJkLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUNXLFNBQUksR0FBRyxXQUFXLENBQUM7UUFDbkIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVmLFlBQU8sR0FBNkIsSUFBSSxDQUFDO1FBQ3pDLGNBQVMsR0FBNEQsSUFBSSxDQUFDO0lBdUtwRixDQUFDO0lBcktDLE1BQU0sQ0FBQyxNQUF5QjtRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztZQUFFLE9BQU87UUFFdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUNuQixHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQ25CLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFDakIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNsQixDQUFDO1FBQ0YsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxlQUFlLENB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QztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNwcmVhZHNoZWV0UGx1Z2luIH0gZnJvbSAnLi9wbHVnaW4udHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBTcHJlYWRzaGVldEVuZ2luZSB9IGZyb20gJy4uL3NwcmVhZHNoZWV0LWVuZ2luZSc7XG5pbXBvcnQgdHlwZSB7IENlbGxWYWx1ZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8qKlxuICogQ2xpcGJvYXJkUGx1Z2luIGhhbmRsZXMgY29weS9wYXN0ZS9jdXQgb3BlcmF0aW9ucy5cbiAqIFJlYWRzIGZyb20gYW5kIHdyaXRlcyB0byB0aGUgc3lzdGVtIGNsaXBib2FyZCB2aWEgdGhlIENsaXBib2FyZCBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGlwYm9hcmRQbHVnaW4gaW1wbGVtZW50cyBTcHJlYWRzaGVldFBsdWdpbiB7XG4gIHJlYWRvbmx5IG5hbWUgPSAnY2xpcGJvYXJkJztcbiAgcmVhZG9ubHkgcHJpb3JpdHkgPSAzMDtcblxuICBwcml2YXRlIF9lbmdpbmU6IFNwcmVhZHNoZWV0RW5naW5lIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2N1dENlbGxzOiB7IHJvdzogbnVtYmVyOyBjb2w6IG51bWJlcjsgdmFsdWU6IENlbGxWYWx1ZSB9W10gfCBudWxsID0gbnVsbDtcblxuICBvbkluaXQoZW5naW5lOiBTcHJlYWRzaGVldEVuZ2luZSk6IHZvaWQge1xuICAgIHRoaXMuX2VuZ2luZSA9IGVuZ2luZTtcbiAgfVxuXG4gIC8qKiBDb3B5IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB0byB0aGUgY2xpcGJvYXJkLiAqL1xuICBhc3luYyBjb3B5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fZW5naW5lKSByZXR1cm47XG4gICAgY29uc3Qgc2VsID0gdGhpcy5fZW5naW5lLnNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsLnJhbmdlKSByZXR1cm47XG5cbiAgICBjb25zdCB0c3YgPSB0aGlzLl9zZWxlY3Rpb25Ub1RzdihcbiAgICAgIHNlbC5yYW5nZS5zdGFydC5yb3csXG4gICAgICBzZWwucmFuZ2Uuc3RhcnQuY29sLFxuICAgICAgc2VsLnJhbmdlLmVuZC5yb3csXG4gICAgICBzZWwucmFuZ2UuZW5kLmNvbCxcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0c3YpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbGJhY2s6IHVzZSBhIHRlbXBvcmFyeSB0ZXh0YXJlYVxuICAgICAgdGhpcy5fY29weVRvVGV4dGFyZWEodHN2KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3V0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiAoY29weSArIGNsZWFyKS4gKi9cbiAgYXN5bmMgY3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fZW5naW5lKSByZXR1cm47XG4gICAgY29uc3Qgc2VsID0gdGhpcy5fZW5naW5lLnNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsLnJhbmdlKSByZXR1cm47XG5cbiAgICBjb25zdCBzdGFydFJvdyA9IE1hdGgubWluKHNlbC5yYW5nZS5zdGFydC5yb3csIHNlbC5yYW5nZS5lbmQucm93KTtcbiAgICBjb25zdCBzdGFydENvbCA9IE1hdGgubWluKHNlbC5yYW5nZS5zdGFydC5jb2wsIHNlbC5yYW5nZS5lbmQuY29sKTtcbiAgICBjb25zdCBlbmRSb3cgPSBNYXRoLm1heChzZWwucmFuZ2Uuc3RhcnQucm93LCBzZWwucmFuZ2UuZW5kLnJvdyk7XG4gICAgY29uc3QgZW5kQ29sID0gTWF0aC5tYXgoc2VsLnJhbmdlLnN0YXJ0LmNvbCwgc2VsLnJhbmdlLmVuZC5jb2wpO1xuXG4gICAgdGhpcy5fY3V0Q2VsbHMgPSBbXTtcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMuX2VuZ2luZS5yb3dEYXRhKCldO1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLl9lbmdpbmUuY29sdW1uRGVmcygpO1xuXG4gICAgZm9yIChsZXQgciA9IHN0YXJ0Um93OyByIDw9IGVuZFJvdzsgcisrKSB7XG4gICAgICBmb3IgKGxldCBjID0gc3RhcnRDb2w7IGMgPD0gZW5kQ29sOyBjKyspIHtcbiAgICAgICAgY29uc3QgY29sSWQgPSBjb2xzW2NdPy5pZDtcbiAgICAgICAgaWYgKGNvbElkKSB7XG4gICAgICAgICAgdGhpcy5fY3V0Q2VsbHMucHVzaCh7IHJvdzogciwgY29sOiBjLCB2YWx1ZTogcm93c1tyXT8uY2VsbHNbY29sSWRdPy52YWx1ZSA/PyBudWxsIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jb3B5KCk7XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbkNvbnRlbnQoKTtcbiAgfVxuXG4gIC8qKiBQYXN0ZSBjbGlwYm9hcmQgY29udGVudCBzdGFydGluZyBhdCB0aGUgYWN0aXZlIGNlbGwuICovXG4gIGFzeW5jIHBhc3RlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fZW5naW5lKSByZXR1cm47XG4gICAgY29uc3Qgc2VsID0gdGhpcy5fZW5naW5lLnNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGFjdGl2ZUNlbGwgPSBzZWwuYWN0aXZlQ2VsbDtcbiAgICBpZiAoIWFjdGl2ZUNlbGwpIHJldHVybjtcblxuICAgIGxldCB0ZXh0OiBzdHJpbmc7XG4gICAgdHJ5IHtcbiAgICAgIHRleHQgPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLnJlYWRUZXh0KCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG5cbiAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoJ1xcbicpLmZpbHRlcigobCkgPT4gbC5sZW5ndGggPiAwKTtcbiAgICBjb25zdCBjb2xzID0gdGhpcy5fZW5naW5lLmNvbHVtbkRlZnMoKTtcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMuX2VuZ2luZS5yb3dEYXRhKCldO1xuICAgIGNvbnN0IHN0YXJ0Um93ID0gYWN0aXZlQ2VsbC5yb3c7XG4gICAgY29uc3Qgc3RhcnRDb2wgPSBhY3RpdmVDZWxsLmNvbDtcblxuICAgIGZvciAobGV0IHIgPSAwOyByIDwgbGluZXMubGVuZ3RoOyByKyspIHtcbiAgICAgIGNvbnN0IGNlbGxzID0gbGluZXNbcl0uc3BsaXQoJ1xcdCcpO1xuICAgICAgY29uc3QgdGFyZ2V0Um93ID0gc3RhcnRSb3cgKyByO1xuICAgICAgaWYgKHRhcmdldFJvdyA+PSByb3dzLmxlbmd0aCkgYnJlYWs7XG5cbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2VsbHMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0Q29sID0gc3RhcnRDb2wgKyBjO1xuICAgICAgICBpZiAodGFyZ2V0Q29sID49IGNvbHMubGVuZ3RoKSBicmVhaztcblxuICAgICAgICBjb25zdCBjb2xJZCA9IGNvbHNbdGFyZ2V0Q29sXS5pZDtcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHJvd3NbdGFyZ2V0Um93XTtcbiAgICAgICAgaWYgKHJvd0RhdGEpIHtcbiAgICAgICAgICBjb25zdCByYXcgPSBjZWxsc1tjXS50cmltKCk7XG4gICAgICAgICAgY29uc3QgdmFsdWU6IENlbGxWYWx1ZSA9IHBhcnNlQ2xpcGJvYXJkVmFsdWUocmF3KTtcbiAgICAgICAgICByb3dzW3RhcmdldFJvd10gPSB7XG4gICAgICAgICAgICAuLi5yb3dEYXRhLFxuICAgICAgICAgICAgY2VsbHM6IHsgLi4ucm93RGF0YS5jZWxscywgW2NvbElkXTogeyB2YWx1ZSwgbWV0YTogcm93RGF0YS5jZWxsc1tjb2xJZF0/Lm1ldGEgfSB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9lbmdpbmUucm93RGF0YS5zZXQocm93cyk7XG4gIH1cblxuICAvKiogQ2xlYXIgdGhlIGNvbnRlbnQgb2Ygc2VsZWN0ZWQgY2VsbHMuICovXG4gIGNsZWFyU2VsZWN0aW9uQ29udGVudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2VuZ2luZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbCA9IHRoaXMuX2VuZ2luZS5zZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbC5yYW5nZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RhcnRSb3cgPSBNYXRoLm1pbihzZWwucmFuZ2Uuc3RhcnQucm93LCBzZWwucmFuZ2UuZW5kLnJvdyk7XG4gICAgY29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1pbihzZWwucmFuZ2Uuc3RhcnQuY29sLCBzZWwucmFuZ2UuZW5kLmNvbCk7XG4gICAgY29uc3QgZW5kUm93ID0gTWF0aC5tYXgoc2VsLnJhbmdlLnN0YXJ0LnJvdywgc2VsLnJhbmdlLmVuZC5yb3cpO1xuICAgIGNvbnN0IGVuZENvbCA9IE1hdGgubWF4KHNlbC5yYW5nZS5zdGFydC5jb2wsIHNlbC5yYW5nZS5lbmQuY29sKTtcblxuICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy5fZW5naW5lLnJvd0RhdGEoKV07XG4gICAgY29uc3QgY29scyA9IHRoaXMuX2VuZ2luZS5jb2x1bW5EZWZzKCk7XG5cbiAgICBmb3IgKGxldCByID0gc3RhcnRSb3c7IHIgPD0gZW5kUm93OyByKyspIHtcbiAgICAgIGZvciAobGV0IGMgPSBzdGFydENvbDsgYyA8PSBlbmRDb2w7IGMrKykge1xuICAgICAgICBjb25zdCBjb2xJZCA9IGNvbHNbY10/LmlkO1xuICAgICAgICBpZiAoY29sSWQgJiYgcm93c1tyXSkge1xuICAgICAgICAgIHJvd3Nbcl0gPSB7XG4gICAgICAgICAgICAuLi5yb3dzW3JdLFxuICAgICAgICAgICAgY2VsbHM6IHsgLi4ucm93c1tyXS5jZWxscywgW2NvbElkXTogeyB2YWx1ZTogbnVsbCwgbWV0YTogcm93c1tyXS5jZWxsc1tjb2xJZF0/Lm1ldGEgfSB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9lbmdpbmUucm93RGF0YS5zZXQocm93cyk7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3Rpb25Ub1RzdihcbiAgICBzdGFydFJvdzogbnVtYmVyLFxuICAgIHN0YXJ0Q29sOiBudW1iZXIsXG4gICAgZW5kUm93OiBudW1iZXIsXG4gICAgZW5kQ29sOiBudW1iZXIsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9lbmdpbmUpIHJldHVybiAnJztcbiAgICBjb25zdCByb3dzID0gdGhpcy5fZW5naW5lLnJvd0RhdGEoKTtcbiAgICBjb25zdCBjb2xzID0gdGhpcy5fZW5naW5lLmNvbHVtbkRlZnMoKTtcbiAgICBjb25zdCBtaW5Sb3cgPSBNYXRoLm1pbihzdGFydFJvdywgZW5kUm93KTtcbiAgICBjb25zdCBtYXhSb3cgPSBNYXRoLm1heChzdGFydFJvdywgZW5kUm93KTtcbiAgICBjb25zdCBtaW5Db2wgPSBNYXRoLm1pbihzdGFydENvbCwgZW5kQ29sKTtcbiAgICBjb25zdCBtYXhDb2wgPSBNYXRoLm1heChzdGFydENvbCwgZW5kQ29sKTtcblxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAobGV0IHIgPSBtaW5Sb3c7IHIgPD0gbWF4Um93OyByKyspIHtcbiAgICAgIGNvbnN0IGNlbGxzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgYyA9IG1pbkNvbDsgYyA8PSBtYXhDb2w7IGMrKykge1xuICAgICAgICBjb25zdCBjb2xJZCA9IGNvbHNbY10/LmlkO1xuICAgICAgICBjb25zdCB2YWwgPSBjb2xJZCA/IHJvd3Nbcl0/LmNlbGxzW2NvbElkXT8udmFsdWUgOiBudWxsO1xuICAgICAgICBjZWxscy5wdXNoKHZhbCA9PSBudWxsID8gJycgOiBTdHJpbmcodmFsKSk7XG4gICAgICB9XG4gICAgICBsaW5lcy5wdXNoKGNlbGxzLmpvaW4oJ1xcdCcpKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29weVRvVGV4dGFyZWEodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIHRhLnZhbHVlID0gdGV4dDtcbiAgICB0YS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgdGEuc3R5bGUubGVmdCA9ICctOTk5OXB4JztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRhKTtcbiAgICB0YS5zZWxlY3QoKTtcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGEpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2xpcGJvYXJkVmFsdWUocmF3OiBzdHJpbmcpOiBDZWxsVmFsdWUge1xuICBpZiAocmF3ID09PSAnJykgcmV0dXJuIG51bGw7XG4gIGlmIChyYXcgPT09ICdUUlVFJykgcmV0dXJuIHRydWU7XG4gIGlmIChyYXcgPT09ICdGQUxTRScpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbnVtID0gTnVtYmVyKHJhdyk7XG4gIGlmICghaXNOYU4obnVtKSAmJiByYXcgIT09ICcnKSByZXR1cm4gbnVtO1xuICByZXR1cm4gcmF3O1xufVxuIl19
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FilterPlugin applies column-level filters to the row set.
|
|
3
|
+
* Stores original rows and restores on clear.
|
|
4
|
+
*/
|
|
5
|
+
export class FilterPlugin {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.name = 'filter';
|
|
8
|
+
this.priority = 20;
|
|
9
|
+
this._engine = null;
|
|
10
|
+
this._originalRows = [];
|
|
11
|
+
}
|
|
12
|
+
onInit(engine) {
|
|
13
|
+
this._engine = engine;
|
|
14
|
+
this._originalRows = engine.rowData();
|
|
15
|
+
}
|
|
16
|
+
/** Apply filter criteria. */
|
|
17
|
+
applyFilter(criteria, mode) {
|
|
18
|
+
if (!this._engine)
|
|
19
|
+
return;
|
|
20
|
+
if (criteria.length === 0) {
|
|
21
|
+
this._engine.rowData.set([...this._originalRows]);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this._originalRows = this._engine.rowData();
|
|
25
|
+
const filtered = this._originalRows.filter((row) => {
|
|
26
|
+
const results = criteria.map((c) => matchesCriterion(row.cells[c.colId]?.value, c));
|
|
27
|
+
return mode === 'and' ? results.every(Boolean) : results.some(Boolean);
|
|
28
|
+
});
|
|
29
|
+
this._engine.rowData.set(filtered);
|
|
30
|
+
}
|
|
31
|
+
/** Clear all filters and restore original rows. */
|
|
32
|
+
clearFilter() {
|
|
33
|
+
if (!this._engine)
|
|
34
|
+
return;
|
|
35
|
+
this._engine.rowData.set([...this._originalRows]);
|
|
36
|
+
}
|
|
37
|
+
onBeforeFilter() {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
onAfterFilter() {
|
|
41
|
+
// Sync original rows when data changes externally
|
|
42
|
+
if (this._engine) {
|
|
43
|
+
this._originalRows = this._engine.rowData();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function matchesCriterion(value, criterion) {
|
|
48
|
+
const v = value == null ? '' : String(value).toLowerCase();
|
|
49
|
+
const c = criterion.value == null ? '' : String(criterion.value).toLowerCase();
|
|
50
|
+
switch (criterion.operator) {
|
|
51
|
+
case 'equals':
|
|
52
|
+
return v === c;
|
|
53
|
+
case 'notEquals':
|
|
54
|
+
return v !== c;
|
|
55
|
+
case 'contains':
|
|
56
|
+
return v.includes(c);
|
|
57
|
+
case 'notContains':
|
|
58
|
+
return !v.includes(c);
|
|
59
|
+
case 'startsWith':
|
|
60
|
+
return v.startsWith(c);
|
|
61
|
+
case 'endsWith':
|
|
62
|
+
return v.endsWith(c);
|
|
63
|
+
case 'gt':
|
|
64
|
+
return Number(value) > Number(criterion.value);
|
|
65
|
+
case 'gte':
|
|
66
|
+
return Number(value) >= Number(criterion.value);
|
|
67
|
+
case 'lt':
|
|
68
|
+
return Number(value) < Number(criterion.value);
|
|
69
|
+
case 'lte':
|
|
70
|
+
return Number(value) <= Number(criterion.value);
|
|
71
|
+
case 'between': {
|
|
72
|
+
const num = Number(value);
|
|
73
|
+
return num >= Number(criterion.value) && num <= Number(criterion.valueTo);
|
|
74
|
+
}
|
|
75
|
+
case 'in': {
|
|
76
|
+
const arr = Array.isArray(criterion.value) ? criterion.value : [];
|
|
77
|
+
return arr.some((item) => String(item).toLowerCase() === v);
|
|
78
|
+
}
|
|
79
|
+
case 'empty':
|
|
80
|
+
return v === '';
|
|
81
|
+
case 'notEmpty':
|
|
82
|
+
return v !== '';
|
|
83
|
+
default:
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zcHJlYWRzaGVldC9wbHVnaW4vZmlsdGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUF6QjtRQUNXLFNBQUksR0FBRyxRQUFRLENBQUM7UUFDaEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVmLFlBQU8sR0FBNkIsSUFBSSxDQUFDO1FBQ3pDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQztJQXdDaEQsQ0FBQztJQXRDQyxNQUFNLENBQUMsTUFBeUI7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixXQUFXLENBQUMsUUFBb0MsRUFBRSxJQUFrQjtRQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQzFCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2xELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEYsT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGFBQWE7UUFDWCxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWMsRUFBRSxTQUEwQjtJQUNsRSxNQUFNLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzRCxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRS9FLFFBQVEsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLEtBQUssUUFBUTtZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixLQUFLLFdBQVc7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssYUFBYTtZQUNoQixPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixLQUFLLFlBQVk7WUFDZixPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssSUFBSTtZQUNQLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsS0FBSyxLQUFLO1lBQ1IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxLQUFLLElBQUk7WUFDUCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELEtBQUssS0FBSztZQUNSLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELEtBQUssT0FBTztZQUNWLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixLQUFLLFVBQVU7WUFDYixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEI7WUFDRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3ByZWFkc2hlZXRQbHVnaW4gfSBmcm9tICcuL3BsdWdpbi50eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNwcmVhZHNoZWV0RW5naW5lIH0gZnJvbSAnLi4vc3ByZWFkc2hlZXQtZW5naW5lJztcbmltcG9ydCB0eXBlIHsgRmlsdGVyQ3JpdGVyaW9uLCBSb3dEZWYgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG4vKipcbiAqIEZpbHRlclBsdWdpbiBhcHBsaWVzIGNvbHVtbi1sZXZlbCBmaWx0ZXJzIHRvIHRoZSByb3cgc2V0LlxuICogU3RvcmVzIG9yaWdpbmFsIHJvd3MgYW5kIHJlc3RvcmVzIG9uIGNsZWFyLlxuICovXG5leHBvcnQgY2xhc3MgRmlsdGVyUGx1Z2luIGltcGxlbWVudHMgU3ByZWFkc2hlZXRQbHVnaW4ge1xuICByZWFkb25seSBuYW1lID0gJ2ZpbHRlcic7XG4gIHJlYWRvbmx5IHByaW9yaXR5ID0gMjA7XG5cbiAgcHJpdmF0ZSBfZW5naW5lOiBTcHJlYWRzaGVldEVuZ2luZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9vcmlnaW5hbFJvd3M6IHJlYWRvbmx5IFJvd0RlZltdID0gW107XG5cbiAgb25Jbml0KGVuZ2luZTogU3ByZWFkc2hlZXRFbmdpbmUpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmdpbmUgPSBlbmdpbmU7XG4gICAgdGhpcy5fb3JpZ2luYWxSb3dzID0gZW5naW5lLnJvd0RhdGEoKTtcbiAgfVxuXG4gIC8qKiBBcHBseSBmaWx0ZXIgY3JpdGVyaWEuICovXG4gIGFwcGx5RmlsdGVyKGNyaXRlcmlhOiByZWFkb25seSBGaWx0ZXJDcml0ZXJpb25bXSwgbW9kZTogJ2FuZCcgfCAnb3InKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lbmdpbmUpIHJldHVybjtcbiAgICBpZiAoY3JpdGVyaWEubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9lbmdpbmUucm93RGF0YS5zZXQoWy4uLnRoaXMuX29yaWdpbmFsUm93c10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29yaWdpbmFsUm93cyA9IHRoaXMuX2VuZ2luZS5yb3dEYXRhKCk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLl9vcmlnaW5hbFJvd3MuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBjcml0ZXJpYS5tYXAoKGMpID0+IG1hdGNoZXNDcml0ZXJpb24ocm93LmNlbGxzW2MuY29sSWRdPy52YWx1ZSwgYykpO1xuICAgICAgcmV0dXJuIG1vZGUgPT09ICdhbmQnID8gcmVzdWx0cy5ldmVyeShCb29sZWFuKSA6IHJlc3VsdHMuc29tZShCb29sZWFuKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2VuZ2luZS5yb3dEYXRhLnNldChmaWx0ZXJlZCk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIGZpbHRlcnMgYW5kIHJlc3RvcmUgb3JpZ2luYWwgcm93cy4gKi9cbiAgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lbmdpbmUpIHJldHVybjtcbiAgICB0aGlzLl9lbmdpbmUucm93RGF0YS5zZXQoWy4uLnRoaXMuX29yaWdpbmFsUm93c10pO1xuICB9XG5cbiAgb25CZWZvcmVGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvbkFmdGVyRmlsdGVyKCk6IHZvaWQge1xuICAgIC8vIFN5bmMgb3JpZ2luYWwgcm93cyB3aGVuIGRhdGEgY2hhbmdlcyBleHRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX2VuZ2luZSkge1xuICAgICAgdGhpcy5fb3JpZ2luYWxSb3dzID0gdGhpcy5fZW5naW5lLnJvd0RhdGEoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hlc0NyaXRlcmlvbih2YWx1ZTogdW5rbm93biwgY3JpdGVyaW9uOiBGaWx0ZXJDcml0ZXJpb24pOiBib29sZWFuIHtcbiAgY29uc3QgdiA9IHZhbHVlID09IG51bGwgPyAnJyA6IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgYyA9IGNyaXRlcmlvbi52YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcoY3JpdGVyaW9uLnZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuXG4gIHN3aXRjaCAoY3JpdGVyaW9uLm9wZXJhdG9yKSB7XG4gICAgY2FzZSAnZXF1YWxzJzpcbiAgICAgIHJldHVybiB2ID09PSBjO1xuICAgIGNhc2UgJ25vdEVxdWFscyc6XG4gICAgICByZXR1cm4gdiAhPT0gYztcbiAgICBjYXNlICdjb250YWlucyc6XG4gICAgICByZXR1cm4gdi5pbmNsdWRlcyhjKTtcbiAgICBjYXNlICdub3RDb250YWlucyc6XG4gICAgICByZXR1cm4gIXYuaW5jbHVkZXMoYyk7XG4gICAgY2FzZSAnc3RhcnRzV2l0aCc6XG4gICAgICByZXR1cm4gdi5zdGFydHNXaXRoKGMpO1xuICAgIGNhc2UgJ2VuZHNXaXRoJzpcbiAgICAgIHJldHVybiB2LmVuZHNXaXRoKGMpO1xuICAgIGNhc2UgJ2d0JzpcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpID4gTnVtYmVyKGNyaXRlcmlvbi52YWx1ZSk7XG4gICAgY2FzZSAnZ3RlJzpcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpID49IE51bWJlcihjcml0ZXJpb24udmFsdWUpO1xuICAgIGNhc2UgJ2x0JzpcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIDwgTnVtYmVyKGNyaXRlcmlvbi52YWx1ZSk7XG4gICAgY2FzZSAnbHRlJzpcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIDw9IE51bWJlcihjcml0ZXJpb24udmFsdWUpO1xuICAgIGNhc2UgJ2JldHdlZW4nOiB7XG4gICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgcmV0dXJuIG51bSA+PSBOdW1iZXIoY3JpdGVyaW9uLnZhbHVlKSAmJiBudW0gPD0gTnVtYmVyKGNyaXRlcmlvbi52YWx1ZVRvKTtcbiAgICB9XG4gICAgY2FzZSAnaW4nOiB7XG4gICAgICBjb25zdCBhcnIgPSBBcnJheS5pc0FycmF5KGNyaXRlcmlvbi52YWx1ZSkgPyBjcml0ZXJpb24udmFsdWUgOiBbXTtcbiAgICAgIHJldHVybiBhcnIuc29tZSgoaXRlbSkgPT4gU3RyaW5nKGl0ZW0pLnRvTG93ZXJDYXNlKCkgPT09IHYpO1xuICAgIH1cbiAgICBjYXNlICdlbXB0eSc6XG4gICAgICByZXR1cm4gdiA9PT0gJyc7XG4gICAgY2FzZSAnbm90RW1wdHknOlxuICAgICAgcmV0dXJuIHYgIT09ICcnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
|