@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.
Files changed (26) hide show
  1. package/dist_bundle/bundle.js +914 -780
  2. package/dist_bundle/bundle.js.map +1 -1
  3. package/dist_ts_web/00_commitinfo_data.js +1 -1
  4. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.js +24 -1
  5. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +13 -1
  6. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +62 -48
  7. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +97 -57
  8. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +541 -666
  9. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +19 -1
  10. package/dist_ts_web/elements/00group-harness/dees-terminal-view/dees-terminal-view.d.ts +45 -6
  11. package/dist_ts_web/elements/00group-harness/dees-terminal-view/dees-terminal-view.js +184 -27
  12. package/dist_ts_web/elements/00group-harness/interfaces.d.ts +59 -20
  13. package/dist_ts_web/services/DeesServiceLibLoader.d.ts +7 -0
  14. package/dist_ts_web/services/DeesServiceLibLoader.js +45 -22
  15. package/package.json +1 -2
  16. package/readme.md +37 -17
  17. package/ts_web/00_commitinfo_data.ts +1 -1
  18. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.ts +23 -0
  19. package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +12 -0
  20. package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +107 -55
  21. package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +622 -756
  22. package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +18 -0
  23. package/ts_web/elements/00group-harness/dees-terminal-view/dees-terminal-view.ts +196 -24
  24. package/ts_web/elements/00group-harness/interfaces.ts +63 -19
  25. package/ts_web/services/DeesServiceLibLoader.ts +150 -102
  26. package/.smartconfig.json +0 -86
@@ -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
- * With `enableGrouping`, sessions render under user-defined `groups` and can
51
- * be dragged between groups and reordered. The component never mutates its
52
- * inputs: drops emit `harness-session-move`, the "new group" button emits
53
- * `harness-group-create-request`, and right-clicking a group header emits
54
- * `harness-group-context` — the host persists changes and passes fresh
55
- * `groups` back in. Sessions in no group render in the trailing ungrouped
56
- * section with pinned entries first, then explicit order, then new sessions by
57
- * recency. While a search query is active the list is flat. Generic resources
58
- * project as controlled child rows or into a trailing unattached Resources
59
- * section; association interactions only emit host requests.
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 _ungroupedSessionIds_decorators;
86
- let _ungroupedSessionIds_initializers = [];
87
- let _ungroupedSessionIds_extraInitializers = [];
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 _eligibleSessionIdsByResourceId_decorators;
98
- let _eligibleSessionIdsByResourceId_initializers = [];
99
- let _eligibleSessionIdsByResourceId_extraInitializers = [];
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 _draggingSessionId_decorators;
104
- let _draggingSessionId_initializers = [];
105
- let _draggingSessionId_extraInitializers = [];
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
- _ungroupedSessionIds_decorators = [property({ attribute: false })];
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
- _eligibleSessionIdsByResourceId_decorators = [property({ attribute: false })];
159
+ _eligibleTargetsByResourceId_decorators = [property({ attribute: false })];
151
160
  _search_decorators = [state()];
