@design.estate/dees-catalog 10.0.0 → 11.1.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 +914 -780
- package/dist_bundle/bundle.js.map +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.js +24 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +13 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +62 -48
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +97 -57
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +541 -666
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +19 -1
- package/dist_ts_web/elements/00group-harness/dees-terminal-view/dees-terminal-view.d.ts +45 -6
- package/dist_ts_web/elements/00group-harness/dees-terminal-view/dees-terminal-view.js +184 -27
- package/dist_ts_web/elements/00group-harness/interfaces.d.ts +59 -20
- package/dist_ts_web/services/DeesServiceLibLoader.d.ts +7 -0
- package/dist_ts_web/services/DeesServiceLibLoader.js +45 -22
- package/package.json +1 -2
- package/readme.md +37 -17
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.ts +23 -0
- package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +12 -0
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +107 -55
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +622 -756
- package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +18 -0
- package/ts_web/elements/00group-harness/dees-terminal-view/dees-terminal-view.ts +196 -24
- package/ts_web/elements/00group-harness/interfaces.ts +63 -19
- package/ts_web/services/DeesServiceLibLoader.ts +150 -102
- package/.smartconfig.json +0 -86
package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js
CHANGED
|
@@ -41,22 +41,37 @@ import '../../00group-utility/dees-icon/dees-icon.js';
|
|
|
41
41
|
const { repeat } = directives;
|
|
42
42
|
const dragAutoScrollMaxPixelsPerSecond = 900;
|
|
43
43
|
const dragThresholdPixels = 4;
|
|
44
|
+
const itemKey = (refArg) => `${refArg.kind}:${refArg.id}`;
|
|
45
|
+
const itemRef = (itemArg) => ({
|
|
46
|
+
kind: itemArg.kind,
|
|
47
|
+
id: itemArg.id,
|
|
48
|
+
});
|
|
49
|
+
const sameItem = (leftArg, rightArg) => !!leftArg
|
|
50
|
+
&& !!rightArg
|
|
51
|
+
&& leftArg.kind === rightArg.kind
|
|
52
|
+
&& leftArg.id === rightArg.id;
|
|
44
53
|
/**
|
|
45
54
|
* Searchable conversation list, embeddable in a sidebar or a DeesModal.
|
|
46
55
|
* Emits `harness-session-select` on click, `harness-session-open` on
|
|
47
56
|
* double-click or Enter, and `harness-session-context` with viewport
|
|
48
57
|
* coordinates on right-click, Actions, or ContextMenu/Shift+F10.
|
|
49
58
|
*
|
|
50
|
-
*
|
|
51
|
-
* be dragged
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* `harness-
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
59
|
+
* Sessions and host resources are peers in ONE ordered list: a resource row
|
|
60
|
+
* can be dragged anywhere a session can, including between sessions and into
|
|
61
|
+
* or out of groups. Attaching a resource to a session is a separate explicit
|
|
62
|
+
* host action (`requestResourceAssociation()` /
|
|
63
|
+
* `harness-resource-association-request`) that never moves a row; the
|
|
64
|
+
* association only renders as a marker on the resource row.
|
|
65
|
+
*
|
|
66
|
+
* The component never mutates its inputs: reordering emits `harness-item-move`,
|
|
67
|
+
* the "new group" button emits `harness-group-create-request`, and
|
|
68
|
+
* right-clicking a group header emits `harness-group-context` — the host
|
|
69
|
+
* persists changes and passes fresh `groups` / `ungroupedItemIds` back in.
|
|
70
|
+
* Items in no group render in the trailing ungrouped section with pinned
|
|
71
|
+
* entries first, then explicit order, then new entries by recency. With
|
|
72
|
+
* `enableGrouping` the list additionally renders group chrome. While a search
|
|
73
|
+
* query is active the list is one flat, non-sortable, recency-ordered section
|
|
74
|
+
* in which sessions and resources match as peers.
|
|
60
75
|
*/
|
|
61
76
|
let DeesHarnessSessionList = (() => {
|
|
62
77
|
let _classDecorators = [customElement('dees-harness-session-list')];
|
|
@@ -82,9 +97,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
82
97
|
let _enableGrouping_decorators;
|
|
83
98
|
let _enableGrouping_initializers = [];
|
|
84
99
|
let _enableGrouping_extraInitializers = [];
|
|
85
|
-
let
|
|
86
|
-
let
|
|
87
|
-
let
|
|
100
|
+
let _ungroupedItemIds_decorators;
|
|
101
|
+
let _ungroupedItemIds_initializers = [];
|
|
102
|
+
let _ungroupedItemIds_extraInitializers = [];
|
|
88
103
|
let _resources_decorators;
|
|
89
104
|
let _resources_initializers = [];
|
|
90
105
|
let _resources_extraInitializers = [];
|
|
@@ -94,21 +109,15 @@ let DeesHarnessSessionList = (() => {
|
|
|
94
109
|
let _selectedResourceId_decorators;
|
|
95
110
|
let _selectedResourceId_initializers = [];
|
|
96
111
|
let _selectedResourceId_extraInitializers = [];
|
|
97
|
-
let
|
|
98
|
-
let
|
|
99
|
-
let
|
|
112
|
+
let _eligibleTargetsByResourceId_decorators;
|
|
113
|
+
let _eligibleTargetsByResourceId_initializers = [];
|
|
114
|
+
let _eligibleTargetsByResourceId_extraInitializers = [];
|
|
100
115
|
let _search_decorators;
|
|
101
116
|
let _search_initializers = [];
|
|
102
117
|
let _search_extraInitializers = [];
|
|
103
|
-
let
|
|
104
|
-
let
|
|
105
|
-
let
|
|
106
|
-
let _draggingResourceId_decorators;
|
|
107
|
-
let _draggingResourceId_initializers = [];
|
|
108
|
-
let _draggingResourceId_extraInitializers = [];
|
|
109
|
-
let _resourceDropTargetSessionId_decorators;
|
|
110
|
-
let _resourceDropTargetSessionId_initializers = [];
|
|
111
|
-
let _resourceDropTargetSessionId_extraInitializers = [];
|
|
118
|
+
let _draggingItem_decorators;
|
|
119
|
+
let _draggingItem_initializers = [];
|
|
120
|
+
let _draggingItem_extraInitializers = [];
|
|
112
121
|
let _dropSlot_decorators;
|
|
113
122
|
let _dropSlot_initializers = [];
|
|
114
123
|
let _dropSlot_extraInitializers = [];
|
|
@@ -143,15 +152,13 @@ let DeesHarnessSessionList = (() => {
|
|
|
143
152
|
_emptyText_decorators = [property()];
|
|
144
153
|
_groups_decorators = [property({ attribute: false })];
|
|
145
154
|
_enableGrouping_decorators = [property({ type: Boolean })];
|
|
146
|
-
|
|
155
|
+
_ungroupedItemIds_decorators = [property({ attribute: false })];
|
|
147
156
|
_resources_decorators = [property({ attribute: false })];
|
|
148
157
|
_resourceAssociations_decorators = [property({ attribute: false })];
|
|
149
158
|
_selectedResourceId_decorators = [property()];
|
|
150
|
-
|
|
159
|
+
_eligibleTargetsByResourceId_decorators = [property({ attribute: false })];
|
|
151
160
|
_search_decorators = [state()];
|
|
152
|
-
|
|
153
|
-
_draggingResourceId_decorators = [state()];
|
|
154
|
-
_resourceDropTargetSessionId_decorators = [state()];
|
|
161
|
+
_draggingItem_decorators = [state()];
|
|
155
162
|
_dropSlot_decorators = [state()];
|
|
156
163
|
_draggedItemHeight_decorators = [state()];
|
|
157
164
|
_expandedSessionIds_decorators = [state()];
|
|
@@ -166,15 +173,13 @@ let DeesHarnessSessionList = (() => {
|
|
|
166
173
|
__esDecorate(this, null, _emptyText_decorators, { kind: "accessor", name: "emptyText", static: false, private: false, access: { has: obj => "emptyText" in obj, get: obj => obj.emptyText, set: (obj, value) => { obj.emptyText = value; } }, metadata: _metadata }, _emptyText_initializers, _emptyText_extraInitializers);
|
|
167
174
|
__esDecorate(this, null, _groups_decorators, { kind: "accessor", name: "groups", static: false, private: false, access: { has: obj => "groups" in obj, get: obj => obj.groups, set: (obj, value) => { obj.groups = value; } }, metadata: _metadata }, _groups_initializers, _groups_extraInitializers);
|
|
168
175
|
__esDecorate(this, null, _enableGrouping_decorators, { kind: "accessor", name: "enableGrouping", static: false, private: false, access: { has: obj => "enableGrouping" in obj, get: obj => obj.enableGrouping, set: (obj, value) => { obj.enableGrouping = value; } }, metadata: _metadata }, _enableGrouping_initializers, _enableGrouping_extraInitializers);
|
|
169
|
-
__esDecorate(this, null,
|
|
176
|
+
__esDecorate(this, null, _ungroupedItemIds_decorators, { kind: "accessor", name: "ungroupedItemIds", static: false, private: false, access: { has: obj => "ungroupedItemIds" in obj, get: obj => obj.ungroupedItemIds, set: (obj, value) => { obj.ungroupedItemIds = value; } }, metadata: _metadata }, _ungroupedItemIds_initializers, _ungroupedItemIds_extraInitializers);
|
|
170
177
|
__esDecorate(this, null, _resources_decorators, { kind: "accessor", name: "resources", static: false, private: false, access: { has: obj => "resources" in obj, get: obj => obj.resources, set: (obj, value) => { obj.resources = value; } }, metadata: _metadata }, _resources_initializers, _resources_extraInitializers);
|
|
171
178
|
__esDecorate(this, null, _resourceAssociations_decorators, { kind: "accessor", name: "resourceAssociations", static: false, private: false, access: { has: obj => "resourceAssociations" in obj, get: obj => obj.resourceAssociations, set: (obj, value) => { obj.resourceAssociations = value; } }, metadata: _metadata }, _resourceAssociations_initializers, _resourceAssociations_extraInitializers);
|
|
172
179
|
__esDecorate(this, null, _selectedResourceId_decorators, { kind: "accessor", name: "selectedResourceId", static: false, private: false, access: { has: obj => "selectedResourceId" in obj, get: obj => obj.selectedResourceId, set: (obj, value) => { obj.selectedResourceId = value; } }, metadata: _metadata }, _selectedResourceId_initializers, _selectedResourceId_extraInitializers);
|
|
173
|
-
__esDecorate(this, null,
|
|
180
|
+
__esDecorate(this, null, _eligibleTargetsByResourceId_decorators, { kind: "accessor", name: "eligibleTargetsByResourceId", static: false, private: false, access: { has: obj => "eligibleTargetsByResourceId" in obj, get: obj => obj.eligibleTargetsByResourceId, set: (obj, value) => { obj.eligibleTargetsByResourceId = value; } }, metadata: _metadata }, _eligibleTargetsByResourceId_initializers, _eligibleTargetsByResourceId_extraInitializers);
|
|
174
181
|
__esDecorate(this, null, _search_decorators, { kind: "accessor", name: "search", static: false, private: false, access: { has: obj => "search" in obj, get: obj => obj.search, set: (obj, value) => { obj.search = value; } }, metadata: _metadata }, _search_initializers, _search_extraInitializers);
|
|
175
|
-
__esDecorate(this, null,
|
|
176
|
-
__esDecorate(this, null, _draggingResourceId_decorators, { kind: "accessor", name: "draggingResourceId", static: false, private: false, access: { has: obj => "draggingResourceId" in obj, get: obj => obj.draggingResourceId, set: (obj, value) => { obj.draggingResourceId = value; } }, metadata: _metadata }, _draggingResourceId_initializers, _draggingResourceId_extraInitializers);
|
|
177
|
-
__esDecorate(this, null, _resourceDropTargetSessionId_decorators, { kind: "accessor", name: "resourceDropTargetSessionId", static: false, private: false, access: { has: obj => "resourceDropTargetSessionId" in obj, get: obj => obj.resourceDropTargetSessionId, set: (obj, value) => { obj.resourceDropTargetSessionId = value; } }, metadata: _metadata }, _resourceDropTargetSessionId_initializers, _resourceDropTargetSessionId_extraInitializers);
|
|
182
|
+
__esDecorate(this, null, _draggingItem_decorators, { kind: "accessor", name: "draggingItem", static: false, private: false, access: { has: obj => "draggingItem" in obj, get: obj => obj.draggingItem, set: (obj, value) => { obj.draggingItem = value; } }, metadata: _metadata }, _draggingItem_initializers, _draggingItem_extraInitializers);
|
|
178
183
|
__esDecorate(this, null, _dropSlot_decorators, { kind: "accessor", name: "dropSlot", static: false, private: false, access: { has: obj => "dropSlot" in obj, get: obj => obj.dropSlot, set: (obj, value) => { obj.dropSlot = value; } }, metadata: _metadata }, _dropSlot_initializers, _dropSlot_extraInitializers);
|
|
179
184
|
__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);
|
|
180
185
|
__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);
|
|
@@ -207,11 +212,11 @@ let DeesHarnessSessionList = (() => {
|
|
|
207
212
|
#enableGrouping_accessor_storage = (__runInitializers(this, _groups_extraInitializers), __runInitializers(this, _enableGrouping_initializers, false));
|
|
208
213
|
get enableGrouping() { return this.#enableGrouping_accessor_storage; }
|
|
209
214
|
set enableGrouping(value) { this.#enableGrouping_accessor_storage = value; }
|
|
210
|
-
#
|
|
211
|
-
/** Explicit order for sortable
|
|
212
|
-
get
|
|
213
|
-
set
|
|
214
|
-
#resources_accessor_storage = (__runInitializers(this,
|
|
215
|
+
#ungroupedItemIds_accessor_storage = (__runInitializers(this, _enableGrouping_extraInitializers), __runInitializers(this, _ungroupedItemIds_initializers, []));
|
|
216
|
+
/** Explicit order for sortable items of both kinds outside user-defined groups. */
|
|
217
|
+
get ungroupedItemIds() { return this.#ungroupedItemIds_accessor_storage; }
|
|
218
|
+
set ungroupedItemIds(value) { this.#ungroupedItemIds_accessor_storage = value; }
|
|
219
|
+
#resources_accessor_storage = (__runInitializers(this, _ungroupedItemIds_extraInitializers), __runInitializers(this, _resources_initializers, []));
|
|
215
220
|
get resources() { return this.#resources_accessor_storage; }
|
|
216
221
|
set resources(value) { this.#resources_accessor_storage = value; }
|
|
217
222
|
#resourceAssociations_accessor_storage = (__runInitializers(this, _resources_extraInitializers), __runInitializers(this, _resourceAssociations_initializers, []));
|
|
@@ -220,23 +225,20 @@ let DeesHarnessSessionList = (() => {
|
|
|
220
225
|
#selectedResourceId_accessor_storage = (__runInitializers(this, _resourceAssociations_extraInitializers), __runInitializers(this, _selectedResourceId_initializers, ''));
|
|
221
226
|
get selectedResourceId() { return this.#selectedResourceId_accessor_storage; }
|
|
222
227
|
set selectedResourceId(value) { this.#selectedResourceId_accessor_storage = value; }
|
|
223
|
-
#
|
|
224
|
-
/**
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
+
#eligibleTargetsByResourceId_accessor_storage = (__runInitializers(this, _selectedResourceId_extraInitializers), __runInitializers(this, _eligibleTargetsByResourceId_initializers, {}));
|
|
229
|
+
/**
|
|
230
|
+
* Serializable attach/reassign targets for host menus. A missing entry leaves
|
|
231
|
+
* the resource unrestricted; an empty array means no eligible target.
|
|
232
|
+
*/
|
|
233
|
+
get eligibleTargetsByResourceId() { return this.#eligibleTargetsByResourceId_accessor_storage; }
|
|
234
|
+
set eligibleTargetsByResourceId(value) { this.#eligibleTargetsByResourceId_accessor_storage = value; }
|
|
235
|
+
#search_accessor_storage = (__runInitializers(this, _eligibleTargetsByResourceId_extraInitializers), __runInitializers(this, _search_initializers, ''));
|
|
228
236
|
get search() { return this.#search_accessor_storage; }
|
|
229
237
|
set search(value) { this.#search_accessor_storage = value; }
|
|
230
|
-
#
|
|
231
|
-
get
|
|
232
|
-
set
|
|
233
|
-
#
|
|
234
|
-
get draggingResourceId() { return this.#draggingResourceId_accessor_storage; }
|
|
235
|
-
set draggingResourceId(value) { this.#draggingResourceId_accessor_storage = value; }
|
|
236
|
-
#resourceDropTargetSessionId_accessor_storage = (__runInitializers(this, _draggingResourceId_extraInitializers), __runInitializers(this, _resourceDropTargetSessionId_initializers, ''));
|
|
237
|
-
get resourceDropTargetSessionId() { return this.#resourceDropTargetSessionId_accessor_storage; }
|
|
238
|
-
set resourceDropTargetSessionId(value) { this.#resourceDropTargetSessionId_accessor_storage = value; }
|
|
239
|
-
#dropSlot_accessor_storage = (__runInitializers(this, _resourceDropTargetSessionId_extraInitializers), __runInitializers(this, _dropSlot_initializers, undefined));
|
|
238
|
+
#draggingItem_accessor_storage = (__runInitializers(this, _search_extraInitializers), __runInitializers(this, _draggingItem_initializers, undefined));
|
|
239
|
+
get draggingItem() { return this.#draggingItem_accessor_storage; }
|
|
240
|
+
set draggingItem(value) { this.#draggingItem_accessor_storage = value; }
|
|
241
|
+
#dropSlot_accessor_storage = (__runInitializers(this, _draggingItem_extraInitializers), __runInitializers(this, _dropSlot_initializers, undefined));
|
|
240
242
|
get dropSlot() { return this.#dropSlot_accessor_storage; }
|
|
241
243
|
set dropSlot(value) { this.#dropSlot_accessor_storage = value; }
|
|
242
244
|
#draggedItemHeight_accessor_storage = (__runInitializers(this, _dropSlot_extraInitializers), __runInitializers(this, _draggedItemHeight_initializers, 0));
|
|
@@ -440,7 +442,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
440
442
|
border-color var(--dees-transition-fast) var(--dees-ease-standard);
|
|
441
443
|
}
|
|
442
444
|
|
|
443
|
-
|
|
445
|
+
/* One drag preview for both item kinds. */
|
|
446
|
+
.item.dragging,
|
|
447
|
+
.resourceRow.dragging {
|
|
444
448
|
position: fixed;
|
|
445
449
|
inset: 0 auto auto 0;
|
|
446
450
|
width: var(--drag-preview-width);
|
|
@@ -483,12 +487,6 @@ let DeesHarnessSessionList = (() => {
|
|
|
483
487
|
box-shadow: inset 3px 0 var(--card-accent);
|
|
484
488
|
}
|
|
485
489
|
|
|
486
|
-
.item.resourceDropTarget {
|
|
487
|
-
outline: 2px solid var(--dees-color-accent-primary);
|
|
488
|
-
outline-offset: 2px;
|
|
489
|
-
box-shadow: 0 0 0 5px var(--dees-color-focus-ring), var(--dees-shadow-lg);
|
|
490
|
-
}
|
|
491
|
-
|
|
492
490
|
.itemHeader {
|
|
493
491
|
display: grid;
|
|
494
492
|
grid-template-columns: minmax(0, 1fr) 30px 30px;
|
|
@@ -585,7 +583,8 @@ let DeesHarnessSessionList = (() => {
|
|
|
585
583
|
line-height: 14px;
|
|
586
584
|
}
|
|
587
585
|
|
|
588
|
-
.harnessName
|
|
586
|
+
.harnessName,
|
|
587
|
+
.projectName {
|
|
589
588
|
min-width: 0;
|
|
590
589
|
overflow: hidden;
|
|
591
590
|
text-overflow: ellipsis;
|
|
@@ -665,75 +664,31 @@ let DeesHarnessSessionList = (() => {
|
|
|
665
664
|
font-size: var(--dees-font-caption2-size, 10px);
|
|
666
665
|
}
|
|
667
666
|
|
|
668
|
-
.
|
|
669
|
-
margin: 0 10px 10px;
|
|
670
|
-
padding: 6px 9px;
|
|
671
|
-
border-radius: var(--dees-radius-md);
|
|
672
|
-
background: color-mix(in srgb, var(--dees-color-accent-primary) 14%, transparent);
|
|
673
|
-
color: var(--dees-color-accent-primary);
|
|
674
|
-
font-size: var(--dees-font-caption1-size, 11px);
|
|
675
|
-
font-weight: 680;
|
|
676
|
-
text-align: center;
|
|
677
|
-
}
|
|
678
|
-
|
|
679
|
-
.resourceChildren {
|
|
680
|
-
display: grid;
|
|
681
|
-
gap: 4px;
|
|
682
|
-
margin: 0 8px 8px 24px;
|
|
683
|
-
padding: 0;
|
|
684
|
-
list-style: none;
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
.resourceSection {
|
|
688
|
-
margin-top: var(--dees-spacing-md);
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
.resourceSectionTitle {
|
|
692
|
-
margin: 0 0 7px;
|
|
693
|
-
padding: var(--dees-spacing-xs) 6px;
|
|
694
|
-
color: var(--dees-color-text-secondary);
|
|
695
|
-
font-size: var(--dees-font-caption1-size, 11px);
|
|
696
|
-
font-weight: 600;
|
|
697
|
-
}
|
|
698
|
-
|
|
699
|
-
.resourceList {
|
|
700
|
-
display: grid;
|
|
701
|
-
gap: var(--dees-spacing-sm);
|
|
702
|
-
margin: 0;
|
|
703
|
-
padding: 0;
|
|
704
|
-
list-style: none;
|
|
705
|
-
}
|
|
706
|
-
|
|
667
|
+
/* Resource rows are peers of session cards in the same ordered section. */
|
|
707
668
|
.resourceRow {
|
|
669
|
+
position: relative;
|
|
708
670
|
display: grid;
|
|
709
|
-
grid-template-columns:
|
|
671
|
+
grid-template-columns: minmax(0, 1fr) 38px;
|
|
710
672
|
min-width: 0;
|
|
711
673
|
overflow: hidden;
|
|
712
674
|
border: 1px solid var(--dees-color-border-subtle);
|
|
713
675
|
border-radius: var(--dees-radius-lg);
|
|
676
|
+
corner-shape: var(--dees-corner-shape);
|
|
714
677
|
background: color-mix(in srgb, var(--dees-color-bg-secondary) 76%, transparent);
|
|
715
678
|
color: var(--dees-color-text-primary);
|
|
716
679
|
box-shadow: var(--dees-shadow-xs);
|
|
717
680
|
box-sizing: border-box;
|
|
718
681
|
}
|
|
719
682
|
|
|
683
|
+
.resourceRow.draggable {
|
|
684
|
+
grid-template-columns: 26px minmax(0, 1fr) 38px;
|
|
685
|
+
}
|
|
686
|
+
|
|
720
687
|
.resourceRow.selected {
|
|
721
688
|
border-color: var(--dees-color-accent-primary);
|
|
722
689
|
background: color-mix(in srgb, var(--dees-color-accent-primary) 10%, var(--dees-color-bg-secondary));
|
|
723
690
|
}
|
|
724
691
|
|
|
725
|
-
.resourceRow.resourceDragging {
|
|
726
|
-
position: fixed;
|
|
727
|
-
inset: 0 auto auto 0;
|
|
728
|
-
width: var(--resource-drag-preview-width);
|
|
729
|
-
max-width: none;
|
|
730
|
-
margin: 0;
|
|
731
|
-
opacity: 0.96;
|
|
732
|
-
pointer-events: none;
|
|
733
|
-
transform: translate3d(var(--resource-drag-preview-x), var(--resource-drag-preview-y), 0);
|
|
734
|
-
box-shadow: var(--dees-shadow-xl);
|
|
735
|
-
}
|
|
736
|
-
|
|
737
692
|
.resourceDragHandle,
|
|
738
693
|
.resourcePrimary,
|
|
739
694
|
.resourceActions {
|
|
@@ -745,22 +700,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
745
700
|
}
|
|
746
701
|
|
|
747
702
|
.resourceDragHandle {
|
|
748
|
-
display: grid;
|
|
749
|
-
place-items: center;
|
|
750
703
|
min-width: 26px;
|
|
751
|
-
padding: 0;
|
|
752
|
-
color: var(--dees-color-text-muted);
|
|
753
|
-
cursor: grab;
|
|
754
|
-
touch-action: none;
|
|
755
|
-
}
|
|
756
|
-
|
|
757
|
-
.resourceDragHandle:disabled {
|
|
758
|
-
opacity: 0.35;
|
|
759
|
-
cursor: default;
|
|
760
|
-
}
|
|
761
|
-
|
|
762
|
-
.resourceDragHandle:not(:disabled):active {
|
|
763
|
-
cursor: grabbing;
|
|
764
704
|
}
|
|
765
705
|
|
|
766
706
|
.resourcePrimary {
|
|
@@ -814,6 +754,29 @@ let DeesHarnessSessionList = (() => {
|
|
|
814
754
|
white-space: nowrap;
|
|
815
755
|
}
|
|
816
756
|
|
|
757
|
+
/* Decorative marker for the controlled association; never interactive. */
|
|
758
|
+
.resourceAttachment {
|
|
759
|
+
display: flex;
|
|
760
|
+
min-width: 0;
|
|
761
|
+
align-items: center;
|
|
762
|
+
gap: 4px;
|
|
763
|
+
margin-top: 2px;
|
|
764
|
+
color: var(--dees-color-link);
|
|
765
|
+
font-size: var(--dees-font-caption2-size, 10px);
|
|
766
|
+
font-weight: 600;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
.resourceAttachment dees-icon {
|
|
770
|
+
flex: 0 0 auto;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
.resourceAttachmentName {
|
|
774
|
+
min-width: 0;
|
|
775
|
+
overflow: hidden;
|
|
776
|
+
text-overflow: ellipsis;
|
|
777
|
+
white-space: nowrap;
|
|
778
|
+
}
|
|
779
|
+
|
|
817
780
|
.resourceActions {
|
|
818
781
|
display: grid;
|
|
819
782
|
place-items: center;
|
|
@@ -851,7 +814,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
851
814
|
.emptyDropZone {
|
|
852
815
|
display: grid;
|
|
853
816
|
place-items: center;
|
|
854
|
-
|
|
817
|
+
overflow: hidden;
|
|
855
818
|
border: 1px dashed color-mix(in srgb, var(--dees-color-accent-primary) 68%, transparent);
|
|
856
819
|
border-radius: var(--dees-radius-xl);
|
|
857
820
|
background: color-mix(in srgb, var(--dees-color-accent-primary) 8%, transparent);
|
|
@@ -859,9 +822,14 @@ let DeesHarnessSessionList = (() => {
|
|
|
859
822
|
box-sizing: border-box;
|
|
860
823
|
}
|
|
861
824
|
|
|
825
|
+
/* The placeholder matches the dragged row exactly; only the empty zone has a floor. */
|
|
826
|
+
.emptyDropZone {
|
|
827
|
+
min-height: 46px;
|
|
828
|
+
}
|
|
829
|
+
|
|
862
830
|
.dropPlaceholder::after,
|
|
863
831
|
.emptyDropZone::after {
|
|
864
|
-
content: 'Drop
|
|
832
|
+
content: 'Drop here';
|
|
865
833
|
font-size: var(--dees-font-caption2-size, 10px);
|
|
866
834
|
font-weight: 650;
|
|
867
835
|
letter-spacing: 0.02em;
|
|
@@ -1004,6 +972,10 @@ let DeesHarnessSessionList = (() => {
|
|
|
1004
972
|
.expandToggle { margin: 0 3px 0 0; }
|
|
1005
973
|
|
|
1006
974
|
.resourceRow {
|
|
975
|
+
grid-template-columns: minmax(0, 1fr) 44px;
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
.resourceRow.draggable {
|
|
1007
979
|
grid-template-columns: 44px minmax(0, 1fr) 44px;
|
|
1008
980
|
}
|
|
1009
981
|
|
|
@@ -1020,19 +992,12 @@ let DeesHarnessSessionList = (() => {
|
|
|
1020
992
|
}
|
|
1021
993
|
|
|
1022
994
|
@media (max-width: 280px) {
|
|
1023
|
-
.resourceChildren {
|
|
1024
|
-
margin-left: 8px;
|
|
1025
|
-
}
|
|
1026
|
-
|
|
1027
995
|
.resourcePreview {
|
|
1028
996
|
display: none;
|
|
1029
997
|
}
|
|
1030
998
|
}
|
|
1031
999
|
`,
|
|
1032
1000
|
];
|
|
1033
|
-
get sessionsById() {
|
|
1034
|
-
return new Map(this.sessions.map((session) => [session.id, session]));
|
|
1035
|
-
}
|
|
1036
1001
|
get resourcesById() {
|
|
1037
1002
|
const result = new Map();
|
|
1038
1003
|
for (const resource of this.resources) {
|
|
@@ -1042,25 +1007,113 @@ let DeesHarnessSessionList = (() => {
|
|
|
1042
1007
|
}
|
|
1043
1008
|
return result;
|
|
1044
1009
|
}
|
|
1045
|
-
/**
|
|
1010
|
+
/**
|
|
1011
|
+
* First valid record wins; unknown records, self-references and duplicates
|
|
1012
|
+
* remain untouched but are not projected. Keyed by resource id.
|
|
1013
|
+
*/
|
|
1046
1014
|
get acceptedResourceAssociations() {
|
|
1047
1015
|
const resourcesById = this.resourcesById;
|
|
1048
|
-
const
|
|
1016
|
+
const itemsByKey = this.itemsByKey;
|
|
1049
1017
|
const result = new Map();
|
|
1050
1018
|
for (const association of this.resourceAssociations) {
|
|
1051
|
-
if (!
|
|
1052
|
-
|| !
|
|
1019
|
+
if (!association.target
|
|
1020
|
+
|| !resourcesById.has(association.resourceId)
|
|
1021
|
+
|| !itemsByKey.has(itemKey(association.target))
|
|
1022
|
+
|| sameItem(association.target, { kind: 'resource', id: association.resourceId })
|
|
1053
1023
|
|| result.has(association.resourceId))
|
|
1054
1024
|
continue;
|
|
1055
|
-
result.set(association.resourceId, association.
|
|
1025
|
+
result.set(association.resourceId, itemRef(association.target));
|
|
1056
1026
|
}
|
|
1057
1027
|
return result;
|
|
1058
1028
|
}
|
|
1059
1029
|
get acceptedResources() {
|
|
1060
1030
|
return [...this.resourcesById.values()];
|
|
1061
1031
|
}
|
|
1032
|
+
/** Sessions and resources as one pool of orderable items, before grouping and search. */
|
|
1033
|
+
get acceptedItems() {
|
|
1034
|
+
const result = [];
|
|
1035
|
+
const seenSessionIds = new Set();
|
|
1036
|
+
for (const session of this.sessions) {
|
|
1037
|
+
if (!session.id || seenSessionIds.has(session.id))
|
|
1038
|
+
continue;
|
|
1039
|
+
seenSessionIds.add(session.id);
|
|
1040
|
+
result.push({
|
|
1041
|
+
kind: 'session',
|
|
1042
|
+
key: `session:${session.id}`,
|
|
1043
|
+
id: session.id,
|
|
1044
|
+
title: session.title || session.id,
|
|
1045
|
+
sortable: session.draggable !== false,
|
|
1046
|
+
timestamp: session.updatedAt ?? session.createdAt ?? 0,
|
|
1047
|
+
session,
|
|
1048
|
+
});
|
|
1049
|
+
}
|
|
1050
|
+
for (const resource of this.resourcesById.values()) {
|
|
1051
|
+
result.push({
|
|
1052
|
+
kind: 'resource',
|
|
1053
|
+
key: `resource:${resource.id}`,
|
|
1054
|
+
id: resource.id,
|
|
1055
|
+
title: resource.title || resource.id,
|
|
1056
|
+
sortable: resource.draggable !== false,
|
|
1057
|
+
timestamp: resource.updatedAt ?? resource.createdAt ?? 0,
|
|
1058
|
+
resource,
|
|
1059
|
+
});
|
|
1060
|
+
}
|
|
1061
|
+
return result;
|
|
1062
|
+
}
|
|
1063
|
+
get itemsByKey() {
|
|
1064
|
+
return new Map(this.acceptedItems.map((item) => [item.key, item]));
|
|
1065
|
+
}
|
|
1066
|
+
/** Groups only organize the list while grouping is enabled. */
|
|
1067
|
+
get effectiveGroups() {
|
|
1068
|
+
return this.enableGrouping ? this.groups : [];
|
|
1069
|
+
}
|
|
1070
|
+
get groupedItemKeys() {
|
|
1071
|
+
const keys = new Set();
|
|
1072
|
+
for (const group of this.effectiveGroups) {
|
|
1073
|
+
for (const ref of group.itemIds)
|
|
1074
|
+
keys.add(itemKey(ref));
|
|
1075
|
+
}
|
|
1076
|
+
return keys;
|
|
1077
|
+
}
|
|
1078
|
+
itemsForGroup(groupIdArg) {
|
|
1079
|
+
if (groupIdArg === null)
|
|
1080
|
+
return this.ungroupedItems;
|
|
1081
|
+
const group = this.effectiveGroups.find((candidate) => candidate.id === groupIdArg);
|
|
1082
|
+
if (!group)
|
|
1083
|
+
return [];
|
|
1084
|
+
const byKey = this.itemsByKey;
|
|
1085
|
+
const seen = new Set();
|
|
1086
|
+
const result = [];
|
|
1087
|
+
for (const ref of group.itemIds) {
|
|
1088
|
+
const key = itemKey(ref);
|
|
1089
|
+
const item = byKey.get(key);
|
|
1090
|
+
if (!item || seen.has(key))
|
|
1091
|
+
continue;
|
|
1092
|
+
seen.add(key);
|
|
1093
|
+
result.push(item);
|
|
1094
|
+
}
|
|
1095
|
+
return result;
|
|
1096
|
+
}
|
|
1097
|
+
/** Pinned entries first, then explicitly ordered items, then unknown items by recency. */
|
|
1098
|
+
get ungroupedItems() {
|
|
1099
|
+
const grouped = this.groupedItemKeys;
|
|
1100
|
+
const available = this.acceptedItems.filter((item) => !grouped.has(item.key));
|
|
1101
|
+
const pinned = available.filter((item) => !item.sortable);
|
|
1102
|
+
const sortableByKey = new Map(available.filter((item) => item.sortable).map((item) => [item.key, item]));
|
|
1103
|
+
const ordered = [];
|
|
1104
|
+
for (const ref of this.ungroupedItemIds) {
|
|
1105
|
+
const item = sortableByKey.get(itemKey(ref));
|
|
1106
|
+
if (!item)
|
|
1107
|
+
continue;
|
|
1108
|
+
ordered.push(item);
|
|
1109
|
+
sortableByKey.delete(item.key);
|
|
1110
|
+
}
|
|
1111
|
+
const unknown = [...sortableByKey.values()].sort((left, right) => right.timestamp - left.timestamp);
|
|
1112
|
+
return [...pinned, ...ordered, ...unknown];
|
|
1113
|
+
}
|
|
1062
1114
|
resourceMatchesSearch(resourceArg, queryArg) {
|
|
1063
|
-
return [resourceArg.id, resourceArg.kind, resourceArg.title, resourceArg.preview
|
|
1115
|
+
return [resourceArg.id, resourceArg.kind, resourceArg.title, resourceArg.preview,
|
|
1116
|
+
resourceArg.projectLabel]
|
|
1064
1117
|
.filter(Boolean)
|
|
1065
1118
|
.join(' ')
|
|
1066
1119
|
.toLowerCase()
|
|
@@ -1068,106 +1121,85 @@ let DeesHarnessSessionList = (() => {
|
|
|
1068
1121
|
}
|
|
1069
1122
|
sessionMatchesSearch(sessionArg, queryArg) {
|
|
1070
1123
|
return [sessionArg.title, sessionArg.preview, sessionArg.id, sessionArg.harness?.id,
|
|
1071
|
-
sessionArg.harness?.name,
|
|
1124
|
+
sessionArg.harness?.name, sessionArg.projectLabel,
|
|
1125
|
+
this.sessionStatusLabel(sessionArg), this.sessionStateLabel(sessionArg.state ?? 'normal')]
|
|
1072
1126
|
.filter(Boolean)
|
|
1073
1127
|
.join(' ')
|
|
1074
1128
|
.toLowerCase()
|
|
1075
1129
|
.includes(queryArg);
|
|
1076
1130
|
}
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
if (!query || this.sessionMatchesSearch(sessionArg, query))
|
|
1082
|
-
return associated;
|
|
1083
|
-
return associated.filter((resource) => this.resourceMatchesSearch(resource, query));
|
|
1084
|
-
}
|
|
1085
|
-
get unattachedResources() {
|
|
1086
|
-
const associations = this.acceptedResourceAssociations;
|
|
1087
|
-
const query = this.search.trim().toLowerCase();
|
|
1088
|
-
return this.acceptedResources.filter((resource) => (!associations.has(resource.id)
|
|
1089
|
-
&& (!query || this.resourceMatchesSearch(resource, query))));
|
|
1090
|
-
}
|
|
1091
|
-
get groupedSessionIds() {
|
|
1092
|
-
const ids = new Set();
|
|
1093
|
-
for (const group of this.groups) {
|
|
1094
|
-
for (const id of group.sessionIds)
|
|
1095
|
-
ids.add(id);
|
|
1096
|
-
}
|
|
1097
|
-
return ids;
|
|
1098
|
-
}
|
|
1099
|
-
/** Pinned entries first, followed by explicitly ordered sortable sessions. */
|
|
1100
|
-
get ungroupedSessions() {
|
|
1101
|
-
const grouped = this.groupedSessionIds;
|
|
1102
|
-
const available = this.sessions.filter((session) => !grouped.has(session.id));
|
|
1103
|
-
const pinned = available.filter((session) => session.draggable === false);
|
|
1104
|
-
const sortableById = new Map(available.filter((session) => session.draggable !== false).map((session) => [session.id, session]));
|
|
1105
|
-
const ordered = [];
|
|
1106
|
-
for (const sessionId of this.ungroupedSessionIds) {
|
|
1107
|
-
const session = sortableById.get(sessionId);
|
|
1108
|
-
if (!session)
|
|
1109
|
-
continue;
|
|
1110
|
-
ordered.push(session);
|
|
1111
|
-
sortableById.delete(sessionId);
|
|
1112
|
-
}
|
|
1113
|
-
const newSessions = [...sortableById.values()].sort((left, right) => (right.updatedAt ?? right.createdAt ?? 0) - (left.updatedAt ?? left.createdAt ?? 0));
|
|
1114
|
-
return [...pinned, ...ordered, ...newSessions];
|
|
1131
|
+
itemMatchesSearch(itemArg, queryArg) {
|
|
1132
|
+
return itemArg.kind === 'session'
|
|
1133
|
+
? this.sessionMatchesSearch(itemArg.session, queryArg)
|
|
1134
|
+
: this.resourceMatchesSearch(itemArg.resource, queryArg);
|
|
1115
1135
|
}
|
|
1116
|
-
|
|
1136
|
+
/** Search flattens the list: sessions and resources match as peers, newest first. */
|
|
1137
|
+
get searchItems() {
|
|
1117
1138
|
const query = this.search.trim().toLowerCase();
|
|
1118
|
-
const
|
|
1119
|
-
const matchingAttachedSessionIds = new Set(this.acceptedResources
|
|
1120
|
-
.filter((resource) => query && this.resourceMatchesSearch(resource, query))
|
|
1121
|
-
.map((resource) => associations.get(resource.id))
|
|
1122
|
-
.filter((sessionId) => sessionId !== undefined));
|
|
1123
|
-
const sorted = [...this.sessions].sort((left, right) => (right.updatedAt ?? right.createdAt ?? 0) - (left.updatedAt ?? left.createdAt ?? 0));
|
|
1139
|
+
const sorted = [...this.acceptedItems].sort((left, right) => right.timestamp - left.timestamp);
|
|
1124
1140
|
if (!query)
|
|
1125
1141
|
return sorted;
|
|
1126
|
-
return sorted.filter((
|
|
1142
|
+
return sorted.filter((item) => this.itemMatchesSearch(item, query));
|
|
1143
|
+
}
|
|
1144
|
+
get searchActive() {
|
|
1145
|
+
return this.search.trim().length > 0;
|
|
1146
|
+
}
|
|
1147
|
+
sortableItems(itemsArg, excludeDraggingArg = true) {
|
|
1148
|
+
return itemsArg.filter((item) => (item.sortable
|
|
1149
|
+
&& (!excludeDraggingArg || !sameItem(this.draggingItem, item))));
|
|
1150
|
+
}
|
|
1151
|
+
groupIdForItem(refArg) {
|
|
1152
|
+
return this.effectiveGroups.find((group) => group.itemIds.some((candidate) => sameItem(candidate, refArg)))?.id ?? null;
|
|
1153
|
+
}
|
|
1154
|
+
rowElementFor(refArg) {
|
|
1155
|
+
return Array.from(this.shadowRoot?.querySelectorAll('[data-item-kind][data-item-id]') ?? []).find((candidate) => (candidate.dataset.itemKind === refArg.kind && candidate.dataset.itemId === refArg.id));
|
|
1127
1156
|
}
|
|
1128
1157
|
focusSearch() {
|
|
1129
1158
|
this.shadowRoot?.querySelector('.searchRow input')?.focus();
|
|
1130
1159
|
}
|
|
1131
|
-
requestResourceAssociation(resourceIdArg,
|
|
1160
|
+
requestResourceAssociation(resourceIdArg, toTargetArg, sourceArg = 'action') {
|
|
1132
1161
|
const resource = this.resourcesById.get(resourceIdArg);
|
|
1133
1162
|
if (!resource)
|
|
1134
1163
|
return false;
|
|
1135
|
-
const
|
|
1136
|
-
if (
|
|
1164
|
+
const fromTarget = this.acceptedResourceAssociations.get(resourceIdArg) ?? null;
|
|
1165
|
+
if (sameItem(fromTarget, toTargetArg))
|
|
1137
1166
|
return false;
|
|
1138
|
-
if (
|
|
1139
|
-
&& (!this.
|
|
1167
|
+
if (toTargetArg !== null
|
|
1168
|
+
&& (!this.itemsByKey.has(itemKey(toTargetArg))
|
|
1169
|
+
|| sameItem(toTargetArg, { kind: 'resource', id: resourceIdArg })
|
|
1170
|
+
|| !this.isResourceTargetEligible(resourceIdArg, toTargetArg)))
|
|
1140
1171
|
return false;
|
|
1141
|
-
if (
|
|
1172
|
+
if (toTargetArg === null && fromTarget === null)
|
|
1142
1173
|
return false;
|
|
1143
|
-
const
|
|
1174
|
+
const toTarget = toTargetArg === null ? null : itemRef(toTargetArg);
|
|
1175
|
+
const detail = fromTarget === null
|
|
1144
1176
|
? {
|
|
1145
1177
|
intent: 'attach',
|
|
1146
1178
|
resource,
|
|
1147
|
-
|
|
1148
|
-
|
|
1179
|
+
fromTarget: null,
|
|
1180
|
+
toTarget: toTarget,
|
|
1149
1181
|
source: sourceArg,
|
|
1150
1182
|
}
|
|
1151
|
-
:
|
|
1183
|
+
: toTarget === null
|
|
1152
1184
|
? {
|
|
1153
1185
|
intent: 'detach',
|
|
1154
1186
|
resource,
|
|
1155
|
-
|
|
1156
|
-
|
|
1187
|
+
fromTarget,
|
|
1188
|
+
toTarget: null,
|
|
1157
1189
|
source: sourceArg,
|
|
1158
1190
|
}
|
|
1159
1191
|
: {
|
|
1160
1192
|
intent: 'reassign',
|
|
1161
1193
|
resource,
|
|
1162
|
-
|
|
1163
|
-
|
|
1194
|
+
fromTarget,
|
|
1195
|
+
toTarget,
|
|
1164
1196
|
source: sourceArg,
|
|
1165
1197
|
};
|
|
1166
1198
|
this.pendingResourceAssociationRequest = {
|
|
1167
1199
|
resourceId: resource.id,
|
|
1168
1200
|
resourceTitle: resource.title || resource.id,
|
|
1169
|
-
|
|
1170
|
-
|
|
1201
|
+
fromTarget,
|
|
1202
|
+
toTarget,
|
|
1171
1203
|
intent: detail.intent,
|
|
1172
1204
|
};
|
|
1173
1205
|
this.moveAnnouncement = this.resourceAssociationAnnouncement(detail, false);
|
|
@@ -1189,10 +1221,6 @@ let DeesHarnessSessionList = (() => {
|
|
|
1189
1221
|
}
|
|
1190
1222
|
if (changedProperties.has('sessions')) {
|
|
1191
1223
|
const knownIds = new Set(this.sessions.map((session) => session.id));
|
|
1192
|
-
if (this.pointerDragGesture?.type === 'session'
|
|
1193
|
-
&& !knownIds.has(this.pointerDragGesture.sessionId)) {
|
|
1194
|
-
this.finishPointerDrag(false);
|
|
1195
|
-
}
|
|
1196
1224
|
const nextExpanded = new Set([...this.expandedSessionIds].filter((sessionId) => knownIds.has(sessionId)));
|
|
1197
1225
|
if (nextExpanded.size !== this.expandedSessionIds.size
|
|
1198
1226
|
|| [...nextExpanded].some((sessionId) => !this.expandedSessionIds.has(sessionId))) {
|
|
@@ -1200,24 +1228,20 @@ let DeesHarnessSessionList = (() => {
|
|
|
1200
1228
|
}
|
|
1201
1229
|
}
|
|
1202
1230
|
if (changedProperties.has('resources') || changedProperties.has('resourceAssociations')) {
|
|
1203
|
-
const gesture = this.pointerDragGesture;
|
|
1204
|
-
if (gesture?.type === 'resource') {
|
|
1205
|
-
const currentSessionId = this.acceptedResourceAssociations.get(gesture.resourceId) ?? null;
|
|
1206
|
-
if (!this.resourcesById.has(gesture.resourceId) || currentSessionId !== gesture.fromSessionId) {
|
|
1207
|
-
this.finishPointerDrag(false);
|
|
1208
|
-
}
|
|
1209
|
-
}
|
|
1210
1231
|
if (this.resourceContextResourceId
|
|
1211
1232
|
&& !this.resourcesById.has(this.resourceContextResourceId))
|
|
1212
1233
|
this.closeResourceContext(this.resourceContextGeneration);
|
|
1213
1234
|
this.reconcilePendingResourceAssociation();
|
|
1214
1235
|
}
|
|
1215
1236
|
if (changedProperties.has('sessions')
|
|
1216
|
-
|| changedProperties.has('
|
|
1237
|
+
|| changedProperties.has('resources')
|
|
1238
|
+
|| changedProperties.has('search')) {
|
|
1239
|
+
// A drag is positional only: it survives association and eligibility
|
|
1240
|
+
// updates, but never outlives its own row.
|
|
1217
1241
|
const gesture = this.pointerDragGesture;
|
|
1218
|
-
if (gesture
|
|
1219
|
-
&& !this.sameSessionIds(gesture.eligibleSessionIds, new Set(this.eligibleSessionIds(gesture.resourceId))))
|
|
1242
|
+
if (gesture && (this.searchActive || !this.itemsByKey.has(itemKey(gesture.item)))) {
|
|
1220
1243
|
this.finishPointerDrag(false);
|
|
1244
|
+
}
|
|
1221
1245
|
}
|
|
1222
1246
|
}
|
|
1223
1247
|
async connectedCallback() {
|
|
@@ -1238,7 +1262,6 @@ let DeesHarnessSessionList = (() => {
|
|
|
1238
1262
|
await super.disconnectedCallback();
|
|
1239
1263
|
}
|
|
1240
1264
|
render() {
|
|
1241
|
-
const groupingActive = this.enableGrouping && !this.search.trim();
|
|
1242
1265
|
return html `
|
|
1243
1266
|
<div class="searchRow">
|
|
1244
1267
|
<div class="searchField">
|
|
@@ -1276,15 +1299,15 @@ let DeesHarnessSessionList = (() => {
|
|
|
1276
1299
|
<div class="listFrame">
|
|
1277
1300
|
<div class="scrollShadow top ${this.topScrollShadowVisible ? 'visible' : ''}"></div>
|
|
1278
1301
|
<div
|
|
1279
|
-
class="list ${this.
|
|
1302
|
+
class="list ${this.draggingItem ? 'dragActive' : ''}"
|
|
1280
1303
|
@scroll=${this.syncScrollShadowState}
|
|
1281
1304
|
>
|
|
1282
1305
|
<div class="listContent">
|
|
1283
1306
|
${this.loading
|
|
1284
1307
|
? html `<div class="emptyNote">Loading conversations…</div>`
|
|
1285
|
-
:
|
|
1286
|
-
? this.
|
|
1287
|
-
: this.
|
|
1308
|
+
: this.searchActive
|
|
1309
|
+
? this.renderSearchList()
|
|
1310
|
+
: this.renderOrderedList()}
|
|
1288
1311
|
</div>
|
|
1289
1312
|
</div>
|
|
1290
1313
|
<div class="scrollShadow bottom ${this.bottomScrollShadowVisible ? 'visible' : ''}"></div>
|
|
@@ -1292,76 +1315,32 @@ let DeesHarnessSessionList = (() => {
|
|
|
1292
1315
|
<div class="visuallyHidden" aria-live="polite">${this.moveAnnouncement}</div>
|
|
1293
1316
|
`;
|
|
1294
1317
|
}
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
renderGroupedList() {
|
|
1317
|
-
const byId = this.sessionsById;
|
|
1318
|
-
const ungrouped = this.ungroupedSessions;
|
|
1319
|
-
const unattachedResources = this.unattachedResources;
|
|
1320
|
-
if (!this.sessions.length && !this.groups.length && !unattachedResources.length) {
|
|
1318
|
+
renderEmptyNote() {
|
|
1319
|
+
return html `<div class="emptyNote">
|
|
1320
|
+
${this.acceptedResources.length
|
|
1321
|
+
? this.sessions.length
|
|
1322
|
+
? 'No conversations or resources match this search.'
|
|
1323
|
+
: 'No resources match this search.'
|
|
1324
|
+
: this.sessions.length
|
|
1325
|
+
? 'No conversations match this search.'
|
|
1326
|
+
: this.emptyText}
|
|
1327
|
+
</div>`;
|
|
1328
|
+
}
|
|
1329
|
+
renderSearchList() {
|
|
1330
|
+
const items = this.searchItems;
|
|
1331
|
+
if (!items.length)
|
|
1332
|
+
return this.renderEmptyNote();
|
|
1333
|
+
return this.renderSection(items, null, false);
|
|
1334
|
+
}
|
|
1335
|
+
renderOrderedList() {
|
|
1336
|
+
const groups = this.effectiveGroups;
|
|
1337
|
+
const ungrouped = this.ungroupedItems;
|
|
1338
|
+
if (!this.acceptedItems.length && !groups.length) {
|
|
1321
1339
|
return html `<div class="emptyNote">${this.emptyText}</div>`;
|
|
1322
1340
|
}
|
|
1323
1341
|
return html `
|
|
1324
|
-
${
|
|
1325
|
-
|
|
1326
|
-
.map((id) => byId.get(id))
|
|
1327
|
-
.filter((session) => session !== undefined);
|
|
1328
|
-
const collapsed = this.collapsedGroupIds.has(group.id);
|
|
1329
|
-
const attentionCount = members.filter((session) => session.state === 'attention' || session.state === 'error').length;
|
|
1330
|
-
const isHeaderDrop = this.dropSlot?.groupId === group.id
|
|
1331
|
-
&& this.dropSlot.index === this.sortableSessions(members).length
|
|
1332
|
-
&& collapsed;
|
|
1333
|
-
return html `
|
|
1334
|
-
<button
|
|
1335
|
-
class="groupHeader ${collapsed ? 'collapsed' : ''} ${isHeaderDrop ? 'dropTarget' : ''}"
|
|
1336
|
-
data-drop-group-id=${group.id}
|
|
1337
|
-
data-drop-index=${this.sortableSessions(members).length}
|
|
1338
|
-
data-drop-kind="slot"
|
|
1339
|
-
type="button"
|
|
1340
|
-
@click=${() => this.toggleGroupCollapsed(group.id)}
|
|
1341
|
-
@contextmenu=${(event) => {
|
|
1342
|
-
event.preventDefault();
|
|
1343
|
-
const detail = {
|
|
1344
|
-
group,
|
|
1345
|
-
clientX: event.clientX,
|
|
1346
|
-
clientY: event.clientY,
|
|
1347
|
-
originalEvent: event,
|
|
1348
|
-
};
|
|
1349
|
-
this.dispatchEvent(new CustomEvent('harness-group-context', { detail, bubbles: true, composed: true }));
|
|
1350
|
-
}}
|
|
1351
|
-
>
|
|
1352
|
-
<dees-icon class="chevron" icon="lucide:ChevronDown" iconSize="12"></dees-icon>
|
|
1353
|
-
<span>${group.name}</span>
|
|
1354
|
-
${attentionCount ? html `<span class="groupAttention" aria-label=${`${attentionCount} need attention`}>
|
|
1355
|
-
<dees-icon aria-hidden="true" icon="lucide:CircleAlert" iconSize="11"></dees-icon>${attentionCount}
|
|
1356
|
-
</span>` : ''}
|
|
1357
|
-
<span class="groupCount">${members.length}</span>
|
|
1358
|
-
</button>
|
|
1359
|
-
${collapsed
|
|
1360
|
-
? ''
|
|
1361
|
-
: this.renderSection(members, group.id)}
|
|
1362
|
-
`;
|
|
1363
|
-
})}
|
|
1364
|
-
${this.groups.length && (ungrouped.length || this.draggingSessionId)
|
|
1342
|
+
${groups.map((group) => this.renderGroup(group))}
|
|
1343
|
+
${groups.length && (ungrouped.length || this.draggingItem)
|
|
1365
1344
|
? html `
|
|
1366
1345
|
<button
|
|
1367
1346
|
class="groupHeader"
|
|
@@ -1376,47 +1355,87 @@ let DeesHarnessSessionList = (() => {
|
|
|
1376
1355
|
</button>
|
|
1377
1356
|
`
|
|
1378
1357
|
: ''}
|
|
1379
|
-
${this.renderSection(ungrouped, null)}
|
|
1380
|
-
|
|
1358
|
+
${this.renderSection(ungrouped, null, true)}
|
|
1359
|
+
`;
|
|
1360
|
+
}
|
|
1361
|
+
renderGroup(groupArg) {
|
|
1362
|
+
const members = this.itemsForGroup(groupArg.id);
|
|
1363
|
+
const collapsed = this.collapsedGroupIds.has(groupArg.id);
|
|
1364
|
+
const attentionCount = members.filter((item) => (item.kind === 'session' && (item.session.state === 'attention' || item.session.state === 'error'))).length;
|
|
1365
|
+
const appendIndex = this.sortableItems(members).length;
|
|
1366
|
+
const isHeaderDrop = this.dropSlot?.groupId === groupArg.id
|
|
1367
|
+
&& this.dropSlot.index === appendIndex
|
|
1368
|
+
&& collapsed;
|
|
1369
|
+
return html `
|
|
1370
|
+
<button
|
|
1371
|
+
class="groupHeader ${collapsed ? 'collapsed' : ''} ${isHeaderDrop ? 'dropTarget' : ''}"
|
|
1372
|
+
data-drop-group-id=${groupArg.id}
|
|
1373
|
+
data-drop-index=${appendIndex}
|
|
1374
|
+
data-drop-kind="slot"
|
|
1375
|
+
type="button"
|
|
1376
|
+
@click=${() => this.toggleGroupCollapsed(groupArg.id)}
|
|
1377
|
+
@contextmenu=${(event) => {
|
|
1378
|
+
event.preventDefault();
|
|
1379
|
+
const detail = {
|
|
1380
|
+
group: groupArg,
|
|
1381
|
+
clientX: event.clientX,
|
|
1382
|
+
clientY: event.clientY,
|
|
1383
|
+
originalEvent: event,
|
|
1384
|
+
};
|
|
1385
|
+
this.dispatchEvent(new CustomEvent('harness-group-context', { detail, bubbles: true, composed: true }));
|
|
1386
|
+
}}
|
|
1387
|
+
>
|
|
1388
|
+
<dees-icon class="chevron" icon="lucide:ChevronDown" iconSize="12"></dees-icon>
|
|
1389
|
+
<span>${groupArg.name}</span>
|
|
1390
|
+
${attentionCount ? html `<span class="groupAttention" aria-label=${`${attentionCount} need attention`}>
|
|
1391
|
+
<dees-icon aria-hidden="true" icon="lucide:CircleAlert" iconSize="11"></dees-icon>${attentionCount}
|
|
1392
|
+
</span>` : ''}
|
|
1393
|
+
<span class="groupCount">${members.length}</span>
|
|
1394
|
+
</button>
|
|
1395
|
+
${collapsed ? '' : this.renderSection(members, groupArg.id, true)}
|
|
1381
1396
|
`;
|
|
1382
1397
|
}
|
|
1383
|
-
renderSection(
|
|
1384
|
-
const slot = this.dropSlot;
|
|
1398
|
+
renderSection(itemsArg, groupIdArg, sortableArg) {
|
|
1399
|
+
const slot = sortableArg ? this.dropSlot : undefined;
|
|
1385
1400
|
const entries = [];
|
|
1386
1401
|
let logicalIndex = 0;
|
|
1387
|
-
for (const
|
|
1388
|
-
const isDragging =
|
|
1389
|
-
const sortable =
|
|
1402
|
+
for (const item of itemsArg) {
|
|
1403
|
+
const isDragging = sameItem(this.draggingItem, item);
|
|
1404
|
+
const sortable = sortableArg && item.sortable;
|
|
1390
1405
|
if (slot
|
|
1391
|
-
&& slot.groupId ===
|
|
1406
|
+
&& slot.groupId === groupIdArg
|
|
1392
1407
|
&& slot.index === logicalIndex
|
|
1393
1408
|
&& !isDragging
|
|
1394
1409
|
&& sortable) {
|
|
1395
|
-
entries.push({ type: 'placeholder', key: `placeholder:${
|
|
1410
|
+
entries.push({ type: 'placeholder', key: `placeholder:${groupIdArg ?? 'ungrouped'}` });
|
|
1396
1411
|
}
|
|
1397
1412
|
entries.push({
|
|
1398
|
-
type: '
|
|
1399
|
-
key:
|
|
1400
|
-
|
|
1413
|
+
type: 'item',
|
|
1414
|
+
key: item.key,
|
|
1415
|
+
item,
|
|
1401
1416
|
logicalIndex: sortable ? logicalIndex : -1,
|
|
1402
1417
|
});
|
|
1403
1418
|
if (sortable && !isDragging)
|
|
1404
1419
|
logicalIndex += 1;
|
|
1405
1420
|
}
|
|
1406
|
-
if (slot && slot.groupId ===
|
|
1407
|
-
entries.push({ type: 'placeholder', key: `placeholder:${
|
|
1421
|
+
if (slot && slot.groupId === groupIdArg && slot.index === logicalIndex) {
|
|
1422
|
+
entries.push({ type: 'placeholder', key: `placeholder:${groupIdArg ?? 'ungrouped'}` });
|
|
1408
1423
|
}
|
|
1409
1424
|
const hasPlaceholder = entries.some((entry) => entry.type === 'placeholder');
|
|
1425
|
+
// Resolve the controlled associations once per section, not once per row.
|
|
1426
|
+
const associations = this.acceptedResourceAssociations;
|
|
1410
1427
|
return html `
|
|
1411
|
-
<div class="section" data-group-id=${
|
|
1428
|
+
<div class="section" data-group-id=${groupIdArg ?? ''}>
|
|
1412
1429
|
${repeat(entries, (entry) => entry.key, (entry) => entry.type === 'placeholder'
|
|
1413
|
-
? this.renderDropPlaceholder(
|
|
1414
|
-
:
|
|
1415
|
-
|
|
1430
|
+
? this.renderDropPlaceholder(groupIdArg, slot?.index ?? 0)
|
|
1431
|
+
: entry.item.kind === 'session'
|
|
1432
|
+
? this.renderSessionItem(entry.item.session, groupIdArg, entry.logicalIndex)
|
|
1433
|
+
: this.renderResourceItem(entry.item.resource, groupIdArg, entry.logicalIndex, associations.get(entry.item.id) ?? null))}
|
|
1434
|
+
${this.draggingItem && sortableArg && !hasPlaceholder && this.sortableItems(itemsArg).length === 0
|
|
1416
1435
|
? html `
|
|
1417
1436
|
<div
|
|
1418
1437
|
class="emptyDropZone"
|
|
1419
|
-
data-drop-group-id=${
|
|
1438
|
+
data-drop-group-id=${groupIdArg ?? ''}
|
|
1420
1439
|
data-drop-index="0"
|
|
1421
1440
|
data-drop-kind="slot"
|
|
1422
1441
|
></div>
|
|
@@ -1432,26 +1451,51 @@ let DeesHarnessSessionList = (() => {
|
|
|
1432
1451
|
data-drop-group-id=${groupId ?? ''}
|
|
1433
1452
|
data-drop-index=${index}
|
|
1434
1453
|
data-drop-kind="slot"
|
|
1435
|
-
style=${`height: ${Math.max(
|
|
1454
|
+
style=${`height: ${Math.max(24, this.draggedItemHeight)}px`}
|
|
1436
1455
|
></div>
|
|
1437
1456
|
`;
|
|
1438
1457
|
}
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1458
|
+
/** One grip for both kinds; only its size and extra class differ. */
|
|
1459
|
+
renderDragHandle(refArg, titleArg, groupIdArg, logicalIndexArg) {
|
|
1460
|
+
const isResource = refArg.kind === 'resource';
|
|
1461
|
+
return html `
|
|
1462
|
+
<button
|
|
1463
|
+
class="dragHandle ${isResource ? 'resourceDragHandle' : ''}"
|
|
1464
|
+
type="button"
|
|
1465
|
+
title="Drag to reorder; use arrow, Home, or End keys for keyboard reordering"
|
|
1466
|
+
aria-label=${`Reorder ${titleArg}`}
|
|
1467
|
+
aria-keyshortcuts="ArrowUp ArrowDown Home End"
|
|
1468
|
+
@pointerdown=${(event) => {
|
|
1469
|
+
this.handlePointerDown(event, refArg, groupIdArg, logicalIndexArg);
|
|
1470
|
+
}}
|
|
1471
|
+
@pointermove=${this.handlePointerMove}
|
|
1472
|
+
@pointerup=${this.handlePointerUp}
|
|
1473
|
+
@pointercancel=${this.handlePointerCancel}
|
|
1474
|
+
@lostpointercapture=${this.handleLostPointerCapture}
|
|
1475
|
+
@keydown=${(event) => {
|
|
1476
|
+
this.handleKeyboardMove(event, refArg, titleArg, groupIdArg);
|
|
1477
|
+
}}
|
|
1478
|
+
>
|
|
1479
|
+
<dees-icon icon="lucide:GripVertical" iconSize=${isResource ? '13' : '14'}></dees-icon>
|
|
1480
|
+
</button>
|
|
1481
|
+
`;
|
|
1482
|
+
}
|
|
1483
|
+
renderSessionItem(session, groupId, index) {
|
|
1484
|
+
const draggable = index >= 0;
|
|
1443
1485
|
const expanded = this.expandedSessionIds.has(session.id);
|
|
1444
1486
|
const state = session.state ?? 'normal';
|
|
1445
1487
|
const statusLabel = this.sessionStatusLabel(session);
|
|
1446
1488
|
const active = (state === 'normal' || state === 'working') && (session.working ?? state === 'working');
|
|
1447
1489
|
const detailsId = `session-details-${session.id}`;
|
|
1448
1490
|
const dropIndex = index < 0 ? 0 : index;
|
|
1449
|
-
const
|
|
1450
|
-
const
|
|
1491
|
+
const title = session.title || session.id;
|
|
1492
|
+
const projectLabel = session.projectLabel?.trim() ?? '';
|
|
1451
1493
|
return html `
|
|
1452
1494
|
<article
|
|
1453
|
-
class="item state-${state} ${active ? 'active' : ''} ${expanded ? 'expanded' : ''} ${session.id === this.selectedSessionId ? 'selected' : ''} ${this.
|
|
1495
|
+
class="item state-${state} ${active ? 'active' : ''} ${expanded ? 'expanded' : ''} ${session.id === this.selectedSessionId ? 'selected' : ''} ${sameItem(this.draggingItem, { kind: 'session', id: session.id }) ? 'dragging' : ''}"
|
|
1454
1496
|
data-session-id=${session.id}
|
|
1497
|
+
data-item-kind="session"
|
|
1498
|
+
data-item-id=${session.id}
|
|
1455
1499
|
data-drop-group-id=${groupId ?? ''}
|
|
1456
1500
|
data-drop-index=${dropIndex}
|
|
1457
1501
|
data-drop-kind=${index < 0 ? 'slot' : 'card'}
|
|
@@ -1459,7 +1503,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
1459
1503
|
if (this.eventTargetsExpandToggle(event) || this.eventTargetsDragHandle(event)
|
|
1460
1504
|
|| this.eventTargetsSessionActions(event))
|
|
1461
1505
|
return;
|
|
1462
|
-
this.
|
|
1506
|
+
this.emitSession('harness-session-open', session);
|
|
1463
1507
|
}}
|
|
1464
1508
|
@contextmenu=${(event) => {
|
|
1465
1509
|
if (this.eventTargetsExpandToggle(event))
|
|
@@ -1478,41 +1522,21 @@ let DeesHarnessSessionList = (() => {
|
|
|
1478
1522
|
<div class="itemInner">
|
|
1479
1523
|
<div class="itemHeader ${draggable ? 'draggable' : ''}">
|
|
1480
1524
|
${draggable
|
|
1481
|
-
?
|
|
1482
|
-
<button
|
|
1483
|
-
class="dragHandle"
|
|
1484
|
-
type="button"
|
|
1485
|
-
title="Drag to reorder; use arrow, Home, or End keys for keyboard reordering"
|
|
1486
|
-
aria-label=${`Reorder ${session.title || session.id}`}
|
|
1487
|
-
aria-keyshortcuts="ArrowUp ArrowDown Home End"
|
|
1488
|
-
@pointerdown=${(event) => {
|
|
1489
|
-
this.handlePointerDown(event, session, groupId, index);
|
|
1490
|
-
}}
|
|
1491
|
-
@pointermove=${this.handlePointerMove}
|
|
1492
|
-
@pointerup=${this.handlePointerUp}
|
|
1493
|
-
@pointercancel=${this.handlePointerCancel}
|
|
1494
|
-
@lostpointercapture=${this.handleLostPointerCapture}
|
|
1495
|
-
@keydown=${(event) => {
|
|
1496
|
-
this.handleKeyboardMove(event, session, groupId);
|
|
1497
|
-
}}
|
|
1498
|
-
>
|
|
1499
|
-
<dees-icon icon="lucide:GripVertical" iconSize="14"></dees-icon>
|
|
1500
|
-
</button>
|
|
1501
|
-
`
|
|
1525
|
+
? this.renderDragHandle({ kind: 'session', id: session.id }, title, groupId, index)
|
|
1502
1526
|
: ''}
|
|
1503
1527
|
<button
|
|
1504
1528
|
class="itemPrimary"
|
|
1505
1529
|
type="button"
|
|
1506
1530
|
aria-keyshortcuts="ContextMenu Shift+F10"
|
|
1507
1531
|
aria-current=${session.id === this.selectedSessionId ? 'true' : 'false'}
|
|
1508
|
-
@click=${() => this.
|
|
1532
|
+
@click=${() => this.emitSession('harness-session-select', session)}
|
|
1509
1533
|
@keydown=${(event) => {
|
|
1510
1534
|
if (this.handleSessionContextKey(event))
|
|
1511
1535
|
return;
|
|
1512
1536
|
if (event.key !== 'Enter')
|
|
1513
1537
|
return;
|
|
1514
1538
|
event.preventDefault();
|
|
1515
|
-
this.
|
|
1539
|
+
this.emitSession('harness-session-open', session);
|
|
1516
1540
|
}}
|
|
1517
1541
|
>
|
|
1518
1542
|
<span class="stateDot" aria-hidden="true">
|
|
@@ -1523,7 +1547,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
1523
1547
|
${session.icon
|
|
1524
1548
|
? html `<dees-icon class="itemIcon" icon=${session.icon} iconSize="13"></dees-icon>`
|
|
1525
1549
|
: ''}
|
|
1526
|
-
<span class="titleText">${
|
|
1550
|
+
<span class="titleText">${title}</span>
|
|
1527
1551
|
</span>
|
|
1528
1552
|
<span class="itemStatus" title=${statusLabel}>${statusLabel}</span>
|
|
1529
1553
|
<span class="itemIdentity">
|
|
@@ -1532,6 +1556,10 @@ let DeesHarnessSessionList = (() => {
|
|
|
1532
1556
|
<span class="harnessName" title=${session.harness.name}>${session.harness.name}</span>
|
|
1533
1557
|
<span aria-hidden="true">·</span>
|
|
1534
1558
|
` : ''}
|
|
1559
|
+
${projectLabel ? html `
|
|
1560
|
+
<span class="projectName" title=${projectLabel}>${projectLabel}</span>
|
|
1561
|
+
<span aria-hidden="true">·</span>
|
|
1562
|
+
` : ''}
|
|
1535
1563
|
<span class="itemTime">${harnessFormatRelativeTime(session.updatedAt ?? session.createdAt)}</span>
|
|
1536
1564
|
</span>
|
|
1537
1565
|
</span>
|
|
@@ -1540,7 +1568,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
1540
1568
|
class="sessionActions"
|
|
1541
1569
|
type="button"
|
|
1542
1570
|
title="Actions"
|
|
1543
|
-
aria-label=${`Actions for ${
|
|
1571
|
+
aria-label=${`Actions for ${title}`}
|
|
1544
1572
|
aria-haspopup="menu"
|
|
1545
1573
|
aria-keyshortcuts="ContextMenu Shift+F10"
|
|
1546
1574
|
@click=${this.invokeSessionContext}
|
|
@@ -1562,16 +1590,6 @@ let DeesHarnessSessionList = (() => {
|
|
|
1562
1590
|
<dees-icon icon="lucide:ChevronDown" iconSize="15"></dees-icon>
|
|
1563
1591
|
</button>
|
|
1564
1592
|
</div>
|
|
1565
|
-
${isResourceDropTarget
|
|
1566
|
-
? html `<div class="resourceDropLabel">Associate resource with ${session.title || session.id}</div>`
|
|
1567
|
-
: ''}
|
|
1568
|
-
${resources.length
|
|
1569
|
-
? html `
|
|
1570
|
-
<ul class="resourceChildren" aria-label=${`Resources for ${session.title || session.id}`}>
|
|
1571
|
-
${repeat(resources, (resource) => resource.id, (resource) => this.renderResource(resource, session.id))}
|
|
1572
|
-
</ul>
|
|
1573
|
-
`
|
|
1574
|
-
: ''}
|
|
1575
1593
|
${expanded
|
|
1576
1594
|
? html `
|
|
1577
1595
|
<div class="itemDetails" id=${detailsId}>
|
|
@@ -1586,33 +1604,30 @@ let DeesHarnessSessionList = (() => {
|
|
|
1586
1604
|
</article>
|
|
1587
1605
|
`;
|
|
1588
1606
|
}
|
|
1589
|
-
|
|
1590
|
-
if (!resourcesArg.length)
|
|
1591
|
-
return html ``;
|
|
1592
|
-
return html `
|
|
1593
|
-
<section class="resourceSection" aria-labelledby="unattached-resources-heading">
|
|
1594
|
-
<h2 class="resourceSectionTitle" id="unattached-resources-heading">Resources</h2>
|
|
1595
|
-
<ul class="resourceList" aria-label="Unattached resources">
|
|
1596
|
-
${repeat(resourcesArg, (resource) => resource.id, (resource) => this.renderResource(resource, null))}
|
|
1597
|
-
</ul>
|
|
1598
|
-
</section>
|
|
1599
|
-
`;
|
|
1600
|
-
}
|
|
1601
|
-
renderResource(resourceArg, sessionIdArg) {
|
|
1607
|
+
renderResourceItem(resourceArg, groupIdArg, indexArg, attachedTarget) {
|
|
1602
1608
|
const selected = resourceArg.id === this.selectedResourceId;
|
|
1603
|
-
const
|
|
1604
|
-
const
|
|
1609
|
+
const draggable = indexArg >= 0;
|
|
1610
|
+
const dragging = sameItem(this.draggingItem, { kind: 'resource', id: resourceArg.id });
|
|
1605
1611
|
const contextOpen = resourceArg.id === this.resourceContextResourceId;
|
|
1612
|
+
const attachedTitle = attachedTarget ? this.itemTitleFor(attachedTarget) : '';
|
|
1613
|
+
const title = resourceArg.title || resourceArg.id;
|
|
1614
|
+
const projectLabel = resourceArg.projectLabel?.trim() ?? '';
|
|
1615
|
+
const dropIndex = indexArg < 0 ? 0 : indexArg;
|
|
1606
1616
|
return html `
|
|
1607
|
-
<
|
|
1608
|
-
class="resourceRow ${selected ? 'selected' : ''} ${dragging ? '
|
|
1617
|
+
<article
|
|
1618
|
+
class="resourceRow ${selected ? 'selected' : ''} ${draggable ? 'draggable' : ''} ${dragging ? 'dragging' : ''}"
|
|
1609
1619
|
data-resource-id=${resourceArg.id}
|
|
1610
|
-
data-resource
|
|
1620
|
+
data-item-kind="resource"
|
|
1621
|
+
data-item-id=${resourceArg.id}
|
|
1622
|
+
data-resource-target=${attachedTarget ? `${attachedTarget.kind}:${attachedTarget.id}` : ''}
|
|
1623
|
+
data-drop-group-id=${groupIdArg ?? ''}
|
|
1624
|
+
data-drop-index=${dropIndex}
|
|
1625
|
+
data-drop-kind=${indexArg < 0 ? 'slot' : 'card'}
|
|
1611
1626
|
@dblclick=${(event) => {
|
|
1612
1627
|
event.stopPropagation();
|
|
1613
|
-
if (this.eventTargetsResourceControl(event))
|
|
1628
|
+
if (this.eventTargetsResourceControl(event) || this.eventTargetsDragHandle(event))
|
|
1614
1629
|
return;
|
|
1615
|
-
this.emitResource('harness-resource-open', resourceArg,
|
|
1630
|
+
this.emitResource('harness-resource-open', resourceArg, attachedTarget);
|
|
1616
1631
|
}}
|
|
1617
1632
|
@contextmenu=${(event) => {
|
|
1618
1633
|
event.preventDefault();
|
|
@@ -1621,43 +1636,24 @@ let DeesHarnessSessionList = (() => {
|
|
|
1621
1636
|
&& target.matches('button:not(:disabled)')))
|
|
1622
1637
|
?? event.currentTarget.querySelector('.resourcePrimary')
|
|
1623
1638
|
?? event.currentTarget;
|
|
1624
|
-
this.emitResourceContext(event, resourceArg,
|
|
1639
|
+
this.emitResourceContext(event, resourceArg, attachedTarget, 'pointer', focusTarget);
|
|
1625
1640
|
}}
|
|
1626
1641
|
>
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
title=${eligibleTargetCount
|
|
1631
|
-
? 'Drag to associate with an eligible conversation'
|
|
1632
|
-
: 'No eligible conversations'}
|
|
1633
|
-
aria-label=${`Associate ${resourceArg.title || resourceArg.id} by dragging`}
|
|
1634
|
-
aria-keyshortcuts="ContextMenu Shift+F10"
|
|
1635
|
-
?disabled=${eligibleTargetCount === 0}
|
|
1636
|
-
@pointerdown=${(event) => {
|
|
1637
|
-
this.handleResourcePointerDown(event, resourceArg, sessionIdArg);
|
|
1638
|
-
}}
|
|
1639
|
-
@pointermove=${this.handlePointerMove}
|
|
1640
|
-
@pointerup=${this.handlePointerUp}
|
|
1641
|
-
@pointercancel=${this.handlePointerCancel}
|
|
1642
|
-
@lostpointercapture=${this.handleLostPointerCapture}
|
|
1643
|
-
@keydown=${(event) => {
|
|
1644
|
-
this.handleResourceContextKey(event, resourceArg, sessionIdArg);
|
|
1645
|
-
}}
|
|
1646
|
-
>
|
|
1647
|
-
<dees-icon icon="lucide:GripVertical" iconSize="13"></dees-icon>
|
|
1648
|
-
</button>
|
|
1642
|
+
${draggable
|
|
1643
|
+
? this.renderDragHandle({ kind: 'resource', id: resourceArg.id }, title, groupIdArg, indexArg)
|
|
1644
|
+
: ''}
|
|
1649
1645
|
<button
|
|
1650
1646
|
class="resourcePrimary"
|
|
1651
1647
|
type="button"
|
|
1652
1648
|
aria-current=${selected ? 'true' : 'false'}
|
|
1653
|
-
@click=${() => this.emitResource('harness-resource-select', resourceArg,
|
|
1649
|
+
@click=${() => this.emitResource('harness-resource-select', resourceArg, attachedTarget)}
|
|
1654
1650
|
@keydown=${(event) => {
|
|
1655
1651
|
if (event.key === 'Enter') {
|
|
1656
1652
|
event.preventDefault();
|
|
1657
|
-
this.emitResource('harness-resource-open', resourceArg,
|
|
1653
|
+
this.emitResource('harness-resource-open', resourceArg, attachedTarget);
|
|
1658
1654
|
return;
|
|
1659
1655
|
}
|
|
1660
|
-
this.handleResourceContextKey(event, resourceArg,
|
|
1656
|
+
this.handleResourceContextKey(event, resourceArg, attachedTarget);
|
|
1661
1657
|
}}
|
|
1662
1658
|
>
|
|
1663
1659
|
<dees-icon
|
|
@@ -1666,34 +1662,43 @@ let DeesHarnessSessionList = (() => {
|
|
|
1666
1662
|
iconSize="14"
|
|
1667
1663
|
></dees-icon>
|
|
1668
1664
|
<span class="resourceCopy">
|
|
1669
|
-
<span class="resourceTitle">${
|
|
1665
|
+
<span class="resourceTitle">${title}</span>
|
|
1670
1666
|
${resourceArg.preview ? html `<span class="resourcePreview">${resourceArg.preview}</span>` : ''}
|
|
1671
1667
|
<span class="resourceMeta">
|
|
1672
|
-
${resourceArg.kind}${resourceArg.state ? ` · ${resourceArg.state}` : ''}${resourceArg.updatedAt || resourceArg.createdAt
|
|
1668
|
+
${resourceArg.kind}${projectLabel ? ` · ${projectLabel}` : ''}${resourceArg.state ? ` · ${resourceArg.state}` : ''}${resourceArg.updatedAt || resourceArg.createdAt
|
|
1673
1669
|
? ` · ${harnessFormatRelativeTime(resourceArg.updatedAt ?? resourceArg.createdAt)}`
|
|
1674
1670
|
: ''}
|
|
1675
1671
|
</span>
|
|
1672
|
+
${attachedTarget
|
|
1673
|
+
? html `
|
|
1674
|
+
<span class="resourceAttachment" title=${`Attached to ${attachedTitle}`}>
|
|
1675
|
+
<dees-icon aria-hidden="true" icon="lucide:Link" iconSize="10"></dees-icon>
|
|
1676
|
+
<span class="visuallyHidden">Attached to </span>
|
|
1677
|
+
<span class="resourceAttachmentName">${attachedTitle}</span>
|
|
1678
|
+
</span>
|
|
1679
|
+
`
|
|
1680
|
+
: ''}
|
|
1676
1681
|
</span>
|
|
1677
1682
|
</button>
|
|
1678
1683
|
<button
|
|
1679
1684
|
class="resourceActions"
|
|
1680
1685
|
type="button"
|
|
1681
1686
|
title="Resource actions"
|
|
1682
|
-
aria-label=${`Actions for ${
|
|
1687
|
+
aria-label=${`Actions for ${title}`}
|
|
1683
1688
|
aria-haspopup="menu"
|
|
1684
1689
|
aria-expanded=${contextOpen ? 'true' : 'false'}
|
|
1685
1690
|
aria-keyshortcuts="ContextMenu Shift+F10"
|
|
1686
1691
|
@click=${(event) => {
|
|
1687
1692
|
event.stopPropagation();
|
|
1688
|
-
this.emitResourceContext(event, resourceArg,
|
|
1693
|
+
this.emitResourceContext(event, resourceArg, attachedTarget, 'action', event.currentTarget);
|
|
1689
1694
|
}}
|
|
1690
1695
|
@keydown=${(event) => {
|
|
1691
|
-
this.handleResourceContextKey(event, resourceArg,
|
|
1696
|
+
this.handleResourceContextKey(event, resourceArg, attachedTarget);
|
|
1692
1697
|
}}
|
|
1693
1698
|
>
|
|
1694
1699
|
<dees-icon icon="lucide:Ellipsis" iconSize="15"></dees-icon>
|
|
1695
1700
|
</button>
|
|
1696
|
-
</
|
|
1701
|
+
</article>
|
|
1697
1702
|
`;
|
|
1698
1703
|
}
|
|
1699
1704
|
invokeSessionContext(event) {
|
|
@@ -1723,8 +1728,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
1723
1728
|
return event.composedPath().some((target) => target instanceof HTMLElement && target.classList.contains('dragHandle'));
|
|
1724
1729
|
}
|
|
1725
1730
|
eventTargetsResourceControl(event) {
|
|
1726
|
-
return event.composedPath().some((target) => target instanceof HTMLElement &&
|
|
1727
|
-
|| target.classList.contains('resourceActions')));
|
|
1731
|
+
return event.composedPath().some((target) => target instanceof HTMLElement && target.classList.contains('resourceActions'));
|
|
1728
1732
|
}
|
|
1729
1733
|
sessionStateLabel(state) {
|
|
1730
1734
|
switch (state) {
|
|
@@ -1765,38 +1769,22 @@ let DeesHarnessSessionList = (() => {
|
|
|
1765
1769
|
}
|
|
1766
1770
|
this.collapsedGroupIds = next;
|
|
1767
1771
|
}
|
|
1768
|
-
|
|
1769
|
-
return sessionsArg.filter((session) => (session.draggable !== false
|
|
1770
|
-
&& (!excludeDraggingArg || session.id !== this.draggingSessionId)));
|
|
1771
|
-
}
|
|
1772
|
-
sessionsForGroup(groupIdArg) {
|
|
1773
|
-
if (groupIdArg === null)
|
|
1774
|
-
return this.ungroupedSessions;
|
|
1775
|
-
const group = this.groups.find((candidate) => candidate.id === groupIdArg);
|
|
1776
|
-
if (!group)
|
|
1777
|
-
return [];
|
|
1778
|
-
const byId = this.sessionsById;
|
|
1779
|
-
return group.sessionIds
|
|
1780
|
-
.map((sessionId) => byId.get(sessionId))
|
|
1781
|
-
.filter((session) => session !== undefined);
|
|
1782
|
-
}
|
|
1783
|
-
handlePointerDown(eventArg, sessionArg, groupIdArg, logicalIndexArg) {
|
|
1772
|
+
handlePointerDown(eventArg, refArg, groupIdArg, logicalIndexArg) {
|
|
1784
1773
|
if (this.pointerDragGesture
|
|
1785
1774
|
|| eventArg.button !== 0
|
|
1786
1775
|
|| !eventArg.isPrimary
|
|
1787
1776
|
|| logicalIndexArg < 0)
|
|
1788
1777
|
return;
|
|
1789
1778
|
const handle = eventArg.currentTarget;
|
|
1790
|
-
const source = handle.closest('.item');
|
|
1779
|
+
const source = handle.closest('.item, .resourceRow');
|
|
1791
1780
|
if (!source)
|
|
1792
1781
|
return;
|
|
1793
1782
|
const sourceRect = source.getBoundingClientRect();
|
|
1794
1783
|
this.pointerDragGesture = {
|
|
1795
|
-
type: 'session',
|
|
1796
1784
|
pointerId: eventArg.pointerId,
|
|
1797
1785
|
handle,
|
|
1798
1786
|
source,
|
|
1799
|
-
|
|
1787
|
+
item: itemRef(refArg),
|
|
1800
1788
|
sourceGroupId: groupIdArg,
|
|
1801
1789
|
sourceLogicalIndex: logicalIndexArg,
|
|
1802
1790
|
startClientX: eventArg.clientX,
|
|
@@ -1814,40 +1802,6 @@ let DeesHarnessSessionList = (() => {
|
|
|
1814
1802
|
this.finishPointerDrag(false);
|
|
1815
1803
|
}
|
|
1816
1804
|
}
|
|
1817
|
-
handleResourcePointerDown(eventArg, resourceArg, fromSessionIdArg) {
|
|
1818
|
-
if (this.pointerDragGesture
|
|
1819
|
-
|| eventArg.button !== 0
|
|
1820
|
-
|| !eventArg.isPrimary
|
|
1821
|
-
|| this.eligibleSessionIds(resourceArg.id).every((sessionId) => sessionId === fromSessionIdArg))
|
|
1822
|
-
return;
|
|
1823
|
-
const handle = eventArg.currentTarget;
|
|
1824
|
-
const source = handle.closest('.resourceRow');
|
|
1825
|
-
if (!source)
|
|
1826
|
-
return;
|
|
1827
|
-
const sourceRect = source.getBoundingClientRect();
|
|
1828
|
-
this.pointerDragGesture = {
|
|
1829
|
-
type: 'resource',
|
|
1830
|
-
pointerId: eventArg.pointerId,
|
|
1831
|
-
handle,
|
|
1832
|
-
source,
|
|
1833
|
-
resourceId: resourceArg.id,
|
|
1834
|
-
fromSessionId: fromSessionIdArg,
|
|
1835
|
-
eligibleSessionIds: new Set(this.eligibleSessionIds(resourceArg.id)),
|
|
1836
|
-
startClientX: eventArg.clientX,
|
|
1837
|
-
startClientY: eventArg.clientY,
|
|
1838
|
-
grabOffsetX: eventArg.clientX - sourceRect.left,
|
|
1839
|
-
grabOffsetY: eventArg.clientY - sourceRect.top,
|
|
1840
|
-
phase: 'pending',
|
|
1841
|
-
};
|
|
1842
|
-
window.addEventListener('keydown', this.handleDragKeyDown, true);
|
|
1843
|
-
window.addEventListener('blur', this.handleDragWindowBlur);
|
|
1844
|
-
try {
|
|
1845
|
-
handle.setPointerCapture(eventArg.pointerId);
|
|
1846
|
-
}
|
|
1847
|
-
catch {
|
|
1848
|
-
this.finishPointerDrag(false);
|
|
1849
|
-
}
|
|
1850
|
-
}
|
|
1851
1805
|
handlePointerMove = (eventArg) => {
|
|
1852
1806
|
const gesture = this.pointerDragGesture;
|
|
1853
1807
|
if (!gesture || eventArg.pointerId !== gesture.pointerId)
|
|
@@ -1859,20 +1813,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
1859
1813
|
if (gesture.phase === 'pending'
|
|
1860
1814
|
&& Math.hypot(eventArg.clientX - gesture.startClientX, eventArg.clientY - gesture.startClientY) < dragThresholdPixels)
|
|
1861
1815
|
return;
|
|
1862
|
-
if (gesture.phase === 'pending'
|
|
1863
|
-
&& !(gesture.type === 'session'
|
|
1864
|
-
? this.startPointerDrag(eventArg, gesture)
|
|
1865
|
-
: this.startResourcePointerDrag(eventArg, gesture)))
|
|
1816
|
+
if (gesture.phase === 'pending' && !this.startPointerDrag(eventArg, gesture))
|
|
1866
1817
|
return;
|
|
1867
1818
|
eventArg.preventDefault();
|
|
1868
|
-
if (gesture.type === 'resource') {
|
|
1869
|
-
this.moveResourceDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
1870
|
-
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1871
|
-
this.dragAutoScrollClientY = eventArg.clientY;
|
|
1872
|
-
this.updateDragAutoScrollVelocity();
|
|
1873
|
-
this.updateResourceDropTargetFromPointer(eventArg.clientX, eventArg.clientY);
|
|
1874
|
-
return;
|
|
1875
|
-
}
|
|
1876
1819
|
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
1877
1820
|
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1878
1821
|
this.dragAutoScrollClientY = eventArg.clientY;
|
|
@@ -1884,14 +1827,6 @@ let DeesHarnessSessionList = (() => {
|
|
|
1884
1827
|
if (!gesture || eventArg.pointerId !== gesture.pointerId)
|
|
1885
1828
|
return;
|
|
1886
1829
|
if (gesture.phase === 'active') {
|
|
1887
|
-
if (gesture.type === 'resource') {
|
|
1888
|
-
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1889
|
-
this.dragAutoScrollClientY = eventArg.clientY;
|
|
1890
|
-
this.moveResourceDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
1891
|
-
this.updateResourceDropTargetFromPointer(eventArg.clientX, eventArg.clientY);
|
|
1892
|
-
this.finishPointerDrag(true);
|
|
1893
|
-
return;
|
|
1894
|
-
}
|
|
1895
1830
|
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1896
1831
|
this.dragAutoScrollClientY = eventArg.clientY;
|
|
1897
1832
|
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
@@ -1936,68 +1871,35 @@ let DeesHarnessSessionList = (() => {
|
|
|
1936
1871
|
gestureArg.phase = 'active';
|
|
1937
1872
|
this.reflowGeneration += 1;
|
|
1938
1873
|
this.cancelReflowAnimations();
|
|
1939
|
-
this.draggedItemHeight =
|
|
1940
|
-
this.
|
|
1941
|
-
const remainingCount = this.
|
|
1874
|
+
this.draggedItemHeight = sourceRect.height;
|
|
1875
|
+
this.draggingItem = itemRef(gestureArg.item);
|
|
1876
|
+
const remainingCount = this.sortableItems(this.itemsForGroup(gestureArg.sourceGroupId)).length;
|
|
1942
1877
|
this.dropSlot = {
|
|
1943
1878
|
groupId: gestureArg.sourceGroupId,
|
|
1944
1879
|
index: Math.min(gestureArg.sourceLogicalIndex, remainingCount),
|
|
1945
1880
|
};
|
|
1946
1881
|
return true;
|
|
1947
1882
|
}
|
|
1948
|
-
startResourcePointerDrag(eventArg, gestureArg) {
|
|
1949
|
-
const sourceRect = gestureArg.source.getBoundingClientRect();
|
|
1950
|
-
gestureArg.source.classList.add('resourceDragging');
|
|
1951
|
-
gestureArg.source.style.setProperty('--resource-drag-preview-width', `${sourceRect.width}px`);
|
|
1952
|
-
this.moveResourceDragPreview(eventArg.clientX, eventArg.clientY, gestureArg);
|
|
1953
|
-
gestureArg.source.setAttribute('popover', 'manual');
|
|
1954
|
-
try {
|
|
1955
|
-
gestureArg.source.showPopover();
|
|
1956
|
-
}
|
|
1957
|
-
catch {
|
|
1958
|
-
this.finishPointerDrag(false);
|
|
1959
|
-
return false;
|
|
1960
|
-
}
|
|
1961
|
-
gestureArg.phase = 'active';
|
|
1962
|
-
this.draggingResourceId = gestureArg.resourceId;
|
|
1963
|
-
this.resourceDropTargetSessionId = '';
|
|
1964
|
-
return true;
|
|
1965
|
-
}
|
|
1966
1883
|
moveDragPreview(clientXArg, clientYArg, gestureArg) {
|
|
1967
1884
|
gestureArg.source.style.setProperty('--drag-preview-x', `${clientXArg - gestureArg.grabOffsetX}px`);
|
|
1968
1885
|
gestureArg.source.style.setProperty('--drag-preview-y', `${clientYArg - gestureArg.grabOffsetY}px`);
|
|
1969
1886
|
}
|
|
1970
|
-
moveResourceDragPreview(clientXArg, clientYArg, gestureArg) {
|
|
1971
|
-
gestureArg.source.style.setProperty('--resource-drag-preview-x', `${clientXArg - gestureArg.grabOffsetX}px`);
|
|
1972
|
-
gestureArg.source.style.setProperty('--resource-drag-preview-y', `${clientYArg - gestureArg.grabOffsetY}px`);
|
|
1973
|
-
}
|
|
1974
|
-
updateResourceDropTargetFromPointer(clientXArg, clientYArg) {
|
|
1975
|
-
const gesture = this.pointerDragGesture;
|
|
1976
|
-
if (gesture?.type !== 'resource' || gesture.phase !== 'active')
|
|
1977
|
-
return;
|
|
1978
|
-
const hit = this.shadowRoot?.elementFromPoint(clientXArg, clientYArg);
|
|
1979
|
-
const target = hit?.closest('.item[data-session-id]');
|
|
1980
|
-
const sessionId = target?.dataset.sessionId ?? '';
|
|
1981
|
-
this.resourceDropTargetSessionId = (sessionId
|
|
1982
|
-
&& sessionId !== gesture.fromSessionId
|
|
1983
|
-
&& this.isResourceTargetEligible(gesture.resourceId, sessionId)) ? sessionId : '';
|
|
1984
|
-
}
|
|
1985
1887
|
setDropSlot(groupIdArg, indexArg) {
|
|
1986
1888
|
const current = this.dropSlot;
|
|
1987
1889
|
if (current && current.groupId === groupIdArg && current.index === indexArg)
|
|
1988
1890
|
return;
|
|
1989
|
-
const previousRects = this.
|
|
1891
|
+
const previousRects = this.captureRowRects();
|
|
1990
1892
|
const generation = ++this.reflowGeneration;
|
|
1991
1893
|
this.dropSlot = { groupId: groupIdArg, index: indexArg };
|
|
1992
|
-
void this.
|
|
1894
|
+
void this.animateRowReflow(previousRects, generation);
|
|
1993
1895
|
}
|
|
1994
1896
|
clearDropSlot() {
|
|
1995
1897
|
if (!this.dropSlot)
|
|
1996
1898
|
return;
|
|
1997
|
-
const previousRects = this.
|
|
1899
|
+
const previousRects = this.captureRowRects();
|
|
1998
1900
|
const generation = ++this.reflowGeneration;
|
|
1999
1901
|
this.dropSlot = undefined;
|
|
2000
|
-
void this.
|
|
1902
|
+
void this.animateRowReflow(previousRects, generation);
|
|
2001
1903
|
}
|
|
2002
1904
|
updateDragAutoScrollVelocity() {
|
|
2003
1905
|
const container = this.scrollContainer;
|
|
@@ -2044,12 +1946,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
2044
1946
|
this.stopDragAutoScroll();
|
|
2045
1947
|
return;
|
|
2046
1948
|
}
|
|
2047
|
-
|
|
2048
|
-
this.updateResourceDropTargetFromPointer(this.dragAutoScrollClientX, this.dragAutoScrollClientY);
|
|
2049
|
-
}
|
|
2050
|
-
else {
|
|
2051
|
-
this.updateDropSlotFromPointer();
|
|
2052
|
-
}
|
|
1949
|
+
this.updateDropSlotFromPointer();
|
|
2053
1950
|
this.dragAutoScrollFrame = requestAnimationFrame(this.runDragAutoScroll);
|
|
2054
1951
|
};
|
|
2055
1952
|
updateDropSlotFromPointer() {
|
|
@@ -2067,6 +1964,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
2067
1964
|
}
|
|
2068
1965
|
}
|
|
2069
1966
|
const selector = '[data-drop-group-id][data-drop-index][data-drop-kind]';
|
|
1967
|
+
const dragging = this.draggingItem;
|
|
2070
1968
|
let target;
|
|
2071
1969
|
const offsets = this.dragAutoScrollVelocity === 0
|
|
2072
1970
|
? [0, -8, 8, -16, 16, -32, 32]
|
|
@@ -2075,7 +1973,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
2075
1973
|
const hit = this.shadowRoot?.elementFromPoint(pointerX, pointerY + offset);
|
|
2076
1974
|
const candidate = hit?.closest(selector);
|
|
2077
1975
|
if (candidate
|
|
2078
|
-
&&
|
|
1976
|
+
&& !(dragging
|
|
1977
|
+
&& candidate.dataset.itemKind === dragging.kind
|
|
1978
|
+
&& candidate.dataset.itemId === dragging.id)
|
|
2079
1979
|
&& Number(candidate.dataset.dropIndex) >= 0) {
|
|
2080
1980
|
target = candidate;
|
|
2081
1981
|
break;
|
|
@@ -2132,60 +2032,58 @@ let DeesHarnessSessionList = (() => {
|
|
|
2132
2032
|
this.dragAutoScrollVelocity = 0;
|
|
2133
2033
|
this.dragAutoScrollLastFrame = 0;
|
|
2134
2034
|
}
|
|
2135
|
-
createMoveDetail(
|
|
2136
|
-
const
|
|
2137
|
-
const
|
|
2138
|
-
const sourceGroupId = this.groups.find((group) => group.sessionIds.includes(sessionIdArg))?.id ?? null;
|
|
2139
|
-
const sourceSessions = this.sortableSessions(this.sessionsForGroup(sourceGroupId), false);
|
|
2140
|
-
const sourceIndex = sourceSessions.findIndex((session) => session.id === sessionIdArg);
|
|
2141
|
-
const compatibilityIndex = (sourceGroupId === groupIdArg
|
|
2142
|
-
&& sourceIndex >= 0
|
|
2143
|
-
&& indexArg > sourceIndex) ? indexArg + 1 : indexArg;
|
|
2035
|
+
createMoveDetail(refArg, toGroupIdArg, indexArg, sourceArg) {
|
|
2036
|
+
const targetItems = this.sortableItems(this.itemsForGroup(toGroupIdArg));
|
|
2037
|
+
const beforeItem = targetItems[Math.max(0, indexArg)];
|
|
2144
2038
|
return {
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2039
|
+
item: itemRef(refArg),
|
|
2040
|
+
fromGroupId: this.groupIdForItem(refArg),
|
|
2041
|
+
toGroupId: toGroupIdArg,
|
|
2042
|
+
beforeItem: beforeItem ? itemRef(beforeItem) : null,
|
|
2043
|
+
source: sourceArg,
|
|
2149
2044
|
};
|
|
2150
2045
|
}
|
|
2151
|
-
|
|
2046
|
+
emitItemMove(detailArg) {
|
|
2047
|
+
this.dispatchEvent(new CustomEvent('harness-item-move', { detail: detailArg, bubbles: true, composed: true }));
|
|
2048
|
+
}
|
|
2049
|
+
handleKeyboardMove(eventArg, refArg, titleArg, groupIdArg) {
|
|
2152
2050
|
if (!['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(eventArg.key))
|
|
2153
2051
|
return;
|
|
2154
2052
|
eventArg.preventDefault();
|
|
2155
2053
|
eventArg.stopPropagation();
|
|
2156
|
-
const
|
|
2157
|
-
const sourceIndex =
|
|
2054
|
+
const items = this.sortableItems(this.itemsForGroup(groupIdArg), false);
|
|
2055
|
+
const sourceIndex = items.findIndex((item) => sameItem(item, refArg));
|
|
2158
2056
|
if (sourceIndex < 0)
|
|
2159
2057
|
return;
|
|
2160
|
-
const sectionIds = [...this.
|
|
2058
|
+
const sectionIds = [...this.effectiveGroups.map((group) => group.id), null];
|
|
2161
2059
|
const sectionIndex = sectionIds.indexOf(groupIdArg);
|
|
2162
2060
|
const adjacentGroupId = eventArg.key === 'ArrowUp' && sourceIndex === 0 && sectionIndex > 0
|
|
2163
2061
|
? sectionIds[sectionIndex - 1]
|
|
2164
2062
|
: eventArg.key === 'ArrowDown'
|
|
2165
|
-
&& sourceIndex ===
|
|
2063
|
+
&& sourceIndex === items.length - 1
|
|
2166
2064
|
&& sectionIndex >= 0
|
|
2167
2065
|
&& sectionIndex < sectionIds.length - 1
|
|
2168
2066
|
? sectionIds[sectionIndex + 1]
|
|
2169
2067
|
: undefined;
|
|
2170
2068
|
if (adjacentGroupId !== undefined) {
|
|
2171
|
-
const
|
|
2172
|
-
const targetIndex = eventArg.key === 'ArrowUp' ?
|
|
2173
|
-
const
|
|
2174
|
-
const detail = {
|
|
2175
|
-
sessionId: sessionArg.id,
|
|
2176
|
-
groupId: adjacentGroupId,
|
|
2177
|
-
index: targetIndex,
|
|
2178
|
-
...(beforeSession ? { beforeSessionId: beforeSession.id } : {}),
|
|
2179
|
-
};
|
|
2069
|
+
const targetItems = this.sortableItems(this.itemsForGroup(adjacentGroupId), false);
|
|
2070
|
+
const targetIndex = eventArg.key === 'ArrowUp' ? targetItems.length : 0;
|
|
2071
|
+
const beforeItem = targetItems[targetIndex];
|
|
2180
2072
|
const groupName = adjacentGroupId === null
|
|
2181
2073
|
? 'Ungrouped'
|
|
2182
|
-
: this.
|
|
2183
|
-
this.moveAnnouncement = `Moved ${
|
|
2184
|
-
this.keyboardMoveFocus = {
|
|
2185
|
-
this.
|
|
2074
|
+
: this.effectiveGroups.find((group) => group.id === adjacentGroupId)?.name ?? adjacentGroupId;
|
|
2075
|
+
this.moveAnnouncement = `Moved ${titleArg} to ${groupName}.`;
|
|
2076
|
+
this.keyboardMoveFocus = { item: itemRef(refArg), groupId: adjacentGroupId };
|
|
2077
|
+
this.emitItemMove({
|
|
2078
|
+
item: itemRef(refArg),
|
|
2079
|
+
fromGroupId: groupIdArg,
|
|
2080
|
+
toGroupId: adjacentGroupId,
|
|
2081
|
+
beforeItem: beforeItem ? itemRef(beforeItem) : null,
|
|
2082
|
+
source: 'keyboard',
|
|
2083
|
+
});
|
|
2186
2084
|
return;
|
|
2187
2085
|
}
|
|
2188
|
-
const remaining =
|
|
2086
|
+
const remaining = items.filter((item) => !sameItem(item, refArg));
|
|
2189
2087
|
const targetIndex = eventArg.key === 'Home'
|
|
2190
2088
|
? 0
|
|
2191
2089
|
: eventArg.key === 'End'
|
|
@@ -2195,25 +2093,29 @@ let DeesHarnessSessionList = (() => {
|
|
|
2195
2093
|
: Math.min(remaining.length, sourceIndex + 1);
|
|
2196
2094
|
if (targetIndex === sourceIndex)
|
|
2197
2095
|
return;
|
|
2198
|
-
const
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
2096
|
+
const beforeItem = remaining[targetIndex];
|
|
2097
|
+
this.moveAnnouncement = beforeItem
|
|
2098
|
+
? `Moved ${titleArg} before ${beforeItem.title}.`
|
|
2099
|
+
: `Moved ${titleArg} to the end.`;
|
|
2100
|
+
this.emitItemMove({
|
|
2101
|
+
item: itemRef(refArg),
|
|
2102
|
+
fromGroupId: groupIdArg,
|
|
2103
|
+
toGroupId: groupIdArg,
|
|
2104
|
+
beforeItem: beforeItem ? itemRef(beforeItem) : null,
|
|
2105
|
+
source: 'keyboard',
|
|
2106
|
+
});
|
|
2210
2107
|
}
|
|
2211
|
-
|
|
2108
|
+
rowKey(rowArg) {
|
|
2109
|
+
return `${rowArg.dataset.itemKind}:${rowArg.dataset.itemId}`;
|
|
2110
|
+
}
|
|
2111
|
+
captureRowRects() {
|
|
2212
2112
|
const result = new Map();
|
|
2213
|
-
|
|
2214
|
-
|
|
2113
|
+
const draggingKey = this.draggingItem ? itemKey(this.draggingItem) : '';
|
|
2114
|
+
for (const row of this.shadowRoot?.querySelectorAll('[data-item-kind][data-item-id]') ?? []) {
|
|
2115
|
+
const key = this.rowKey(row);
|
|
2116
|
+
if (key === draggingKey)
|
|
2215
2117
|
continue;
|
|
2216
|
-
result.set(
|
|
2118
|
+
result.set(key, row.getBoundingClientRect());
|
|
2217
2119
|
}
|
|
2218
2120
|
return result;
|
|
2219
2121
|
}
|
|
@@ -2221,11 +2123,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
2221
2123
|
const pending = this.keyboardMoveFocus;
|
|
2222
2124
|
if (!pending)
|
|
2223
2125
|
return;
|
|
2224
|
-
|
|
2225
|
-
if (currentGroupId !== pending.groupId)
|
|
2126
|
+
if (this.groupIdForItem(pending.item) !== pending.groupId)
|
|
2226
2127
|
return;
|
|
2227
|
-
const
|
|
2228
|
-
const handle = item?.querySelector('.dragHandle');
|
|
2128
|
+
const handle = this.rowElementFor(pending.item)?.querySelector('.dragHandle');
|
|
2229
2129
|
if (handle) {
|
|
2230
2130
|
handle.focus();
|
|
2231
2131
|
this.keyboardMoveFocus = undefined;
|
|
@@ -2237,40 +2137,52 @@ let DeesHarnessSessionList = (() => {
|
|
|
2237
2137
|
this.keyboardMoveFocus = undefined;
|
|
2238
2138
|
}
|
|
2239
2139
|
}
|
|
2240
|
-
|
|
2241
|
-
|
|
2140
|
+
/** Known, de-duplicated targets the host allows; an absent entry means unrestricted. */
|
|
2141
|
+
eligibleTargets(resourceIdArg) {
|
|
2142
|
+
const declared = this.eligibleTargetsByResourceId[resourceIdArg];
|
|
2143
|
+
if (!declared)
|
|
2144
|
+
return undefined;
|
|
2145
|
+
const itemsByKey = this.itemsByKey;
|
|
2242
2146
|
const result = [];
|
|
2243
2147
|
const seen = new Set();
|
|
2244
|
-
for (const
|
|
2245
|
-
|
|
2148
|
+
for (const target of declared) {
|
|
2149
|
+
const key = target && itemKey(target);
|
|
2150
|
+
if (!key
|
|
2151
|
+
|| seen.has(key)
|
|
2152
|
+
|| !itemsByKey.has(key)
|
|
2153
|
+
|| sameItem(target, { kind: 'resource', id: resourceIdArg }))
|
|
2246
2154
|
continue;
|
|
2247
|
-
seen.add(
|
|
2248
|
-
result.push(
|
|
2155
|
+
seen.add(key);
|
|
2156
|
+
result.push(itemRef(target));
|
|
2249
2157
|
}
|
|
2250
2158
|
return result;
|
|
2251
2159
|
}
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2160
|
+
isResourceTargetEligible(resourceIdArg, targetArg) {
|
|
2161
|
+
const eligible = this.eligibleTargets(resourceIdArg);
|
|
2162
|
+
return eligible === undefined || eligible.some((candidate) => sameItem(candidate, targetArg));
|
|
2163
|
+
}
|
|
2164
|
+
itemTitleFor(refArg) {
|
|
2165
|
+
return this.itemsByKey.get(itemKey(refArg))?.title ?? refArg.id;
|
|
2255
2166
|
}
|
|
2256
|
-
|
|
2257
|
-
|
|
2167
|
+
emitSession(nameArg, sessionArg) {
|
|
2168
|
+
const detail = { session: sessionArg };
|
|
2169
|
+
this.dispatchEvent(new CustomEvent(nameArg, { detail, bubbles: true, composed: true }));
|
|
2258
2170
|
}
|
|
2259
|
-
emitResource(nameArg, resourceArg,
|
|
2171
|
+
emitResource(nameArg, resourceArg, targetArg) {
|
|
2260
2172
|
const detail = {
|
|
2261
2173
|
resource: resourceArg,
|
|
2262
|
-
|
|
2174
|
+
target: targetArg,
|
|
2263
2175
|
};
|
|
2264
2176
|
this.dispatchEvent(new CustomEvent(nameArg, { detail, bubbles: true, composed: true }));
|
|
2265
2177
|
}
|
|
2266
|
-
handleResourceContextKey(eventArg, resourceArg,
|
|
2178
|
+
handleResourceContextKey(eventArg, resourceArg, targetArg) {
|
|
2267
2179
|
if (!(eventArg.key === 'ContextMenu' || (eventArg.key === 'F10' && eventArg.shiftKey)))
|
|
2268
2180
|
return;
|
|
2269
2181
|
eventArg.preventDefault();
|
|
2270
2182
|
eventArg.stopPropagation();
|
|
2271
|
-
this.emitResourceContext(eventArg, resourceArg,
|
|
2183
|
+
this.emitResourceContext(eventArg, resourceArg, targetArg, 'keyboard', eventArg.currentTarget);
|
|
2272
2184
|
}
|
|
2273
|
-
emitResourceContext(eventArg, resourceArg,
|
|
2185
|
+
emitResourceContext(eventArg, resourceArg, targetArg, sourceArg, focusTargetArg) {
|
|
2274
2186
|
const rect = focusTargetArg.getBoundingClientRect();
|
|
2275
2187
|
const contextGeneration = ++this.resourceContextGeneration;
|
|
2276
2188
|
this.resourceContextResourceId = resourceArg.id;
|
|
@@ -2282,7 +2194,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
2282
2194
|
].find((className) => focusTargetArg.classList.contains(className)) ?? 'resourcePrimary';
|
|
2283
2195
|
const detail = {
|
|
2284
2196
|
resource: resourceArg,
|
|
2285
|
-
|
|
2197
|
+
target: targetArg,
|
|
2286
2198
|
clientX: sourceArg === 'pointer' && eventArg instanceof MouseEvent
|
|
2287
2199
|
? eventArg.clientX
|
|
2288
2200
|
: rect.left + rect.width / 2,
|
|
@@ -2291,7 +2203,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
2291
2203
|
: rect.bottom,
|
|
2292
2204
|
source: sourceArg,
|
|
2293
2205
|
originalEvent: eventArg,
|
|
2294
|
-
requestAssociation: (
|
|
2206
|
+
requestAssociation: (toTargetArg) => this.requestResourceAssociation(resourceArg.id, toTargetArg, sourceArg === 'keyboard' ? 'keyboard' : 'action'),
|
|
2295
2207
|
close: () => this.closeResourceContext(contextGeneration),
|
|
2296
2208
|
};
|
|
2297
2209
|
this.dispatchEvent(new CustomEvent('harness-resource-context', { detail, bubbles: true, composed: true }));
|
|
@@ -2312,7 +2224,7 @@ let DeesHarnessSessionList = (() => {
|
|
|
2312
2224
|
focusTarget.focus();
|
|
2313
2225
|
return;
|
|
2314
2226
|
}
|
|
2315
|
-
const row =
|
|
2227
|
+
const row = this.rowElementFor({ kind: 'resource', id: resourceId });
|
|
2316
2228
|
row?.querySelector(`.${focusClass || 'resourcePrimary'}`)?.focus();
|
|
2317
2229
|
});
|
|
2318
2230
|
}
|
|
@@ -2330,38 +2242,28 @@ let DeesHarnessSessionList = (() => {
|
|
|
2330
2242
|
this.pendingResourceAssociationRequest = undefined;
|
|
2331
2243
|
return;
|
|
2332
2244
|
}
|
|
2333
|
-
const
|
|
2334
|
-
if (
|
|
2335
|
-
if (
|
|
2336
|
-
const
|
|
2337
|
-
|
|
2338
|
-
: 'unattached';
|
|
2339
|
-
this.moveAnnouncement = `Association request for ${pending.resourceTitle} was not applied; controlled association is ${controlledSession}.`;
|
|
2245
|
+
const currentTarget = this.acceptedResourceAssociations.get(pending.resourceId) ?? null;
|
|
2246
|
+
if (!sameItem(currentTarget, pending.toTarget) && !(currentTarget === null && pending.toTarget === null)) {
|
|
2247
|
+
if (!sameItem(currentTarget, pending.fromTarget) && !(currentTarget === null && pending.fromTarget === null)) {
|
|
2248
|
+
const controlledTitle = currentTarget ? this.itemTitleFor(currentTarget) : 'unattached';
|
|
2249
|
+
this.moveAnnouncement = `Association request for ${pending.resourceTitle} was not applied; controlled association is ${controlledTitle}.`;
|
|
2340
2250
|
this.pendingResourceAssociationRequest = undefined;
|
|
2341
2251
|
}
|
|
2342
2252
|
return;
|
|
2343
2253
|
}
|
|
2344
|
-
const
|
|
2345
|
-
|
|
2346
|
-
: '';
|
|
2347
|
-
const toSession = pending.toSessionId
|
|
2348
|
-
? this.sessionsById.get(pending.toSessionId)?.title ?? pending.toSessionId
|
|
2349
|
-
: '';
|
|
2254
|
+
const fromTitle = pending.fromTarget ? this.itemTitleFor(pending.fromTarget) : '';
|
|
2255
|
+
const toTitle = pending.toTarget ? this.itemTitleFor(pending.toTarget) : '';
|
|
2350
2256
|
this.moveAnnouncement = pending.intent === 'attach'
|
|
2351
|
-
? `${pending.resourceTitle} is now attached to ${
|
|
2257
|
+
? `${pending.resourceTitle} is now attached to ${toTitle}.`
|
|
2352
2258
|
: pending.intent === 'detach'
|
|
2353
|
-
? `${pending.resourceTitle} is now detached from ${
|
|
2354
|
-
: `${pending.resourceTitle} is now reassigned from ${
|
|
2259
|
+
? `${pending.resourceTitle} is now detached from ${fromTitle}.`
|
|
2260
|
+
: `${pending.resourceTitle} is now reassigned from ${fromTitle} to ${toTitle}.`;
|
|
2355
2261
|
this.pendingResourceAssociationRequest = undefined;
|
|
2356
2262
|
}
|
|
2357
2263
|
resourceAssociationAnnouncement(detailArg, completedArg) {
|
|
2358
2264
|
const resourceTitle = detailArg.resource.title || detailArg.resource.id;
|
|
2359
|
-
const fromTitle = detailArg.
|
|
2360
|
-
|
|
2361
|
-
: '';
|
|
2362
|
-
const toTitle = detailArg.toSessionId
|
|
2363
|
-
? this.sessionsById.get(detailArg.toSessionId)?.title ?? detailArg.toSessionId
|
|
2364
|
-
: '';
|
|
2265
|
+
const fromTitle = detailArg.fromTarget ? this.itemTitleFor(detailArg.fromTarget) : '';
|
|
2266
|
+
const toTitle = detailArg.toTarget ? this.itemTitleFor(detailArg.toTarget) : '';
|
|
2365
2267
|
const verb = completedArg ? 'completed' : 'requested';
|
|
2366
2268
|
return detailArg.intent === 'attach'
|
|
2367
2269
|
? `Attach ${verb} for ${resourceTitle} to ${toTitle}.`
|
|
@@ -2369,25 +2271,26 @@ let DeesHarnessSessionList = (() => {
|
|
|
2369
2271
|
? `Detach ${verb} for ${resourceTitle} from ${fromTitle}.`
|
|
2370
2272
|
: `Reassign ${verb} for ${resourceTitle} from ${fromTitle} to ${toTitle}.`;
|
|
2371
2273
|
}
|
|
2372
|
-
async
|
|
2274
|
+
async animateRowReflow(previousRectsArg, generationArg) {
|
|
2373
2275
|
await this.updateComplete;
|
|
2374
2276
|
if (generationArg !== this.reflowGeneration
|
|
2375
2277
|
|| !this.isConnected
|
|
2376
2278
|
|| globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches)
|
|
2377
2279
|
return;
|
|
2378
2280
|
this.cancelReflowAnimations();
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2281
|
+
const draggingKey = this.draggingItem ? itemKey(this.draggingItem) : '';
|
|
2282
|
+
for (const row of this.shadowRoot?.querySelectorAll('[data-item-kind][data-item-id]') ?? []) {
|
|
2283
|
+
const key = this.rowKey(row);
|
|
2284
|
+
if (key === draggingKey)
|
|
2382
2285
|
continue;
|
|
2383
|
-
const previous = previousRectsArg.get(
|
|
2286
|
+
const previous = previousRectsArg.get(key);
|
|
2384
2287
|
if (!previous)
|
|
2385
2288
|
continue;
|
|
2386
|
-
const current =
|
|
2289
|
+
const current = row.getBoundingClientRect();
|
|
2387
2290
|
const deltaY = previous.top - current.top;
|
|
2388
2291
|
if (Math.abs(deltaY) < 0.5)
|
|
2389
2292
|
continue;
|
|
2390
|
-
const animation =
|
|
2293
|
+
const animation = row.animate([
|
|
2391
2294
|
{ transform: `translateY(${deltaY}px)` },
|
|
2392
2295
|
{ transform: 'translateY(0)' },
|
|
2393
2296
|
], { duration: 180, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' });
|
|
@@ -2406,20 +2309,8 @@ let DeesHarnessSessionList = (() => {
|
|
|
2406
2309
|
const gesture = this.pointerDragGesture;
|
|
2407
2310
|
if (!gesture)
|
|
2408
2311
|
return;
|
|
2409
|
-
const
|
|
2410
|
-
|
|
2411
|
-
&& gesture.phase === 'active'
|
|
2412
|
-
&& this.dropSlot)
|
|
2413
|
-
? this.createMoveDetail(gesture.sessionId, this.dropSlot.groupId, this.dropSlot.index)
|
|
2414
|
-
: undefined;
|
|
2415
|
-
const resourceRequest = (gesture.type === 'resource'
|
|
2416
|
-
&& commitArg
|
|
2417
|
-
&& gesture.phase === 'active'
|
|
2418
|
-
&& this.resourceDropTargetSessionId)
|
|
2419
|
-
? {
|
|
2420
|
-
resourceId: gesture.resourceId,
|
|
2421
|
-
toSessionId: this.resourceDropTargetSessionId,
|
|
2422
|
-
}
|
|
2312
|
+
const moveDetail = (commitArg && gesture.phase === 'active' && this.dropSlot)
|
|
2313
|
+
? this.createMoveDetail(gesture.item, this.dropSlot.groupId, this.dropSlot.index, 'pointer')
|
|
2423
2314
|
: undefined;
|
|
2424
2315
|
this.pointerDragGesture = undefined;
|
|
2425
2316
|
window.removeEventListener('keydown', this.handleDragKeyDown, true);
|
|
@@ -2430,20 +2321,15 @@ let DeesHarnessSessionList = (() => {
|
|
|
2430
2321
|
if (gesture.source.matches(':popover-open'))
|
|
2431
2322
|
gesture.source.hidePopover();
|
|
2432
2323
|
gesture.source.removeAttribute('popover');
|
|
2433
|
-
gesture.source.classList.remove('dragging'
|
|
2324
|
+
gesture.source.classList.remove('dragging');
|
|
2434
2325
|
for (const property of [
|
|
2435
2326
|
'--drag-preview-width',
|
|
2436
2327
|
'--drag-preview-height',
|
|
2437
2328
|
'--drag-preview-x',
|
|
2438
2329
|
'--drag-preview-y',
|
|
2439
|
-
'--resource-drag-preview-width',
|
|
2440
|
-
'--resource-drag-preview-x',
|
|
2441
|
-
'--resource-drag-preview-y',
|
|
2442
2330
|
])
|
|
2443
2331
|
gesture.source.style.removeProperty(property);
|
|
2444
|
-
this.
|
|
2445
|
-
this.draggingResourceId = '';
|
|
2446
|
-
this.resourceDropTargetSessionId = '';
|
|
2332
|
+
this.draggingItem = undefined;
|
|
2447
2333
|
this.draggedItemHeight = 0;
|
|
2448
2334
|
this.dropSlot = undefined;
|
|
2449
2335
|
try {
|
|
@@ -2454,19 +2340,8 @@ let DeesHarnessSessionList = (() => {
|
|
|
2454
2340
|
catch {
|
|
2455
2341
|
// Capture may already be released or the handle may have disconnected.
|
|
2456
2342
|
}
|
|
2457
|
-
if (
|
|
2458
|
-
this.
|
|
2459
|
-
detail: sessionMoveDetail,
|
|
2460
|
-
bubbles: true,
|
|
2461
|
-
composed: true,
|
|
2462
|
-
}));
|
|
2463
|
-
}
|
|
2464
|
-
if (resourceRequest) {
|
|
2465
|
-
this.requestResourceAssociation(resourceRequest.resourceId, resourceRequest.toSessionId, 'drop');
|
|
2466
|
-
}
|
|
2467
|
-
}
|
|
2468
|
-
emit(name, session) {
|
|
2469
|
-
this.dispatchEvent(new CustomEvent(name, { detail: { session }, bubbles: true, composed: true }));
|
|
2343
|
+
if (moveDetail)
|
|
2344
|
+
this.emitItemMove(moveDetail);
|
|
2470
2345
|
}
|
|
2471
2346
|
static {
|
|
2472
2347
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
@@ -2475,4 +2350,4 @@ let DeesHarnessSessionList = (() => {
|
|
|
2475
2350
|
return DeesHarnessSessionList = _classThis;
|
|
2476
2351
|
})();
|
|
2477
2352
|
export { DeesHarnessSessionList };
|
|
2478
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWU3RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLDhDQUE4QyxDQUFDO0FBRXRELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFDOUIsTUFBTSxnQ0FBZ0MsR0FBRyxHQUFHLENBQUM7QUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUE4RDlCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0lBRVUsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUlwRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NkNBRzlCLFFBQVEsRUFBRTttQ0FHVixR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QUMsTUFBTSxHQUFHO1lBQ3JCLGtCQUFrQjtZQUNsQixVQUFVLENBQUMsYUFBYTtZQUN4QixxQkFBcUI7WUFDckIsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBNHVCRjtTQUNGLENBQUM7UUFFRixJQUFZLFlBQVk7WUFDdEIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFD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
|
|
2353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQW1CN0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyw4Q0FBOEMsQ0FBQztBQUV0RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQzlCLE1BQU0sZ0NBQWdDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBNkI5QixNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQWtDLEVBQVUsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7QUFFOUYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxPQUFtQyxFQUE4QixFQUFFLENBQUMsQ0FBQztJQUNwRixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7SUFDbEIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO0NBQ2YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxRQUFR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
|