@pie-element/placement-ordering 14.3.1 → 14.3.2-beta.2
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/CHANGELOG.md +29 -56
- package/configure/CHANGELOG.md +28 -44
- package/configure/lib/__tests__/choice-editor.test.js +376 -0
- package/configure/lib/__tests__/choice-tile.test.js +283 -0
- package/configure/lib/__tests__/design.test.js +268 -0
- package/configure/lib/__tests__/help.test.js +64 -0
- package/configure/lib/__tests__/index.test.js +77 -0
- package/configure/lib/__tests__/utils.test.js +493 -0
- package/configure/package.json +5 -5
- package/controller/CHANGELOG.md +38 -6
- package/controller/lib/__tests__/index.test.js +401 -0
- package/controller/lib/__tests__/scoring.test.js +165 -0
- package/controller/package.json +1 -1
- package/docs/demo/pie.manifest.json +11 -0
- package/lib/__tests__/index-test.js +90 -0
- package/lib/__tests__/ordering.test.js +133 -0
- package/lib/__tests__/placement-ordering.test.js +445 -0
- package/lib/placement-ordering.js +8 -138
- package/lib/placement-ordering.js.map +1 -1
- package/lib/tile.js +22 -93
- package/lib/tile.js.map +1 -1
- package/lib/tiler.js +1 -7
- package/lib/tiler.js.map +1 -1
- package/package.json +5 -6
- package/lib/keyboard-coordinates.js +0 -124
- package/lib/keyboard-coordinates.js.map +0 -1
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _utils = require("../utils");
|
|
4
|
+
describe('utils', () => {
|
|
5
|
+
describe('generateValidationMessage', () => {
|
|
6
|
+
it('should return a validation message string', () => {
|
|
7
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
8
|
+
expect(typeof message).toBe('string');
|
|
9
|
+
});
|
|
10
|
+
it('should contain validation requirements heading', () => {
|
|
11
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
12
|
+
expect(message).toContain('Validation requirements:');
|
|
13
|
+
});
|
|
14
|
+
it('should mention minimum token requirement', () => {
|
|
15
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
16
|
+
expect(message).toContain('There should be at least 3 tokens.');
|
|
17
|
+
});
|
|
18
|
+
it('should mention tokens should not be empty', () => {
|
|
19
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
20
|
+
expect(message).toContain('The tokens should not be empty and should be unique.');
|
|
21
|
+
});
|
|
22
|
+
it('should mention correct ordering requirement', () => {
|
|
23
|
+
const message = (0, _utils.generateValidationMessage)();
|
|
24
|
+
expect(message).toContain('The correct ordering should not be identical to the initial ordering.');
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
describe('normalizeIndex', () => {
|
|
28
|
+
const ordering = {
|
|
29
|
+
response: [{
|
|
30
|
+
id: 'r1'
|
|
31
|
+
}, {
|
|
32
|
+
id: 'r2'
|
|
33
|
+
}, {
|
|
34
|
+
id: 'r3'
|
|
35
|
+
}],
|
|
36
|
+
choices: [{
|
|
37
|
+
id: 'c1'
|
|
38
|
+
}, {
|
|
39
|
+
id: 'c2'
|
|
40
|
+
}, {
|
|
41
|
+
id: 'c3'
|
|
42
|
+
}]
|
|
43
|
+
};
|
|
44
|
+
it('should return correct index for target type', () => {
|
|
45
|
+
const tile = {
|
|
46
|
+
id: 'r2',
|
|
47
|
+
type: 'target'
|
|
48
|
+
};
|
|
49
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
50
|
+
expect(index).toBe(1);
|
|
51
|
+
});
|
|
52
|
+
it('should return correct index for choice type', () => {
|
|
53
|
+
const tile = {
|
|
54
|
+
id: 'c3',
|
|
55
|
+
type: 'choice'
|
|
56
|
+
};
|
|
57
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
58
|
+
expect(index).toBe(2);
|
|
59
|
+
});
|
|
60
|
+
it('should return -1 for unknown type', () => {
|
|
61
|
+
const tile = {
|
|
62
|
+
id: 'x1',
|
|
63
|
+
type: 'unknown'
|
|
64
|
+
};
|
|
65
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
66
|
+
expect(index).toBe(-1);
|
|
67
|
+
});
|
|
68
|
+
it('should return -1 when tile not found in response', () => {
|
|
69
|
+
const tile = {
|
|
70
|
+
id: 'r99',
|
|
71
|
+
type: 'target'
|
|
72
|
+
};
|
|
73
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
74
|
+
expect(index).toBe(-1);
|
|
75
|
+
});
|
|
76
|
+
it('should return -1 when tile not found in choices', () => {
|
|
77
|
+
const tile = {
|
|
78
|
+
id: 'c99',
|
|
79
|
+
type: 'choice'
|
|
80
|
+
};
|
|
81
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
82
|
+
expect(index).toBe(-1);
|
|
83
|
+
});
|
|
84
|
+
it('should return correct index for first element', () => {
|
|
85
|
+
const tile = {
|
|
86
|
+
id: 'r1',
|
|
87
|
+
type: 'target'
|
|
88
|
+
};
|
|
89
|
+
const index = (0, _utils.normalizeIndex)(tile, ordering);
|
|
90
|
+
expect(index).toBe(0);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
describe('updateResponseOrChoices', () => {
|
|
94
|
+
describe('moving within response (target to target)', () => {
|
|
95
|
+
it('should move item within response array', () => {
|
|
96
|
+
const response = [{
|
|
97
|
+
id: 'r1'
|
|
98
|
+
}, {
|
|
99
|
+
id: 'r2'
|
|
100
|
+
}, {
|
|
101
|
+
id: 'r3'
|
|
102
|
+
}];
|
|
103
|
+
const choices = [{
|
|
104
|
+
id: 'c1'
|
|
105
|
+
}, {
|
|
106
|
+
id: 'c2'
|
|
107
|
+
}];
|
|
108
|
+
const from = {
|
|
109
|
+
type: 'target',
|
|
110
|
+
index: 0,
|
|
111
|
+
id: 'r1'
|
|
112
|
+
};
|
|
113
|
+
const to = {
|
|
114
|
+
type: 'target',
|
|
115
|
+
index: 2,
|
|
116
|
+
id: 'r3'
|
|
117
|
+
};
|
|
118
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
119
|
+
expect(result.response).toEqual([{
|
|
120
|
+
id: 'r2'
|
|
121
|
+
}, {
|
|
122
|
+
id: 'r3'
|
|
123
|
+
}, {
|
|
124
|
+
id: 'r1'
|
|
125
|
+
}]);
|
|
126
|
+
expect(result.choices).toEqual(choices);
|
|
127
|
+
});
|
|
128
|
+
it('should move item to beginning of response', () => {
|
|
129
|
+
const response = [{
|
|
130
|
+
id: 'r1'
|
|
131
|
+
}, {
|
|
132
|
+
id: 'r2'
|
|
133
|
+
}, {
|
|
134
|
+
id: 'r3'
|
|
135
|
+
}];
|
|
136
|
+
const choices = [{
|
|
137
|
+
id: 'c1'
|
|
138
|
+
}];
|
|
139
|
+
const from = {
|
|
140
|
+
type: 'target',
|
|
141
|
+
index: 2,
|
|
142
|
+
id: 'r3'
|
|
143
|
+
};
|
|
144
|
+
const to = {
|
|
145
|
+
type: 'target',
|
|
146
|
+
index: 0,
|
|
147
|
+
id: 'r1'
|
|
148
|
+
};
|
|
149
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
150
|
+
expect(result.response).toEqual([{
|
|
151
|
+
id: 'r3'
|
|
152
|
+
}, {
|
|
153
|
+
id: 'r1'
|
|
154
|
+
}, {
|
|
155
|
+
id: 'r2'
|
|
156
|
+
}]);
|
|
157
|
+
});
|
|
158
|
+
it('should move item to end of response', () => {
|
|
159
|
+
const response = [{
|
|
160
|
+
id: 'r1'
|
|
161
|
+
}, {
|
|
162
|
+
id: 'r2'
|
|
163
|
+
}, {
|
|
164
|
+
id: 'r3'
|
|
165
|
+
}];
|
|
166
|
+
const choices = [{
|
|
167
|
+
id: 'c1'
|
|
168
|
+
}];
|
|
169
|
+
const from = {
|
|
170
|
+
type: 'target',
|
|
171
|
+
index: 0,
|
|
172
|
+
id: 'r1'
|
|
173
|
+
};
|
|
174
|
+
const to = {
|
|
175
|
+
type: 'target',
|
|
176
|
+
index: 2,
|
|
177
|
+
id: 'r3'
|
|
178
|
+
};
|
|
179
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
180
|
+
expect(result.response[result.response.length - 1]).toEqual({
|
|
181
|
+
id: 'r1'
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('moving within choices (choice to choice)', () => {
|
|
186
|
+
it('should move item within choices array', () => {
|
|
187
|
+
const response = [{
|
|
188
|
+
id: 'r1'
|
|
189
|
+
}];
|
|
190
|
+
const choices = [{
|
|
191
|
+
id: 'c1'
|
|
192
|
+
}, {
|
|
193
|
+
id: 'c2'
|
|
194
|
+
}, {
|
|
195
|
+
id: 'c3'
|
|
196
|
+
}];
|
|
197
|
+
const from = {
|
|
198
|
+
type: 'choice',
|
|
199
|
+
index: 0,
|
|
200
|
+
id: 'c1'
|
|
201
|
+
};
|
|
202
|
+
const to = {
|
|
203
|
+
type: 'choice',
|
|
204
|
+
index: 2,
|
|
205
|
+
id: 'c3'
|
|
206
|
+
};
|
|
207
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
208
|
+
expect(result.choices).toEqual([{
|
|
209
|
+
id: 'c2'
|
|
210
|
+
}, {
|
|
211
|
+
id: 'c3'
|
|
212
|
+
}, {
|
|
213
|
+
id: 'c1'
|
|
214
|
+
}]);
|
|
215
|
+
expect(result.response).toEqual(response);
|
|
216
|
+
});
|
|
217
|
+
it('should handle moving to beginning of choices', () => {
|
|
218
|
+
const response = [{
|
|
219
|
+
id: 'r1'
|
|
220
|
+
}];
|
|
221
|
+
const choices = [{
|
|
222
|
+
id: 'c1'
|
|
223
|
+
}, {
|
|
224
|
+
id: 'c2'
|
|
225
|
+
}, {
|
|
226
|
+
id: 'c3'
|
|
227
|
+
}];
|
|
228
|
+
const from = {
|
|
229
|
+
type: 'choice',
|
|
230
|
+
index: 2,
|
|
231
|
+
id: 'c3'
|
|
232
|
+
};
|
|
233
|
+
const to = {
|
|
234
|
+
type: 'choice',
|
|
235
|
+
index: 0,
|
|
236
|
+
id: 'c1'
|
|
237
|
+
};
|
|
238
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
239
|
+
expect(result.choices[0]).toEqual({
|
|
240
|
+
id: 'c3'
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
describe('mixed type movements', () => {
|
|
245
|
+
it('should return unchanged arrays when moving from choice to target', () => {
|
|
246
|
+
const response = [{
|
|
247
|
+
id: 'r1'
|
|
248
|
+
}];
|
|
249
|
+
const choices = [{
|
|
250
|
+
id: 'c1'
|
|
251
|
+
}];
|
|
252
|
+
const from = {
|
|
253
|
+
type: 'choice',
|
|
254
|
+
index: 0,
|
|
255
|
+
id: 'c1'
|
|
256
|
+
};
|
|
257
|
+
const to = {
|
|
258
|
+
type: 'target',
|
|
259
|
+
index: 0,
|
|
260
|
+
id: 'r1'
|
|
261
|
+
};
|
|
262
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
263
|
+
expect(result.response).toEqual(response);
|
|
264
|
+
expect(result.choices).toEqual(choices);
|
|
265
|
+
});
|
|
266
|
+
it('should return unchanged arrays when moving from target to choice', () => {
|
|
267
|
+
const response = [{
|
|
268
|
+
id: 'r1'
|
|
269
|
+
}];
|
|
270
|
+
const choices = [{
|
|
271
|
+
id: 'c1'
|
|
272
|
+
}];
|
|
273
|
+
const from = {
|
|
274
|
+
type: 'target',
|
|
275
|
+
index: 0,
|
|
276
|
+
id: 'r1'
|
|
277
|
+
};
|
|
278
|
+
const to = {
|
|
279
|
+
type: 'choice',
|
|
280
|
+
index: 0,
|
|
281
|
+
id: 'c1'
|
|
282
|
+
};
|
|
283
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
284
|
+
expect(result.response).toEqual(response);
|
|
285
|
+
expect(result.choices).toEqual(choices);
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
describe('edge cases', () => {
|
|
289
|
+
it('should handle single item arrays', () => {
|
|
290
|
+
const response = [{
|
|
291
|
+
id: 'r1'
|
|
292
|
+
}];
|
|
293
|
+
const choices = [{
|
|
294
|
+
id: 'c1'
|
|
295
|
+
}];
|
|
296
|
+
const from = {
|
|
297
|
+
type: 'target',
|
|
298
|
+
index: 0,
|
|
299
|
+
id: 'r1'
|
|
300
|
+
};
|
|
301
|
+
const to = {
|
|
302
|
+
type: 'target',
|
|
303
|
+
index: 0,
|
|
304
|
+
id: 'r1'
|
|
305
|
+
};
|
|
306
|
+
const result = (0, _utils.updateResponseOrChoices)(response, choices, from, to);
|
|
307
|
+
expect(result.response).toHaveLength(1);
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
describe('buildTiles', () => {
|
|
312
|
+
it('should create tiles from choices and response', () => {
|
|
313
|
+
const choices = [{
|
|
314
|
+
id: 'c1',
|
|
315
|
+
label: 'Choice 1'
|
|
316
|
+
}, {
|
|
317
|
+
id: 'c2',
|
|
318
|
+
label: 'Choice 2'
|
|
319
|
+
}];
|
|
320
|
+
const response = [{
|
|
321
|
+
id: 'c1'
|
|
322
|
+
}, {
|
|
323
|
+
id: 'c2'
|
|
324
|
+
}];
|
|
325
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
326
|
+
expect(tiles).toHaveLength(4); // 2 choices + 2 targets
|
|
327
|
+
});
|
|
328
|
+
it('should mark choice tiles as editable and draggable', () => {
|
|
329
|
+
const choices = [{
|
|
330
|
+
id: 'c1',
|
|
331
|
+
label: 'Choice 1'
|
|
332
|
+
}];
|
|
333
|
+
const response = [{
|
|
334
|
+
id: 'c1'
|
|
335
|
+
}];
|
|
336
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
337
|
+
const choiceTile = tiles.find(t => t.type === 'choice');
|
|
338
|
+
expect(choiceTile).toMatchObject({
|
|
339
|
+
type: 'choice',
|
|
340
|
+
editable: true,
|
|
341
|
+
draggable: true,
|
|
342
|
+
droppable: false
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
it('should mark target tiles as draggable but not editable', () => {
|
|
346
|
+
const choices = [{
|
|
347
|
+
id: 'c1',
|
|
348
|
+
label: 'Choice 1'
|
|
349
|
+
}];
|
|
350
|
+
const response = [{
|
|
351
|
+
id: 'c1'
|
|
352
|
+
}];
|
|
353
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
354
|
+
const targetTile = tiles.find(t => t.type === 'target');
|
|
355
|
+
expect(targetTile).toMatchObject({
|
|
356
|
+
type: 'target',
|
|
357
|
+
editable: false,
|
|
358
|
+
draggable: true
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
it('should match target tiles with corresponding choices by id', () => {
|
|
362
|
+
const choices = [{
|
|
363
|
+
id: 'c1',
|
|
364
|
+
label: 'Choice 1'
|
|
365
|
+
}, {
|
|
366
|
+
id: 'c2',
|
|
367
|
+
label: 'Choice 2'
|
|
368
|
+
}];
|
|
369
|
+
const response = [{
|
|
370
|
+
id: 'c2'
|
|
371
|
+
}, {
|
|
372
|
+
id: 'c1'
|
|
373
|
+
}];
|
|
374
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
375
|
+
const targetTiles = tiles.filter(t => t.type === 'target');
|
|
376
|
+
expect(targetTiles[0]).toMatchObject({
|
|
377
|
+
id: 'c2',
|
|
378
|
+
label: 'Choice 2'
|
|
379
|
+
});
|
|
380
|
+
expect(targetTiles[1]).toMatchObject({
|
|
381
|
+
id: 'c1',
|
|
382
|
+
label: 'Choice 1'
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
it('should assign correct index to target tiles', () => {
|
|
386
|
+
const choices = [{
|
|
387
|
+
id: 'c1',
|
|
388
|
+
label: 'Choice 1'
|
|
389
|
+
}];
|
|
390
|
+
const response = [{
|
|
391
|
+
id: 'c1'
|
|
392
|
+
}];
|
|
393
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
394
|
+
const targetTile = tiles.find(t => t.type === 'target');
|
|
395
|
+
expect(targetTile.index).toBe(0);
|
|
396
|
+
});
|
|
397
|
+
it('should handle response with null or undefined ids', () => {
|
|
398
|
+
const choices = [{
|
|
399
|
+
id: 'c1',
|
|
400
|
+
label: 'Choice 1'
|
|
401
|
+
}, {
|
|
402
|
+
id: 'c2',
|
|
403
|
+
label: 'Choice 2'
|
|
404
|
+
}];
|
|
405
|
+
const response = [{
|
|
406
|
+
id: null
|
|
407
|
+
}, {
|
|
408
|
+
id: undefined
|
|
409
|
+
}, {
|
|
410
|
+
id: 'c1'
|
|
411
|
+
}];
|
|
412
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
413
|
+
const targetTiles = tiles.filter(t => t.type === 'target');
|
|
414
|
+
expect(targetTiles).toHaveLength(3);
|
|
415
|
+
expect(targetTiles[2].id).toBe('c1');
|
|
416
|
+
});
|
|
417
|
+
it('should preserve choice properties in choice tiles', () => {
|
|
418
|
+
const choices = [{
|
|
419
|
+
id: 'c1',
|
|
420
|
+
label: 'Choice 1',
|
|
421
|
+
customProp: 'value'
|
|
422
|
+
}];
|
|
423
|
+
const response = [];
|
|
424
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
425
|
+
const choiceTile = tiles.find(t => t.type === 'choice');
|
|
426
|
+
expect(choiceTile.customProp).toBe('value');
|
|
427
|
+
expect(choiceTile.label).toBe('Choice 1');
|
|
428
|
+
});
|
|
429
|
+
it('should preserve choice properties in target tiles', () => {
|
|
430
|
+
const choices = [{
|
|
431
|
+
id: 'c1',
|
|
432
|
+
label: 'Choice 1',
|
|
433
|
+
customProp: 'value'
|
|
434
|
+
}];
|
|
435
|
+
const response = [{
|
|
436
|
+
id: 'c1'
|
|
437
|
+
}];
|
|
438
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
439
|
+
const targetTile = tiles.find(t => t.type === 'target');
|
|
440
|
+
expect(targetTile.customProp).toBe('value');
|
|
441
|
+
expect(targetTile.label).toBe('Choice 1');
|
|
442
|
+
});
|
|
443
|
+
it('should handle empty choices array', () => {
|
|
444
|
+
const choices = [];
|
|
445
|
+
const response = [];
|
|
446
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
447
|
+
expect(tiles).toEqual([]);
|
|
448
|
+
});
|
|
449
|
+
it('should handle empty response array', () => {
|
|
450
|
+
const choices = [{
|
|
451
|
+
id: 'c1',
|
|
452
|
+
label: 'Choice 1'
|
|
453
|
+
}];
|
|
454
|
+
const response = [];
|
|
455
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
456
|
+
expect(tiles).toHaveLength(1);
|
|
457
|
+
expect(tiles[0].type).toBe('choice');
|
|
458
|
+
});
|
|
459
|
+
it('should maintain order of choices in choice tiles', () => {
|
|
460
|
+
const choices = [{
|
|
461
|
+
id: 'c1',
|
|
462
|
+
label: 'First'
|
|
463
|
+
}, {
|
|
464
|
+
id: 'c2',
|
|
465
|
+
label: 'Second'
|
|
466
|
+
}, {
|
|
467
|
+
id: 'c3',
|
|
468
|
+
label: 'Third'
|
|
469
|
+
}];
|
|
470
|
+
const response = [];
|
|
471
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
472
|
+
const choiceTiles = tiles.filter(t => t.type === 'choice');
|
|
473
|
+
expect(choiceTiles.map(t => t.label)).toEqual(['First', 'Second', 'Third']);
|
|
474
|
+
});
|
|
475
|
+
it('should place choice tiles before target tiles', () => {
|
|
476
|
+
const choices = [{
|
|
477
|
+
id: 'c1',
|
|
478
|
+
label: 'Choice 1'
|
|
479
|
+
}, {
|
|
480
|
+
id: 'c2',
|
|
481
|
+
label: 'Choice 2'
|
|
482
|
+
}];
|
|
483
|
+
const response = [{
|
|
484
|
+
id: 'c1'
|
|
485
|
+
}];
|
|
486
|
+
const tiles = (0, _utils.buildTiles)(choices, response);
|
|
487
|
+
expect(tiles[0].type).toBe('choice');
|
|
488
|
+
expect(tiles[1].type).toBe('choice');
|
|
489
|
+
expect(tiles[2].type).toBe('target');
|
|
490
|
+
});
|
|
491
|
+
});
|
|
492
|
+
});
|
|
493
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsIm1lc3NhZ2UiLCJnZW5lcmF0ZVZhbGlkYXRpb25NZXNzYWdlIiwiZXhwZWN0IiwidG9CZSIsInRvQ29udGFpbiIsIm9yZGVyaW5nIiwicmVzcG9uc2UiLCJpZCIsImNob2ljZXMiLCJ0aWxlIiwidHlwZSIsImluZGV4Iiwibm9ybWFsaXplSW5kZXgiLCJmcm9tIiwidG8iLCJyZXN1bHQiLCJ1cGRhdGVSZXNwb25zZU9yQ2hvaWNlcyIsInRvRXF1YWwiLCJsZW5ndGgiLCJ0b0hhdmVMZW5ndGgiLCJsYWJlbCIsInRpbGVzIiwiYnVpbGRUaWxlcyIsImNob2ljZVRpbGUiLCJmaW5kIiwidCIsInRvTWF0Y2hPYmplY3QiLCJlZGl0YWJsZSIsImRyYWdnYWJsZSIsImRyb3BwYWJsZSIsInRhcmdldFRpbGUiLCJ0YXJnZXRUaWxlcyIsImZpbHRlciIsInVuZGVmaW5lZCIsImN1c3RvbVByb3AiLCJjaG9pY2VUaWxlcyIsIm1hcCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdXRpbHMudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBnZW5lcmF0ZVZhbGlkYXRpb25NZXNzYWdlLFxuICBub3JtYWxpemVJbmRleCxcbiAgdXBkYXRlUmVzcG9uc2VPckNob2ljZXMsXG4gIGJ1aWxkVGlsZXMsXG59IGZyb20gJy4uL3V0aWxzJztcblxuZGVzY3JpYmUoJ3V0aWxzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIHZhbGlkYXRpb24gbWVzc2FnZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgZXhwZWN0KHR5cGVvZiBtZXNzYWdlKS50b0JlKCdzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udGFpbiB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyBoZWFkaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGdlbmVyYXRlVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIGV4cGVjdChtZXNzYWdlKS50b0NvbnRhaW4oJ1ZhbGlkYXRpb24gcmVxdWlyZW1lbnRzOicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtZW50aW9uIG1pbmltdW0gdG9rZW4gcmVxdWlyZW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2VuZXJhdGVWYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgICAgZXhwZWN0KG1lc3NhZ2UpLnRvQ29udGFpbignVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IDMgdG9rZW5zLicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtZW50aW9uIHRva2VucyBzaG91bGQgbm90IGJlIGVtcHR5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGdlbmVyYXRlVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIGV4cGVjdChtZXNzYWdlKS50b0NvbnRhaW4oJ1RoZSB0b2tlbnMgc2hvdWxkIG5vdCBiZSBlbXB0eSBhbmQgc2hvdWxkIGJlIHVuaXF1ZS4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWVudGlvbiBjb3JyZWN0IG9yZGVyaW5nIHJlcXVpcmVtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGdlbmVyYXRlVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICAgIGV4cGVjdChtZXNzYWdlKS50b0NvbnRhaW4oJ1RoZSBjb3JyZWN0IG9yZGVyaW5nIHNob3VsZCBub3QgYmUgaWRlbnRpY2FsIHRvIHRoZSBpbml0aWFsIG9yZGVyaW5nLicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbm9ybWFsaXplSW5kZXgnLCAoKSA9PiB7XG4gICAgY29uc3Qgb3JkZXJpbmcgPSB7XG4gICAgICByZXNwb25zZTogW3sgaWQ6ICdyMScgfSwgeyBpZDogJ3IyJyB9LCB7IGlkOiAncjMnIH1dLFxuICAgICAgY2hvaWNlczogW3sgaWQ6ICdjMScgfSwgeyBpZDogJ2MyJyB9LCB7IGlkOiAnYzMnIH1dLFxuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IGluZGV4IGZvciB0YXJnZXQgdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbGUgPSB7IGlkOiAncjInLCB0eXBlOiAndGFyZ2V0JyB9O1xuICAgICAgY29uc3QgaW5kZXggPSBub3JtYWxpemVJbmRleCh0aWxlLCBvcmRlcmluZyk7XG4gICAgICBleHBlY3QoaW5kZXgpLnRvQmUoMSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IGluZGV4IGZvciBjaG9pY2UgdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbGUgPSB7IGlkOiAnYzMnLCB0eXBlOiAnY2hvaWNlJyB9O1xuICAgICAgY29uc3QgaW5kZXggPSBub3JtYWxpemVJbmRleCh0aWxlLCBvcmRlcmluZyk7XG4gICAgICBleHBlY3QoaW5kZXgpLnRvQmUoMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiAtMSBmb3IgdW5rbm93biB0eXBlJywgKCkgPT4ge1xuICAgICAgY29uc3QgdGlsZSA9IHsgaWQ6ICd4MScsIHR5cGU6ICd1bmtub3duJyB9O1xuICAgICAgY29uc3QgaW5kZXggPSBub3JtYWxpemVJbmRleCh0aWxlLCBvcmRlcmluZyk7XG4gICAgICBleHBlY3QoaW5kZXgpLnRvQmUoLTEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gLTEgd2hlbiB0aWxlIG5vdCBmb3VuZCBpbiByZXNwb25zZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbGUgPSB7IGlkOiAncjk5JywgdHlwZTogJ3RhcmdldCcgfTtcbiAgICAgIGNvbnN0IGluZGV4ID0gbm9ybWFsaXplSW5kZXgodGlsZSwgb3JkZXJpbmcpO1xuICAgICAgZXhwZWN0KGluZGV4KS50b0JlKC0xKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIC0xIHdoZW4gdGlsZSBub3QgZm91bmQgaW4gY2hvaWNlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHRpbGUgPSB7IGlkOiAnYzk5JywgdHlwZTogJ2Nob2ljZScgfTtcbiAgICAgIGNvbnN0IGluZGV4ID0gbm9ybWFsaXplSW5kZXgodGlsZSwgb3JkZXJpbmcpO1xuICAgICAgZXhwZWN0KGluZGV4KS50b0JlKC0xKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGNvcnJlY3QgaW5kZXggZm9yIGZpcnN0IGVsZW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0aWxlID0geyBpZDogJ3IxJywgdHlwZTogJ3RhcmdldCcgfTtcbiAgICAgIGNvbnN0IGluZGV4ID0gbm9ybWFsaXplSW5kZXgodGlsZSwgb3JkZXJpbmcpO1xuICAgICAgZXhwZWN0KGluZGV4KS50b0JlKDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndXBkYXRlUmVzcG9uc2VPckNob2ljZXMnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ21vdmluZyB3aXRoaW4gcmVzcG9uc2UgKHRhcmdldCB0byB0YXJnZXQpJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBtb3ZlIGl0ZW0gd2l0aGluIHJlc3BvbnNlIGFycmF5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiAncjEnIH0sIHsgaWQ6ICdyMicgfSwgeyBpZDogJ3IzJyB9XTtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFt7IGlkOiAnYzEnIH0sIHsgaWQ6ICdjMicgfV07XG4gICAgICAgIGNvbnN0IGZyb20gPSB7IHR5cGU6ICd0YXJnZXQnLCBpbmRleDogMCwgaWQ6ICdyMScgfTtcbiAgICAgICAgY29uc3QgdG8gPSB7IHR5cGU6ICd0YXJnZXQnLCBpbmRleDogMiwgaWQ6ICdyMycgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB1cGRhdGVSZXNwb25zZU9yQ2hvaWNlcyhyZXNwb25zZSwgY2hvaWNlcywgZnJvbSwgdG8pO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2UpLnRvRXF1YWwoW3sgaWQ6ICdyMicgfSwgeyBpZDogJ3IzJyB9LCB7IGlkOiAncjEnIH1dKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKGNob2ljZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbW92ZSBpdGVtIHRvIGJlZ2lubmluZyBvZiByZXNwb25zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ3IxJyB9LCB7IGlkOiAncjInIH0sIHsgaWQ6ICdyMycgfV07XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAyLCBpZDogJ3IzJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZSkudG9FcXVhbChbeyBpZDogJ3IzJyB9LCB7IGlkOiAncjEnIH0sIHsgaWQ6ICdyMicgfV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgbW92ZSBpdGVtIHRvIGVuZCBvZiByZXNwb25zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ3IxJyB9LCB7IGlkOiAncjInIH0sIHsgaWQ6ICdyMycgfV07XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAyLCBpZDogJ3IzJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZVtyZXN1bHQucmVzcG9uc2UubGVuZ3RoIC0gMV0pLnRvRXF1YWwoeyBpZDogJ3IxJyB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ21vdmluZyB3aXRoaW4gY2hvaWNlcyAoY2hvaWNlIHRvIGNob2ljZSknLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIG1vdmUgaXRlbSB3aXRoaW4gY2hvaWNlcyBhcnJheScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ3IxJyB9XTtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFt7IGlkOiAnYzEnIH0sIHsgaWQ6ICdjMicgfSwgeyBpZDogJ2MzJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAwLCBpZDogJ2MxJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAyLCBpZDogJ2MzJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzKS50b0VxdWFsKFt7IGlkOiAnYzInIH0sIHsgaWQ6ICdjMycgfSwgeyBpZDogJ2MxJyB9XSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2UpLnRvRXF1YWwocmVzcG9uc2UpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGFuZGxlIG1vdmluZyB0byBiZWdpbm5pbmcgb2YgY2hvaWNlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ3IxJyB9XTtcbiAgICAgICAgY29uc3QgY2hvaWNlcyA9IFt7IGlkOiAnYzEnIH0sIHsgaWQ6ICdjMicgfSwgeyBpZDogJ2MzJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAyLCBpZDogJ2MzJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAwLCBpZDogJ2MxJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5jaG9pY2VzWzBdKS50b0VxdWFsKHsgaWQ6ICdjMycgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdtaXhlZCB0eXBlIG1vdmVtZW50cycsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuY2hhbmdlZCBhcnJheXMgd2hlbiBtb3ZpbmcgZnJvbSBjaG9pY2UgdG8gdGFyZ2V0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiAncjEnIH1dO1xuICAgICAgICBjb25zdCBjaG9pY2VzID0gW3sgaWQ6ICdjMScgfV07XG4gICAgICAgIGNvbnN0IGZyb20gPSB7IHR5cGU6ICdjaG9pY2UnLCBpbmRleDogMCwgaWQ6ICdjMScgfTtcbiAgICAgICAgY29uc3QgdG8gPSB7IHR5cGU6ICd0YXJnZXQnLCBpbmRleDogMCwgaWQ6ICdyMScgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSB1cGRhdGVSZXNwb25zZU9yQ2hvaWNlcyhyZXNwb25zZSwgY2hvaWNlcywgZnJvbSwgdG8pO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQucmVzcG9uc2UpLnRvRXF1YWwocmVzcG9uc2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmNob2ljZXMpLnRvRXF1YWwoY2hvaWNlcyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5jaGFuZ2VkIGFycmF5cyB3aGVuIG1vdmluZyBmcm9tIHRhcmdldCB0byBjaG9pY2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdyMScgfV07XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ2Nob2ljZScsIGluZGV4OiAwLCBpZDogJ2MxJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZSkudG9FcXVhbChyZXNwb25zZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuY2hvaWNlcykudG9FcXVhbChjaG9pY2VzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2VkZ2UgY2FzZXMnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzaW5nbGUgaXRlbSBhcnJheXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdyMScgfV07XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJyB9XTtcbiAgICAgICAgY29uc3QgZnJvbSA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuICAgICAgICBjb25zdCB0byA9IHsgdHlwZTogJ3RhcmdldCcsIGluZGV4OiAwLCBpZDogJ3IxJyB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZVJlc3BvbnNlT3JDaG9pY2VzKHJlc3BvbnNlLCBjaG9pY2VzLCBmcm9tLCB0byk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5yZXNwb25zZSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZFRpbGVzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY3JlYXRlIHRpbGVzIGZyb20gY2hvaWNlcyBhbmQgcmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gW1xuICAgICAgICB7IGlkOiAnYzEnLCBsYWJlbDogJ0Nob2ljZSAxJyB9LFxuICAgICAgICB7IGlkOiAnYzInLCBsYWJlbDogJ0Nob2ljZSAyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdjMScgfSwgeyBpZDogJ2MyJyB9XTtcblxuICAgICAgY29uc3QgdGlsZXMgPSBidWlsZFRpbGVzKGNob2ljZXMsIHJlc3BvbnNlKTtcblxuICAgICAgZXhwZWN0KHRpbGVzKS50b0hhdmVMZW5ndGgoNCk7IC8vIDIgY2hvaWNlcyArIDIgdGFyZ2V0c1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXJrIGNob2ljZSB0aWxlcyBhcyBlZGl0YWJsZSBhbmQgZHJhZ2dhYmxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IFt7IGlkOiAnYzEnLCBsYWJlbDogJ0Nob2ljZSAxJyB9XTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdjMScgfV07XG5cbiAgICAgIGNvbnN0IHRpbGVzID0gYnVpbGRUaWxlcyhjaG9pY2VzLCByZXNwb25zZSk7XG4gICAgICBjb25zdCBjaG9pY2VUaWxlID0gdGlsZXMuZmluZCgodCkgPT4gdC50eXBlID09PSAnY2hvaWNlJyk7XG5cbiAgICAgIGV4cGVjdChjaG9pY2VUaWxlKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgdHlwZTogJ2Nob2ljZScsXG4gICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICAgIGRyb3BwYWJsZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWFyayB0YXJnZXQgdGlsZXMgYXMgZHJhZ2dhYmxlIGJ1dCBub3QgZWRpdGFibGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gW3sgaWQ6ICdjMScsIGxhYmVsOiAnQ2hvaWNlIDEnIH1dO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ2MxJyB9XTtcblxuICAgICAgY29uc3QgdGlsZXMgPSBidWlsZFRpbGVzKGNob2ljZXMsIHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IHRhcmdldFRpbGUgPSB0aWxlcy5maW5kKCh0KSA9PiB0LnR5cGUgPT09ICd0YXJnZXQnKTtcblxuICAgICAgZXhwZWN0KHRhcmdldFRpbGUpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICB0eXBlOiAndGFyZ2V0JyxcbiAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICBkcmFnZ2FibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggdGFyZ2V0IHRpbGVzIHdpdGggY29ycmVzcG9uZGluZyBjaG9pY2VzIGJ5IGlkJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAgeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScgfSxcbiAgICAgICAgeyBpZDogJ2MyJywgbGFiZWw6ICdDaG9pY2UgMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiAnYzInIH0sIHsgaWQ6ICdjMScgfV07XG5cbiAgICAgIGNvbnN0IHRpbGVzID0gYnVpbGRUaWxlcyhjaG9pY2VzLCByZXNwb25zZSk7XG4gICAgICBjb25zdCB0YXJnZXRUaWxlcyA9IHRpbGVzLmZpbHRlcigodCkgPT4gdC50eXBlID09PSAndGFyZ2V0Jyk7XG5cbiAgICAgIGV4cGVjdCh0YXJnZXRUaWxlc1swXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGlkOiAnYzInLFxuICAgICAgICBsYWJlbDogJ0Nob2ljZSAyJyxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHRhcmdldFRpbGVzWzFdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgaWQ6ICdjMScsXG4gICAgICAgIGxhYmVsOiAnQ2hvaWNlIDEnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFzc2lnbiBjb3JyZWN0IGluZGV4IHRvIHRhcmdldCB0aWxlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScgfV07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiAnYzEnIH1dO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgdGFyZ2V0VGlsZSA9IHRpbGVzLmZpbmQoKHQpID0+IHQudHlwZSA9PT0gJ3RhcmdldCcpO1xuXG4gICAgICBleHBlY3QodGFyZ2V0VGlsZS5pbmRleCkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHJlc3BvbnNlIHdpdGggbnVsbCBvciB1bmRlZmluZWQgaWRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAgeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScgfSxcbiAgICAgICAgeyBpZDogJ2MyJywgbGFiZWw6ICdDaG9pY2UgMicgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFt7IGlkOiBudWxsIH0sIHsgaWQ6IHVuZGVmaW5lZCB9LCB7IGlkOiAnYzEnIH1dO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgdGFyZ2V0VGlsZXMgPSB0aWxlcy5maWx0ZXIoKHQpID0+IHQudHlwZSA9PT0gJ3RhcmdldCcpO1xuXG4gICAgICBleHBlY3QodGFyZ2V0VGlsZXMpLnRvSGF2ZUxlbmd0aCgzKTtcbiAgICAgIGV4cGVjdCh0YXJnZXRUaWxlc1syXS5pZCkudG9CZSgnYzEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJlc2VydmUgY2hvaWNlIHByb3BlcnRpZXMgaW4gY2hvaWNlIHRpbGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2hvaWNlcyA9IFtcbiAgICAgICAgeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScsIGN1c3RvbVByb3A6ICd2YWx1ZScgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgY2hvaWNlVGlsZSA9IHRpbGVzLmZpbmQoKHQpID0+IHQudHlwZSA9PT0gJ2Nob2ljZScpO1xuXG4gICAgICBleHBlY3QoY2hvaWNlVGlsZS5jdXN0b21Qcm9wKS50b0JlKCd2YWx1ZScpO1xuICAgICAgZXhwZWN0KGNob2ljZVRpbGUubGFiZWwpLnRvQmUoJ0Nob2ljZSAxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIGNob2ljZSBwcm9wZXJ0aWVzIGluIHRhcmdldCB0aWxlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbXG4gICAgICAgIHsgaWQ6ICdjMScsIGxhYmVsOiAnQ2hvaWNlIDEnLCBjdXN0b21Qcm9wOiAndmFsdWUnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBbeyBpZDogJ2MxJyB9XTtcblxuICAgICAgY29uc3QgdGlsZXMgPSBidWlsZFRpbGVzKGNob2ljZXMsIHJlc3BvbnNlKTtcbiAgICAgIGNvbnN0IHRhcmdldFRpbGUgPSB0aWxlcy5maW5kKCh0KSA9PiB0LnR5cGUgPT09ICd0YXJnZXQnKTtcblxuICAgICAgZXhwZWN0KHRhcmdldFRpbGUuY3VzdG9tUHJvcCkudG9CZSgndmFsdWUnKTtcbiAgICAgIGV4cGVjdCh0YXJnZXRUaWxlLmxhYmVsKS50b0JlKCdDaG9pY2UgMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgY2hvaWNlcyBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gW107XG5cbiAgICAgIGNvbnN0IHRpbGVzID0gYnVpbGRUaWxlcyhjaG9pY2VzLCByZXNwb25zZSk7XG5cbiAgICAgIGV4cGVjdCh0aWxlcykudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBlbXB0eSByZXNwb25zZSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGNob2ljZXMgPSBbeyBpZDogJ2MxJywgbGFiZWw6ICdDaG9pY2UgMScgfV07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuXG4gICAgICBleHBlY3QodGlsZXMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgIGV4cGVjdCh0aWxlc1swXS50eXBlKS50b0JlKCdjaG9pY2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWFpbnRhaW4gb3JkZXIgb2YgY2hvaWNlcyBpbiBjaG9pY2UgdGlsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gW1xuICAgICAgICB7IGlkOiAnYzEnLCBsYWJlbDogJ0ZpcnN0JyB9LFxuICAgICAgICB7IGlkOiAnYzInLCBsYWJlbDogJ1NlY29uZCcgfSxcbiAgICAgICAgeyBpZDogJ2MzJywgbGFiZWw6ICdUaGlyZCcgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xuXG4gICAgICBjb25zdCB0aWxlcyA9IGJ1aWxkVGlsZXMoY2hvaWNlcywgcmVzcG9uc2UpO1xuICAgICAgY29uc3QgY2hvaWNlVGlsZXMgPSB0aWxlcy5maWx0ZXIoKHQpID0+IHQudHlwZSA9PT0gJ2Nob2ljZScpO1xuXG4gICAgICBleHBlY3QoY2hvaWNlVGlsZXMubWFwKCh0KSA9PiB0LmxhYmVsKSkudG9FcXVhbChbJ0ZpcnN0JywgJ1NlY29uZCcsICdUaGlyZCddKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGxhY2UgY2hvaWNlIHRpbGVzIGJlZm9yZSB0YXJnZXQgdGlsZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaG9pY2VzID0gW1xuICAgICAgICB7IGlkOiAnYzEnLCBsYWJlbDogJ0Nob2ljZSAxJyB9LFxuICAgICAgICB7IGlkOiAnYzInLCBsYWJlbDogJ0Nob2ljZSAyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gW3sgaWQ6ICdjMScgfV07XG5cbiAgICAgIGNvbnN0IHRpbGVzID0gYnVpbGRUaWxlcyhjaG9pY2VzLCByZXNwb25zZSk7XG5cbiAgICAgIGV4cGVjdCh0aWxlc1swXS50eXBlKS50b0JlKCdjaG9pY2UnKTtcbiAgICAgIGV4cGVjdCh0aWxlc1sxXS50eXBlKS50b0JlKCdjaG9pY2UnKTtcbiAgICAgIGV4cGVjdCh0aWxlc1syXS50eXBlKS50b0JlKCd0YXJnZXQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFPQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNO0VBQ3RCQSxRQUFRLENBQUMsMkJBQTJCLEVBQUUsTUFBTTtJQUMxQ0MsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLE1BQU07TUFDcEQsTUFBTUMsT0FBTyxHQUFHLElBQUFDLGdDQUF5QixFQUFDLENBQUM7TUFDM0NDLE1BQU0sQ0FBQyxPQUFPRixPQUFPLENBQUMsQ0FBQ0csSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxDQUFDLENBQUM7SUFFRkosRUFBRSxD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
|
package/configure/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/placement-ordering-configure",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.4.0-beta.8",
|
|
4
4
|
"private": true,
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "src/index.js",
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"@mui/icons-material": "^7.3.4",
|
|
12
12
|
"@mui/material": "^7.3.4",
|
|
13
13
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
14
|
-
"@pie-lib/config-ui": "13.0.
|
|
15
|
-
"@pie-lib/drag": "4.
|
|
16
|
-
"@pie-lib/editable-html-tip-tap": "2.
|
|
17
|
-
"@pie-lib/render-ui": "
|
|
14
|
+
"@pie-lib/config-ui": "13.1.0-beta.6",
|
|
15
|
+
"@pie-lib/drag": "4.0.6",
|
|
16
|
+
"@pie-lib/editable-html-tip-tap": "2.2.0-beta.6",
|
|
17
|
+
"@pie-lib/render-ui": "6.1.3",
|
|
18
18
|
"debug": "^4.1.1",
|
|
19
19
|
"lodash-es": "^4.17.23",
|
|
20
20
|
"nested-property": "^0.0.7",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,24 +3,56 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
# [11.4.0-beta.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.4.0-beta.7...@pie-element/placement-ordering-controller@11.4.0-beta.8) (2026-08-26)
|
|
7
7
|
|
|
8
8
|
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
# [11.4.0-beta.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.4.0-beta.6...@pie-element/placement-ordering-controller@11.4.0-beta.7) (2026-08-20)
|
|
11
11
|
|
|
12
12
|
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
# [11.4.0-beta.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.4.0-beta.5...@pie-element/placement-ordering-controller@11.4.0-beta.6) (2026-08-14)
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
# [11.4.0-beta.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.4.0-beta.4...@pie-element/placement-ordering-controller@11.4.0-beta.5) (2026-08-11)
|
|
19
|
+
|
|
20
|
+
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
21
|
+
|
|
22
|
+
# [11.4.0-beta.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.4.0-beta.3...@pie-element/placement-ordering-controller@11.4.0-beta.4) (2026-08-11)
|
|
23
|
+
|
|
24
|
+
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
25
|
+
|
|
26
|
+
# [11.4.0-beta.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.4.0-beta.2...@pie-element/placement-ordering-controller@11.4.0-beta.3) (2026-08-11)
|
|
27
|
+
|
|
28
|
+
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
29
|
+
|
|
30
|
+
# [11.4.0-beta.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.4.0-beta.1...@pie-element/placement-ordering-controller@11.4.0-beta.2) (2026-08-11)
|
|
31
|
+
|
|
32
|
+
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
19
33
|
|
|
20
|
-
|
|
34
|
+
# [11.4.0-beta.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.4.0-beta.0...@pie-element/placement-ordering-controller@11.4.0-beta.1) (2026-08-07)
|
|
21
35
|
|
|
22
36
|
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
23
37
|
|
|
38
|
+
# [11.4.0-beta.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.3.0-beta.0...@pie-element/placement-ordering-controller@11.4.0-beta.0) (2026-08-07)
|
|
39
|
+
|
|
40
|
+
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
41
|
+
|
|
42
|
+
# [11.3.0-beta.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.3.0-beta.0...@pie-element/placement-ordering-controller@11.3.0-beta.1) (2026-08-07)
|
|
43
|
+
|
|
44
|
+
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
45
|
+
|
|
46
|
+
# [11.3.0-beta.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.2.0-beta.0...@pie-element/placement-ordering-controller@11.3.0-beta.0) (2026-08-07)
|
|
47
|
+
|
|
48
|
+
**Note:** Version bump only for package @pie-element/placement-ordering-controller
|
|
49
|
+
|
|
50
|
+
# [11.2.0-beta.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.1.0...@pie-element/placement-ordering-controller@11.2.0-beta.0) (2026-08-07)
|
|
51
|
+
|
|
52
|
+
### Bug Fixes
|
|
53
|
+
|
|
54
|
+
- bump shared modules and libs PIE-695, PIE-697, PIE-699, PIE-680, PIE-714, PIE-665, PIE-656 ([4b76ae7](https://github.com/pie-framework/pie-elements/commit/4b76ae75d1c5ea6d55f7c6fb53f299dfcbda2b1f))
|
|
55
|
+
|
|
24
56
|
# [11.1.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/placement-ordering-controller@11.1.0-next.1...@pie-element/placement-ordering-controller@11.1.0) (2026-05-21)
|
|
25
57
|
|
|
26
58
|
### Bug Fixes
|