@design.estate/dees-catalog 4.10.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +4473 -2293
- 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 +26 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +597 -93
- 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 +36 -3
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +651 -103
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 {
|
|
@@ -274,29 +351,64 @@ let DeesHarnessSessionList = (() => {
|
|
|
274
351
|
|
|
275
352
|
.item:hover {
|
|
276
353
|
border-color: color-mix(in srgb, var(--card-accent) 42%, var(--dees-color-border-default));
|
|
277
|
-
background: color-mix(in srgb, var(--dees-color-bg-primary)
|
|
354
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 90%, var(--card-accent) 10%);
|
|
355
|
+
box-shadow:
|
|
356
|
+
var(--dees-shadow-md),
|
|
357
|
+
inset 3px 0 0 var(--card-accent);
|
|
278
358
|
}
|
|
279
359
|
|
|
280
360
|
.item.selected {
|
|
281
|
-
border-color:
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
361
|
+
border-color: var(--dees-color-border-default);
|
|
362
|
+
border-left-color: var(--dees-color-accent-primary);
|
|
363
|
+
border-left-width: 3px;
|
|
364
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 90%, transparent);
|
|
365
|
+
box-shadow: var(--dees-shadow-md);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.item.selected:hover {
|
|
369
|
+
border-color: var(--dees-color-border-default);
|
|
370
|
+
border-left-color: var(--dees-color-accent-primary);
|
|
371
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 90%, transparent);
|
|
372
|
+
box-shadow: var(--dees-shadow-md);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.item.selected .titleText {
|
|
376
|
+
font-weight: 700;
|
|
286
377
|
}
|
|
287
378
|
|
|
288
379
|
.item.dragging {
|
|
289
|
-
position:
|
|
290
|
-
inset
|
|
291
|
-
|
|
292
|
-
|
|
380
|
+
position: fixed;
|
|
381
|
+
inset: 0 auto auto 0;
|
|
382
|
+
width: var(--drag-preview-width);
|
|
383
|
+
height: var(--drag-preview-height);
|
|
384
|
+
max-width: none;
|
|
385
|
+
margin: 0;
|
|
386
|
+
padding: 0;
|
|
387
|
+
opacity: 0.96;
|
|
293
388
|
pointer-events: none;
|
|
389
|
+
transform: translate3d(var(--drag-preview-x), var(--drag-preview-y), 0);
|
|
390
|
+
box-shadow: var(--dees-shadow-xl);
|
|
294
391
|
}
|
|
295
392
|
|
|
296
393
|
.item.state-working {
|
|
297
394
|
--card-accent: var(--session-working);
|
|
298
395
|
}
|
|
299
396
|
|
|
397
|
+
@keyframes workingDotPulse {
|
|
398
|
+
0%, 100% {
|
|
399
|
+
transform: scale(0.92);
|
|
400
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--session-working) 14%, transparent);
|
|
401
|
+
}
|
|
402
|
+
50% {
|
|
403
|
+
transform: scale(1.08);
|
|
404
|
+
box-shadow: 0 0 0 6px color-mix(in srgb, var(--session-working) 3%, transparent);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.item.state-working .itemHeader .stateDot {
|
|
409
|
+
animation: workingDotPulse 2.4s ease-in-out infinite;
|
|
410
|
+
}
|
|
411
|
+
|
|
300
412
|
.item.state-finished {
|
|
301
413
|
--card-accent: var(--session-finished);
|
|
302
414
|
}
|
|
@@ -311,16 +423,10 @@ let DeesHarnessSessionList = (() => {
|
|
|
311
423
|
|
|
312
424
|
@keyframes attentionPulse {
|
|
313
425
|
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);
|
|
426
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 94%, var(--session-attention) 6%);
|
|
318
427
|
}
|
|
319
428
|
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);
|
|
429
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 84%, var(--session-attention) 16%);
|
|
324
430
|
}
|
|
325
431
|
}
|
|
326
432
|
|
|
@@ -328,12 +434,43 @@ let DeesHarnessSessionList = (() => {
|
|
|
328
434
|
animation: attentionPulse 1.15s ease-in-out infinite;
|
|
329
435
|
}
|
|
330
436
|
|
|
437
|
+
.item.state-attention:not(.selected):hover {
|
|
438
|
+
animation: none;
|
|
439
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 82%, var(--session-attention) 18%);
|
|
440
|
+
}
|
|
441
|
+
|
|
331
442
|
.itemHeader {
|
|
332
443
|
display: grid;
|
|
333
444
|
grid-template-columns: minmax(0, 1fr) 30px;
|
|
334
445
|
min-height: 46px;
|
|
335
446
|
}
|
|
336
447
|
|
|
448
|
+
.itemHeader.draggable {
|
|
449
|
+
grid-template-columns: 24px minmax(0, 1fr) 30px;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.dragHandle {
|
|
453
|
+
appearance: none;
|
|
454
|
+
display: grid;
|
|
455
|
+
place-items: center;
|
|
456
|
+
padding: 0;
|
|
457
|
+
border: 0;
|
|
458
|
+
background: transparent;
|
|
459
|
+
color: var(--dees-color-text-muted);
|
|
460
|
+
cursor: grab;
|
|
461
|
+
touch-action: none;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
.dragHandle:active {
|
|
465
|
+
cursor: grabbing;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.dragHandle:focus-visible {
|
|
469
|
+
outline: 2px solid var(--dees-color-accent-primary);
|
|
470
|
+
outline-offset: -3px;
|
|
471
|
+
border-radius: 8px;
|
|
472
|
+
}
|
|
473
|
+
|
|
337
474
|
.itemPrimary,
|
|
338
475
|
.expandToggle {
|
|
339
476
|
appearance: none;
|
|
@@ -573,6 +710,8 @@ let DeesHarnessSessionList = (() => {
|
|
|
573
710
|
@media (prefers-reduced-motion: reduce) {
|
|
574
711
|
.item,
|
|
575
712
|
.item.state-attention,
|
|
713
|
+
.item.state-working .itemHeader .stateDot,
|
|
714
|
+
.scrollShadow,
|
|
576
715
|
.expandToggle dees-icon {
|
|
577
716
|
animation: none;
|
|
578
717
|
transition: none;
|
|
@@ -620,16 +759,20 @@ let DeesHarnessSessionList = (() => {
|
|
|
620
759
|
}
|
|
621
760
|
updated(changedProperties) {
|
|
622
761
|
super.updated(changedProperties);
|
|
623
|
-
|
|
624
|
-
|
|
762
|
+
this.observeScrollGeometry();
|
|
763
|
+
this.syncScrollShadowState();
|
|
764
|
+
this.restoreKeyboardMoveFocus();
|
|
765
|
+
if (this.pointerDragGesture
|
|
766
|
+
&& (!this.pointerDragGesture.source.isConnected || !this.pointerDragGesture.handle.isConnected)) {
|
|
767
|
+
this.finishPointerDrag(false);
|
|
625
768
|
}
|
|
626
769
|
if (!changedProperties.has('sessions'))
|
|
627
770
|
return;
|
|
628
771
|
const previousSessions = changedProperties.get('sessions');
|
|
629
772
|
const previousById = new Map((previousSessions ?? []).map((session) => [session.id, session]));
|
|
630
773
|
const knownIds = new Set(this.sessions.map((session) => session.id));
|
|
631
|
-
if (this.
|
|
632
|
-
this.
|
|
774
|
+
if (this.pointerDragGesture && !knownIds.has(this.pointerDragGesture.sessionId)) {
|
|
775
|
+
this.finishPointerDrag(false);
|
|
633
776
|
}
|
|
634
777
|
const nextExpanded = new Set([...this.expandedSessionIds].filter((sessionId) => knownIds.has(sessionId)));
|
|
635
778
|
for (const session of this.sessions) {
|
|
@@ -643,8 +786,20 @@ let DeesHarnessSessionList = (() => {
|
|
|
643
786
|
this.expandedSessionIds = nextExpanded;
|
|
644
787
|
}
|
|
645
788
|
}
|
|
789
|
+
async connectedCallback() {
|
|
790
|
+
await super.connectedCallback();
|
|
791
|
+
await this.updateComplete;
|
|
792
|
+
if (!this.isConnected)
|
|
793
|
+
return;
|
|
794
|
+
this.observeScrollGeometry();
|
|
795
|
+
this.syncScrollShadowState();
|
|
796
|
+
}
|
|
646
797
|
async disconnectedCallback() {
|
|
647
|
-
this.
|
|
798
|
+
this.finishPointerDrag(false);
|
|
799
|
+
this.scrollResizeObserver?.disconnect();
|
|
800
|
+
this.scrollResizeObserver = undefined;
|
|
801
|
+
this.observedScrollContainer = undefined;
|
|
802
|
+
this.observedScrollContent = undefined;
|
|
648
803
|
await super.disconnectedCallback();
|
|
649
804
|
}
|
|
650
805
|
render() {
|
|
@@ -660,13 +815,23 @@ let DeesHarnessSessionList = (() => {
|
|
|
660
815
|
}}
|
|
661
816
|
/>
|
|
662
817
|
</div>
|
|
663
|
-
<div class="
|
|
664
|
-
${this.
|
|
818
|
+
<div class="listFrame">
|
|
819
|
+
<div class="scrollShadow top ${this.topScrollShadowVisible ? 'visible' : ''}"></div>
|
|
820
|
+
<div
|
|
821
|
+
class="list"
|
|
822
|
+
@scroll=${this.syncScrollShadowState}
|
|
823
|
+
>
|
|
824
|
+
<div class="listContent">
|
|
825
|
+
${this.loading
|
|
665
826
|
? html `<div class="emptyNote">Loading conversations…</div>`
|
|
666
827
|
: groupingActive
|
|
667
828
|
? this.renderGroupedList()
|
|
668
829
|
: this.renderFlatList()}
|
|
830
|
+
</div>
|
|
831
|
+
</div>
|
|
832
|
+
<div class="scrollShadow bottom ${this.bottomScrollShadowVisible ? 'visible' : ''}"></div>
|
|
669
833
|
</div>
|
|
834
|
+
<div class="visuallyHidden" aria-live="polite">${this.moveAnnouncement}</div>
|
|
670
835
|
${groupingActive
|
|
671
836
|
? html `
|
|
672
837
|
<div class="newGroupRow">
|
|
@@ -719,6 +884,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
719
884
|
return html `
|
|
720
885
|
<button
|
|
721
886
|
class="groupHeader ${collapsed ? 'collapsed' : ''} ${isHeaderDrop ? 'dropTarget' : ''}"
|
|
887
|
+
data-drop-group-id=${group.id}
|
|
888
|
+
data-drop-index=${this.sortableSessions(members).length}
|
|
889
|
+
data-drop-kind="slot"
|
|
722
890
|
type="button"
|
|
723
891
|
@click=${() => this.toggleGroupCollapsed(group.id)}
|
|
724
892
|
@contextmenu=${(event) => {
|
|
@@ -731,8 +899,6 @@ let DeesHarnessSessionList = (() => {
|
|
|
731
899
|
};
|
|
732
900
|
this.dispatchEvent(new CustomEvent('harness-group-context', { detail, bubbles: true, composed: true }));
|
|
733
901
|
}}
|
|
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
902
|
>
|
|
737
903
|
<dees-icon class="chevron" icon="lucide:ChevronDown" iconSize="12"></dees-icon>
|
|
738
904
|
<span>${group.name}</span>
|
|
@@ -747,10 +913,11 @@ let DeesHarnessSessionList = (() => {
|
|
|
747
913
|
? html `
|
|
748
914
|
<button
|
|
749
915
|
class="groupHeader"
|
|
916
|
+
data-drop-group-id=""
|
|
917
|
+
data-drop-index="0"
|
|
918
|
+
data-drop-kind="slot"
|
|
750
919
|
type="button"
|
|
751
920
|
tabindex="-1"
|
|
752
|
-
@dragover=${(event) => this.handleDragOverSlot(event, null, 0)}
|
|
753
|
-
@drop=${(event) => this.handleDrop(event, null, 0)}
|
|
754
921
|
>
|
|
755
922
|
<span>Ungrouped</span>
|
|
756
923
|
<span class="groupCount">${ungrouped.length}</span>
|
|
@@ -796,8 +963,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
796
963
|
? html `
|
|
797
964
|
<div
|
|
798
965
|
class="emptyDropZone"
|
|
799
|
-
|
|
800
|
-
|
|
966
|
+
data-drop-group-id=${groupId ?? ''}
|
|
967
|
+
data-drop-index="0"
|
|
968
|
+
data-drop-kind="slot"
|
|
801
969
|
></div>
|
|
802
970
|
`
|
|
803
971
|
: ''}
|
|
@@ -808,27 +976,30 @@ let DeesHarnessSessionList = (() => {
|
|
|
808
976
|
return html `
|
|
809
977
|
<div
|
|
810
978
|
class="dropPlaceholder"
|
|
979
|
+
data-drop-group-id=${groupId ?? ''}
|
|
980
|
+
data-drop-index=${index}
|
|
981
|
+
data-drop-kind="slot"
|
|
811
982
|
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
983
|
></div>
|
|
815
984
|
`;
|
|
816
985
|
}
|
|
817
986
|
renderItem(session, groupId, index) {
|
|
818
987
|
const draggable = (this.enableGrouping
|
|
819
988
|
&& session.draggable !== false
|
|
820
|
-
&& index >= 0
|
|
821
|
-
&& !globalThis.matchMedia?.('(pointer: coarse)').matches);
|
|
989
|
+
&& index >= 0);
|
|
822
990
|
const expanded = this.expandedSessionIds.has(session.id);
|
|
823
991
|
const state = session.state ?? 'normal';
|
|
824
992
|
const detailsId = `session-details-${session.id}`;
|
|
993
|
+
const dropIndex = index < 0 ? 0 : index;
|
|
825
994
|
return html `
|
|
826
995
|
<article
|
|
827
996
|
class="item state-${state} ${expanded ? 'expanded' : ''} ${session.id === this.selectedSessionId ? 'selected' : ''} ${this.draggingSessionId === session.id ? 'dragging' : ''}"
|
|
828
997
|
data-session-id=${session.id}
|
|
829
|
-
|
|
998
|
+
data-drop-group-id=${groupId ?? ''}
|
|
999
|
+
data-drop-index=${dropIndex}
|
|
1000
|
+
data-drop-kind=${index < 0 ? 'slot' : 'card'}
|
|
830
1001
|
@dblclick=${(event) => {
|
|
831
|
-
if (this.eventTargetsExpandToggle(event))
|
|
1002
|
+
if (this.eventTargetsExpandToggle(event) || this.eventTargetsDragHandle(event))
|
|
832
1003
|
return;
|
|
833
1004
|
this.emit('harness-session-open', session);
|
|
834
1005
|
}}
|
|
@@ -844,27 +1015,31 @@ let DeesHarnessSessionList = (() => {
|
|
|
844
1015
|
};
|
|
845
1016
|
this.dispatchEvent(new CustomEvent('harness-session-context', { detail, bubbles: true, composed: true }));
|
|
846
1017
|
}}
|
|
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
1018
|
>
|
|
867
|
-
<div class="itemHeader">
|
|
1019
|
+
<div class="itemHeader ${draggable ? 'draggable' : ''}">
|
|
1020
|
+
${draggable
|
|
1021
|
+
? html `
|
|
1022
|
+
<button
|
|
1023
|
+
class="dragHandle"
|
|
1024
|
+
type="button"
|
|
1025
|
+
title="Drag to reorder; use arrow, Home, or End keys for keyboard reordering"
|
|
1026
|
+
aria-label=${`Reorder ${session.title || session.id}`}
|
|
1027
|
+
aria-keyshortcuts="ArrowUp ArrowDown Home End"
|
|
1028
|
+
@pointerdown=${(event) => {
|
|
1029
|
+
this.handlePointerDown(event, session, groupId, index);
|
|
1030
|
+
}}
|
|
1031
|
+
@pointermove=${this.handlePointerMove}
|
|
1032
|
+
@pointerup=${this.handlePointerUp}
|
|
1033
|
+
@pointercancel=${this.handlePointerCancel}
|
|
1034
|
+
@lostpointercapture=${this.handleLostPointerCapture}
|
|
1035
|
+
@keydown=${(event) => {
|
|
1036
|
+
this.handleKeyboardMove(event, session, groupId);
|
|
1037
|
+
}}
|
|
1038
|
+
>
|
|
1039
|
+
<dees-icon icon="lucide:GripVertical" iconSize="14"></dees-icon>
|
|
1040
|
+
</button>
|
|
1041
|
+
`
|
|
1042
|
+
: ''}
|
|
868
1043
|
<button
|
|
869
1044
|
class="itemPrimary"
|
|
870
1045
|
type="button"
|
|
@@ -923,6 +1098,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
923
1098
|
eventTargetsExpandToggle(event) {
|
|
924
1099
|
return event.composedPath().some((target) => target instanceof HTMLElement && target.classList.contains('expandToggle'));
|
|
925
1100
|
}
|
|
1101
|
+
eventTargetsDragHandle(event) {
|
|
1102
|
+
return event.composedPath().some((target) => target instanceof HTMLElement && target.classList.contains('dragHandle'));
|
|
1103
|
+
}
|
|
926
1104
|
sessionStateLabel(state) {
|
|
927
1105
|
switch (state) {
|
|
928
1106
|
case 'working': return 'Working';
|
|
@@ -965,22 +1143,120 @@ let DeesHarnessSessionList = (() => {
|
|
|
965
1143
|
.map((sessionId) => byId.get(sessionId))
|
|
966
1144
|
.filter((session) => session !== undefined);
|
|
967
1145
|
}
|
|
968
|
-
|
|
969
|
-
if (
|
|
970
|
-
|
|
1146
|
+
handlePointerDown(eventArg, sessionArg, groupIdArg, logicalIndexArg) {
|
|
1147
|
+
if (this.pointerDragGesture
|
|
1148
|
+
|| eventArg.button !== 0
|
|
1149
|
+
|| !eventArg.isPrimary
|
|
1150
|
+
|| logicalIndexArg < 0)
|
|
1151
|
+
return;
|
|
1152
|
+
const handle = eventArg.currentTarget;
|
|
1153
|
+
const source = handle.closest('.item');
|
|
1154
|
+
if (!source)
|
|
1155
|
+
return;
|
|
1156
|
+
const sourceRect = source.getBoundingClientRect();
|
|
1157
|
+
this.pointerDragGesture = {
|
|
1158
|
+
pointerId: eventArg.pointerId,
|
|
1159
|
+
handle,
|
|
1160
|
+
source,
|
|
1161
|
+
sessionId: sessionArg.id,
|
|
1162
|
+
sourceGroupId: groupIdArg,
|
|
1163
|
+
sourceLogicalIndex: logicalIndexArg,
|
|
1164
|
+
startClientX: eventArg.clientX,
|
|
1165
|
+
startClientY: eventArg.clientY,
|
|
1166
|
+
grabOffsetX: eventArg.clientX - sourceRect.left,
|
|
1167
|
+
grabOffsetY: eventArg.clientY - sourceRect.top,
|
|
1168
|
+
phase: 'pending',
|
|
1169
|
+
};
|
|
1170
|
+
window.addEventListener('keydown', this.handleDragKeyDown, true);
|
|
1171
|
+
window.addEventListener('blur', this.handleDragWindowBlur);
|
|
1172
|
+
try {
|
|
1173
|
+
handle.setPointerCapture(eventArg.pointerId);
|
|
1174
|
+
}
|
|
1175
|
+
catch {
|
|
1176
|
+
this.finishPointerDrag(false);
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1179
|
+
handlePointerMove = (eventArg) => {
|
|
1180
|
+
const gesture = this.pointerDragGesture;
|
|
1181
|
+
if (!gesture || eventArg.pointerId !== gesture.pointerId)
|
|
1182
|
+
return;
|
|
1183
|
+
if (!gesture.source.isConnected || !gesture.handle.isConnected) {
|
|
1184
|
+
this.finishPointerDrag(false);
|
|
1185
|
+
return;
|
|
1186
|
+
}
|
|
1187
|
+
if (gesture.phase === 'pending'
|
|
1188
|
+
&& Math.hypot(eventArg.clientX - gesture.startClientX, eventArg.clientY - gesture.startClientY) < dragThresholdPixels)
|
|
1189
|
+
return;
|
|
1190
|
+
if (gesture.phase === 'pending' && !this.startPointerDrag(eventArg, gesture))
|
|
1191
|
+
return;
|
|
1192
|
+
eventArg.preventDefault();
|
|
1193
|
+
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
1194
|
+
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1195
|
+
this.dragAutoScrollClientY = eventArg.clientY;
|
|
1196
|
+
this.updateDragAutoScrollVelocity();
|
|
1197
|
+
this.updateDropSlotFromPointer();
|
|
1198
|
+
};
|
|
1199
|
+
handlePointerUp = (eventArg) => {
|
|
1200
|
+
const gesture = this.pointerDragGesture;
|
|
1201
|
+
if (!gesture || eventArg.pointerId !== gesture.pointerId)
|
|
1202
|
+
return;
|
|
1203
|
+
if (gesture.phase === 'active') {
|
|
1204
|
+
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1205
|
+
this.dragAutoScrollClientY = eventArg.clientY;
|
|
1206
|
+
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
1207
|
+
this.updateDropSlotFromPointer();
|
|
1208
|
+
this.finishPointerDrag(true);
|
|
1209
|
+
return;
|
|
1210
|
+
}
|
|
1211
|
+
this.finishPointerDrag(false);
|
|
1212
|
+
};
|
|
1213
|
+
handlePointerCancel = (eventArg) => {
|
|
1214
|
+
if (eventArg.pointerId === this.pointerDragGesture?.pointerId)
|
|
1215
|
+
this.finishPointerDrag(false);
|
|
1216
|
+
};
|
|
1217
|
+
handleLostPointerCapture = (eventArg) => {
|
|
1218
|
+
if (eventArg.pointerId === this.pointerDragGesture?.pointerId)
|
|
1219
|
+
this.finishPointerDrag(false);
|
|
1220
|
+
};
|
|
1221
|
+
handleDragKeyDown = (eventArg) => {
|
|
1222
|
+
if (eventArg.key !== 'Escape' || !this.pointerDragGesture)
|
|
971
1223
|
return;
|
|
1224
|
+
eventArg.preventDefault();
|
|
1225
|
+
eventArg.stopPropagation();
|
|
1226
|
+
this.finishPointerDrag(false);
|
|
1227
|
+
};
|
|
1228
|
+
handleDragWindowBlur = () => {
|
|
1229
|
+
this.finishPointerDrag(false);
|
|
1230
|
+
};
|
|
1231
|
+
startPointerDrag(eventArg, gestureArg) {
|
|
1232
|
+
const sourceRect = gestureArg.source.getBoundingClientRect();
|
|
1233
|
+
gestureArg.source.classList.add('dragging');
|
|
1234
|
+
gestureArg.source.style.setProperty('--drag-preview-width', `${sourceRect.width}px`);
|
|
1235
|
+
gestureArg.source.style.setProperty('--drag-preview-height', `${sourceRect.height}px`);
|
|
1236
|
+
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gestureArg);
|
|
1237
|
+
gestureArg.source.setAttribute('popover', 'manual');
|
|
1238
|
+
try {
|
|
1239
|
+
gestureArg.source.showPopover();
|
|
1240
|
+
}
|
|
1241
|
+
catch {
|
|
1242
|
+
this.finishPointerDrag(false);
|
|
1243
|
+
return false;
|
|
972
1244
|
}
|
|
973
|
-
|
|
1245
|
+
gestureArg.phase = 'active';
|
|
974
1246
|
this.reflowGeneration += 1;
|
|
975
1247
|
this.cancelReflowAnimations();
|
|
976
|
-
this.draggedItemHeight = Math.ceil(
|
|
977
|
-
this.
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
1248
|
+
this.draggedItemHeight = Math.ceil(sourceRect.height);
|
|
1249
|
+
this.draggingSessionId = gestureArg.sessionId;
|
|
1250
|
+
const remainingCount = this.sortableSessions(this.sessionsForGroup(gestureArg.sourceGroupId)).length;
|
|
1251
|
+
this.dropSlot = {
|
|
1252
|
+
groupId: gestureArg.sourceGroupId,
|
|
1253
|
+
index: Math.min(gestureArg.sourceLogicalIndex, remainingCount),
|
|
1254
|
+
};
|
|
1255
|
+
return true;
|
|
1256
|
+
}
|
|
1257
|
+
moveDragPreview(clientXArg, clientYArg, gestureArg) {
|
|
1258
|
+
gestureArg.source.style.setProperty('--drag-preview-x', `${clientXArg - gestureArg.grabOffsetX}px`);
|
|
1259
|
+
gestureArg.source.style.setProperty('--drag-preview-y', `${clientYArg - gestureArg.grabOffsetY}px`);
|
|
984
1260
|
}
|
|
985
1261
|
setDropSlot(groupIdArg, indexArg) {
|
|
986
1262
|
const current = this.dropSlot;
|
|
@@ -991,37 +1267,214 @@ let DeesHarnessSessionList = (() => {
|
|
|
991
1267
|
this.dropSlot = { groupId: groupIdArg, index: indexArg };
|
|
992
1268
|
void this.animateCardReflow(previousRects, generation);
|
|
993
1269
|
}
|
|
994
|
-
|
|
995
|
-
if (!this.
|
|
1270
|
+
clearDropSlot() {
|
|
1271
|
+
if (!this.dropSlot)
|
|
1272
|
+
return;
|
|
1273
|
+
const previousRects = this.captureCardRects();
|
|
1274
|
+
const generation = ++this.reflowGeneration;
|
|
1275
|
+
this.dropSlot = undefined;
|
|
1276
|
+
void this.animateCardReflow(previousRects, generation);
|
|
1277
|
+
}
|
|
1278
|
+
updateDragAutoScrollVelocity() {
|
|
1279
|
+
const container = this.scrollContainer;
|
|
1280
|
+
if (!container || !this.draggingSessionId)
|
|
1281
|
+
return;
|
|
1282
|
+
const rect = container.getBoundingClientRect();
|
|
1283
|
+
if (this.dragAutoScrollClientX < rect.left || this.dragAutoScrollClientX > rect.right) {
|
|
1284
|
+
this.stopDragAutoScroll();
|
|
996
1285
|
return;
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1286
|
+
}
|
|
1287
|
+
const edgeSize = Math.min(64, Math.max(32, rect.height * 0.25));
|
|
1288
|
+
const topDepth = Math.max(0, Math.min(1, (rect.top + edgeSize - this.dragAutoScrollClientY) / edgeSize));
|
|
1289
|
+
const bottomDepth = Math.max(0, Math.min(1, (this.dragAutoScrollClientY - (rect.bottom - edgeSize)) / edgeSize));
|
|
1290
|
+
this.dragAutoScrollVelocity = bottomDepth > 0
|
|
1291
|
+
? dragAutoScrollMaxPixelsPerSecond * bottomDepth * bottomDepth
|
|
1292
|
+
: topDepth > 0
|
|
1293
|
+
? -dragAutoScrollMaxPixelsPerSecond * topDepth * topDepth
|
|
1294
|
+
: 0;
|
|
1295
|
+
if (this.dragAutoScrollVelocity === 0) {
|
|
1296
|
+
this.stopDragAutoScroll();
|
|
1297
|
+
return;
|
|
1298
|
+
}
|
|
1299
|
+
if (this.dragAutoScrollFrame === undefined) {
|
|
1300
|
+
this.dragAutoScrollLastFrame = performance.now();
|
|
1301
|
+
this.dragAutoScrollFrame = requestAnimationFrame(this.runDragAutoScroll);
|
|
1302
|
+
}
|
|
1001
1303
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1304
|
+
runDragAutoScroll = (timestampArg) => {
|
|
1305
|
+
this.dragAutoScrollFrame = undefined;
|
|
1306
|
+
const container = this.scrollContainer;
|
|
1307
|
+
if (!container || !this.draggingSessionId || this.dragAutoScrollVelocity === 0)
|
|
1308
|
+
return;
|
|
1309
|
+
const elapsedMs = Math.min(34, Math.max(0, timestampArg - this.dragAutoScrollLastFrame));
|
|
1310
|
+
this.dragAutoScrollLastFrame = timestampArg;
|
|
1311
|
+
const previousScrollTop = container.scrollTop;
|
|
1312
|
+
container.scrollTop += this.dragAutoScrollVelocity * elapsedMs / 1000;
|
|
1313
|
+
this.syncScrollShadowState();
|
|
1314
|
+
const atScrollBoundary = this.dragAutoScrollVelocity < 0
|
|
1315
|
+
? container.scrollTop <= 0
|
|
1316
|
+
: container.scrollTop + container.clientHeight >= container.scrollHeight - 1;
|
|
1317
|
+
if (container.scrollTop === previousScrollTop && atScrollBoundary) {
|
|
1318
|
+
this.stopDragAutoScroll();
|
|
1319
|
+
return;
|
|
1320
|
+
}
|
|
1321
|
+
this.updateDropSlotFromPointer();
|
|
1322
|
+
this.dragAutoScrollFrame = requestAnimationFrame(this.runDragAutoScroll);
|
|
1323
|
+
};
|
|
1324
|
+
updateDropSlotFromPointer() {
|
|
1325
|
+
const pointerX = this.dragAutoScrollClientX;
|
|
1326
|
+
const pointerY = this.dragAutoScrollClientY;
|
|
1327
|
+
const placeholder = this.shadowRoot?.querySelector('.dropPlaceholder');
|
|
1328
|
+
if (placeholder) {
|
|
1329
|
+
const rect = placeholder.getBoundingClientRect();
|
|
1330
|
+
if (pointerX >= rect.left
|
|
1331
|
+
&& pointerX <= rect.right
|
|
1332
|
+
&& pointerY >= rect.top
|
|
1333
|
+
&& pointerY <= rect.bottom) {
|
|
1334
|
+
this.setDropSlot(placeholder.dataset.dropGroupId || null, Number(placeholder.dataset.dropIndex));
|
|
1335
|
+
return;
|
|
1336
|
+
}
|
|
1337
|
+
}
|
|
1338
|
+
const selector = '[data-drop-group-id][data-drop-index][data-drop-kind]';
|
|
1339
|
+
let target;
|
|
1340
|
+
const offsets = this.dragAutoScrollVelocity === 0
|
|
1341
|
+
? [0, -8, 8, -16, 16, -32, 32]
|
|
1342
|
+
: [0, 8, 16, 32, 48, 64, 96].map((value) => value * (this.dragAutoScrollVelocity < 0 ? 1 : -1));
|
|
1343
|
+
for (const offset of offsets) {
|
|
1344
|
+
const hit = this.shadowRoot?.elementFromPoint(pointerX, pointerY + offset);
|
|
1345
|
+
const candidate = hit?.closest(selector);
|
|
1346
|
+
if (candidate
|
|
1347
|
+
&& candidate.dataset.sessionId !== this.draggingSessionId
|
|
1348
|
+
&& Number(candidate.dataset.dropIndex) >= 0) {
|
|
1349
|
+
target = candidate;
|
|
1350
|
+
break;
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
if (!target) {
|
|
1354
|
+
this.clearDropSlot();
|
|
1008
1355
|
return;
|
|
1009
1356
|
}
|
|
1357
|
+
const baseIndex = Number(target.dataset.dropIndex);
|
|
1358
|
+
const groupId = target.dataset.dropGroupId || null;
|
|
1359
|
+
const rect = target.getBoundingClientRect();
|
|
1360
|
+
const index = target.dataset.dropKind === 'card' && pointerY >= rect.top + rect.height / 2
|
|
1361
|
+
? baseIndex + 1
|
|
1362
|
+
: baseIndex;
|
|
1363
|
+
this.setDropSlot(groupId, index);
|
|
1364
|
+
}
|
|
1365
|
+
get scrollContainer() {
|
|
1366
|
+
return this.shadowRoot?.querySelector('.list') ?? undefined;
|
|
1367
|
+
}
|
|
1368
|
+
observeScrollGeometry() {
|
|
1369
|
+
if (!this.isConnected)
|
|
1370
|
+
return;
|
|
1371
|
+
const container = this.scrollContainer;
|
|
1372
|
+
const content = this.shadowRoot?.querySelector('.listContent') ?? undefined;
|
|
1373
|
+
if (!container || !content)
|
|
1374
|
+
return;
|
|
1375
|
+
if (this.scrollResizeObserver
|
|
1376
|
+
&& this.observedScrollContainer === container
|
|
1377
|
+
&& this.observedScrollContent === content)
|
|
1378
|
+
return;
|
|
1379
|
+
this.scrollResizeObserver?.disconnect();
|
|
1380
|
+
this.scrollResizeObserver = new ResizeObserver(this.syncScrollShadowState);
|
|
1381
|
+
this.scrollResizeObserver.observe(container);
|
|
1382
|
+
this.scrollResizeObserver.observe(content);
|
|
1383
|
+
this.observedScrollContainer = container;
|
|
1384
|
+
this.observedScrollContent = content;
|
|
1385
|
+
}
|
|
1386
|
+
syncScrollShadowState = () => {
|
|
1387
|
+
const container = this.scrollContainer;
|
|
1388
|
+
if (!container)
|
|
1389
|
+
return;
|
|
1390
|
+
const topVisible = container.scrollTop > 1;
|
|
1391
|
+
const bottomVisible = container.scrollTop + container.clientHeight < container.scrollHeight - 1;
|
|
1392
|
+
if (this.topScrollShadowVisible !== topVisible)
|
|
1393
|
+
this.topScrollShadowVisible = topVisible;
|
|
1394
|
+
if (this.bottomScrollShadowVisible !== bottomVisible)
|
|
1395
|
+
this.bottomScrollShadowVisible = bottomVisible;
|
|
1396
|
+
};
|
|
1397
|
+
stopDragAutoScroll() {
|
|
1398
|
+
if (this.dragAutoScrollFrame !== undefined)
|
|
1399
|
+
cancelAnimationFrame(this.dragAutoScrollFrame);
|
|
1400
|
+
this.dragAutoScrollFrame = undefined;
|
|
1401
|
+
this.dragAutoScrollVelocity = 0;
|
|
1402
|
+
this.dragAutoScrollLastFrame = 0;
|
|
1403
|
+
}
|
|
1404
|
+
createMoveDetail(sessionIdArg, groupIdArg, indexArg) {
|
|
1010
1405
|
const targetSessions = this.sortableSessions(this.sessionsForGroup(groupIdArg));
|
|
1011
1406
|
const beforeSessionId = targetSessions[Math.max(0, indexArg)]?.id;
|
|
1012
|
-
const sourceGroupId = this.groups.find((group) => group.sessionIds.includes(
|
|
1407
|
+
const sourceGroupId = this.groups.find((group) => group.sessionIds.includes(sessionIdArg))?.id ?? null;
|
|
1013
1408
|
const sourceSessions = this.sortableSessions(this.sessionsForGroup(sourceGroupId), false);
|
|
1014
|
-
const sourceIndex = sourceSessions.findIndex((session) => session.id ===
|
|
1409
|
+
const sourceIndex = sourceSessions.findIndex((session) => session.id === sessionIdArg);
|
|
1015
1410
|
const compatibilityIndex = (sourceGroupId === groupIdArg
|
|
1016
1411
|
&& sourceIndex >= 0
|
|
1017
1412
|
&& indexArg > sourceIndex) ? indexArg + 1 : indexArg;
|
|
1018
|
-
|
|
1019
|
-
sessionId,
|
|
1413
|
+
return {
|
|
1414
|
+
sessionId: sessionIdArg,
|
|
1020
1415
|
groupId: groupIdArg,
|
|
1021
1416
|
index: Math.max(0, compatibilityIndex),
|
|
1022
1417
|
...(beforeSessionId ? { beforeSessionId } : {}),
|
|
1023
1418
|
};
|
|
1024
|
-
|
|
1419
|
+
}
|
|
1420
|
+
handleKeyboardMove(eventArg, sessionArg, groupIdArg) {
|
|
1421
|
+
if (!['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(eventArg.key))
|
|
1422
|
+
return;
|
|
1423
|
+
eventArg.preventDefault();
|
|
1424
|
+
eventArg.stopPropagation();
|
|
1425
|
+
const sessions = this.sortableSessions(this.sessionsForGroup(groupIdArg), false);
|
|
1426
|
+
const sourceIndex = sessions.findIndex((session) => session.id === sessionArg.id);
|
|
1427
|
+
if (sourceIndex < 0)
|
|
1428
|
+
return;
|
|
1429
|
+
const sectionIds = [...this.groups.map((group) => group.id), null];
|
|
1430
|
+
const sectionIndex = sectionIds.indexOf(groupIdArg);
|
|
1431
|
+
const adjacentGroupId = eventArg.key === 'ArrowUp' && sourceIndex === 0 && sectionIndex > 0
|
|
1432
|
+
? sectionIds[sectionIndex - 1]
|
|
1433
|
+
: eventArg.key === 'ArrowDown'
|
|
1434
|
+
&& sourceIndex === sessions.length - 1
|
|
1435
|
+
&& sectionIndex >= 0
|
|
1436
|
+
&& sectionIndex < sectionIds.length - 1
|
|
1437
|
+
? sectionIds[sectionIndex + 1]
|
|
1438
|
+
: undefined;
|
|
1439
|
+
if (adjacentGroupId !== undefined) {
|
|
1440
|
+
const targetSessions = this.sortableSessions(this.sessionsForGroup(adjacentGroupId), false);
|
|
1441
|
+
const targetIndex = eventArg.key === 'ArrowUp' ? targetSessions.length : 0;
|
|
1442
|
+
const beforeSession = targetSessions[targetIndex];
|
|
1443
|
+
const detail = {
|
|
1444
|
+
sessionId: sessionArg.id,
|
|
1445
|
+
groupId: adjacentGroupId,
|
|
1446
|
+
index: targetIndex,
|
|
1447
|
+
...(beforeSession ? { beforeSessionId: beforeSession.id } : {}),
|
|
1448
|
+
};
|
|
1449
|
+
const groupName = adjacentGroupId === null
|
|
1450
|
+
? 'Ungrouped'
|
|
1451
|
+
: this.groups.find((group) => group.id === adjacentGroupId)?.name ?? adjacentGroupId;
|
|
1452
|
+
this.moveAnnouncement = `Moved ${sessionArg.title || sessionArg.id} to ${groupName}.`;
|
|
1453
|
+
this.keyboardMoveFocus = { sessionId: sessionArg.id, groupId: adjacentGroupId };
|
|
1454
|
+
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
1455
|
+
return;
|
|
1456
|
+
}
|
|
1457
|
+
const remaining = sessions.filter((session) => session.id !== sessionArg.id);
|
|
1458
|
+
const targetIndex = eventArg.key === 'Home'
|
|
1459
|
+
? 0
|
|
1460
|
+
: eventArg.key === 'End'
|
|
1461
|
+
? remaining.length
|
|
1462
|
+
: eventArg.key === 'ArrowUp'
|
|
1463
|
+
? Math.max(0, sourceIndex - 1)
|
|
1464
|
+
: Math.min(remaining.length, sourceIndex + 1);
|
|
1465
|
+
if (targetIndex === sourceIndex)
|
|
1466
|
+
return;
|
|
1467
|
+
const beforeSession = remaining[targetIndex];
|
|
1468
|
+
const compatibilityIndex = targetIndex > sourceIndex ? targetIndex + 1 : targetIndex;
|
|
1469
|
+
const detail = {
|
|
1470
|
+
sessionId: sessionArg.id,
|
|
1471
|
+
groupId: groupIdArg,
|
|
1472
|
+
index: compatibilityIndex,
|
|
1473
|
+
...(beforeSession ? { beforeSessionId: beforeSession.id } : {}),
|
|
1474
|
+
};
|
|
1475
|
+
this.moveAnnouncement = beforeSession
|
|
1476
|
+
? `Moved ${sessionArg.title || sessionArg.id} before ${beforeSession.title || beforeSession.id}.`
|
|
1477
|
+
: `Moved ${sessionArg.title || sessionArg.id} to the end.`;
|
|
1025
1478
|
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
1026
1479
|
}
|
|
1027
1480
|
captureCardRects() {
|
|
@@ -1033,6 +1486,26 @@ let DeesHarnessSessionList = (() => {
|
|
|
1033
1486
|
}
|
|
1034
1487
|
return result;
|
|
1035
1488
|
}
|
|
1489
|
+
restoreKeyboardMoveFocus() {
|
|
1490
|
+
const pending = this.keyboardMoveFocus;
|
|
1491
|
+
if (!pending)
|
|
1492
|
+
return;
|
|
1493
|
+
const currentGroupId = this.groups.find((group) => group.sessionIds.includes(pending.sessionId))?.id ?? null;
|
|
1494
|
+
if (currentGroupId !== pending.groupId)
|
|
1495
|
+
return;
|
|
1496
|
+
const item = Array.from(this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []).find((candidate) => candidate.dataset.sessionId === pending.sessionId);
|
|
1497
|
+
const handle = item?.querySelector('.dragHandle');
|
|
1498
|
+
if (handle) {
|
|
1499
|
+
handle.focus();
|
|
1500
|
+
this.keyboardMoveFocus = undefined;
|
|
1501
|
+
return;
|
|
1502
|
+
}
|
|
1503
|
+
const groupHeader = Array.from(this.shadowRoot?.querySelectorAll('.groupHeader[data-drop-group-id]') ?? []).find((candidate) => candidate.dataset.dropGroupId === (pending.groupId ?? ''));
|
|
1504
|
+
if (groupHeader) {
|
|
1505
|
+
groupHeader.focus();
|
|
1506
|
+
this.keyboardMoveFocus = undefined;
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1036
1509
|
async animateCardReflow(previousRectsArg, generationArg) {
|
|
1037
1510
|
await this.updateComplete;
|
|
1038
1511
|
if (generationArg !== this.reflowGeneration
|
|
@@ -1066,13 +1539,44 @@ let DeesHarnessSessionList = (() => {
|
|
|
1066
1539
|
animation.cancel();
|
|
1067
1540
|
this.reflowAnimations.clear();
|
|
1068
1541
|
}
|
|
1069
|
-
|
|
1542
|
+
finishPointerDrag(commitArg) {
|
|
1543
|
+
const gesture = this.pointerDragGesture;
|
|
1544
|
+
if (!gesture)
|
|
1545
|
+
return;
|
|
1546
|
+
const detail = commitArg && gesture.phase === 'active' && this.dropSlot
|
|
1547
|
+
? this.createMoveDetail(gesture.sessionId, this.dropSlot.groupId, this.dropSlot.index)
|
|
1548
|
+
: undefined;
|
|
1549
|
+
this.pointerDragGesture = undefined;
|
|
1550
|
+
window.removeEventListener('keydown', this.handleDragKeyDown, true);
|
|
1551
|
+
window.removeEventListener('blur', this.handleDragWindowBlur);
|
|
1552
|
+
this.stopDragAutoScroll();
|
|
1070
1553
|
this.reflowGeneration += 1;
|
|
1071
1554
|
this.cancelReflowAnimations();
|
|
1555
|
+
if (gesture.source.matches(':popover-open'))
|
|
1556
|
+
gesture.source.hidePopover();
|
|
1557
|
+
gesture.source.removeAttribute('popover');
|
|
1558
|
+
gesture.source.classList.remove('dragging');
|
|
1559
|
+
for (const property of [
|
|
1560
|
+
'--drag-preview-width',
|
|
1561
|
+
'--drag-preview-height',
|
|
1562
|
+
'--drag-preview-x',
|
|
1563
|
+
'--drag-preview-y',
|
|
1564
|
+
])
|
|
1565
|
+
gesture.source.style.removeProperty(property);
|
|
1072
1566
|
this.draggingSessionId = '';
|
|
1073
1567
|
this.draggedItemHeight = 0;
|
|
1074
1568
|
this.dropSlot = undefined;
|
|
1075
|
-
|
|
1569
|
+
try {
|
|
1570
|
+
if (gesture.handle.hasPointerCapture(gesture.pointerId)) {
|
|
1571
|
+
gesture.handle.releasePointerCapture(gesture.pointerId);
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
catch {
|
|
1575
|
+
// Capture may already be released or the handle may have disconnected.
|
|
1576
|
+
}
|
|
1577
|
+
if (detail) {
|
|
1578
|
+
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
1579
|
+
}
|
|
1076
1580
|
}
|
|
1077
1581
|
emit(name, session) {
|
|
1078
1582
|
this.dispatchEvent(new CustomEvent(name, { detail: { session }, bubbles: true, composed: true }));
|
|
@@ -1084,4 +1588,4 @@ let DeesHarnessSessionList = (() => {
|
|
|
1084
1588
|
return DeesHarnessSessionList = _classThis;
|
|
1085
1589
|
})();
|
|
1086
1590
|
export { DeesHarnessSessionList };
|
|
1087
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVF0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLDhDQUE4QyxDQUFDO0FBRXRELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFpQjlCOzs7Ozs7Ozs7Ozs7OztHQWNHO0lBRVUsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUlwRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NkNBRzlCLFFBQVEsRUFBRTttQ0FHVixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7cUNBRzNCLFFBQVEsRUFBRTtrQ0FHVixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7MENBRzlCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUs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
|
|
1591
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVF0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLDhDQUE4QyxDQUFDO0FBRXRELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFDOUIsTUFBTSxnQ0FBZ0MsR0FBRyxHQUFHLENBQUM7QUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFvQzlCOzs7Ozs7Ozs7Ozs7OztHQWNHO0lBRVUsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUlwRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NkNBRzlCLFFBQVEsRUFBRTttQ0FHVixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7cUNBRzNCLFFBQVEsRUFBRTtrQ0FHVixRQUFRLENB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
|