152
- _draggingSessionId_decorators = [state()];
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, _ungroupedSessionIds_decorators, { kind: "accessor", name: "ungroupedSessionIds", static: false, private: false, access: { has: obj => "ungroupedSessionIds" in obj, get: obj => obj.ungroupedSessionIds, set: (obj, value) => { obj.ungroupedSessionIds = value; } }, metadata: _metadata }, _ungroupedSessionIds_initializers, _ungroupedSessionIds_extraInitializers);
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, _eligibleSessionIdsByResourceId_decorators, { kind: "accessor", name: "eligibleSessionIdsByResourceId", static: false, private: false, access: { has: obj => "eligibleSessionIdsByResourceId" in obj, get: obj => obj.eligibleSessionIdsByResourceId, set: (obj, value) => { obj.eligibleSessionIdsByResourceId = value; } }, metadata: _metadata }, _eligibleSessionIdsByResourceId_initializers, _eligibleSessionIdsByResourceId_extraInitializers);
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, _draggingSessionId_decorators, { kind: "accessor", name: "draggingSessionId", static: false, private: false, access: { has: obj => "draggingSessionId" in obj, get: obj => obj.draggingSessionId, set: (obj, value) => { obj.draggingSessionId = value; } }, metadata: _metadata }, _draggingSessionId_initializers, _draggingSessionId_extraInitializers);
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
- #ungroupedSessionIds_accessor_storage = (__runInitializers(this, _enableGrouping_extraInitializers), __runInitializers(this, _ungroupedSessionIds_initializers, []));
211
- /** Explicit order for sortable sessions outside user-defined groups. */
212
- get ungroupedSessionIds() { return this.#ungroupedSessionIds_accessor_storage; }
213
- set ungroupedSessionIds(value) { this.#ungroupedSessionIds_accessor_storage = value; }
214
- #resources_accessor_storage = (__runInitializers(this, _ungroupedSessionIds_extraInitializers), __runInitializers(this, _resources_initializers, []));
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
- #eligibleSessionIdsByResourceId_accessor_storage = (__runInitializers(this, _selectedResourceId_extraInitializers), __runInitializers(this, _eligibleSessionIdsByResourceId_initializers, {}));
224
- /** Serializable attach/reassign targets. A missing resource entry means no eligible targets. */
225
- get eligibleSessionIdsByResourceId() { return this.#eligibleSessionIdsByResourceId_accessor_storage; }
226
- set eligibleSessionIdsByResourceId(value) { this.#eligibleSessionIdsByResourceId_accessor_storage = value; }
227
- #search_accessor_storage = (__runInitializers(this, _eligibleSessionIdsByResourceId_extraInitializers), __runInitializers(this, _search_initializers, ''));
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
- #draggingSessionId_accessor_storage = (__runInitializers(this, _search_extraInitializers), __runInitializers(this, _draggingSessionId_initializers, ''));
231
- get draggingSessionId() { return this.#draggingSessionId_accessor_storage; }
232
- set draggingSessionId(value) { this.#draggingSessionId_accessor_storage = value; }
233
- #draggingResourceId_accessor_storage = (__runInitializers(this, _draggingSessionId_extraInitializers), __runInitializers(this, _draggingResourceId_initializers, ''));
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
- .item.dragging {
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
- .resourceDropLabel {
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: 26px minmax(0, 1fr) 38px;
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
- min-height: 46px;
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 conversation here';
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
- /** First valid record wins; unknown and duplicate records remain untouched but are not projected. */
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 sessionsById = this.sessionsById;
1016
+ const itemsByKey = this.itemsByKey;
1049
1017
  const result = new Map();
1050
1018
  for (const association of this.resourceAssociations) {
1051
- if (!resourcesById.has(association.resourceId)
1052
- || !sessionsById.has(association.sessionId)
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.sessionId);
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, this.sessionStatusLabel(sessionArg), this.sessionStateLabel(sessionArg.state ?? 'normal')]
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
- resourcesForSession(sessionArg) {
1078
- const associations = this.acceptedResourceAssociations;
1079
- const associated = this.acceptedResources.filter((resource) => associations.get(resource.id) === sessionArg.id);
1080
- const query = this.search.trim().toLowerCase();
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
- get filteredSessions() {
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 associations = this.acceptedResourceAssociations;
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((session) => this.sessionMatchesSearch(session, query) || matchingAttachedSessionIds.has(session.id));
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, toSessionIdArg, sourceArg = 'action') {
1160
+ requestResourceAssociation(resourceIdArg, toTargetArg, sourceArg = 'action') {
1132
1161
  const resource = this.resourcesById.get(resourceIdArg);
1133
1162
  if (!resource)
1134
1163
  return false;
1135
- const fromSessionId = this.acceptedResourceAssociations.get(resourceIdArg) ?? null;
1136
- if (fromSessionId === toSessionIdArg)
1164
+ const fromTarget = this.acceptedResourceAssociations.get(resourceIdArg) ?? null;
1165
+ if (sameItem(fromTarget, toTargetArg))
1137
1166
  return false;
1138
- if (toSessionIdArg !== null
1139
- && (!this.sessionsById.has(toSessionIdArg) || !this.isResourceTargetEligible(resourceIdArg, toSessionIdArg)))
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 (toSessionIdArg === null && fromSessionId === null)
1172
+ if (toTargetArg === null && fromTarget === null)
1142
1173
  return false;
1143
- const detail = fromSessionId === null
1174
+ const toTarget = toTargetArg === null ? null : itemRef(toTargetArg);
1175
+ const detail = fromTarget === null
1144
1176
  ? {
1145
1177
  intent: 'attach',
1146
1178
  resource,
1147
- fromSessionId: null,
1148
- toSessionId: toSessionIdArg,
1179
+ fromTarget: null,
1180
+ toTarget: toTarget,
1149
1181
  source: sourceArg,
1150
1182
  }
1151
- : toSessionIdArg === null
1183
+ : toTarget === null
1152
1184
  ? {
1153
1185
  intent: 'detach',
1154
1186
  resource,
1155
- fromSessionId,
1156
- toSessionId: null,
1187
+ fromTarget,
1188
+ toTarget: null,
1157
1189
  source: sourceArg,
1158
1190
  }
1159
1191
  : {
1160
1192
  intent: 'reassign',
1161
1193
  resource,
1162
- fromSessionId,
1163
- toSessionId: toSessionIdArg,
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
- fromSessionId,
1170
- toSessionId: toSessionIdArg,
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('eligibleSessionIdsByResourceId')) {
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?.type === 'resource'
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.draggingSessionId || this.draggingResourceId ? 'dragActive' : ''}"
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
- : groupingActive
1286
- ? this.renderGroupedList()
1287
- : this.renderFlatList()}
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
- renderFlatList() {
1296
- const sessions = this.filteredSessions;
1297
- const unattachedResources = this.unattachedResources;
1298
- if (!sessions.length && !unattachedResources.length) {
1299
- return html `<div class="emptyNote">
1300
- ${this.acceptedResources.length
1301
- ? this.sessions.length
1302
- ? 'No conversations or resources match this search.'
1303
- : 'No resources match this search.'
1304
- : this.sessions.length
1305
- ? 'No conversations match this search.'
1306
- : this.emptyText}
1307
- </div>`;
1308
- }
1309
- return html `
1310
- <div class="section">
1311
- ${repeat(sessions, (session) => session.id, (session) => this.renderItem(session, null, -1))}
1312
- </div>
1313
- ${this.renderUnattachedResources(unattachedResources)}
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
- ${this.groups.map((group) => {
1325
- const members = group.sessionIds
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
- ${this.renderUnattachedResources(unattachedResources)}
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(sessions, groupId) {
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 session of sessions) {
1388
- const isDragging = session.id === this.draggingSessionId;
1389
- const sortable = session.draggable !== false;
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 === groupId
1406
+ && slot.groupId === groupIdArg
1392
1407
  && slot.index === logicalIndex
1393
1408
  && !isDragging
1394
1409
  && sortable) {
1395
- entries.push({ type: 'placeholder', key: `placeholder:${groupId ?? 'ungrouped'}` });
1410
+ entries.push({ type: 'placeholder', key: `placeholder:${groupIdArg ?? 'ungrouped'}` });
1396
1411
  }
1397
1412
  entries.push({
1398
- type: 'session',
1399
- key: `session:${session.id}`,
1400
- session,
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 === groupId && slot.index === logicalIndex) {
1407
- entries.push({ type: 'placeholder', key: `placeholder:${groupId ?? 'ungrouped'}` });
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=${groupId ?? ''}>
1428
+ <div class="section" data-group-id=${groupIdArg ?? ''}>
1412
1429
  ${repeat(entries, (entry) => entry.key, (entry) => entry.type === 'placeholder'
1413
- ? this.renderDropPlaceholder(groupId, slot?.index ?? 0)
1414
- : this.renderItem(entry.session, groupId, entry.logicalIndex))}
1415
- ${this.draggingSessionId && !hasPlaceholder && this.sortableSessions(sessions).length === 0
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=${groupId ?? ''}
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(46, this.draggedItemHeight)}px`}
1454
+ style=${`height: ${Math.max(24, this.draggedItemHeight)}px`}
1436
1455
  ></div>
1437
1456
  `;
1438
1457
  }
1439
- renderItem(session, groupId, index) {
1440
- const draggable = (this.enableGrouping
1441
- && session.draggable !== false
1442
- && index >= 0);
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 resources = this.resourcesForSession(session);
1450
- const isResourceDropTarget = this.resourceDropTargetSessionId === session.id;
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.draggingSessionId === session.id ? 'dragging' : ''} ${isResourceDropTarget ? 'resourceDropTarget' : ''}"
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.emit('harness-session-open', session);
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
- ? html `
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.emit('harness-session-select', session)}
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.emit('harness-session-open', session);
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">${session.title || session.id}</span>
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 ${session.title || session.id}`}
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
- renderUnattachedResources(resourcesArg) {
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 dragging = resourceArg.id === this.draggingResourceId;
1604
- const eligibleTargetCount = this.eligibleSessionIds(resourceArg.id).filter((sessionId) => sessionId !== sessionIdArg).length;
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
- <li
1608
- class="resourceRow ${selected ? 'selected' : ''} ${dragging ? 'resourceDragging' : ''}"
1617
+ <article
1618
+ class="resourceRow ${selected ? 'selected' : ''} ${draggable ? 'draggable' : ''} ${dragging ? 'dragging' : ''}"
1609
1619
  data-resource-id=${resourceArg.id}
1610
- data-resource-session-id=${sessionIdArg ?? ''}
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, sessionIdArg);
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, sessionIdArg, 'pointer', focusTarget);
1639
+ this.emitResourceContext(event, resourceArg, attachedTarget, 'pointer', focusTarget);
1625
1640
  }}
1626
1641
  >
1627
- <button
1628
- class="resourceDragHandle"
1629
- type="button"
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, sessionIdArg)}
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, sessionIdArg);
1653
+ this.emitResource('harness-resource-open', resourceArg, attachedTarget);
1658
1654
  return;
1659
1655
  }
1660
- this.handleResourceContextKey(event, resourceArg, sessionIdArg);
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">${resourceArg.title || resourceArg.id}</span>
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 ${resourceArg.title || resourceArg.id}`}
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, sessionIdArg, 'action', event.currentTarget);
1693
+ this.emitResourceContext(event, resourceArg, attachedTarget, 'action', event.currentTarget);
1689
1694
  }}
1690
1695
  @keydown=${(event) => {
1691
- this.handleResourceContextKey(event, resourceArg, sessionIdArg);
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
- </li>
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 && (target.classList.contains('resourceDragHandle')
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
- sortableSessions(sessionsArg, excludeDraggingArg = true) {
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
- sessionId: sessionArg.id,
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 = Math.ceil(sourceRect.height);
1940
- this.draggingSessionId = gestureArg.sessionId;
1941
- const remainingCount = this.sortableSessions(this.sessionsForGroup(gestureArg.sourceGroupId)).length;
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.captureCardRects();
1891
+ const previousRects = this.captureRowRects();
1990
1892
  const generation = ++this.reflowGeneration;
1991
1893
  this.dropSlot = { groupId: groupIdArg, index: indexArg };
1992
- void this.animateCardReflow(previousRects, generation);
1894
+ void this.animateRowReflow(previousRects, generation);
1993
1895
  }
1994
1896
  clearDropSlot() {
1995
1897
  if (!this.dropSlot)
1996
1898
  return;
1997
- const previousRects = this.captureCardRects();
1899
+ const previousRects = this.captureRowRects();
1998
1900
  const generation = ++this.reflowGeneration;
1999
1901
  this.dropSlot = undefined;
2000
- void this.animateCardReflow(previousRects, generation);
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
- if (gesture.type === 'resource') {
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
- && candidate.dataset.sessionId !== this.draggingSessionId
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(sessionIdArg, groupIdArg, indexArg) {
2136
- const targetSessions = this.sortableSessions(this.sessionsForGroup(groupIdArg));
2137
- const beforeSessionId = targetSessions[Math.max(0, indexArg)]?.id;
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
- sessionId: sessionIdArg,
2146
- groupId: groupIdArg,
2147
- index: Math.max(0, compatibilityIndex),
2148
- ...(beforeSessionId ? { beforeSessionId } : {}),
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
- handleKeyboardMove(eventArg, sessionArg, groupIdArg) {
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 sessions = this.sortableSessions(this.sessionsForGroup(groupIdArg), false);
2157
- const sourceIndex = sessions.findIndex((session) => session.id === sessionArg.id);
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.groups.map((group) => group.id), null];
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 === sessions.length - 1
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 targetSessions = this.sortableSessions(this.sessionsForGroup(adjacentGroupId), false);
2172
- const targetIndex = eventArg.key === 'ArrowUp' ? targetSessions.length : 0;
2173
- const beforeSession = targetSessions[targetIndex];
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.groups.find((group) => group.id === adjacentGroupId)?.name ?? adjacentGroupId;
2183
- this.moveAnnouncement = `Moved ${sessionArg.title || sessionArg.id} to ${groupName}.`;
2184
- this.keyboardMoveFocus = { sessionId: sessionArg.id, groupId: adjacentGroupId };
2185
- this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
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 = sessions.filter((session) => session.id !== sessionArg.id);
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 beforeSession = remaining[targetIndex];
2199
- const compatibilityIndex = targetIndex > sourceIndex ? targetIndex + 1 : targetIndex;
2200
- const detail = {
2201
- sessionId: sessionArg.id,
2202
- groupId: groupIdArg,
2203
- index: compatibilityIndex,
2204
- ...(beforeSession ? { beforeSessionId: beforeSession.id } : {}),
2205
- };
2206
- this.moveAnnouncement = beforeSession
2207
- ? `Moved ${sessionArg.title || sessionArg.id} before ${beforeSession.title || beforeSession.id}.`
2208
- : `Moved ${sessionArg.title || sessionArg.id} to the end.`;
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
- captureCardRects() {
2108
+ rowKey(rowArg) {
2109
+ return `${rowArg.dataset.itemKind}:${rowArg.dataset.itemId}`;
2110
+ }
2111
+ captureRowRects() {
2212
2112
  const result = new Map();
2213
- for (const item of this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []) {
2214
- if (item.dataset.sessionId === this.draggingSessionId)
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(item.dataset.sessionId ?? '', item.getBoundingClientRect());
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
- const currentGroupId = this.groups.find((group) => group.sessionIds.includes(pending.sessionId))?.id ?? null;
2225
- if (currentGroupId !== pending.groupId)
2126
+ if (this.groupIdForItem(pending.item) !== pending.groupId)
2226
2127
  return;
2227
- const item = Array.from(this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []).find((candidate) => candidate.dataset.sessionId === pending.sessionId);
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
- eligibleSessionIds(resourceIdArg) {
2241
- const knownSessionIds = new Set(this.sessions.map((session) => session.id));
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 sessionId of this.eligibleSessionIdsByResourceId[resourceIdArg] ?? []) {
2245
- if (!knownSessionIds.has(sessionId) || seen.has(sessionId))
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(sessionId);
2248
- result.push(sessionId);
2155
+ seen.add(key);
2156
+ result.push(itemRef(target));
2249
2157
  }
2250
2158
  return result;
2251
2159
  }
2252
- sameSessionIds(firstArg, secondArg) {
2253
- return firstArg.size === secondArg.size
2254
- && [...firstArg].every((sessionId) => secondArg.has(sessionId));
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
- isResourceTargetEligible(resourceIdArg, sessionIdArg) {
2257
- return this.eligibleSessionIds(resourceIdArg).includes(sessionIdArg);
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, sessionIdArg) {
2171
+ emitResource(nameArg, resourceArg, targetArg) {
2260
2172
  const detail = {
2261
2173
  resource: resourceArg,
2262
- sessionId: sessionIdArg,
2174
+ target: targetArg,
2263
2175
  };
2264
2176
  this.dispatchEvent(new CustomEvent(nameArg, { detail, bubbles: true, composed: true }));
2265
2177
  }
2266
- handleResourceContextKey(eventArg, resourceArg, sessionIdArg) {
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, sessionIdArg, 'keyboard', eventArg.currentTarget);
2183
+ this.emitResourceContext(eventArg, resourceArg, targetArg, 'keyboard', eventArg.currentTarget);
2272
2184
  }
2273
- emitResourceContext(eventArg, resourceArg, sessionIdArg, sourceArg, focusTargetArg) {
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
- sessionId: sessionIdArg,
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: (toSessionIdArg) => this.requestResourceAssociation(resourceArg.id, toSessionIdArg, sourceArg === 'keyboard' ? 'keyboard' : 'action'),
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 = Array.from(this.shadowRoot?.querySelectorAll('.resourceRow[data-resource-id]') ?? []).find((candidate) => candidate.dataset.resourceId === resourceId);
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 currentSessionId = this.acceptedResourceAssociations.get(pending.resourceId) ?? null;
2334
- if (currentSessionId !== pending.toSessionId) {
2335
- if (currentSessionId !== pending.fromSessionId) {
2336
- const controlledSession = currentSessionId
2337
- ? this.sessionsById.get(currentSessionId)?.title ?? currentSessionId
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 fromSession = pending.fromSessionId
2345
- ? this.sessionsById.get(pending.fromSessionId)?.title ?? pending.fromSessionId
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 ${toSession}.`
2257
+ ? `${pending.resourceTitle} is now attached to ${toTitle}.`
2352
2258
  : pending.intent === 'detach'
2353
- ? `${pending.resourceTitle} is now detached from ${fromSession}.`
2354
- : `${pending.resourceTitle} is now reassigned from ${fromSession} to ${toSession}.`;
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.fromSessionId
2360
- ? this.sessionsById.get(detailArg.fromSessionId)?.title ?? detailArg.fromSessionId
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 animateCardReflow(previousRectsArg, generationArg) {
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
- for (const item of this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []) {
2380
- const sessionId = item.dataset.sessionId ?? '';
2381
- if (!sessionId || sessionId === this.draggingSessionId)
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(sessionId);
2286
+ const previous = previousRectsArg.get(key);
2384
2287
  if (!previous)
2385
2288
  continue;
2386
- const current = item.getBoundingClientRect();
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 = item.animate([
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 sessionMoveDetail = (gesture.type === 'session'
2410
- && commitArg
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', 'resourceDragging');
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.draggingSessionId = '';
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 (sessionMoveDetail) {
2458
- this.dispatchEvent(new CustomEvent('harness-session-move', {
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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