@keenthemes/ktui 1.0.29 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ktui.js +3942 -8634
- package/dist/ktui.min.js +1 -1
- package/dist/ktui.min.js.map +1 -1
- package/dist/styles.css +0 -196
- package/lib/cjs/components/datatable/__tests__/pagination-reset.test.js +596 -0
- package/lib/cjs/components/datatable/__tests__/pagination-reset.test.js.map +1 -0
- package/lib/cjs/components/datatable/__tests__/race-conditions.test.js +548 -0
- package/lib/cjs/components/datatable/__tests__/race-conditions.test.js.map +1 -0
- package/lib/cjs/components/datatable/__tests__/setup.js +63 -0
- package/lib/cjs/components/datatable/__tests__/setup.js.map +1 -0
- package/lib/cjs/components/datatable/datatable.js +92 -30
- package/lib/cjs/components/datatable/datatable.js.map +1 -1
- package/lib/cjs/index.js +1 -5
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/components/datatable/__tests__/pagination-reset.test.js +594 -0
- package/lib/esm/components/datatable/__tests__/pagination-reset.test.js.map +1 -0
- package/lib/esm/components/datatable/__tests__/race-conditions.test.js +546 -0
- package/lib/esm/components/datatable/__tests__/race-conditions.test.js.map +1 -0
- package/lib/esm/components/datatable/__tests__/setup.js +58 -0
- package/lib/esm/components/datatable/__tests__/setup.js.map +1 -0
- package/lib/esm/components/datatable/datatable.js +92 -30
- package/lib/esm/components/datatable/datatable.js.map +1 -1
- package/lib/esm/index.js +0 -3
- package/lib/esm/index.js.map +1 -1
- package/package.json +9 -2
- package/src/components/datatable/__tests__/pagination-reset.test.ts +657 -0
- package/src/components/datatable/__tests__/race-conditions.test.ts +455 -0
- package/src/components/datatable/__tests__/setup.ts +67 -0
- package/src/components/datatable/datatable.ts +66 -11
- package/src/components/input/input.css +0 -1
- package/src/components/select/select.css +0 -1
- package/src/components/textarea/textarea.css +0 -1
- package/src/index.ts +0 -4
- package/styles.css +0 -1
- package/lib/cjs/components/datepicker/calendar.js +0 -1061
- package/lib/cjs/components/datepicker/calendar.js.map +0 -1
- package/lib/cjs/components/datepicker/config.js +0 -332
- package/lib/cjs/components/datepicker/config.js.map +0 -1
- package/lib/cjs/components/datepicker/datepicker.js +0 -949
- package/lib/cjs/components/datepicker/datepicker.js.map +0 -1
- package/lib/cjs/components/datepicker/dropdown.js +0 -635
- package/lib/cjs/components/datepicker/dropdown.js.map +0 -1
- package/lib/cjs/components/datepicker/events.js +0 -129
- package/lib/cjs/components/datepicker/events.js.map +0 -1
- package/lib/cjs/components/datepicker/index.js +0 -13
- package/lib/cjs/components/datepicker/index.js.map +0 -1
- package/lib/cjs/components/datepicker/keyboard.js +0 -536
- package/lib/cjs/components/datepicker/keyboard.js.map +0 -1
- package/lib/cjs/components/datepicker/locales.js +0 -78
- package/lib/cjs/components/datepicker/locales.js.map +0 -1
- package/lib/cjs/components/datepicker/templates.js +0 -403
- package/lib/cjs/components/datepicker/templates.js.map +0 -1
- package/lib/cjs/components/datepicker/types.js +0 -23
- package/lib/cjs/components/datepicker/types.js.map +0 -1
- package/lib/cjs/components/datepicker/utils.js +0 -524
- package/lib/cjs/components/datepicker/utils.js.map +0 -1
- package/lib/esm/components/datepicker/calendar.js +0 -1058
- package/lib/esm/components/datepicker/calendar.js.map +0 -1
- package/lib/esm/components/datepicker/config.js +0 -329
- package/lib/esm/components/datepicker/config.js.map +0 -1
- package/lib/esm/components/datepicker/datepicker.js +0 -946
- package/lib/esm/components/datepicker/datepicker.js.map +0 -1
- package/lib/esm/components/datepicker/dropdown.js +0 -632
- package/lib/esm/components/datepicker/dropdown.js.map +0 -1
- package/lib/esm/components/datepicker/events.js +0 -126
- package/lib/esm/components/datepicker/events.js.map +0 -1
- package/lib/esm/components/datepicker/index.js +0 -9
- package/lib/esm/components/datepicker/index.js.map +0 -1
- package/lib/esm/components/datepicker/keyboard.js +0 -533
- package/lib/esm/components/datepicker/keyboard.js.map +0 -1
- package/lib/esm/components/datepicker/locales.js +0 -74
- package/lib/esm/components/datepicker/locales.js.map +0 -1
- package/lib/esm/components/datepicker/templates.js +0 -390
- package/lib/esm/components/datepicker/templates.js.map +0 -1
- package/lib/esm/components/datepicker/types.js +0 -20
- package/lib/esm/components/datepicker/types.js.map +0 -1
- package/lib/esm/components/datepicker/utils.js +0 -508
- package/lib/esm/components/datepicker/utils.js.map +0 -1
- package/src/components/datepicker/calendar.ts +0 -1397
- package/src/components/datepicker/config.ts +0 -368
- package/src/components/datepicker/datepicker.css +0 -7
- package/src/components/datepicker/datepicker.ts +0 -1287
- package/src/components/datepicker/dropdown.ts +0 -757
- package/src/components/datepicker/events.ts +0 -149
- package/src/components/datepicker/index.ts +0 -10
- package/src/components/datepicker/keyboard.ts +0 -646
- package/src/components/datepicker/locales.ts +0 -80
- package/src/components/datepicker/templates.ts +0 -792
- package/src/components/datepicker/types.ts +0 -154
- package/src/components/datepicker/utils.ts +0 -631
|
@@ -0,0 +1,594 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pagination-reset.test.ts
|
|
3
|
+
* Tests for datatable pagination reset behavior on search and filter operations
|
|
4
|
+
*
|
|
5
|
+
* Spec: openspec/changes/fix-datatable-pagination-reset
|
|
6
|
+
* Requirement: Pagination Reset on Search and Filter
|
|
7
|
+
*/
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
18
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
19
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
20
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
21
|
+
function step(op) {
|
|
22
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
23
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
24
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
25
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
26
|
+
switch (op[0]) {
|
|
27
|
+
case 0: case 1: t = op; break;
|
|
28
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
29
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
30
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
31
|
+
default:
|
|
32
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
33
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
34
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
35
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
36
|
+
if (t[2]) _.ops.pop();
|
|
37
|
+
_.trys.pop(); continue;
|
|
38
|
+
}
|
|
39
|
+
op = body.call(thisArg, _);
|
|
40
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
41
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
45
|
+
import { KTDataTable } from '../datatable';
|
|
46
|
+
describe('KTDataTable - Pagination Reset', function () {
|
|
47
|
+
var container;
|
|
48
|
+
var tableElement;
|
|
49
|
+
var datatable;
|
|
50
|
+
/**
|
|
51
|
+
* Helper: Create a mock datatable with sample data
|
|
52
|
+
*/
|
|
53
|
+
var createMockDataTable = function (recordCount) {
|
|
54
|
+
if (recordCount === void 0) { recordCount = 25; }
|
|
55
|
+
container = document.createElement('div');
|
|
56
|
+
container.id = 'test-datatable-container';
|
|
57
|
+
// Create table structure
|
|
58
|
+
tableElement = document.createElement('table');
|
|
59
|
+
tableElement.setAttribute('data-kt-datatable-table', 'true');
|
|
60
|
+
tableElement.id = 'test-table';
|
|
61
|
+
var thead = document.createElement('thead');
|
|
62
|
+
var headerRow = document.createElement('tr');
|
|
63
|
+
var th1 = document.createElement('th');
|
|
64
|
+
th1.setAttribute('data-kt-datatable-column', 'id');
|
|
65
|
+
th1.textContent = 'ID';
|
|
66
|
+
var th2 = document.createElement('th');
|
|
67
|
+
th2.setAttribute('data-kt-datatable-column', 'name');
|
|
68
|
+
th2.textContent = 'Name';
|
|
69
|
+
var th3 = document.createElement('th');
|
|
70
|
+
th3.setAttribute('data-kt-datatable-column', 'status');
|
|
71
|
+
th3.textContent = 'Status';
|
|
72
|
+
headerRow.appendChild(th1);
|
|
73
|
+
headerRow.appendChild(th2);
|
|
74
|
+
headerRow.appendChild(th3);
|
|
75
|
+
thead.appendChild(headerRow);
|
|
76
|
+
tableElement.appendChild(thead);
|
|
77
|
+
// Create tbody with sample data
|
|
78
|
+
var tbody = document.createElement('tbody');
|
|
79
|
+
for (var i = 1; i <= recordCount; i++) {
|
|
80
|
+
var row = document.createElement('tr');
|
|
81
|
+
var td1 = document.createElement('td');
|
|
82
|
+
td1.textContent = String(i);
|
|
83
|
+
var td2 = document.createElement('td');
|
|
84
|
+
td2.textContent = "User ".concat(i);
|
|
85
|
+
var td3 = document.createElement('td');
|
|
86
|
+
td3.textContent = i % 2 === 0 ? 'active' : 'inactive';
|
|
87
|
+
row.appendChild(td1);
|
|
88
|
+
row.appendChild(td2);
|
|
89
|
+
row.appendChild(td3);
|
|
90
|
+
tbody.appendChild(row);
|
|
91
|
+
}
|
|
92
|
+
tableElement.appendChild(tbody);
|
|
93
|
+
// Create pagination info element
|
|
94
|
+
var infoElement = document.createElement('div');
|
|
95
|
+
infoElement.setAttribute('data-kt-datatable-info', 'true');
|
|
96
|
+
// Create page size selector
|
|
97
|
+
var sizeElement = document.createElement('select');
|
|
98
|
+
sizeElement.setAttribute('data-kt-datatable-size', 'true');
|
|
99
|
+
// Create pagination container
|
|
100
|
+
var paginationElement = document.createElement('div');
|
|
101
|
+
paginationElement.setAttribute('data-kt-datatable-pagination', 'true');
|
|
102
|
+
container.appendChild(tableElement);
|
|
103
|
+
container.appendChild(infoElement);
|
|
104
|
+
container.appendChild(sizeElement);
|
|
105
|
+
container.appendChild(paginationElement);
|
|
106
|
+
document.body.appendChild(container);
|
|
107
|
+
return {
|
|
108
|
+
container: container,
|
|
109
|
+
tableElement: tableElement,
|
|
110
|
+
infoElement: infoElement,
|
|
111
|
+
sizeElement: sizeElement,
|
|
112
|
+
paginationElement: paginationElement,
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
beforeEach(function () {
|
|
116
|
+
// Clear any existing elements
|
|
117
|
+
document.body.innerHTML = '';
|
|
118
|
+
vi.clearAllMocks();
|
|
119
|
+
});
|
|
120
|
+
describe('Scenario: Pagination resets when search is performed', function () {
|
|
121
|
+
it('should reset to page 1 when search is called from page 2+', function () {
|
|
122
|
+
// Setup: Create datatable with 25 records (page size 10 = 3 pages)
|
|
123
|
+
var container = createMockDataTable(25).container;
|
|
124
|
+
datatable = new KTDataTable(container, {
|
|
125
|
+
pageSize: 10,
|
|
126
|
+
stateSave: false,
|
|
127
|
+
});
|
|
128
|
+
// Navigate to page 2
|
|
129
|
+
datatable.goPage(2);
|
|
130
|
+
expect(datatable.getState().page).toBe(2);
|
|
131
|
+
// Perform search
|
|
132
|
+
datatable.search('User 5');
|
|
133
|
+
// Assert: Pagination should reset to page 1
|
|
134
|
+
expect(datatable.getState().page).toBe(1);
|
|
135
|
+
});
|
|
136
|
+
it('should reset to page 1 from page 3 when searching', function () {
|
|
137
|
+
var container = createMockDataTable(35).container;
|
|
138
|
+
datatable = new KTDataTable(container, {
|
|
139
|
+
pageSize: 10,
|
|
140
|
+
stateSave: false,
|
|
141
|
+
});
|
|
142
|
+
// Navigate to page 3
|
|
143
|
+
datatable.goPage(3);
|
|
144
|
+
expect(datatable.getState().page).toBe(3);
|
|
145
|
+
// Perform search
|
|
146
|
+
datatable.search('test query');
|
|
147
|
+
// Assert
|
|
148
|
+
expect(datatable.getState().page).toBe(1);
|
|
149
|
+
});
|
|
150
|
+
it('should reset page even when search yields no results', function () {
|
|
151
|
+
var container = createMockDataTable(25).container;
|
|
152
|
+
datatable = new KTDataTable(container, {
|
|
153
|
+
pageSize: 10,
|
|
154
|
+
stateSave: false,
|
|
155
|
+
});
|
|
156
|
+
datatable.goPage(2);
|
|
157
|
+
// Search for something that doesn't exist
|
|
158
|
+
datatable.search('NonExistentUser999');
|
|
159
|
+
expect(datatable.getState().page).toBe(1);
|
|
160
|
+
});
|
|
161
|
+
it('should reset page on empty search query', function () {
|
|
162
|
+
var container = createMockDataTable(25).container;
|
|
163
|
+
datatable = new KTDataTable(container, {
|
|
164
|
+
pageSize: 10,
|
|
165
|
+
stateSave: false,
|
|
166
|
+
});
|
|
167
|
+
datatable.goPage(2);
|
|
168
|
+
datatable.search('');
|
|
169
|
+
expect(datatable.getState().page).toBe(1);
|
|
170
|
+
});
|
|
171
|
+
it('should reset page when searching with object query', function () {
|
|
172
|
+
var container = createMockDataTable(25).container;
|
|
173
|
+
datatable = new KTDataTable(container, {
|
|
174
|
+
pageSize: 10,
|
|
175
|
+
stateSave: false,
|
|
176
|
+
// Provide custom search callback that handles objects
|
|
177
|
+
search: {
|
|
178
|
+
delay: 500,
|
|
179
|
+
callback: function (data, search) {
|
|
180
|
+
if (!search)
|
|
181
|
+
return data;
|
|
182
|
+
// For object search, just return all data (simplified for test)
|
|
183
|
+
if (typeof search === 'object')
|
|
184
|
+
return data;
|
|
185
|
+
// String search
|
|
186
|
+
return data.filter(function (item) {
|
|
187
|
+
return Object.values(item).some(function (value) {
|
|
188
|
+
return String(value).toLowerCase().includes(search.toLowerCase());
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
datatable.goPage(2);
|
|
195
|
+
// Search with object (for complex queries)
|
|
196
|
+
datatable.search({ name: 'User', status: 'active' });
|
|
197
|
+
expect(datatable.getState().page).toBe(1);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
describe('Scenario: Pagination resets when filter is applied', function () {
|
|
201
|
+
it('should reset to page 1 when setFilter is called from page 2+', function () {
|
|
202
|
+
var container = createMockDataTable(25).container;
|
|
203
|
+
datatable = new KTDataTable(container, {
|
|
204
|
+
pageSize: 10,
|
|
205
|
+
stateSave: false,
|
|
206
|
+
});
|
|
207
|
+
// Navigate to page 2
|
|
208
|
+
datatable.goPage(2);
|
|
209
|
+
expect(datatable.getState().page).toBe(2);
|
|
210
|
+
// Apply filter
|
|
211
|
+
var filter = {
|
|
212
|
+
column: 'status',
|
|
213
|
+
type: 'text',
|
|
214
|
+
value: 'active',
|
|
215
|
+
};
|
|
216
|
+
datatable.setFilter(filter);
|
|
217
|
+
// Assert: Pagination should reset to page 1
|
|
218
|
+
expect(datatable.getState().page).toBe(1);
|
|
219
|
+
});
|
|
220
|
+
it('should reset to page 1 from any page when filtering', function () {
|
|
221
|
+
var container = createMockDataTable(50).container;
|
|
222
|
+
datatable = new KTDataTable(container, {
|
|
223
|
+
pageSize: 10,
|
|
224
|
+
stateSave: false,
|
|
225
|
+
});
|
|
226
|
+
// Navigate to page 5
|
|
227
|
+
datatable.goPage(5);
|
|
228
|
+
expect(datatable.getState().page).toBe(5);
|
|
229
|
+
// Apply filter
|
|
230
|
+
datatable.setFilter({
|
|
231
|
+
column: 'name',
|
|
232
|
+
type: 'text',
|
|
233
|
+
value: 'User 1',
|
|
234
|
+
});
|
|
235
|
+
expect(datatable.getState().page).toBe(1);
|
|
236
|
+
});
|
|
237
|
+
it('should reset page for numeric filter', function () {
|
|
238
|
+
var container = createMockDataTable(30).container;
|
|
239
|
+
datatable = new KTDataTable(container, {
|
|
240
|
+
pageSize: 10,
|
|
241
|
+
stateSave: false,
|
|
242
|
+
});
|
|
243
|
+
datatable.goPage(3);
|
|
244
|
+
datatable.setFilter({
|
|
245
|
+
column: 'id',
|
|
246
|
+
type: 'numeric',
|
|
247
|
+
value: '5',
|
|
248
|
+
});
|
|
249
|
+
expect(datatable.getState().page).toBe(1);
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
describe('Scenario: Multiple filters can be chained before reload', function () {
|
|
253
|
+
it('should reset page once when chaining multiple setFilter calls', function () {
|
|
254
|
+
var container = createMockDataTable(30).container;
|
|
255
|
+
datatable = new KTDataTable(container, {
|
|
256
|
+
pageSize: 10,
|
|
257
|
+
stateSave: false,
|
|
258
|
+
});
|
|
259
|
+
datatable.goPage(3);
|
|
260
|
+
expect(datatable.getState().page).toBe(3);
|
|
261
|
+
// Chain multiple filters
|
|
262
|
+
datatable
|
|
263
|
+
.setFilter({ column: 'status', type: 'text', value: 'active' })
|
|
264
|
+
.setFilter({ column: 'name', type: 'text', value: 'User' });
|
|
265
|
+
// Page should be reset to 1 after first filter
|
|
266
|
+
expect(datatable.getState().page).toBe(1);
|
|
267
|
+
// Verify both filters are applied
|
|
268
|
+
var filters = datatable.getState().filters;
|
|
269
|
+
expect(filters).toHaveLength(2);
|
|
270
|
+
expect(filters[0].column).toBe('status');
|
|
271
|
+
expect(filters[1].column).toBe('name');
|
|
272
|
+
});
|
|
273
|
+
it('should maintain page 1 through multiple filter operations', function () {
|
|
274
|
+
var container = createMockDataTable(40).container;
|
|
275
|
+
datatable = new KTDataTable(container, {
|
|
276
|
+
pageSize: 10,
|
|
277
|
+
stateSave: false,
|
|
278
|
+
});
|
|
279
|
+
datatable.goPage(4);
|
|
280
|
+
// Apply first filter
|
|
281
|
+
datatable.setFilter({ column: 'status', type: 'text', value: 'active' });
|
|
282
|
+
expect(datatable.getState().page).toBe(1);
|
|
283
|
+
// Apply second filter (page should stay at 1)
|
|
284
|
+
datatable.setFilter({ column: 'name', type: 'text', value: 'John' });
|
|
285
|
+
expect(datatable.getState().page).toBe(1);
|
|
286
|
+
// Apply third filter (page should stay at 1)
|
|
287
|
+
datatable.setFilter({ column: 'id', type: 'numeric', value: '10' });
|
|
288
|
+
expect(datatable.getState().page).toBe(1);
|
|
289
|
+
});
|
|
290
|
+
it('should allow filter replacement on same column', function () {
|
|
291
|
+
var container = createMockDataTable(30).container;
|
|
292
|
+
datatable = new KTDataTable(container, {
|
|
293
|
+
pageSize: 10,
|
|
294
|
+
stateSave: false,
|
|
295
|
+
});
|
|
296
|
+
datatable.goPage(2);
|
|
297
|
+
// Apply filter on 'status'
|
|
298
|
+
datatable.setFilter({ column: 'status', type: 'text', value: 'active' });
|
|
299
|
+
expect(datatable.getState().page).toBe(1);
|
|
300
|
+
// Replace filter on same column
|
|
301
|
+
datatable.setFilter({ column: 'status', type: 'text', value: 'inactive' });
|
|
302
|
+
expect(datatable.getState().page).toBe(1);
|
|
303
|
+
// Should only have one filter for 'status' column
|
|
304
|
+
var filters = datatable.getState().filters;
|
|
305
|
+
var statusFilters = filters.filter(function (f) { return f.column === 'status'; });
|
|
306
|
+
expect(statusFilters).toHaveLength(1);
|
|
307
|
+
expect(statusFilters[0].value).toBe('inactive');
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
describe('Scenario: Pagination reset aligns with page size behavior', function () {
|
|
311
|
+
it('should use same state update pattern as setPageSize', function () {
|
|
312
|
+
var container = createMockDataTable(30).container;
|
|
313
|
+
datatable = new KTDataTable(container, {
|
|
314
|
+
pageSize: 10,
|
|
315
|
+
stateSave: false,
|
|
316
|
+
});
|
|
317
|
+
// Navigate to page 2
|
|
318
|
+
datatable.goPage(2);
|
|
319
|
+
// Change page size (existing behavior)
|
|
320
|
+
datatable.setPageSize(20);
|
|
321
|
+
expect(datatable.getState().page).toBe(1);
|
|
322
|
+
// Navigate to page 2 again
|
|
323
|
+
datatable.goPage(2);
|
|
324
|
+
// Apply search (new behavior)
|
|
325
|
+
datatable.search('test');
|
|
326
|
+
expect(datatable.getState().page).toBe(1);
|
|
327
|
+
// Navigate to page 2 again
|
|
328
|
+
datatable.goPage(2);
|
|
329
|
+
// Apply filter (new behavior)
|
|
330
|
+
datatable.setFilter({ column: 'status', type: 'text', value: 'active' });
|
|
331
|
+
expect(datatable.getState().page).toBe(1);
|
|
332
|
+
});
|
|
333
|
+
it('should reset pagination for all data-modifying operations', function () {
|
|
334
|
+
var container = createMockDataTable(30).container;
|
|
335
|
+
datatable = new KTDataTable(container, {
|
|
336
|
+
pageSize: 10,
|
|
337
|
+
stateSave: false,
|
|
338
|
+
});
|
|
339
|
+
// Test 1: Page size change
|
|
340
|
+
datatable.goPage(3);
|
|
341
|
+
datatable.setPageSize(15);
|
|
342
|
+
expect(datatable.getState().page).toBe(1);
|
|
343
|
+
// Test 2: Search
|
|
344
|
+
datatable.goPage(3);
|
|
345
|
+
datatable.search('query');
|
|
346
|
+
expect(datatable.getState().page).toBe(1);
|
|
347
|
+
// Test 3: Filter
|
|
348
|
+
datatable.goPage(3);
|
|
349
|
+
datatable.setFilter({ column: 'name', type: 'text', value: 'test' });
|
|
350
|
+
expect(datatable.getState().page).toBe(1);
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
describe('Scenario: Empty search results display correctly', function () {
|
|
354
|
+
it('should show page 1 when search yields no results from page 2+', function () {
|
|
355
|
+
var container = createMockDataTable(25).container;
|
|
356
|
+
datatable = new KTDataTable(container, {
|
|
357
|
+
pageSize: 10,
|
|
358
|
+
stateSave: false,
|
|
359
|
+
});
|
|
360
|
+
datatable.goPage(2);
|
|
361
|
+
// Search for non-existent data
|
|
362
|
+
datatable.search('XYZ_NONEXISTENT_999');
|
|
363
|
+
expect(datatable.getState().page).toBe(1);
|
|
364
|
+
});
|
|
365
|
+
it('should maintain page 1 state after empty search', function () {
|
|
366
|
+
var container = createMockDataTable(25).container;
|
|
367
|
+
datatable = new KTDataTable(container, {
|
|
368
|
+
pageSize: 10,
|
|
369
|
+
stateSave: false,
|
|
370
|
+
});
|
|
371
|
+
datatable.goPage(3);
|
|
372
|
+
datatable.search('NonExistent');
|
|
373
|
+
// Page should be 1
|
|
374
|
+
expect(datatable.getState().page).toBe(1);
|
|
375
|
+
// Clear search
|
|
376
|
+
datatable.search('');
|
|
377
|
+
// Should still be on page 1
|
|
378
|
+
expect(datatable.getState().page).toBe(1);
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
describe('Scenario: State persistence respects pagination reset', function () {
|
|
382
|
+
it('should save page 1 to state when search resets pagination', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
383
|
+
var container, savedState, state;
|
|
384
|
+
return __generator(this, function (_a) {
|
|
385
|
+
switch (_a.label) {
|
|
386
|
+
case 0:
|
|
387
|
+
container = createMockDataTable(25).container;
|
|
388
|
+
// Enable state saving with unique namespace
|
|
389
|
+
datatable = new KTDataTable(container, {
|
|
390
|
+
pageSize: 10,
|
|
391
|
+
stateSave: true,
|
|
392
|
+
stateNamespace: 'test-datatable-search-reset',
|
|
393
|
+
});
|
|
394
|
+
// Wait for initial _updateData() to complete
|
|
395
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
396
|
+
case 1:
|
|
397
|
+
// Wait for initial _updateData() to complete
|
|
398
|
+
_a.sent();
|
|
399
|
+
datatable.goPage(2);
|
|
400
|
+
// Wait for goPage to complete
|
|
401
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
402
|
+
case 2:
|
|
403
|
+
// Wait for goPage to complete
|
|
404
|
+
_a.sent();
|
|
405
|
+
datatable.search('test query');
|
|
406
|
+
// Wait for async state save operations to complete
|
|
407
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
408
|
+
case 3:
|
|
409
|
+
// Wait for async state save operations to complete
|
|
410
|
+
_a.sent();
|
|
411
|
+
savedState = localStorage.getItem('test-datatable-search-reset');
|
|
412
|
+
expect(savedState).toBeTruthy();
|
|
413
|
+
if (savedState) {
|
|
414
|
+
state = JSON.parse(savedState);
|
|
415
|
+
expect(state.page).toBe(1);
|
|
416
|
+
expect(state.search).toBe('test query');
|
|
417
|
+
}
|
|
418
|
+
// Cleanup
|
|
419
|
+
localStorage.removeItem('test-datatable-search-reset');
|
|
420
|
+
return [2 /*return*/];
|
|
421
|
+
}
|
|
422
|
+
});
|
|
423
|
+
}); });
|
|
424
|
+
it('should save page 1 to state when filter resets pagination', function () {
|
|
425
|
+
var container = createMockDataTable(25).container;
|
|
426
|
+
datatable = new KTDataTable(container, {
|
|
427
|
+
pageSize: 10,
|
|
428
|
+
stateSave: true,
|
|
429
|
+
stateNamespace: 'test-datatable-filter-reset',
|
|
430
|
+
});
|
|
431
|
+
datatable.goPage(3);
|
|
432
|
+
datatable.setFilter({ column: 'status', type: 'text', value: 'active' });
|
|
433
|
+
// Trigger reload to save state
|
|
434
|
+
datatable.reload();
|
|
435
|
+
var savedState = localStorage.getItem('test-datatable-filter-reset');
|
|
436
|
+
expect(savedState).toBeTruthy();
|
|
437
|
+
if (savedState) {
|
|
438
|
+
var state = JSON.parse(savedState);
|
|
439
|
+
expect(state.page).toBe(1);
|
|
440
|
+
}
|
|
441
|
+
// Cleanup
|
|
442
|
+
localStorage.removeItem('test-datatable-filter-reset');
|
|
443
|
+
});
|
|
444
|
+
it('should restore to page 1 with active search on reload', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
445
|
+
var container, namespace, table1, newContainer, table2;
|
|
446
|
+
return __generator(this, function (_a) {
|
|
447
|
+
switch (_a.label) {
|
|
448
|
+
case 0:
|
|
449
|
+
container = createMockDataTable(25).container;
|
|
450
|
+
namespace = 'test-datatable-restore';
|
|
451
|
+
table1 = new KTDataTable(container, {
|
|
452
|
+
pageSize: 10,
|
|
453
|
+
stateSave: true,
|
|
454
|
+
stateNamespace: namespace,
|
|
455
|
+
});
|
|
456
|
+
// Wait for initial load
|
|
457
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
458
|
+
case 1:
|
|
459
|
+
// Wait for initial load
|
|
460
|
+
_a.sent();
|
|
461
|
+
table1.goPage(2);
|
|
462
|
+
// Wait for goPage to complete
|
|
463
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
464
|
+
case 2:
|
|
465
|
+
// Wait for goPage to complete
|
|
466
|
+
_a.sent();
|
|
467
|
+
table1.search('User 5');
|
|
468
|
+
// Wait for search and state save to complete
|
|
469
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
|
|
470
|
+
case 3:
|
|
471
|
+
// Wait for search and state save to complete
|
|
472
|
+
_a.sent();
|
|
473
|
+
// Destroy first instance
|
|
474
|
+
table1.dispose();
|
|
475
|
+
// Wait for cleanup to complete
|
|
476
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 50); })];
|
|
477
|
+
case 4:
|
|
478
|
+
// Wait for cleanup to complete
|
|
479
|
+
_a.sent();
|
|
480
|
+
document.body.innerHTML = '';
|
|
481
|
+
newContainer = createMockDataTable(25).container;
|
|
482
|
+
table2 = new KTDataTable(newContainer, {
|
|
483
|
+
pageSize: 10,
|
|
484
|
+
stateSave: true,
|
|
485
|
+
stateNamespace: namespace,
|
|
486
|
+
});
|
|
487
|
+
// Should restore to page 1 with search active
|
|
488
|
+
expect(table2.getState().page).toBe(1);
|
|
489
|
+
expect(table2.getState().search).toBe('User 5');
|
|
490
|
+
// Cleanup
|
|
491
|
+
localStorage.removeItem(namespace);
|
|
492
|
+
return [2 /*return*/];
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
}); });
|
|
496
|
+
});
|
|
497
|
+
describe('Edge Cases', function () {
|
|
498
|
+
it('should handle search reset on page 1 (no-op)', function () {
|
|
499
|
+
var container = createMockDataTable(25).container;
|
|
500
|
+
datatable = new KTDataTable(container, {
|
|
501
|
+
pageSize: 10,
|
|
502
|
+
stateSave: false,
|
|
503
|
+
});
|
|
504
|
+
// Already on page 1
|
|
505
|
+
expect(datatable.getState().page).toBe(1);
|
|
506
|
+
datatable.search('test');
|
|
507
|
+
// Should still be on page 1
|
|
508
|
+
expect(datatable.getState().page).toBe(1);
|
|
509
|
+
});
|
|
510
|
+
it('should handle filter reset on page 1 (no-op)', function () {
|
|
511
|
+
var container = createMockDataTable(25).container;
|
|
512
|
+
datatable = new KTDataTable(container, {
|
|
513
|
+
pageSize: 10,
|
|
514
|
+
stateSave: false,
|
|
515
|
+
});
|
|
516
|
+
expect(datatable.getState().page).toBe(1);
|
|
517
|
+
datatable.setFilter({ column: 'status', type: 'text', value: 'active' });
|
|
518
|
+
expect(datatable.getState().page).toBe(1);
|
|
519
|
+
});
|
|
520
|
+
it('should handle rapid consecutive search calls', function () {
|
|
521
|
+
var container = createMockDataTable(30).container;
|
|
522
|
+
datatable = new KTDataTable(container, {
|
|
523
|
+
pageSize: 10,
|
|
524
|
+
stateSave: false,
|
|
525
|
+
});
|
|
526
|
+
datatable.goPage(3);
|
|
527
|
+
// Rapid searches
|
|
528
|
+
datatable.search('query1');
|
|
529
|
+
datatable.search('query2');
|
|
530
|
+
datatable.search('query3');
|
|
531
|
+
// Should be on page 1 with last query
|
|
532
|
+
expect(datatable.getState().page).toBe(1);
|
|
533
|
+
expect(datatable.getState().search).toBe('query3');
|
|
534
|
+
});
|
|
535
|
+
it('should handle search and filter in quick succession', function () {
|
|
536
|
+
var container = createMockDataTable(30).container;
|
|
537
|
+
datatable = new KTDataTable(container, {
|
|
538
|
+
pageSize: 10,
|
|
539
|
+
stateSave: false,
|
|
540
|
+
});
|
|
541
|
+
datatable.goPage(3);
|
|
542
|
+
// Search then filter quickly
|
|
543
|
+
datatable.search('User');
|
|
544
|
+
datatable.setFilter({ column: 'status', type: 'text', value: 'active' });
|
|
545
|
+
expect(datatable.getState().page).toBe(1);
|
|
546
|
+
expect(datatable.getState().search).toBe('User');
|
|
547
|
+
expect(datatable.getState().filters).toHaveLength(1);
|
|
548
|
+
});
|
|
549
|
+
});
|
|
550
|
+
describe('Backward Compatibility', function () {
|
|
551
|
+
it('should maintain same return type for search method', function () {
|
|
552
|
+
var container = createMockDataTable(25).container;
|
|
553
|
+
datatable = new KTDataTable(container, { pageSize: 10 });
|
|
554
|
+
// search() returns void
|
|
555
|
+
var result = datatable.search('test');
|
|
556
|
+
expect(result).toBeUndefined();
|
|
557
|
+
});
|
|
558
|
+
it('should maintain same return type for setFilter method', function () {
|
|
559
|
+
var container = createMockDataTable(25).container;
|
|
560
|
+
datatable = new KTDataTable(container, { pageSize: 10 });
|
|
561
|
+
// setFilter() returns this (chainable)
|
|
562
|
+
var result = datatable.setFilter({
|
|
563
|
+
column: 'status',
|
|
564
|
+
type: 'text',
|
|
565
|
+
value: 'active',
|
|
566
|
+
});
|
|
567
|
+
expect(result).toBe(datatable);
|
|
568
|
+
});
|
|
569
|
+
it('should not break existing event handlers', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
570
|
+
var container, reloadSpy;
|
|
571
|
+
return __generator(this, function (_a) {
|
|
572
|
+
switch (_a.label) {
|
|
573
|
+
case 0:
|
|
574
|
+
container = createMockDataTable(25).container;
|
|
575
|
+
datatable = new KTDataTable(container, { pageSize: 10, stateSave: false });
|
|
576
|
+
reloadSpy = vi.fn();
|
|
577
|
+
// Listen for 'reload' event directly (CustomEvent)
|
|
578
|
+
container.addEventListener('reload', reloadSpy);
|
|
579
|
+
datatable.goPage(2);
|
|
580
|
+
datatable.search('test');
|
|
581
|
+
// Wait for async reload to complete
|
|
582
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 50); })];
|
|
583
|
+
case 1:
|
|
584
|
+
// Wait for async reload to complete
|
|
585
|
+
_a.sent();
|
|
586
|
+
// reload event should still fire
|
|
587
|
+
expect(reloadSpy).toHaveBeenCalled();
|
|
588
|
+
return [2 /*return*/];
|
|
589
|
+
}
|
|
590
|
+
});
|
|
591
|
+
}); });
|
|
592
|
+
});
|
|
593
|
+
});
|
|
594
|
+
//# sourceMappingURL=pagination-reset.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination-reset.test.js","sourceRoot":"","sources":["../../../../../src/components/datatable/__tests__/pagination-reset.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,QAAQ,CAAC,gCAAgC,EAAE;IAC1C,IAAI,SAAsB,CAAC;IAC3B,IAAI,YAA8B,CAAC;IACnC,IAAI,SAA2B,CAAC;IAEhC;;OAEG;IACH,IAAM,mBAAmB,GAAG,UAAC,WAAwB;QAAxB,4BAAA,EAAA,gBAAwB;QACpD,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,SAAS,CAAC,EAAE,GAAG,0BAA0B,CAAC;QAE1C,yBAAyB;QACzB,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/C,YAAY,CAAC,YAAY,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;QAC7D,YAAY,CAAC,EAAE,GAAG,YAAY,CAAC;QAE/B,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzC,GAAG,CAAC,YAAY,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QACnD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;QAEvB,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzC,GAAG,CAAC,YAAY,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;QACrD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC;QAEzB,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzC,GAAG,CAAC,YAAY,CAAC,0BAA0B,EAAE,QAAQ,CAAC,CAAC;QACvD,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC;QAE3B,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7B,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEhC,gCAAgC;QAChC,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzC,GAAG,CAAC,WAAW,GAAG,eAAQ,CAAC,CAAE,CAAC;YAE9B,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzC,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;YAEtD,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACrB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACrB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACrB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEhC,iCAAiC;QACjC,IAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,WAAW,CAAC,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;QAE3D,4BAA4B;QAC5B,IAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrD,WAAW,CAAC,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;QAE3D,8BAA8B;QAC9B,IAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACxD,iBAAiB,CAAC,YAAY,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;QAEvE,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACpC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACnC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACnC,SAAS,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAEzC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAErC,OAAO;YACN,SAAS,WAAA;YACT,YAAY,cAAA;YACZ,WAAW,aAAA;YACX,WAAW,aAAA;YACX,iBAAiB,mBAAA;SACjB,CAAC;IACH,CAAC,CAAC;IAEF,UAAU,CAAC;QACV,8BAA8B;QAC9B,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAC7B,EAAE,CAAC,aAAa,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sDAAsD,EAAE;QAChE,EAAE,CAAC,2DAA2D,EAAE;YAC/D,mEAAmE;YAC3D,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,qBAAqB;YACrB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,iBAAiB;YACjB,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE3B,4CAA4C;YAC5C,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE;YAC/C,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,qBAAqB;YACrB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,iBAAiB;YACjB,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAE/B,SAAS;YACT,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE;YAClD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,0CAA0C;YAC1C,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAEvC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE;YACrC,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAErB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE;YAChD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;gBAChB,sDAAsD;gBACtD,MAAM,EAAE;oBACP,KAAK,EAAE,GAAG;oBACV,QAAQ,EAAE,UAAC,IAAW,EAAE,MAAuB;wBAC9C,IAAI,CAAC,MAAM;4BAAE,OAAO,IAAI,CAAC;wBACzB,gEAAgE;wBAChE,IAAI,OAAO,MAAM,KAAK,QAAQ;4BAAE,OAAO,IAAI,CAAC;wBAC5C,gBAAgB;wBAChB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAC,IAAS;4BAC5B,OAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,KAAU;gCACnC,OAAA,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAE,MAAiB,CAAC,WAAW,EAAE,CAAC;4BAAtE,CAAsE,CACtE;wBAFD,CAEC,CACD,CAAC;oBACH,CAAC;iBACD;aACD,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,2CAA2C;YAC3C,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAErD,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oDAAoD,EAAE;QAC9D,EAAE,CAAC,8DAA8D,EAAE;YAC1D,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,qBAAqB;YACrB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,eAAe;YACf,IAAM,MAAM,GAAqC;gBAChD,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,QAAQ;aACf,CAAC;YACF,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAE5B,4CAA4C;YAC5C,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE;YACjD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,qBAAqB;YACrB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,eAAe;YACf,SAAS,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE;YAClC,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,SAAS,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,GAAG;aACV,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yDAAyD,EAAE;QACnE,EAAE,CAAC,+DAA+D,EAAE;YAC3D,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,yBAAyB;YACzB,SAAS;iBACP,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;iBAC9D,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAE7D,+CAA+C;YAC/C,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,kCAAkC;YAClC,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;YAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE;YACvD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,qBAAqB;YACrB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,8CAA8C;YAC9C,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACrE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,6CAA6C;YAC7C,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE;YAC5C,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,2BAA2B;YAC3B,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,gCAAgC;YAChC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAC3E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,kDAAkD;YAClD,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;YAC7C,IAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,KAAK,QAAQ,EAArB,CAAqB,CAAC,CAAC;YACnE,MAAM,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2DAA2D,EAAE;QACrE,EAAE,CAAC,qDAAqD,EAAE;YACjD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,qBAAqB;YACrB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,uCAAuC;YACvC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,2BAA2B;YAC3B,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,8BAA8B;YAC9B,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,2BAA2B;YAC3B,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,8BAA8B;YAC9B,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE;YACvD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,2BAA2B;YAC3B,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC1B,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,iBAAiB;YACjB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1B,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,iBAAiB;YACjB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACrE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kDAAkD,EAAE;QAC5D,EAAE,CAAC,+DAA+D,EAAE;YAC3D,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,+BAA+B;YAC/B,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAExC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE;YAC7C,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAEhC,mBAAmB;YACnB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,eAAe;YACf,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAErB,4BAA4B;YAC5B,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uDAAuD,EAAE;QACjE,EAAE,CAAC,2DAA2D,EAAE;;;;;wBACvD,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;wBAE9C,4CAA4C;wBAC5C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;4BACtC,QAAQ,EAAE,EAAE;4BACZ,SAAS,EAAE,IAAI;4BACf,cAAc,EAAE,6BAA6B;yBAC7C,CAAC,CAAC;wBAEH,6CAA6C;wBAC7C,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,EAAxB,CAAwB,CAAC,EAAA;;wBADxD,6CAA6C;wBAC7C,SAAwD,CAAC;wBAEzD,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAEpB,8BAA8B;wBAC9B,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,EAAxB,CAAwB,CAAC,EAAA;;wBADxD,8BAA8B;wBAC9B,SAAwD,CAAC;wBAEzD,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;wBAE/B,mDAAmD;wBACnD,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,EAAxB,CAAwB,CAAC,EAAA;;wBADxD,mDAAmD;wBACnD,SAAwD,CAAC;wBAGnD,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;wBACvE,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;wBAEhC,IAAI,UAAU,EAAE,CAAC;4BACV,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;4BACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBACzC,CAAC;wBAED,UAAU;wBACV,YAAY,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;;;;aACvD,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE;YACvD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAE9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,IAAI;gBACf,cAAc,EAAE,6BAA6B;aAC7C,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEzE,+BAA+B;YAC/B,SAAS,CAAC,MAAM,EAAE,CAAC;YAEnB,IAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;YACvE,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;YAEhC,IAAI,UAAU,EAAE,CAAC;gBAChB,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACrC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;YAED,UAAU;YACV,YAAY,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE;;;;;wBACnD,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;wBACxC,SAAS,GAAG,wBAAwB,CAAC;wBAGvC,MAAM,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;4BACvC,QAAQ,EAAE,EAAE;4BACZ,SAAS,EAAE,IAAI;4BACf,cAAc,EAAE,SAAS;yBACzB,CAAC,CAAC;wBAEH,wBAAwB;wBACxB,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,EAAxB,CAAwB,CAAC,EAAA;;wBADxD,wBAAwB;wBACxB,SAAwD,CAAC;wBAEzD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAEjB,8BAA8B;wBAC9B,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,EAAxB,CAAwB,CAAC,EAAA;;wBADxD,8BAA8B;wBAC9B,SAAwD,CAAC;wBAEzD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBAExB,6CAA6C;wBAC7C,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,EAAxB,CAAwB,CAAC,EAAA;;wBADxD,6CAA6C;wBAC7C,SAAwD,CAAC;wBAEzD,yBAAyB;wBACzB,MAAM,CAAC,OAAO,EAAE,CAAC;wBAEjB,+BAA+B;wBAC/B,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAvB,CAAuB,CAAC,EAAA;;wBADvD,+BAA+B;wBAC/B,SAAuD,CAAC;wBAExD,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;wBAGV,YAAY,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;wBACtD,MAAM,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE;4BAC5C,QAAQ,EAAE,EAAE;4BACZ,SAAS,EAAE,IAAI;4BACf,cAAc,EAAE,SAAS;yBACzB,CAAC,CAAC;wBAEH,8CAA8C;wBAC9C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAEhD,UAAU;wBACV,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;;;;aACnC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE;QACtB,EAAE,CAAC,8CAA8C,EAAE;YAC1C,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEzB,4BAA4B;YAC5B,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE;YAC1C,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAE1C,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEzE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE;YAC1C,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,iBAAiB;YACjB,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3B,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3B,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE3B,sCAAsC;YACtC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE;YACjD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE;gBACtC,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEpB,6BAA6B;YAC7B,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEzE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE;QAClC,EAAE,CAAC,oDAAoD,EAAE;YAChD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAEzD,wBAAwB;YACxB,IAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE;YACnD,IAAA,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;YAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YAEzD,uCAAuC;YACvC,IAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC;gBAClC,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,QAAQ;aACf,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE;;;;;wBACtC,SAAS,GAAK,mBAAmB,CAAC,EAAE,CAAC,UAA5B,CAA6B;wBAC9C,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;wBAErE,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC1B,mDAAmD;wBACnD,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;wBAEhD,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACpB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBAEzB,oCAAoC;wBACpC,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAvB,CAAuB,CAAC,EAAA;;wBADvD,oCAAoC;wBACpC,SAAuD,CAAC;wBAExD,iCAAiC;wBACjC,MAAM,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;;;;aACrC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|