@ngxsmk/cdk 1.3.2 → 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.
Files changed (173) hide show
  1. package/cva-base/cva-base.d.ts +34 -0
  2. package/cva-base/cva-base.d.ts.map +1 -0
  3. package/cva-base/index.d.ts +2 -0
  4. package/cva-base/index.d.ts.map +1 -0
  5. package/cva-base/ngxsmk-cdk-cva-base.d.ts.map +1 -0
  6. package/esm2022/cva-base/cva-base.mjs +45 -0
  7. package/esm2022/cva-base/index.mjs +2 -0
  8. package/esm2022/cva-base/ngxsmk-cdk-cva-base.mjs +5 -0
  9. package/esm2022/input-group/index.mjs +3 -0
  10. package/esm2022/input-group/input-group-engine.mjs +219 -0
  11. package/esm2022/input-group/models/index.mjs +2 -0
  12. package/esm2022/input-group/models/input-group.model.mjs +2 -0
  13. package/esm2022/input-group/ngxsmk-cdk-input-group.mjs +5 -0
  14. package/esm2022/listbox-keyboard/index.mjs +2 -0
  15. package/esm2022/listbox-keyboard/listbox-keyboard.mjs +145 -0
  16. package/esm2022/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.mjs +5 -0
  17. package/esm2022/public-api.mjs +10 -1
  18. package/esm2022/scheduler/index.mjs +5 -0
  19. package/esm2022/scheduler/models/date-range.mjs +2 -0
  20. package/esm2022/scheduler/models/event.model.mjs +2 -0
  21. package/esm2022/scheduler/models/index.mjs +6 -0
  22. package/esm2022/scheduler/models/resource.model.mjs +5 -0
  23. package/esm2022/scheduler/models/selection.model.mjs +7 -0
  24. package/esm2022/scheduler/models/view.model.mjs +7 -0
  25. package/esm2022/scheduler/ngxsmk-cdk-scheduler.mjs +5 -0
  26. package/esm2022/scheduler/plugin/drag-plugin.mjs +82 -0
  27. package/esm2022/scheduler/plugin/index.mjs +8 -0
  28. package/esm2022/scheduler/plugin/keyboard-plugin.mjs +150 -0
  29. package/esm2022/scheduler/plugin/plugin-host.mjs +48 -0
  30. package/esm2022/scheduler/plugin/plugin.types.mjs +2 -0
  31. package/esm2022/scheduler/plugin/resize-plugin.mjs +74 -0
  32. package/esm2022/scheduler/plugin/selection-plugin.mjs +84 -0
  33. package/esm2022/scheduler/plugin/tooltip-plugin.mjs +103 -0
  34. package/esm2022/scheduler/scheduler-engine.mjs +316 -0
  35. package/esm2022/scheduler/utils/date-utils.mjs +131 -0
  36. package/esm2022/scheduler/utils/index.mjs +3 -0
  37. package/esm2022/scheduler/utils/snap.mjs +24 -0
  38. package/esm2022/spreadsheet/index.mjs +5 -0
  39. package/esm2022/spreadsheet/models/cell.model.mjs +2 -0
  40. package/esm2022/spreadsheet/models/column.model.mjs +2 -0
  41. package/esm2022/spreadsheet/models/filter.model.mjs +2 -0
  42. package/esm2022/spreadsheet/models/formula.model.mjs +2 -0
  43. package/esm2022/spreadsheet/models/index.mjs +8 -0
  44. package/esm2022/spreadsheet/models/row.model.mjs +2 -0
  45. package/esm2022/spreadsheet/models/selection.model.mjs +2 -0
  46. package/esm2022/spreadsheet/models/sort.model.mjs +2 -0
  47. package/esm2022/spreadsheet/ngxsmk-cdk-spreadsheet.mjs +5 -0
  48. package/esm2022/spreadsheet/plugin/clipboard-plugin.mjs +171 -0
  49. package/esm2022/spreadsheet/plugin/filter-plugin.mjs +87 -0
  50. package/esm2022/spreadsheet/plugin/formula-plugin.mjs +456 -0
  51. package/esm2022/spreadsheet/plugin/index.mjs +10 -0
  52. package/esm2022/spreadsheet/plugin/plugin-host.mjs +188 -0
  53. package/esm2022/spreadsheet/plugin/plugin.types.mjs +2 -0
  54. package/esm2022/spreadsheet/plugin/selection-plugin.mjs +114 -0
  55. package/esm2022/spreadsheet/plugin/sort-plugin.mjs +63 -0
  56. package/esm2022/spreadsheet/plugin/undo-plugin.mjs +138 -0
  57. package/esm2022/spreadsheet/plugin/validation-plugin.mjs +71 -0
  58. package/esm2022/spreadsheet/spreadsheet-engine.mjs +547 -0
  59. package/esm2022/spreadsheet/utils/cell-utils.mjs +129 -0
  60. package/esm2022/spreadsheet/utils/index.mjs +2 -0
  61. package/fesm2022/ngxsmk-cdk-cva-base.mjs +52 -0
  62. package/fesm2022/ngxsmk-cdk-cva-base.mjs.map +1 -0
  63. package/fesm2022/ngxsmk-cdk-input-group.mjs +226 -0
  64. package/fesm2022/ngxsmk-cdk-input-group.mjs.map +1 -0
  65. package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs +152 -0
  66. package/fesm2022/ngxsmk-cdk-listbox-keyboard.mjs.map +1 -0
  67. package/fesm2022/ngxsmk-cdk-scheduler.mjs +1035 -0
  68. package/fesm2022/ngxsmk-cdk-scheduler.mjs.map +1 -0
  69. package/fesm2022/ngxsmk-cdk-spreadsheet.mjs +1969 -0
  70. package/fesm2022/ngxsmk-cdk-spreadsheet.mjs.map +1 -0
  71. package/fesm2022/ngxsmk-cdk.mjs +5 -0
  72. package/fesm2022/ngxsmk-cdk.mjs.map +1 -1
  73. package/input-group/index.d.ts +3 -0
  74. package/input-group/index.d.ts.map +1 -0
  75. package/input-group/input-group-engine.d.ts +88 -0
  76. package/input-group/input-group-engine.d.ts.map +1 -0
  77. package/input-group/models/index.d.ts +2 -0
  78. package/input-group/models/index.d.ts.map +1 -0
  79. package/input-group/models/input-group.model.d.ts +114 -0
  80. package/input-group/models/input-group.model.d.ts.map +1 -0
  81. package/input-group/ngxsmk-cdk-input-group.d.ts.map +1 -0
  82. package/listbox-keyboard/index.d.ts +2 -0
  83. package/listbox-keyboard/index.d.ts.map +1 -0
  84. package/listbox-keyboard/listbox-keyboard.d.ts +60 -0
  85. package/listbox-keyboard/listbox-keyboard.d.ts.map +1 -0
  86. package/listbox-keyboard/ngxsmk-cdk-listbox-keyboard.d.ts.map +1 -0
  87. package/package.json +41 -11
  88. package/public-api.d.ts +8 -0
  89. package/public-api.d.ts.map +1 -1
  90. package/scheduler/index.d.ts +5 -0
  91. package/scheduler/index.d.ts.map +1 -0
  92. package/scheduler/models/date-range.d.ts +6 -0
  93. package/scheduler/models/date-range.d.ts.map +1 -0
  94. package/scheduler/models/event.model.d.ts +50 -0
  95. package/scheduler/models/event.model.d.ts.map +1 -0
  96. package/scheduler/models/index.d.ts +6 -0
  97. package/scheduler/models/index.d.ts.map +1 -0
  98. package/scheduler/models/resource.model.d.ts +16 -0
  99. package/scheduler/models/resource.model.d.ts.map +1 -0
  100. package/scheduler/models/selection.model.d.ts +12 -0
  101. package/scheduler/models/selection.model.d.ts.map +1 -0
  102. package/scheduler/models/view.model.d.ts +21 -0
  103. package/scheduler/models/view.model.d.ts.map +1 -0
  104. package/scheduler/ngxsmk-cdk-scheduler.d.ts.map +1 -0
  105. package/scheduler/plugin/drag-plugin.d.ts +28 -0
  106. package/scheduler/plugin/drag-plugin.d.ts.map +1 -0
  107. package/scheduler/plugin/index.d.ts +8 -0
  108. package/scheduler/plugin/index.d.ts.map +1 -0
  109. package/scheduler/plugin/keyboard-plugin.d.ts +24 -0
  110. package/scheduler/plugin/keyboard-plugin.d.ts.map +1 -0
  111. package/scheduler/plugin/plugin-host.d.ts +16 -0
  112. package/scheduler/plugin/plugin-host.d.ts.map +1 -0
  113. package/scheduler/plugin/plugin.types.d.ts +9 -0
  114. package/scheduler/plugin/plugin.types.d.ts.map +1 -0
  115. package/scheduler/plugin/resize-plugin.d.ts +26 -0
  116. package/scheduler/plugin/resize-plugin.d.ts.map +1 -0
  117. package/scheduler/plugin/selection-plugin.d.ts +40 -0
  118. package/scheduler/plugin/selection-plugin.d.ts.map +1 -0
  119. package/scheduler/plugin/tooltip-plugin.d.ts +41 -0
  120. package/scheduler/plugin/tooltip-plugin.d.ts.map +1 -0
  121. package/scheduler/scheduler-engine.d.ts +95 -0
  122. package/scheduler/scheduler-engine.d.ts.map +1 -0
  123. package/scheduler/utils/date-utils.d.ts +26 -0
  124. package/scheduler/utils/date-utils.d.ts.map +1 -0
  125. package/scheduler/utils/index.d.ts +3 -0
  126. package/scheduler/utils/index.d.ts.map +1 -0
  127. package/scheduler/utils/snap.d.ts +7 -0
  128. package/scheduler/utils/snap.d.ts.map +1 -0
  129. package/spreadsheet/index.d.ts +5 -0
  130. package/spreadsheet/index.d.ts.map +1 -0
  131. package/spreadsheet/models/cell.model.d.ts +44 -0
  132. package/spreadsheet/models/cell.model.d.ts.map +1 -0
  133. package/spreadsheet/models/column.model.d.ts +77 -0
  134. package/spreadsheet/models/column.model.d.ts.map +1 -0
  135. package/spreadsheet/models/filter.model.d.ts +15 -0
  136. package/spreadsheet/models/filter.model.d.ts.map +1 -0
  137. package/spreadsheet/models/formula.model.d.ts +65 -0
  138. package/spreadsheet/models/formula.model.d.ts.map +1 -0
  139. package/spreadsheet/models/index.d.ts +8 -0
  140. package/spreadsheet/models/index.d.ts.map +1 -0
  141. package/spreadsheet/models/row.model.d.ts +33 -0
  142. package/spreadsheet/models/row.model.d.ts.map +1 -0
  143. package/spreadsheet/models/selection.model.d.ts +18 -0
  144. package/spreadsheet/models/selection.model.d.ts.map +1 -0
  145. package/spreadsheet/models/sort.model.d.ts +14 -0
  146. package/spreadsheet/models/sort.model.d.ts.map +1 -0
  147. package/spreadsheet/ngxsmk-cdk-spreadsheet.d.ts.map +1 -0
  148. package/spreadsheet/plugin/clipboard-plugin.d.ts +24 -0
  149. package/spreadsheet/plugin/clipboard-plugin.d.ts.map +1 -0
  150. package/spreadsheet/plugin/filter-plugin.d.ts +21 -0
  151. package/spreadsheet/plugin/filter-plugin.d.ts.map +1 -0
  152. package/spreadsheet/plugin/formula-plugin.d.ts +39 -0
  153. package/spreadsheet/plugin/formula-plugin.d.ts.map +1 -0
  154. package/spreadsheet/plugin/index.d.ts +10 -0
  155. package/spreadsheet/plugin/index.d.ts.map +1 -0
  156. package/spreadsheet/plugin/plugin-host.d.ts +66 -0
  157. package/spreadsheet/plugin/plugin-host.d.ts.map +1 -0
  158. package/spreadsheet/plugin/plugin.types.d.ts +58 -0
  159. package/spreadsheet/plugin/plugin.types.d.ts.map +1 -0
  160. package/spreadsheet/plugin/selection-plugin.d.ts +28 -0
  161. package/spreadsheet/plugin/selection-plugin.d.ts.map +1 -0
  162. package/spreadsheet/plugin/sort-plugin.d.ts +18 -0
  163. package/spreadsheet/plugin/sort-plugin.d.ts.map +1 -0
  164. package/spreadsheet/plugin/undo-plugin.d.ts +40 -0
  165. package/spreadsheet/plugin/undo-plugin.d.ts.map +1 -0
  166. package/spreadsheet/plugin/validation-plugin.d.ts +29 -0
  167. package/spreadsheet/plugin/validation-plugin.d.ts.map +1 -0
  168. package/spreadsheet/spreadsheet-engine.d.ts +194 -0
  169. package/spreadsheet/spreadsheet-engine.d.ts.map +1 -0
  170. package/spreadsheet/utils/cell-utils.d.ts +26 -0
  171. package/spreadsheet/utils/cell-utils.d.ts.map +1 -0
  172. package/spreadsheet/utils/index.d.ts +2 -0
  173. package/spreadsheet/utils/index.d.ts.map +1 -0
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zcHJlYWRzaGVldC9wbHVnaW4vY2xpcGJvYXJkLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUE1QjtRQUNXLFNBQUksR0FBRyxXQUFXLENBQUM7UUFDbkIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVmLFlBQU8sR0FBNkIsSUFBSSxDQUFDO1FBQ3pDLGNBQVMsR0FBNEQsSUFBSSxDQUFDO0lBdUtwRixDQUFDO0lBcktDLE1BQU0sQ0FBQyxNQUF5QjtRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSztZQUFFLE9BQU87UUFFdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUNuQixHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQ25CLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFDakIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNsQixDQUFDO1FBQ0YsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsS0FBSyxDQUFDLEdBQUc7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUV2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVoRSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDVixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdkYsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxLQUFLLENBQUMsS0FBSztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUV4QixJQUFJLElBQVksQ0FBQztRQUNqQixJQUFJLENBQUM7WUFDSCxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUVsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBRWhDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxNQUFNLFNBQVMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE1BQU07WUFFcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxTQUFTLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU07b0JBQUUsTUFBTTtnQkFFcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDNUIsTUFBTSxLQUFLLEdBQWMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2xELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRzt3QkFDaEIsR0FBRyxPQUFPO3dCQUNWLEtBQUssRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO3FCQUNsRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLHFCQUFxQjtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUV2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVoRSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLEtBQUssSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRzt3QkFDUixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ1YsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFO3FCQUN4RixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sZUFBZSxDQUNyQixRQUFnQixFQUNoQixRQUFnQixFQUNoQixNQUFjLEVBQ2QsTUFBYztRQUVkLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztZQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEQsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTyxlQUFlLENBQUMsSUFBWTtRQUNsQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUM1QixFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7UUFDMUIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEdBQVc7SUFDdEMsSUFBSSxHQUFHLEtBQUssRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzVCLElBQUksR0FBRyxLQUFLLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQztJQUNoQyxJQUFJLEdBQUcsS0FBSyxPQUFPO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDbEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLEVBQUU7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUMxQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNwcmVhZHNoZWV0UGx1Z2luIH0gZnJvbSAnLi9wbHVnaW4udHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBTcHJlYWRzaGVldEVuZ2luZSB9IGZyb20gJy4uL3NwcmVhZHNoZWV0LWVuZ2luZSc7XG5pbXBvcnQgdHlwZSB7IENlbGxWYWx1ZSB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8qKlxuICogQ2xpcGJvYXJkUGx1Z2luIGhhbmRsZXMgY29weS9wYXN0ZS9jdXQgb3BlcmF0aW9ucy5cbiAqIFJlYWRzIGZyb20gYW5kIHdyaXRlcyB0byB0aGUgc3lzdGVtIGNsaXBib2FyZCB2aWEgdGhlIENsaXBib2FyZCBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGlwYm9hcmRQbHVnaW4gaW1wbGVtZW50cyBTcHJlYWRzaGVldFBsdWdpbiB7XG4gIHJlYWRvbmx5IG5hbWUgPSAnY2xpcGJvYXJkJztcbiAgcmVhZG9ubHkgcHJpb3JpdHkgPSAzMDtcblxuICBwcml2YXRlIF9lbmdpbmU6IFNwcmVhZHNoZWV0RW5naW5lIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2N1dENlbGxzOiB7IHJvdzogbnVtYmVyOyBjb2w6IG51bWJlcjsgdmFsdWU6IENlbGxWYWx1ZSB9W10gfCBudWxsID0gbnVsbDtcblxuICBvbkluaXQoZW5naW5lOiBTcHJlYWRzaGVldEVuZ2luZSk6IHZvaWQge1xuICAgIHRoaXMuX2VuZ2luZSA9IGVuZ2luZTtcbiAgfVxuXG4gIC8qKiBDb3B5IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB0byB0aGUgY2xpcGJvYXJkLiAqL1xuICBhc3luYyBjb3B5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fZW5naW5lKSByZXR1cm47XG4gICAgY29uc3Qgc2VsID0gdGhpcy5fZW5naW5lLnNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsLnJhbmdlKSByZXR1cm47XG5cbiAgICBjb25zdCB0c3YgPSB0aGlzLl9zZWxlY3Rpb25Ub1RzdihcbiAgICAgIHNlbC5yYW5nZS5zdGFydC5yb3csXG4gICAgICBzZWwucmFuZ2Uuc3RhcnQuY29sLFxuICAgICAgc2VsLnJhbmdlLmVuZC5yb3csXG4gICAgICBzZWwucmFuZ2UuZW5kLmNvbCxcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0c3YpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbGJhY2s6IHVzZSBhIHRlbXBvcmFyeSB0ZXh0YXJlYVxuICAgICAgdGhpcy5fY29weVRvVGV4dGFyZWEodHN2KTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3V0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiAoY29weSArIGNsZWFyKS4gKi9cbiAgYXN5bmMgY3V0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fZW5naW5lKSByZXR1cm47XG4gICAgY29uc3Qgc2VsID0gdGhpcy5fZW5naW5lLnNlbGVjdGlvbigpO1xuICAgIGlmICghc2VsLnJhbmdlKSByZXR1cm47XG5cbiAgICBjb25zdCBzdGFydFJvdyA9IE1hdGgubWluKHNlbC5yYW5nZS5zdGFydC5yb3csIHNlbC5yYW5nZS5lbmQucm93KTtcbiAgICBjb25zdCBzdGFydENvbCA9IE1hdGgubWluKHNlbC5yYW5nZS5zdGFydC5jb2wsIHNlbC5yYW5nZS5lbmQuY29sKTtcbiAgICBjb25zdCBlbmRSb3cgPSBNYXRoLm1heChzZWwucmFuZ2Uuc3RhcnQucm93LCBzZWwucmFuZ2UuZW5kLnJvdyk7XG4gICAgY29uc3QgZW5kQ29sID0gTWF0aC5tYXgoc2VsLnJhbmdlLnN0YXJ0LmNvbCwgc2VsLnJhbmdlLmVuZC5jb2wpO1xuXG4gICAgdGhpcy5fY3V0Q2VsbHMgPSBbXTtcbiAgICBjb25zdCByb3dzID0gWy4uLnRoaXMuX2VuZ2luZS5yb3dEYXRhKCldO1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLl9lbmdpbmUuY29sdW1uRGVmcygpO1xuXG4gICAgZm9yIChsZXQgciA9IHN0YXJ0Um93OyByIDw9IGVuZFJvdzsgcisrKSB7XG4gICAgICBmb3IgKGxldCBjID0gc3RhcnRDb2w7IGMgPD0gZW5kQ29sOyBjKyspIHtcbiAgICAgICAgY29uc3QgY29sSWQgPSBjb2xzW2NdPy5pZDtcbiAgICAgICAgaWYgKGNvbElkKSB7XG4gICAgICAgICAgdGhpcy5fY3V0Q2VsbHMucHVzaCh7IHJvdzogciwgY29sOiBjLCB2YWx1ZTogcm93c1tyXT8uY2VsbHNbY29sSWRdPy52YWx1ZSA/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2Nkay9zcHJlYWRzaGVldC9wbHVnaW4vZmlsdGVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUF6QjtRQUNXLFNBQUksR0FBRyxRQUFRLENBQUM7UUFDaEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVmLFlBQU8sR0FBNkIsSUFBSSxDQUFDO1FBQ3pDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQztJQXdDaEQsQ0FBQztJQXRDQyxNQUFNLENBQUMsTUFBeUI7UUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixXQUFXLENBQUMsUUFBb0MsRUFBRSxJQUFrQjtRQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQzFCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ2xELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FB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Q0FBQztRQUNELEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNWLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELEtBQUssT0FBTztZQUNWLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixLQUFLLFVBQVU7WUFDYixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEI7WUFDRSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3ByZWFkc2hlZXRQbHVnaW4gfSBmcm9tICcuL3BsdWdpbi50eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNwcmVhZHNoZWV0RW5naW5lIH0gZnJvbSAnLi4vc3ByZWFkc2hlZXQtZW5naW5lJztcbmltcG9ydCB0eXBlIHsgRmlsdGVyQ3JpdGVyaW9uLCBSb3dEZWYgfSBmcm9tICcuLi9tb2RlbHMnO1xuXG4vKipcbiAqIEZpbHRlclBsdWdpbiBhcHBsaWVzIGNvbHVtbi1sZXZlbCBmaWx0ZXJzIHRvIHRoZSByb3cgc2V0LlxuICogU3RvcmVzIG9yaWdpbmFsIHJvd3MgYW5kIHJlc3RvcmVzIG9uIGNsZWFyLlxuICovXG5leHBvcnQgY2xhc3MgRmlsdGVyUGx1Z2luIGltcGxlbWVudHMgU3ByZWFkc2hlZXRQbHVnaW4ge1xuICByZWFkb25seSBuYW1lID0gJ2ZpbHRlcic7XG4gIHJlYWRvbmx5IHByaW9yaXR5ID0gMjA7XG5cbiAgcHJpdmF0ZSBfZW5naW5lOiBTcHJlYWRzaGVldEVuZ2luZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9vcmlnaW5hbFJvd3M6IHJlYWRvbmx5IFJvd0RlZltdID0gW107XG5cbiAgb25Jbml0KGVuZ2luZTogU3ByZWFkc2hlZXRFbmdpbmUpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmdpbmUgPSBlbmdpbmU7XG4gICAgdGhpcy5fb3JpZ2luYWxSb3dzID0gZW5naW5lLnJvd0RhdGEoKTtcbiAgfVxuXG4gIC8qKiBBcHBseSBmaWx0ZXIgY3JpdGVyaWEuICovXG4gIGFwcGx5RmlsdGVyKGNyaXRlcmlhOiByZWFkb25seSBGaWx0ZXJDcml0ZXJpb25bXSwgbW9kZTogJ2FuZCcgfCAnb3InKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lbmdpbmUpIHJldHVybjtcbiAgICBpZiAoY3JpdGVyaWEubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9lbmdpbmUucm93RGF0YS5zZXQoWy4uLnRoaXMuX29yaWdpbmFsUm93c10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29yaWdpbmFsUm93cyA9IHRoaXMuX2VuZ2luZS5yb3dEYXRhKCk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLl9vcmlnaW5hbFJvd3MuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBjcml0ZXJpYS5tYXAoKGMpID0+IG1hdGNoZXNDcml0ZXJpb24ocm93LmNlbGxzW2MuY29sSWRdPy52YWx1ZSwgYykpO1xuICAgICAgcmV0dXJuIG1vZGUgPT09ICdhbmQnID8gcmVzdWx0cy5ldmVyeShCb29sZWFuKSA6IHJlc3VsdHMuc29tZShCb29sZWFuKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2VuZ2luZS5yb3dEYXRhLnNldChmaWx0ZXJlZCk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIGZpbHRlcnMgYW5kIHJlc3RvcmUgb3JpZ2luYWwgcm93cy4gKi9cbiAgY2xlYXJGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lbmdpbmUpIHJldHVybjtcbiAgICB0aGlzLl9lbmdpbmUucm93RGF0YS5zZXQoWy4uLnRoaXMuX29yaWdpbmFsUm93c10pO1xuICB9XG5cbiAgb25CZWZvcmVGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvbkFmdGVyRmlsdGVyKCk6IHZvaWQge1xuICAgIC8vIFN5bmMgb3JpZ2luYWwgcm93cyB3aGVuIGRhdGEgY2hhbmdlcyBleHRlcm5hbGx5XG4gICAgaWYgKHRoaXMuX2VuZ2luZSkge1xuICAgICAgdGhpcy5fb3JpZ2luYWxSb3dzID0gdGhpcy5fZW5naW5lLnJvd0RhdGEoKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hlc0NyaXRlcmlvbih2YWx1ZTogdW5rbm93biwgY3JpdGVyaW9uOiBGaWx0ZXJDcml0ZXJpb24pOiBib29sZWFuIHtcbiAgY29uc3QgdiA9IHZhbHVlID09IG51bGwgPyAnJyA6IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgYyA9IGNyaXRlcmlvbi52YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcoY3JpdGVyaW9uLnZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuXG4gIHN3aXRjaCAoY3JpdGVyaW9uLm9wZXJhdG9yKSB7XG4gICAgY2FzZSAnZXF1YWxzJzpcbiAgICAgIHJldHVybiB2ID09PSBjO1xuICAgIGNhc2UgJ25vdEVxdWFscyc6XG4gICAgICByZXR1cm4gdiAhPT0gYztcbiAgICBjYXNlICdjb250YWlucyc6XG4gICAgICByZXR1cm4gdi5pbmNsdWRlcyhjKTtcbiAgICBjYXNlICdub3RDb250YWlucyc6XG4gICAgICByZXR1cm4gIXYuaW5jbHVkZXMoYyk7XG4gICAgY2FzZSAnc3RhcnRzV2l0aCc6XG4gICAgICByZXR1cm4gdi5zdGFydHNXaXRoKGMpO1xuICAgIGNhc2UgJ2VuZHNXaXRoJzpcbiAgICAgIHJldHVybiB2LmVuZHNXaXRoKGMpO1xuICAgIGNhc2UgJ2d0JzpcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpID4gTnVtYmVyKGNyaXRlcmlvbi52YWx1ZSk7XG4gICAgY2FzZSAnZ3RlJzpcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpID49IE51bWJlcihjcml0ZXJpb24udmFsdWUpO1xuICAgIGNhc2UgJ2x0JzpcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIDwgTnVtYmVyKGNyaXRlcmlvbi52YWx1ZSk7XG4gICAgY2FzZSAnbHRlJzpcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpIDw9IE51bWJlcihjcml0ZXJpb24udmFsdWUpO1xuICAgIGNhc2UgJ2JldHdlZW4nOiB7XG4gICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgcmV0dXJuIG51bSA+PSBOdW1iZXIoY3JpdGVyaW9uLnZhbHVlKSAmJiBudW0gPD0gTnVtYmVyKGNyaXRlcmlvbi52YWx1ZVRvKTtcbiAgICB9XG4gICAgY2FzZSAnaW4nOiB7XG4gICAgICBjb25zdCBhcnIgPSBBcnJheS5pc0FycmF5KGNyaXRlcmlvbi52YWx1ZSkgPyBjcml0ZXJpb24udmFsdWUgOiBbXTtcbiAgICAgIHJldHVybiBhcnIuc29tZSgoaXRlbSkgPT4gU3RyaW5nKGl0ZW0pLnRvTG93ZXJDYXNlKCkgPT09IHYpO1xuICAgIH1cbiAgICBjYXNlICdlbXB0eSc6XG4gICAgICByZXR1cm4gdiA9PT0gJyc7XG4gICAgY2FzZSAnbm90RW1wdHknOlxuICAgICAgcmV0dXJuIHYgIT09ICcnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19