@design.estate/dees-catalog 4.10.0 → 4.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +4545 -2343
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +36 -5
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +32 -3
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +663 -142
- package/package.json +4 -4
- package/readme.md +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +44 -4
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +728 -163
package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js
CHANGED
|
@@ -38,6 +38,8 @@ import { themeDefaultStyles } from '../../00theme.js';
|
|
|
38
38
|
import { harnessFormatRelativeTime } from '../harness.helpers.js';
|
|
39
39
|
import '../../00group-utility/dees-icon/dees-icon.js';
|
|
40
40
|
const { repeat } = directives;
|
|
41
|
+
const dragAutoScrollMaxPixelsPerSecond = 900;
|
|
42
|
+
const dragThresholdPixels = 4;
|
|
41
43
|
/**
|
|
42
44
|
* Searchable conversation list, embeddable in a sidebar or a DeesModal.
|
|
43
45
|
* Emits `harness-session-select` on click, `harness-session-open` on
|
|
@@ -98,6 +100,15 @@ let DeesHarnessSessionList = (() => {
|
|
|
98
100
|
let _collapsedGroupIds_decorators;
|
|
99
101
|
let _collapsedGroupIds_initializers = [];
|
|
100
102
|
let _collapsedGroupIds_extraInitializers = [];
|
|
103
|
+
let _topScrollShadowVisible_decorators;
|
|
104
|
+
let _topScrollShadowVisible_initializers = [];
|
|
105
|
+
let _topScrollShadowVisible_extraInitializers = [];
|
|
106
|
+
let _bottomScrollShadowVisible_decorators;
|
|
107
|
+
let _bottomScrollShadowVisible_initializers = [];
|
|
108
|
+
let _bottomScrollShadowVisible_extraInitializers = [];
|
|
109
|
+
let _moveAnnouncement_decorators;
|
|
110
|
+
let _moveAnnouncement_initializers = [];
|
|
111
|
+
let _moveAnnouncement_extraInitializers = [];
|
|
101
112
|
var DeesHarnessSessionList = class extends _classSuper {
|
|
102
113
|
static { _classThis = this; }
|
|
103
114
|
static {
|
|
@@ -115,6 +126,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
115
126
|
_draggedItemHeight_decorators = [state()];
|
|
116
127
|
_expandedSessionIds_decorators = [state()];
|
|
117
128
|
_collapsedGroupIds_decorators = [state()];
|
|
129
|
+
_topScrollShadowVisible_decorators = [state()];
|
|
130
|
+
_bottomScrollShadowVisible_decorators = [state()];
|
|
131
|
+
_moveAnnouncement_decorators = [state()];
|
|
118
132
|
__esDecorate(this, null, _sessions_decorators, { kind: "accessor", name: "sessions", static: false, private: false, access: { has: obj => "sessions" in obj, get: obj => obj.sessions, set: (obj, value) => { obj.sessions = value; } }, metadata: _metadata }, _sessions_initializers, _sessions_extraInitializers);
|
|
119
133
|
__esDecorate(this, null, _selectedSessionId_decorators, { kind: "accessor", name: "selectedSessionId", static: false, private: false, access: { has: obj => "selectedSessionId" in obj, get: obj => obj.selectedSessionId, set: (obj, value) => { obj.selectedSessionId = value; } }, metadata: _metadata }, _selectedSessionId_initializers, _selectedSessionId_extraInitializers);
|
|
120
134
|
__esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
|
|
@@ -128,6 +142,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
128
142
|
__esDecorate(this, null, _draggedItemHeight_decorators, { kind: "accessor", name: "draggedItemHeight", static: false, private: false, access: { has: obj => "draggedItemHeight" in obj, get: obj => obj.draggedItemHeight, set: (obj, value) => { obj.draggedItemHeight = value; } }, metadata: _metadata }, _draggedItemHeight_initializers, _draggedItemHeight_extraInitializers);
|
|
129
143
|
__esDecorate(this, null, _expandedSessionIds_decorators, { kind: "accessor", name: "expandedSessionIds", static: false, private: false, access: { has: obj => "expandedSessionIds" in obj, get: obj => obj.expandedSessionIds, set: (obj, value) => { obj.expandedSessionIds = value; } }, metadata: _metadata }, _expandedSessionIds_initializers, _expandedSessionIds_extraInitializers);
|
|
130
144
|
__esDecorate(this, null, _collapsedGroupIds_decorators, { kind: "accessor", name: "collapsedGroupIds", static: false, private: false, access: { has: obj => "collapsedGroupIds" in obj, get: obj => obj.collapsedGroupIds, set: (obj, value) => { obj.collapsedGroupIds = value; } }, metadata: _metadata }, _collapsedGroupIds_initializers, _collapsedGroupIds_extraInitializers);
|
|
145
|
+
__esDecorate(this, null, _topScrollShadowVisible_decorators, { kind: "accessor", name: "topScrollShadowVisible", static: false, private: false, access: { has: obj => "topScrollShadowVisible" in obj, get: obj => obj.topScrollShadowVisible, set: (obj, value) => { obj.topScrollShadowVisible = value; } }, metadata: _metadata }, _topScrollShadowVisible_initializers, _topScrollShadowVisible_extraInitializers);
|
|
146
|
+
__esDecorate(this, null, _bottomScrollShadowVisible_decorators, { kind: "accessor", name: "bottomScrollShadowVisible", static: false, private: false, access: { has: obj => "bottomScrollShadowVisible" in obj, get: obj => obj.bottomScrollShadowVisible, set: (obj, value) => { obj.bottomScrollShadowVisible = value; } }, metadata: _metadata }, _bottomScrollShadowVisible_initializers, _bottomScrollShadowVisible_extraInitializers);
|
|
147
|
+
__esDecorate(this, null, _moveAnnouncement_decorators, { kind: "accessor", name: "moveAnnouncement", static: false, private: false, access: { has: obj => "moveAnnouncement" in obj, get: obj => obj.moveAnnouncement, set: (obj, value) => { obj.moveAnnouncement = value; } }, metadata: _metadata }, _moveAnnouncement_initializers, _moveAnnouncement_extraInitializers);
|
|
131
148
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
132
149
|
DeesHarnessSessionList = _classThis = _classDescriptor.value;
|
|
133
150
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -174,9 +191,27 @@ let DeesHarnessSessionList = (() => {
|
|
|
174
191
|
#collapsedGroupIds_accessor_storage = (__runInitializers(this, _expandedSessionIds_extraInitializers), __runInitializers(this, _collapsedGroupIds_initializers, new Set()));
|
|
175
192
|
get collapsedGroupIds() { return this.#collapsedGroupIds_accessor_storage; }
|
|
176
193
|
set collapsedGroupIds(value) { this.#collapsedGroupIds_accessor_storage = value; }
|
|
177
|
-
|
|
194
|
+
#topScrollShadowVisible_accessor_storage = (__runInitializers(this, _collapsedGroupIds_extraInitializers), __runInitializers(this, _topScrollShadowVisible_initializers, false));
|
|
195
|
+
get topScrollShadowVisible() { return this.#topScrollShadowVisible_accessor_storage; }
|
|
196
|
+
set topScrollShadowVisible(value) { this.#topScrollShadowVisible_accessor_storage = value; }
|
|
197
|
+
#bottomScrollShadowVisible_accessor_storage = (__runInitializers(this, _topScrollShadowVisible_extraInitializers), __runInitializers(this, _bottomScrollShadowVisible_initializers, false));
|
|
198
|
+
get bottomScrollShadowVisible() { return this.#bottomScrollShadowVisible_accessor_storage; }
|
|
199
|
+
set bottomScrollShadowVisible(value) { this.#bottomScrollShadowVisible_accessor_storage = value; }
|
|
200
|
+
#moveAnnouncement_accessor_storage = (__runInitializers(this, _bottomScrollShadowVisible_extraInitializers), __runInitializers(this, _moveAnnouncement_initializers, ''));
|
|
201
|
+
get moveAnnouncement() { return this.#moveAnnouncement_accessor_storage; }
|
|
202
|
+
set moveAnnouncement(value) { this.#moveAnnouncement_accessor_storage = value; }
|
|
203
|
+
reflowGeneration = (__runInitializers(this, _moveAnnouncement_extraInitializers), 0);
|
|
178
204
|
reflowAnimations = new Set();
|
|
179
|
-
|
|
205
|
+
pointerDragGesture;
|
|
206
|
+
keyboardMoveFocus;
|
|
207
|
+
scrollResizeObserver;
|
|
208
|
+
observedScrollContainer;
|
|
209
|
+
observedScrollContent;
|
|
210
|
+
dragAutoScrollFrame;
|
|
211
|
+
dragAutoScrollClientX = 0;
|
|
212
|
+
dragAutoScrollClientY = 0;
|
|
213
|
+
dragAutoScrollVelocity = 0;
|
|
214
|
+
dragAutoScrollLastFrame = 0;
|
|
180
215
|
static styles = [
|
|
181
216
|
themeDefaultStyles,
|
|
182
217
|
cssManager.defaultStyles,
|
|
@@ -236,12 +271,54 @@ let DeesHarnessSessionList = (() => {
|
|
|
236
271
|
}
|
|
237
272
|
|
|
238
273
|
.list {
|
|
239
|
-
|
|
240
|
-
|
|
274
|
+
width: 100%;
|
|
275
|
+
height: 100%;
|
|
241
276
|
overflow-y: auto;
|
|
242
277
|
scrollbar-width: thin;
|
|
243
278
|
scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
|
|
244
279
|
padding: 0 var(--dees-spacing-md) var(--dees-spacing-md);
|
|
280
|
+
box-sizing: border-box;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.listFrame {
|
|
284
|
+
position: relative;
|
|
285
|
+
flex: 1;
|
|
286
|
+
min-height: 0;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.scrollShadow {
|
|
290
|
+
position: absolute;
|
|
291
|
+
z-index: 1;
|
|
292
|
+
left: 0;
|
|
293
|
+
right: 0;
|
|
294
|
+
height: 16px;
|
|
295
|
+
opacity: 0;
|
|
296
|
+
pointer-events: none;
|
|
297
|
+
transition: opacity var(--dees-transition-fast) var(--dees-ease-standard);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.scrollShadow.visible {
|
|
301
|
+
opacity: 1;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.scrollShadow.top {
|
|
305
|
+
top: 0;
|
|
306
|
+
background: linear-gradient(
|
|
307
|
+
to bottom,
|
|
308
|
+
color-mix(in srgb, var(--dees-material-thin-bg-opaque) 74%, transparent),
|
|
309
|
+
transparent
|
|
310
|
+
);
|
|
311
|
+
box-shadow: var(--dees-shadow-sm);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.scrollShadow.bottom {
|
|
315
|
+
bottom: 0;
|
|
316
|
+
background: linear-gradient(
|
|
317
|
+
to top,
|
|
318
|
+
color-mix(in srgb, var(--dees-material-thin-bg-opaque) 74%, transparent),
|
|
319
|
+
transparent
|
|
320
|
+
);
|
|
321
|
+
box-shadow: var(--dees-shadow-up-sm);
|
|
245
322
|
}
|
|
246
323
|
|
|
247
324
|
.section {
|
|
@@ -253,50 +330,99 @@ let DeesHarnessSessionList = (() => {
|
|
|
253
330
|
|
|
254
331
|
.item {
|
|
255
332
|
--card-accent: var(--session-normal);
|
|
333
|
+
--card-inner-background: color-mix(in srgb, var(--dees-color-bg-primary) 90%, transparent);
|
|
334
|
+
--card-inner-border: transparent;
|
|
335
|
+
--card-lip-width: 3px;
|
|
256
336
|
position: relative;
|
|
257
337
|
width: 100%;
|
|
258
338
|
min-width: 0;
|
|
259
339
|
overflow: hidden;
|
|
260
|
-
border:
|
|
340
|
+
border: 0;
|
|
261
341
|
border-radius: var(--dees-radius-xl);
|
|
262
342
|
corner-shape: var(--dees-corner-shape);
|
|
263
|
-
background:
|
|
343
|
+
background: var(--card-accent);
|
|
264
344
|
color: var(--dees-color-text-primary);
|
|
265
|
-
box-shadow:
|
|
266
|
-
var(--dees-shadow-sm),
|
|
267
|
-
inset 3px 0 0 var(--card-accent);
|
|
345
|
+
box-shadow: var(--dees-shadow-sm);
|
|
268
346
|
box-sizing: border-box;
|
|
347
|
+
padding-left: var(--card-lip-width);
|
|
269
348
|
transition:
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
box-shadow var(--dees-transition-fast) var(--dees-ease-standard);
|
|
349
|
+
box-shadow var(--dees-transition-fast) var(--dees-ease-standard),
|
|
350
|
+
padding-left var(--dees-transition-fast) var(--dees-ease-standard);
|
|
273
351
|
}
|
|
274
352
|
|
|
275
353
|
.item:hover {
|
|
276
|
-
|
|
277
|
-
|
|
354
|
+
--card-inner-background: color-mix(
|
|
355
|
+
in srgb,
|
|
356
|
+
var(--dees-color-bg-primary) 90%,
|
|
357
|
+
var(--card-accent) 10%
|
|
358
|
+
);
|
|
359
|
+
box-shadow: var(--dees-shadow-md);
|
|
278
360
|
}
|
|
279
361
|
|
|
280
362
|
.item.selected {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
var(--
|
|
285
|
-
|
|
363
|
+
--card-inner-background: color-mix(
|
|
364
|
+
in srgb,
|
|
365
|
+
var(--dees-color-bg-primary) 86%,
|
|
366
|
+
var(--card-accent) 14%
|
|
367
|
+
);
|
|
368
|
+
--card-inner-border: var(--card-accent);
|
|
369
|
+
--card-lip-width: 16px;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
.item.selected:hover {
|
|
373
|
+
--card-inner-background: color-mix(
|
|
374
|
+
in srgb,
|
|
375
|
+
var(--dees-color-bg-primary) 82%,
|
|
376
|
+
var(--card-accent) 18%
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.itemInner {
|
|
381
|
+
min-width: 0;
|
|
382
|
+
overflow: hidden;
|
|
383
|
+
border: 1px solid var(--card-inner-border);
|
|
384
|
+
border-radius: calc(var(--dees-radius-xl) - 1px);
|
|
385
|
+
corner-shape: var(--dees-corner-shape);
|
|
386
|
+
background: var(--card-inner-background);
|
|
387
|
+
box-sizing: border-box;
|
|
388
|
+
transition:
|
|
389
|
+
background var(--dees-transition-fast) var(--dees-ease-standard),
|
|
390
|
+
border-color var(--dees-transition-fast) var(--dees-ease-standard);
|
|
286
391
|
}
|
|
287
392
|
|
|
288
393
|
.item.dragging {
|
|
289
|
-
position:
|
|
290
|
-
inset
|
|
291
|
-
|
|
292
|
-
|
|
394
|
+
position: fixed;
|
|
395
|
+
inset: 0 auto auto 0;
|
|
396
|
+
width: var(--drag-preview-width);
|
|
397
|
+
height: var(--drag-preview-height);
|
|
398
|
+
max-width: none;
|
|
399
|
+
margin: 0;
|
|
400
|
+
padding: 0 0 0 var(--card-lip-width);
|
|
401
|
+
opacity: 0.96;
|
|
293
402
|
pointer-events: none;
|
|
403
|
+
transform: translate3d(var(--drag-preview-x), var(--drag-preview-y), 0);
|
|
404
|
+
box-shadow: var(--dees-shadow-xl);
|
|
294
405
|
}
|
|
295
406
|
|
|
296
407
|
.item.state-working {
|
|
297
408
|
--card-accent: var(--session-working);
|
|
298
409
|
}
|
|
299
410
|
|
|
411
|
+
@keyframes workingDotPulse {
|
|
412
|
+
0%, 100% {
|
|
413
|
+
transform: scale(0.92);
|
|
414
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--session-working) 14%, transparent);
|
|
415
|
+
}
|
|
416
|
+
50% {
|
|
417
|
+
transform: scale(1.08);
|
|
418
|
+
box-shadow: 0 0 0 6px color-mix(in srgb, var(--session-working) 3%, transparent);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.item.state-working .itemHeader .stateDot {
|
|
423
|
+
animation: workingDotPulse 2.4s ease-in-out infinite;
|
|
424
|
+
}
|
|
425
|
+
|
|
300
426
|
.item.state-finished {
|
|
301
427
|
--card-accent: var(--session-finished);
|
|
302
428
|
}
|
|
@@ -311,29 +437,54 @@ let DeesHarnessSessionList = (() => {
|
|
|
311
437
|
|
|
312
438
|
@keyframes attentionPulse {
|
|
313
439
|
0%, 100% {
|
|
314
|
-
|
|
315
|
-
0 0 0 0 color-mix(in srgb, var(--session-attention) 0%, transparent),
|
|
316
|
-
var(--dees-shadow-sm),
|
|
317
|
-
inset 3px 0 0 var(--session-attention);
|
|
440
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 94%, var(--session-attention) 6%);
|
|
318
441
|
}
|
|
319
442
|
50% {
|
|
320
|
-
|
|
321
|
-
0 0 0 4px color-mix(in srgb, var(--session-attention) 26%, transparent),
|
|
322
|
-
0 7px 18px color-mix(in srgb, var(--session-attention) 16%, transparent),
|
|
323
|
-
inset 3px 0 0 var(--session-attention);
|
|
443
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 84%, var(--session-attention) 16%);
|
|
324
444
|
}
|
|
325
445
|
}
|
|
326
446
|
|
|
327
|
-
.item.state-attention
|
|
447
|
+
.item.state-attention .itemInner {
|
|
328
448
|
animation: attentionPulse 1.15s ease-in-out infinite;
|
|
329
449
|
}
|
|
330
450
|
|
|
451
|
+
.item.state-attention:hover .itemInner {
|
|
452
|
+
animation: none;
|
|
453
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 82%, var(--session-attention) 18%);
|
|
454
|
+
}
|
|
455
|
+
|
|
331
456
|
.itemHeader {
|
|
332
457
|
display: grid;
|
|
333
458
|
grid-template-columns: minmax(0, 1fr) 30px;
|
|
334
459
|
min-height: 46px;
|
|
335
460
|
}
|
|
336
461
|
|
|
462
|
+
.itemHeader.draggable {
|
|
463
|
+
grid-template-columns: 24px minmax(0, 1fr) 30px;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
.dragHandle {
|
|
467
|
+
appearance: none;
|
|
468
|
+
display: grid;
|
|
469
|
+
place-items: center;
|
|
470
|
+
padding: 0;
|
|
471
|
+
border: 0;
|
|
472
|
+
background: transparent;
|
|
473
|
+
color: var(--dees-color-text-muted);
|
|
474
|
+
cursor: grab;
|
|
475
|
+
touch-action: none;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
.dragHandle:active {
|
|
479
|
+
cursor: grabbing;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
.dragHandle:focus-visible {
|
|
483
|
+
outline: 2px solid var(--dees-color-accent-primary);
|
|
484
|
+
outline-offset: -3px;
|
|
485
|
+
border-radius: 8px;
|
|
486
|
+
}
|
|
487
|
+
|
|
337
488
|
.itemPrimary,
|
|
338
489
|
.expandToggle {
|
|
339
490
|
appearance: none;
|
|
@@ -572,7 +723,10 @@ let DeesHarnessSessionList = (() => {
|
|
|
572
723
|
|
|
573
724
|
@media (prefers-reduced-motion: reduce) {
|
|
574
725
|
.item,
|
|
575
|
-
.
|
|
726
|
+
.itemInner,
|
|
727
|
+
.item.state-attention .itemInner,
|
|
728
|
+
.item.state-working .itemHeader .stateDot,
|
|
729
|
+
.scrollShadow,
|
|
576
730
|
.expandToggle dees-icon {
|
|
577
731
|
animation: none;
|
|
578
732
|
transition: none;
|
|
@@ -620,16 +774,20 @@ let DeesHarnessSessionList = (() => {
|
|
|
620
774
|
}
|
|
621
775
|
updated(changedProperties) {
|
|
622
776
|
super.updated(changedProperties);
|
|
623
|
-
|
|
624
|
-
|
|
777
|
+
this.observeScrollGeometry();
|
|
778
|
+
this.syncScrollShadowState();
|
|
779
|
+
this.restoreKeyboardMoveFocus();
|
|
780
|
+
if (this.pointerDragGesture
|
|
781
|
+
&& (!this.pointerDragGesture.source.isConnected || !this.pointerDragGesture.handle.isConnected)) {
|
|
782
|
+
this.finishPointerDrag(false);
|
|
625
783
|
}
|
|
626
784
|
if (!changedProperties.has('sessions'))
|
|
627
785
|
return;
|
|
628
786
|
const previousSessions = changedProperties.get('sessions');
|
|
629
787
|
const previousById = new Map((previousSessions ?? []).map((session) => [session.id, session]));
|
|
630
788
|
const knownIds = new Set(this.sessions.map((session) => session.id));
|
|
631
|
-
if (this.
|
|
632
|
-
this.
|
|
789
|
+
if (this.pointerDragGesture && !knownIds.has(this.pointerDragGesture.sessionId)) {
|
|
790
|
+
this.finishPointerDrag(false);
|
|
633
791
|
}
|
|
634
792
|
const nextExpanded = new Set([...this.expandedSessionIds].filter((sessionId) => knownIds.has(sessionId)));
|
|
635
793
|
for (const session of this.sessions) {
|
|
@@ -643,8 +801,20 @@ let DeesHarnessSessionList = (() => {
|
|
|
643
801
|
this.expandedSessionIds = nextExpanded;
|
|
644
802
|
}
|
|
645
803
|
}
|
|
804
|
+
async connectedCallback() {
|
|
805
|
+
await super.connectedCallback();
|
|
806
|
+
await this.updateComplete;
|
|
807
|
+
if (!this.isConnected)
|
|
808
|
+
return;
|
|
809
|
+
this.observeScrollGeometry();
|
|
810
|
+
this.syncScrollShadowState();
|
|
811
|
+
}
|
|
646
812
|
async disconnectedCallback() {
|
|
647
|
-
this.
|
|
813
|
+
this.finishPointerDrag(false);
|
|
814
|
+
this.scrollResizeObserver?.disconnect();
|
|
815
|
+
this.scrollResizeObserver = undefined;
|
|
816
|
+
this.observedScrollContainer = undefined;
|
|
817
|
+
this.observedScrollContent = undefined;
|
|
648
818
|
await super.disconnectedCallback();
|
|
649
819
|
}
|
|
650
820
|
render() {
|
|
@@ -660,13 +830,23 @@ let DeesHarnessSessionList = (() => {
|
|
|
660
830
|
}}
|
|
661
831
|
/>
|
|
662
832
|
</div>
|
|
663
|
-
<div class="
|
|
664
|
-
${this.
|
|
833
|
+
<div class="listFrame">
|
|
834
|
+
<div class="scrollShadow top ${this.topScrollShadowVisible ? 'visible' : ''}"></div>
|
|
835
|
+
<div
|
|
836
|
+
class="list"
|
|
837
|
+
@scroll=${this.syncScrollShadowState}
|
|
838
|
+
>
|
|
839
|
+
<div class="listContent">
|
|
840
|
+
${this.loading
|
|
665
841
|
? html `<div class="emptyNote">Loading conversations…</div>`
|
|
666
842
|
: groupingActive
|
|
667
843
|
? this.renderGroupedList()
|
|
668
844
|
: this.renderFlatList()}
|
|
845
|
+
</div>
|
|
846
|
+
</div>
|
|
847
|
+
<div class="scrollShadow bottom ${this.bottomScrollShadowVisible ? 'visible' : ''}"></div>
|
|
669
848
|
</div>
|
|
849
|
+
<div class="visuallyHidden" aria-live="polite">${this.moveAnnouncement}</div>
|
|
670
850
|
${groupingActive
|
|
671
851
|
? html `
|
|
672
852
|
<div class="newGroupRow">
|
|
@@ -719,6 +899,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
719
899
|
return html `
|
|
720
900
|
<button
|
|
721
901
|
class="groupHeader ${collapsed ? 'collapsed' : ''} ${isHeaderDrop ? 'dropTarget' : ''}"
|
|
902
|
+
data-drop-group-id=${group.id}
|
|
903
|
+
data-drop-index=${this.sortableSessions(members).length}
|
|
904
|
+
data-drop-kind="slot"
|
|
722
905
|
type="button"
|
|
723
906
|
@click=${() => this.toggleGroupCollapsed(group.id)}
|
|
724
907
|
@contextmenu=${(event) => {
|
|
@@ -731,8 +914,6 @@ let DeesHarnessSessionList = (() => {
|
|
|
731
914
|
};
|
|
732
915
|
this.dispatchEvent(new CustomEvent('harness-group-context', { detail, bubbles: true, composed: true }));
|
|
733
916
|
}}
|
|
734
|
-
@dragover=${(event) => this.handleDragOverSlot(event, group.id, this.sortableSessions(members).length)}
|
|
735
|
-
@drop=${(event) => this.handleDrop(event, group.id, this.sortableSessions(members).length)}
|
|
736
917
|
>
|
|
737
918
|
<dees-icon class="chevron" icon="lucide:ChevronDown" iconSize="12"></dees-icon>
|
|
738
919
|
<span>${group.name}</span>
|
|
@@ -747,10 +928,11 @@ let DeesHarnessSessionList = (() => {
|
|
|
747
928
|
? html `
|
|
748
929
|
<button
|
|
749
930
|
class="groupHeader"
|
|
931
|
+
data-drop-group-id=""
|
|
932
|
+
data-drop-index="0"
|
|
933
|
+
data-drop-kind="slot"
|
|
750
934
|
type="button"
|
|
751
935
|
tabindex="-1"
|
|
752
|
-
@dragover=${(event) => this.handleDragOverSlot(event, null, 0)}
|
|
753
|
-
@drop=${(event) => this.handleDrop(event, null, 0)}
|
|
754
936
|
>
|
|
755
937
|
<span>Ungrouped</span>
|
|
756
938
|
<span class="groupCount">${ungrouped.length}</span>
|
|
@@ -796,8 +978,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
796
978
|
? html `
|
|
797
979
|
<div
|
|
798
980
|
class="emptyDropZone"
|
|
799
|
-
|
|
800
|
-
|
|
981
|
+
data-drop-group-id=${groupId ?? ''}
|
|
982
|
+
data-drop-index="0"
|
|
983
|
+
data-drop-kind="slot"
|
|
801
984
|
></div>
|
|
802
985
|
`
|
|
803
986
|
: ''}
|
|
@@ -808,27 +991,30 @@ let DeesHarnessSessionList = (() => {
|
|
|
808
991
|
return html `
|
|
809
992
|
<div
|
|
810
993
|
class="dropPlaceholder"
|
|
994
|
+
data-drop-group-id=${groupId ?? ''}
|
|
995
|
+
data-drop-index=${index}
|
|
996
|
+
data-drop-kind="slot"
|
|
811
997
|
style=${`height: ${Math.max(46, this.draggedItemHeight)}px`}
|
|
812
|
-
@dragover=${(event) => this.handleDragOverSlot(event, groupId, index)}
|
|
813
|
-
@drop=${(event) => this.handleDrop(event, groupId, index)}
|
|
814
998
|
></div>
|
|
815
999
|
`;
|
|
816
1000
|
}
|
|
817
1001
|
renderItem(session, groupId, index) {
|
|
818
1002
|
const draggable = (this.enableGrouping
|
|
819
1003
|
&& session.draggable !== false
|
|
820
|
-
&& index >= 0
|
|
821
|
-
&& !globalThis.matchMedia?.('(pointer: coarse)').matches);
|
|
1004
|
+
&& index >= 0);
|
|
822
1005
|
const expanded = this.expandedSessionIds.has(session.id);
|
|
823
1006
|
const state = session.state ?? 'normal';
|
|
824
1007
|
const detailsId = `session-details-${session.id}`;
|
|
1008
|
+
const dropIndex = index < 0 ? 0 : index;
|
|
825
1009
|
return html `
|
|
826
1010
|
<article
|
|
827
1011
|
class="item state-${state} ${expanded ? 'expanded' : ''} ${session.id === this.selectedSessionId ? 'selected' : ''} ${this.draggingSessionId === session.id ? 'dragging' : ''}"
|
|
828
1012
|
data-session-id=${session.id}
|
|
829
|
-
|
|
1013
|
+
data-drop-group-id=${groupId ?? ''}
|
|
1014
|
+
data-drop-index=${dropIndex}
|
|
1015
|
+
data-drop-kind=${index < 0 ? 'slot' : 'card'}
|
|
830
1016
|
@dblclick=${(event) => {
|
|
831
|
-
if (this.eventTargetsExpandToggle(event))
|
|
1017
|
+
if (this.eventTargetsExpandToggle(event) || this.eventTargetsDragHandle(event))
|
|
832
1018
|
return;
|
|
833
1019
|
this.emit('harness-session-open', session);
|
|
834
1020
|
}}
|
|
@@ -844,85 +1030,94 @@ let DeesHarnessSessionList = (() => {
|
|
|
844
1030
|
};
|
|
845
1031
|
this.dispatchEvent(new CustomEvent('harness-session-context', { detail, bubbles: true, composed: true }));
|
|
846
1032
|
}}
|
|
847
|
-
@dragstart=${(event) => {
|
|
848
|
-
this.handleDragStart(event, session, groupId, index, draggable);
|
|
849
|
-
}}
|
|
850
|
-
@dragend=${() => this.clearDragState()}
|
|
851
|
-
@dragover=${(event) => {
|
|
852
|
-
if (!this.draggingSessionId || index < 0 || session.id === this.draggingSessionId)
|
|
853
|
-
return;
|
|
854
|
-
event.preventDefault();
|
|
855
|
-
const rect = event.currentTarget.getBoundingClientRect();
|
|
856
|
-
const before = event.clientY < rect.top + rect.height / 2;
|
|
857
|
-
this.setDropSlot(groupId, before ? index : index + 1);
|
|
858
|
-
}}
|
|
859
|
-
@drop=${(event) => {
|
|
860
|
-
if (index < 0 || session.id === this.draggingSessionId)
|
|
861
|
-
return;
|
|
862
|
-
const rect = event.currentTarget.getBoundingClientRect();
|
|
863
|
-
const before = event.clientY < rect.top + rect.height / 2;
|
|
864
|
-
this.handleDrop(event, groupId, before ? index : index + 1);
|
|
865
|
-
}}
|
|
866
1033
|
>
|
|
867
|
-
<div class="
|
|
868
|
-
<
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
1034
|
+
<div class="itemInner">
|
|
1035
|
+
<div class="itemHeader ${draggable ? 'draggable' : ''}">
|
|
1036
|
+
${draggable
|
|
1037
|
+
? html `
|
|
1038
|
+
<button
|
|
1039
|
+
class="dragHandle"
|
|
1040
|
+
type="button"
|
|
1041
|
+
title="Drag to reorder; use arrow, Home, or End keys for keyboard reordering"
|
|
1042
|
+
aria-label=${`Reorder ${session.title || session.id}`}
|
|
1043
|
+
aria-keyshortcuts="ArrowUp ArrowDown Home End"
|
|
1044
|
+
@pointerdown=${(event) => {
|
|
1045
|
+
this.handlePointerDown(event, session, groupId, index);
|
|
1046
|
+
}}
|
|
1047
|
+
@pointermove=${this.handlePointerMove}
|
|
1048
|
+
@pointerup=${this.handlePointerUp}
|
|
1049
|
+
@pointercancel=${this.handlePointerCancel}
|
|
1050
|
+
@lostpointercapture=${this.handleLostPointerCapture}
|
|
1051
|
+
@keydown=${(event) => {
|
|
1052
|
+
this.handleKeyboardMove(event, session, groupId);
|
|
1053
|
+
}}
|
|
1054
|
+
>
|
|
1055
|
+
<dees-icon icon="lucide:GripVertical" iconSize="14"></dees-icon>
|
|
1056
|
+
</button>
|
|
1057
|
+
`
|
|
1058
|
+
: ''}
|
|
1059
|
+
<button
|
|
1060
|
+
class="itemPrimary"
|
|
1061
|
+
type="button"
|
|
1062
|
+
aria-current=${session.id === this.selectedSessionId ? 'true' : 'false'}
|
|
1063
|
+
@click=${() => this.emit('harness-session-select', session)}
|
|
1064
|
+
@keydown=${(event) => {
|
|
874
1065
|
if (event.key !== 'Enter')
|
|
875
1066
|
return;
|
|
876
1067
|
event.preventDefault();
|
|
877
1068
|
this.emit('harness-session-open', session);
|
|
878
1069
|
}}
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
1070
|
+
>
|
|
1071
|
+
<span class="stateDot"></span>
|
|
1072
|
+
<span class="itemCopy">
|
|
1073
|
+
<span class="itemTitle">
|
|
1074
|
+
${session.icon
|
|
884
1075
|
? html `<dees-icon class="itemIcon" icon=${session.icon} iconSize="13"></dees-icon>`
|
|
885
1076
|
: ''}
|
|
886
|
-
|
|
1077
|
+
<span class="titleText">${session.title || session.id}</span>
|
|
1078
|
+
</span>
|
|
1079
|
+
<span class="itemTime">${harnessFormatRelativeTime(session.updatedAt ?? session.createdAt)}</span>
|
|
1080
|
+
<span class="visuallyHidden">Status: ${this.sessionStateLabel(state)}</span>
|
|
887
1081
|
</span>
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
aria-controls=${detailsId}
|
|
897
|
-
title=${expanded ? 'Collapse conversation card' : 'Expand conversation card'}
|
|
898
|
-
@click=${(event) => {
|
|
1082
|
+
</button>
|
|
1083
|
+
<button
|
|
1084
|
+
class="expandToggle"
|
|
1085
|
+
type="button"
|
|
1086
|
+
aria-expanded=${expanded ? 'true' : 'false'}
|
|
1087
|
+
aria-controls=${detailsId}
|
|
1088
|
+
title=${expanded ? 'Collapse conversation card' : 'Expand conversation card'}
|
|
1089
|
+
@click=${(event) => {
|
|
899
1090
|
event.stopPropagation();
|
|
900
1091
|
this.toggleSessionExpanded(session.id);
|
|
901
1092
|
}}
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
1093
|
+
>
|
|
1094
|
+
<dees-icon icon="lucide:ChevronDown" iconSize="15"></dees-icon>
|
|
1095
|
+
</button>
|
|
1096
|
+
</div>
|
|
1097
|
+
${expanded
|
|
907
1098
|
? html `
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
1099
|
+
<div class="itemDetails" id=${detailsId}>
|
|
1100
|
+
<div class="stateLine">
|
|
1101
|
+
<span class="stateDot"></span>
|
|
1102
|
+
<span>${this.sessionStateLabel(state)}</span>
|
|
1103
|
+
</div>
|
|
1104
|
+
${session.preview ? html `<div class="itemPreview">${session.preview}</div>` : ''}
|
|
1105
|
+
<div class="itemMeta">
|
|
1106
|
+
${session.messageCount ? `${session.messageCount} messages · ` : ''}${session.id}
|
|
1107
|
+
</div>
|
|
912
1108
|
</div>
|
|
913
|
-
|
|
914
|
-
<div class="itemMeta">
|
|
915
|
-
${session.messageCount ? `${session.messageCount} messages · ` : ''}${session.id}
|
|
916
|
-
</div>
|
|
917
|
-
</div>
|
|
918
|
-
`
|
|
1109
|
+
`
|
|
919
1110
|
: ''}
|
|
1111
|
+
</div>
|
|
920
1112
|
</article>
|
|
921
1113
|
`;
|
|
922
1114
|
}
|
|
923
1115
|
eventTargetsExpandToggle(event) {
|
|
924
1116
|
return event.composedPath().some((target) => target instanceof HTMLElement && target.classList.contains('expandToggle'));
|
|
925
1117
|
}
|
|
1118
|
+
eventTargetsDragHandle(event) {
|
|
1119
|
+
return event.composedPath().some((target) => target instanceof HTMLElement && target.classList.contains('dragHandle'));
|
|
1120
|
+
}
|
|
926
1121
|
sessionStateLabel(state) {
|
|
927
1122
|
switch (state) {
|
|
928
1123
|
case 'working': return 'Working';
|
|
@@ -965,22 +1160,120 @@ let DeesHarnessSessionList = (() => {
|
|
|
965
1160
|
.map((sessionId) => byId.get(sessionId))
|
|
966
1161
|
.filter((session) => session !== undefined);
|
|
967
1162
|
}
|
|
968
|
-
|
|
969
|
-
if (
|
|
970
|
-
|
|
1163
|
+
handlePointerDown(eventArg, sessionArg, groupIdArg, logicalIndexArg) {
|
|
1164
|
+
if (this.pointerDragGesture
|
|
1165
|
+
|| eventArg.button !== 0
|
|
1166
|
+
|| !eventArg.isPrimary
|
|
1167
|
+
|| logicalIndexArg < 0)
|
|
1168
|
+
return;
|
|
1169
|
+
const handle = eventArg.currentTarget;
|
|
1170
|
+
const source = handle.closest('.item');
|
|
1171
|
+
if (!source)
|
|
1172
|
+
return;
|
|
1173
|
+
const sourceRect = source.getBoundingClientRect();
|
|
1174
|
+
this.pointerDragGesture = {
|
|
1175
|
+
pointerId: eventArg.pointerId,
|
|
1176
|
+
handle,
|
|
1177
|
+
source,
|
|
1178
|
+
sessionId: sessionArg.id,
|
|
1179
|
+
sourceGroupId: groupIdArg,
|
|
1180
|
+
sourceLogicalIndex: logicalIndexArg,
|
|
1181
|
+
startClientX: eventArg.clientX,
|
|
1182
|
+
startClientY: eventArg.clientY,
|
|
1183
|
+
grabOffsetX: eventArg.clientX - sourceRect.left,
|
|
1184
|
+
grabOffsetY: eventArg.clientY - sourceRect.top,
|
|
1185
|
+
phase: 'pending',
|
|
1186
|
+
};
|
|
1187
|
+
window.addEventListener('keydown', this.handleDragKeyDown, true);
|
|
1188
|
+
window.addEventListener('blur', this.handleDragWindowBlur);
|
|
1189
|
+
try {
|
|
1190
|
+
handle.setPointerCapture(eventArg.pointerId);
|
|
1191
|
+
}
|
|
1192
|
+
catch {
|
|
1193
|
+
this.finishPointerDrag(false);
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
handlePointerMove = (eventArg) => {
|
|
1197
|
+
const gesture = this.pointerDragGesture;
|
|
1198
|
+
if (!gesture || eventArg.pointerId !== gesture.pointerId)
|
|
1199
|
+
return;
|
|
1200
|
+
if (!gesture.source.isConnected || !gesture.handle.isConnected) {
|
|
1201
|
+
this.finishPointerDrag(false);
|
|
971
1202
|
return;
|
|
972
1203
|
}
|
|
973
|
-
|
|
1204
|
+
if (gesture.phase === 'pending'
|
|
1205
|
+
&& Math.hypot(eventArg.clientX - gesture.startClientX, eventArg.clientY - gesture.startClientY) < dragThresholdPixels)
|
|
1206
|
+
return;
|
|
1207
|
+
if (gesture.phase === 'pending' && !this.startPointerDrag(eventArg, gesture))
|
|
1208
|
+
return;
|
|
1209
|
+
eventArg.preventDefault();
|
|
1210
|
+
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
1211
|
+
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1212
|
+
this.dragAutoScrollClientY = eventArg.clientY;
|
|
1213
|
+
this.updateDragAutoScrollVelocity();
|
|
1214
|
+
this.updateDropSlotFromPointer();
|
|
1215
|
+
};
|
|
1216
|
+
handlePointerUp = (eventArg) => {
|
|
1217
|
+
const gesture = this.pointerDragGesture;
|
|
1218
|
+
if (!gesture || eventArg.pointerId !== gesture.pointerId)
|
|
1219
|
+
return;
|
|
1220
|
+
if (gesture.phase === 'active') {
|
|
1221
|
+
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1222
|
+
this.dragAutoScrollClientY = eventArg.clientY;
|
|
1223
|
+
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
1224
|
+
this.updateDropSlotFromPointer();
|
|
1225
|
+
this.finishPointerDrag(true);
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1228
|
+
this.finishPointerDrag(false);
|
|
1229
|
+
};
|
|
1230
|
+
handlePointerCancel = (eventArg) => {
|
|
1231
|
+
if (eventArg.pointerId === this.pointerDragGesture?.pointerId)
|
|
1232
|
+
this.finishPointerDrag(false);
|
|
1233
|
+
};
|
|
1234
|
+
handleLostPointerCapture = (eventArg) => {
|
|
1235
|
+
if (eventArg.pointerId === this.pointerDragGesture?.pointerId)
|
|
1236
|
+
this.finishPointerDrag(false);
|
|
1237
|
+
};
|
|
1238
|
+
handleDragKeyDown = (eventArg) => {
|
|
1239
|
+
if (eventArg.key !== 'Escape' || !this.pointerDragGesture)
|
|
1240
|
+
return;
|
|
1241
|
+
eventArg.preventDefault();
|
|
1242
|
+
eventArg.stopPropagation();
|
|
1243
|
+
this.finishPointerDrag(false);
|
|
1244
|
+
};
|
|
1245
|
+
handleDragWindowBlur = () => {
|
|
1246
|
+
this.finishPointerDrag(false);
|
|
1247
|
+
};
|
|
1248
|
+
startPointerDrag(eventArg, gestureArg) {
|
|
1249
|
+
const sourceRect = gestureArg.source.getBoundingClientRect();
|
|
1250
|
+
gestureArg.source.classList.add('dragging');
|
|
1251
|
+
gestureArg.source.style.setProperty('--drag-preview-width', `${sourceRect.width}px`);
|
|
1252
|
+
gestureArg.source.style.setProperty('--drag-preview-height', `${sourceRect.height}px`);
|
|
1253
|
+
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gestureArg);
|
|
1254
|
+
gestureArg.source.setAttribute('popover', 'manual');
|
|
1255
|
+
try {
|
|
1256
|
+
gestureArg.source.showPopover();
|
|
1257
|
+
}
|
|
1258
|
+
catch {
|
|
1259
|
+
this.finishPointerDrag(false);
|
|
1260
|
+
return false;
|
|
1261
|
+
}
|
|
1262
|
+
gestureArg.phase = 'active';
|
|
974
1263
|
this.reflowGeneration += 1;
|
|
975
1264
|
this.cancelReflowAnimations();
|
|
976
|
-
this.draggedItemHeight = Math.ceil(
|
|
977
|
-
this.
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
1265
|
+
this.draggedItemHeight = Math.ceil(sourceRect.height);
|
|
1266
|
+
this.draggingSessionId = gestureArg.sessionId;
|
|
1267
|
+
const remainingCount = this.sortableSessions(this.sessionsForGroup(gestureArg.sourceGroupId)).length;
|
|
1268
|
+
this.dropSlot = {
|
|
1269
|
+
groupId: gestureArg.sourceGroupId,
|
|
1270
|
+
index: Math.min(gestureArg.sourceLogicalIndex, remainingCount),
|
|
1271
|
+
};
|
|
1272
|
+
return true;
|
|
1273
|
+
}
|
|
1274
|
+
moveDragPreview(clientXArg, clientYArg, gestureArg) {
|
|
1275
|
+
gestureArg.source.style.setProperty('--drag-preview-x', `${clientXArg - gestureArg.grabOffsetX}px`);
|
|
1276
|
+
gestureArg.source.style.setProperty('--drag-preview-y', `${clientYArg - gestureArg.grabOffsetY}px`);
|
|
984
1277
|
}
|
|
985
1278
|
setDropSlot(groupIdArg, indexArg) {
|
|
986
1279
|
const current = this.dropSlot;
|
|
@@ -991,37 +1284,214 @@ let DeesHarnessSessionList = (() => {
|
|
|
991
1284
|
this.dropSlot = { groupId: groupIdArg, index: indexArg };
|
|
992
1285
|
void this.animateCardReflow(previousRects, generation);
|
|
993
1286
|
}
|
|
994
|
-
|
|
995
|
-
if (!this.
|
|
1287
|
+
clearDropSlot() {
|
|
1288
|
+
if (!this.dropSlot)
|
|
996
1289
|
return;
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
this.
|
|
1290
|
+
const previousRects = this.captureCardRects();
|
|
1291
|
+
const generation = ++this.reflowGeneration;
|
|
1292
|
+
this.dropSlot = undefined;
|
|
1293
|
+
void this.animateCardReflow(previousRects, generation);
|
|
1001
1294
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1295
|
+
updateDragAutoScrollVelocity() {
|
|
1296
|
+
const container = this.scrollContainer;
|
|
1297
|
+
if (!container || !this.draggingSessionId)
|
|
1298
|
+
return;
|
|
1299
|
+
const rect = container.getBoundingClientRect();
|
|
1300
|
+
if (this.dragAutoScrollClientX < rect.left || this.dragAutoScrollClientX > rect.right) {
|
|
1301
|
+
this.stopDragAutoScroll();
|
|
1302
|
+
return;
|
|
1303
|
+
}
|
|
1304
|
+
const edgeSize = Math.min(64, Math.max(32, rect.height * 0.25));
|
|
1305
|
+
const topDepth = Math.max(0, Math.min(1, (rect.top + edgeSize - this.dragAutoScrollClientY) / edgeSize));
|
|
1306
|
+
const bottomDepth = Math.max(0, Math.min(1, (this.dragAutoScrollClientY - (rect.bottom - edgeSize)) / edgeSize));
|
|
1307
|
+
this.dragAutoScrollVelocity = bottomDepth > 0
|
|
1308
|
+
? dragAutoScrollMaxPixelsPerSecond * bottomDepth * bottomDepth
|
|
1309
|
+
: topDepth > 0
|
|
1310
|
+
? -dragAutoScrollMaxPixelsPerSecond * topDepth * topDepth
|
|
1311
|
+
: 0;
|
|
1312
|
+
if (this.dragAutoScrollVelocity === 0) {
|
|
1313
|
+
this.stopDragAutoScroll();
|
|
1008
1314
|
return;
|
|
1009
1315
|
}
|
|
1316
|
+
if (this.dragAutoScrollFrame === undefined) {
|
|
1317
|
+
this.dragAutoScrollLastFrame = performance.now();
|
|
1318
|
+
this.dragAutoScrollFrame = requestAnimationFrame(this.runDragAutoScroll);
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1321
|
+
runDragAutoScroll = (timestampArg) => {
|
|
1322
|
+
this.dragAutoScrollFrame = undefined;
|
|
1323
|
+
const container = this.scrollContainer;
|
|
1324
|
+
if (!container || !this.draggingSessionId || this.dragAutoScrollVelocity === 0)
|
|
1325
|
+
return;
|
|
1326
|
+
const elapsedMs = Math.min(34, Math.max(0, timestampArg - this.dragAutoScrollLastFrame));
|
|
1327
|
+
this.dragAutoScrollLastFrame = timestampArg;
|
|
1328
|
+
const previousScrollTop = container.scrollTop;
|
|
1329
|
+
container.scrollTop += this.dragAutoScrollVelocity * elapsedMs / 1000;
|
|
1330
|
+
this.syncScrollShadowState();
|
|
1331
|
+
const atScrollBoundary = this.dragAutoScrollVelocity < 0
|
|
1332
|
+
? container.scrollTop <= 0
|
|
1333
|
+
: container.scrollTop + container.clientHeight >= container.scrollHeight - 1;
|
|
1334
|
+
if (container.scrollTop === previousScrollTop && atScrollBoundary) {
|
|
1335
|
+
this.stopDragAutoScroll();
|
|
1336
|
+
return;
|
|
1337
|
+
}
|
|
1338
|
+
this.updateDropSlotFromPointer();
|
|
1339
|
+
this.dragAutoScrollFrame = requestAnimationFrame(this.runDragAutoScroll);
|
|
1340
|
+
};
|
|
1341
|
+
updateDropSlotFromPointer() {
|
|
1342
|
+
const pointerX = this.dragAutoScrollClientX;
|
|
1343
|
+
const pointerY = this.dragAutoScrollClientY;
|
|
1344
|
+
const placeholder = this.shadowRoot?.querySelector('.dropPlaceholder');
|
|
1345
|
+
if (placeholder) {
|
|
1346
|
+
const rect = placeholder.getBoundingClientRect();
|
|
1347
|
+
if (pointerX >= rect.left
|
|
1348
|
+
&& pointerX <= rect.right
|
|
1349
|
+
&& pointerY >= rect.top
|
|
1350
|
+
&& pointerY <= rect.bottom) {
|
|
1351
|
+
this.setDropSlot(placeholder.dataset.dropGroupId || null, Number(placeholder.dataset.dropIndex));
|
|
1352
|
+
return;
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
const selector = '[data-drop-group-id][data-drop-index][data-drop-kind]';
|
|
1356
|
+
let target;
|
|
1357
|
+
const offsets = this.dragAutoScrollVelocity === 0
|
|
1358
|
+
? [0, -8, 8, -16, 16, -32, 32]
|
|
1359
|
+
: [0, 8, 16, 32, 48, 64, 96].map((value) => value * (this.dragAutoScrollVelocity < 0 ? 1 : -1));
|
|
1360
|
+
for (const offset of offsets) {
|
|
1361
|
+
const hit = this.shadowRoot?.elementFromPoint(pointerX, pointerY + offset);
|
|
1362
|
+
const candidate = hit?.closest(selector);
|
|
1363
|
+
if (candidate
|
|
1364
|
+
&& candidate.dataset.sessionId !== this.draggingSessionId
|
|
1365
|
+
&& Number(candidate.dataset.dropIndex) >= 0) {
|
|
1366
|
+
target = candidate;
|
|
1367
|
+
break;
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
if (!target) {
|
|
1371
|
+
this.clearDropSlot();
|
|
1372
|
+
return;
|
|
1373
|
+
}
|
|
1374
|
+
const baseIndex = Number(target.dataset.dropIndex);
|
|
1375
|
+
const groupId = target.dataset.dropGroupId || null;
|
|
1376
|
+
const rect = target.getBoundingClientRect();
|
|
1377
|
+
const index = target.dataset.dropKind === 'card' && pointerY >= rect.top + rect.height / 2
|
|
1378
|
+
? baseIndex + 1
|
|
1379
|
+
: baseIndex;
|
|
1380
|
+
this.setDropSlot(groupId, index);
|
|
1381
|
+
}
|
|
1382
|
+
get scrollContainer() {
|
|
1383
|
+
return this.shadowRoot?.querySelector('.list') ?? undefined;
|
|
1384
|
+
}
|
|
1385
|
+
observeScrollGeometry() {
|
|
1386
|
+
if (!this.isConnected)
|
|
1387
|
+
return;
|
|
1388
|
+
const container = this.scrollContainer;
|
|
1389
|
+
const content = this.shadowRoot?.querySelector('.listContent') ?? undefined;
|
|
1390
|
+
if (!container || !content)
|
|
1391
|
+
return;
|
|
1392
|
+
if (this.scrollResizeObserver
|
|
1393
|
+
&& this.observedScrollContainer === container
|
|
1394
|
+
&& this.observedScrollContent === content)
|
|
1395
|
+
return;
|
|
1396
|
+
this.scrollResizeObserver?.disconnect();
|
|
1397
|
+
this.scrollResizeObserver = new ResizeObserver(this.syncScrollShadowState);
|
|
1398
|
+
this.scrollResizeObserver.observe(container);
|
|
1399
|
+
this.scrollResizeObserver.observe(content);
|
|
1400
|
+
this.observedScrollContainer = container;
|
|
1401
|
+
this.observedScrollContent = content;
|
|
1402
|
+
}
|
|
1403
|
+
syncScrollShadowState = () => {
|
|
1404
|
+
const container = this.scrollContainer;
|
|
1405
|
+
if (!container)
|
|
1406
|
+
return;
|
|
1407
|
+
const topVisible = container.scrollTop > 1;
|
|
1408
|
+
const bottomVisible = container.scrollTop + container.clientHeight < container.scrollHeight - 1;
|
|
1409
|
+
if (this.topScrollShadowVisible !== topVisible)
|
|
1410
|
+
this.topScrollShadowVisible = topVisible;
|
|
1411
|
+
if (this.bottomScrollShadowVisible !== bottomVisible)
|
|
1412
|
+
this.bottomScrollShadowVisible = bottomVisible;
|
|
1413
|
+
};
|
|
1414
|
+
stopDragAutoScroll() {
|
|
1415
|
+
if (this.dragAutoScrollFrame !== undefined)
|
|
1416
|
+
cancelAnimationFrame(this.dragAutoScrollFrame);
|
|
1417
|
+
this.dragAutoScrollFrame = undefined;
|
|
1418
|
+
this.dragAutoScrollVelocity = 0;
|
|
1419
|
+
this.dragAutoScrollLastFrame = 0;
|
|
1420
|
+
}
|
|
1421
|
+
createMoveDetail(sessionIdArg, groupIdArg, indexArg) {
|
|
1010
1422
|
const targetSessions = this.sortableSessions(this.sessionsForGroup(groupIdArg));
|
|
1011
1423
|
const beforeSessionId = targetSessions[Math.max(0, indexArg)]?.id;
|
|
1012
|
-
const sourceGroupId = this.groups.find((group) => group.sessionIds.includes(
|
|
1424
|
+
const sourceGroupId = this.groups.find((group) => group.sessionIds.includes(sessionIdArg))?.id ?? null;
|
|
1013
1425
|
const sourceSessions = this.sortableSessions(this.sessionsForGroup(sourceGroupId), false);
|
|
1014
|
-
const sourceIndex = sourceSessions.findIndex((session) => session.id ===
|
|
1426
|
+
const sourceIndex = sourceSessions.findIndex((session) => session.id === sessionIdArg);
|
|
1015
1427
|
const compatibilityIndex = (sourceGroupId === groupIdArg
|
|
1016
1428
|
&& sourceIndex >= 0
|
|
1017
1429
|
&& indexArg > sourceIndex) ? indexArg + 1 : indexArg;
|
|
1018
|
-
|
|
1019
|
-
sessionId,
|
|
1430
|
+
return {
|
|
1431
|
+
sessionId: sessionIdArg,
|
|
1020
1432
|
groupId: groupIdArg,
|
|
1021
1433
|
index: Math.max(0, compatibilityIndex),
|
|
1022
1434
|
...(beforeSessionId ? { beforeSessionId } : {}),
|
|
1023
1435
|
};
|
|
1024
|
-
|
|
1436
|
+
}
|
|
1437
|
+
handleKeyboardMove(eventArg, sessionArg, groupIdArg) {
|
|
1438
|
+
if (!['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(eventArg.key))
|
|
1439
|
+
return;
|
|
1440
|
+
eventArg.preventDefault();
|
|
1441
|
+
eventArg.stopPropagation();
|
|
1442
|
+
const sessions = this.sortableSessions(this.sessionsForGroup(groupIdArg), false);
|
|
1443
|
+
const sourceIndex = sessions.findIndex((session) => session.id === sessionArg.id);
|
|
1444
|
+
if (sourceIndex < 0)
|
|
1445
|
+
return;
|
|
1446
|
+
const sectionIds = [...this.groups.map((group) => group.id), null];
|
|
1447
|
+
const sectionIndex = sectionIds.indexOf(groupIdArg);
|
|
1448
|
+
const adjacentGroupId = eventArg.key === 'ArrowUp' && sourceIndex === 0 && sectionIndex > 0
|
|
1449
|
+
? sectionIds[sectionIndex - 1]
|
|
1450
|
+
: eventArg.key === 'ArrowDown'
|
|
1451
|
+
&& sourceIndex === sessions.length - 1
|
|
1452
|
+
&& sectionIndex >= 0
|
|
1453
|
+
&& sectionIndex < sectionIds.length - 1
|
|
1454
|
+
? sectionIds[sectionIndex + 1]
|
|
1455
|
+
: undefined;
|
|
1456
|
+
if (adjacentGroupId !== undefined) {
|
|
1457
|
+
const targetSessions = this.sortableSessions(this.sessionsForGroup(adjacentGroupId), false);
|
|
1458
|
+
const targetIndex = eventArg.key === 'ArrowUp' ? targetSessions.length : 0;
|
|
1459
|
+
const beforeSession = targetSessions[targetIndex];
|
|
1460
|
+
const detail = {
|
|
1461
|
+
sessionId: sessionArg.id,
|
|
1462
|
+
groupId: adjacentGroupId,
|
|
1463
|
+
index: targetIndex,
|
|
1464
|
+
...(beforeSession ? { beforeSessionId: beforeSession.id } : {}),
|
|
1465
|
+
};
|
|
1466
|
+
const groupName = adjacentGroupId === null
|
|
1467
|
+
? 'Ungrouped'
|
|
1468
|
+
: this.groups.find((group) => group.id === adjacentGroupId)?.name ?? adjacentGroupId;
|
|
1469
|
+
this.moveAnnouncement = `Moved ${sessionArg.title || sessionArg.id} to ${groupName}.`;
|
|
1470
|
+
this.keyboardMoveFocus = { sessionId: sessionArg.id, groupId: adjacentGroupId };
|
|
1471
|
+
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
1472
|
+
return;
|
|
1473
|
+
}
|
|
1474
|
+
const remaining = sessions.filter((session) => session.id !== sessionArg.id);
|
|
1475
|
+
const targetIndex = eventArg.key === 'Home'
|
|
1476
|
+
? 0
|
|
1477
|
+
: eventArg.key === 'End'
|
|
1478
|
+
? remaining.length
|
|
1479
|
+
: eventArg.key === 'ArrowUp'
|
|
1480
|
+
? Math.max(0, sourceIndex - 1)
|
|
1481
|
+
: Math.min(remaining.length, sourceIndex + 1);
|
|
1482
|
+
if (targetIndex === sourceIndex)
|
|
1483
|
+
return;
|
|
1484
|
+
const beforeSession = remaining[targetIndex];
|
|
1485
|
+
const compatibilityIndex = targetIndex > sourceIndex ? targetIndex + 1 : targetIndex;
|
|
1486
|
+
const detail = {
|
|
1487
|
+
sessionId: sessionArg.id,
|
|
1488
|
+
groupId: groupIdArg,
|
|
1489
|
+
index: compatibilityIndex,
|
|
1490
|
+
...(beforeSession ? { beforeSessionId: beforeSession.id } : {}),
|
|
1491
|
+
};
|
|
1492
|
+
this.moveAnnouncement = beforeSession
|
|
1493
|
+
? `Moved ${sessionArg.title || sessionArg.id} before ${beforeSession.title || beforeSession.id}.`
|
|
1494
|
+
: `Moved ${sessionArg.title || sessionArg.id} to the end.`;
|
|
1025
1495
|
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
1026
1496
|
}
|
|
1027
1497
|
captureCardRects() {
|
|
@@ -1033,6 +1503,26 @@ let DeesHarnessSessionList = (() => {
|
|
|
1033
1503
|
}
|
|
1034
1504
|
return result;
|
|
1035
1505
|
}
|
|
1506
|
+
restoreKeyboardMoveFocus() {
|
|
1507
|
+
const pending = this.keyboardMoveFocus;
|
|
1508
|
+
if (!pending)
|
|
1509
|
+
return;
|
|
1510
|
+
const currentGroupId = this.groups.find((group) => group.sessionIds.includes(pending.sessionId))?.id ?? null;
|
|
1511
|
+
if (currentGroupId !== pending.groupId)
|
|
1512
|
+
return;
|
|
1513
|
+
const item = Array.from(this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []).find((candidate) => candidate.dataset.sessionId === pending.sessionId);
|
|
1514
|
+
const handle = item?.querySelector('.dragHandle');
|
|
1515
|
+
if (handle) {
|
|
1516
|
+
handle.focus();
|
|
1517
|
+
this.keyboardMoveFocus = undefined;
|
|
1518
|
+
return;
|
|
1519
|
+
}
|
|
1520
|
+
const groupHeader = Array.from(this.shadowRoot?.querySelectorAll('.groupHeader[data-drop-group-id]') ?? []).find((candidate) => candidate.dataset.dropGroupId === (pending.groupId ?? ''));
|
|
1521
|
+
if (groupHeader) {
|
|
1522
|
+
groupHeader.focus();
|
|
1523
|
+
this.keyboardMoveFocus = undefined;
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1036
1526
|
async animateCardReflow(previousRectsArg, generationArg) {
|
|
1037
1527
|
await this.updateComplete;
|
|
1038
1528
|
if (generationArg !== this.reflowGeneration
|
|
@@ -1066,13 +1556,44 @@ let DeesHarnessSessionList = (() => {
|
|
|
1066
1556
|
animation.cancel();
|
|
1067
1557
|
this.reflowAnimations.clear();
|
|
1068
1558
|
}
|
|
1069
|
-
|
|
1559
|
+
finishPointerDrag(commitArg) {
|
|
1560
|
+
const gesture = this.pointerDragGesture;
|
|
1561
|
+
if (!gesture)
|
|
1562
|
+
return;
|
|
1563
|
+
const detail = commitArg && gesture.phase === 'active' && this.dropSlot
|
|
1564
|
+
? this.createMoveDetail(gesture.sessionId, this.dropSlot.groupId, this.dropSlot.index)
|
|
1565
|
+
: undefined;
|
|
1566
|
+
this.pointerDragGesture = undefined;
|
|
1567
|
+
window.removeEventListener('keydown', this.handleDragKeyDown, true);
|
|
1568
|
+
window.removeEventListener('blur', this.handleDragWindowBlur);
|
|
1569
|
+
this.stopDragAutoScroll();
|
|
1070
1570
|
this.reflowGeneration += 1;
|
|
1071
1571
|
this.cancelReflowAnimations();
|
|
1572
|
+
if (gesture.source.matches(':popover-open'))
|
|
1573
|
+
gesture.source.hidePopover();
|
|
1574
|
+
gesture.source.removeAttribute('popover');
|
|
1575
|
+
gesture.source.classList.remove('dragging');
|
|
1576
|
+
for (const property of [
|
|
1577
|
+
'--drag-preview-width',
|
|
1578
|
+
'--drag-preview-height',
|
|
1579
|
+
'--drag-preview-x',
|
|
1580
|
+
'--drag-preview-y',
|
|
1581
|
+
])
|
|
1582
|
+
gesture.source.style.removeProperty(property);
|
|
1072
1583
|
this.draggingSessionId = '';
|
|
1073
1584
|
this.draggedItemHeight = 0;
|
|
1074
1585
|
this.dropSlot = undefined;
|
|
1075
|
-
|
|
1586
|
+
try {
|
|
1587
|
+
if (gesture.handle.hasPointerCapture(gesture.pointerId)) {
|
|
1588
|
+
gesture.handle.releasePointerCapture(gesture.pointerId);
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
catch {
|
|
1592
|
+
// Capture may already be released or the handle may have disconnected.
|
|
1593
|
+
}
|
|
1594
|
+
if (detail) {
|
|
1595
|
+
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
1596
|
+
}
|
|
1076
1597
|
}
|
|
1077
1598
|
emit(name, session) {
|
|
1078
1599
|
this.dispatchEvent(new CustomEvent(name, { detail: { session }, bubbles: true, composed: true }));
|
|
@@ -1084,4 +1605,4 @@ let DeesHarnessSessionList = (() => {
|
|
|
1084
1605
|
return DeesHarnessSessionList = _classThis;
|
|
1085
1606
|
})();
|
|
1086
1607
|
export { DeesHarnessSessionList };
|
|
1087
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVF0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLDhDQUE4QyxDQUFDO0FBRXRELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFpQjlCOzs7Ozs7Ozs7Ozs7OztHQWNHO0lBRVUsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUlwRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NkNBRzlCLFFBQVEsRUFBRTttQ0FHVixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7cUNBRzNCLFFBQVEsRUFBRTtrQ0FHVixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7MENBRzlCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUs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
|
|
1608
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVF0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLDhDQUE4QyxDQUFDO0FBRXRELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFDOUIsTUFBTSxnQ0FBZ0MsR0FBRyxHQUFHLENBQUM7QUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFvQzlCOzs7Ozs7Ozs7Ozs7OztHQWNHO0lBRVUsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUlwRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NkNBRzlCLFFBQVEsRUFBRTttQ0FHVixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7cUNBRzNCLFFBQVEsRUFBRTtrQ0FHVixRQUFRLENB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
|