@design.estate/dees-catalog 3.100.0 → 3.102.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.
@@ -39,8 +39,17 @@ import { harnessFormatRelativeTime } from '../harness.helpers.js';
39
39
  import '../../00group-utility/dees-icon/dees-icon.js';
40
40
  /**
41
41
  * Searchable conversation list, embeddable in a sidebar or a DeesModal.
42
- * Emits `harness-session-select` on click and `harness-session-open` on
43
- * double-click or Enter.
42
+ * Emits `harness-session-select` on click, `harness-session-open` on
43
+ * double-click or Enter, and `harness-session-context` with viewport
44
+ * pointer coordinates on right-click (the browser menu is suppressed).
45
+ *
46
+ * With `enableGrouping`, sessions render under user-defined `groups` and can
47
+ * be dragged between groups and reordered. The component never mutates its
48
+ * inputs: drops emit `harness-session-move`, the "new group" button emits
49
+ * `harness-group-create-request`, and right-clicking a group header emits
50
+ * `harness-group-context` — the host persists changes and passes fresh
51
+ * `groups` back in. Sessions in no group render in the trailing ungrouped
52
+ * section, recency-sorted. While a search query is active the list is flat.
44
53
  */
45
54
  let DeesHarnessSessionList = (() => {
46
55
  let _classDecorators = [customElement('dees-harness-session-list')];
@@ -60,9 +69,24 @@ let DeesHarnessSessionList = (() => {
60
69
  let _emptyText_decorators;
61
70
  let _emptyText_initializers = [];
62
71
  let _emptyText_extraInitializers = [];
72
+ let _groups_decorators;
73
+ let _groups_initializers = [];
74
+ let _groups_extraInitializers = [];
75
+ let _enableGrouping_decorators;
76
+ let _enableGrouping_initializers = [];
77
+ let _enableGrouping_extraInitializers = [];
63
78
  let _search_decorators;
64
79
  let _search_initializers = [];
65
80
  let _search_extraInitializers = [];
81
+ let _draggingSessionId_decorators;
82
+ let _draggingSessionId_initializers = [];
83
+ let _draggingSessionId_extraInitializers = [];
84
+ let _dropSlot_decorators;
85
+ let _dropSlot_initializers = [];
86
+ let _dropSlot_extraInitializers = [];
87
+ let _collapsedGroupIds_decorators;
88
+ let _collapsedGroupIds_initializers = [];
89
+ let _collapsedGroupIds_extraInitializers = [];
66
90
  var DeesHarnessSessionList = class extends _classSuper {
67
91
  static { _classThis = this; }
68
92
  static {
@@ -71,12 +95,22 @@ let DeesHarnessSessionList = (() => {
71
95
  _selectedSessionId_decorators = [property()];
72
96
  _loading_decorators = [property({ type: Boolean })];
73
97
  _emptyText_decorators = [property()];
98
+ _groups_decorators = [property({ attribute: false })];
99
+ _enableGrouping_decorators = [property({ type: Boolean })];
74
100
  _search_decorators = [state()];
101
+ _draggingSessionId_decorators = [state()];
102
+ _dropSlot_decorators = [state()];
103
+ _collapsedGroupIds_decorators = [state()];
75
104
  __esDecorate(this, null, _sessions_decorators, { kind: "accessor", name: "sessions", static: false, private: false, access: { has: obj => "sessions" in obj, get: obj => obj.sessions, set: (obj, value) => { obj.sessions = value; } }, metadata: _metadata }, _sessions_initializers, _sessions_extraInitializers);
76
105
  __esDecorate(this, null, _selectedSessionId_decorators, { kind: "accessor", name: "selectedSessionId", static: false, private: false, access: { has: obj => "selectedSessionId" in obj, get: obj => obj.selectedSessionId, set: (obj, value) => { obj.selectedSessionId = value; } }, metadata: _metadata }, _selectedSessionId_initializers, _selectedSessionId_extraInitializers);
77
106
  __esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
78
107
  __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);
108
+ __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);
109
+ __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);
79
110
  __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);
111
+ __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);
112
+ __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);
113
+ __esDecorate(this, null, _collapsedGroupIds_decorators, { kind: "accessor", name: "collapsedGroupIds", static: false, private: false, access: { has: obj => "collapsedGroupIds" in obj, get: obj => obj.collapsedGroupIds, set: (obj, value) => { obj.collapsedGroupIds = value; } }, metadata: _metadata }, _collapsedGroupIds_initializers, _collapsedGroupIds_extraInitializers);
80
114
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
81
115
  DeesHarnessSessionList = _classThis = _classDescriptor.value;
82
116
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -95,9 +129,24 @@ let DeesHarnessSessionList = (() => {
95
129
  #emptyText_accessor_storage = (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _emptyText_initializers, 'No conversations yet.'));
96
130
  get emptyText() { return this.#emptyText_accessor_storage; }
97
131
  set emptyText(value) { this.#emptyText_accessor_storage = value; }
98
- #search_accessor_storage = (__runInitializers(this, _emptyText_extraInitializers), __runInitializers(this, _search_initializers, ''));
132
+ #groups_accessor_storage = (__runInitializers(this, _emptyText_extraInitializers), __runInitializers(this, _groups_initializers, []));
133
+ get groups() { return this.#groups_accessor_storage; }
134
+ set groups(value) { this.#groups_accessor_storage = value; }
135
+ #enableGrouping_accessor_storage = (__runInitializers(this, _groups_extraInitializers), __runInitializers(this, _enableGrouping_initializers, false));
136
+ get enableGrouping() { return this.#enableGrouping_accessor_storage; }
137
+ set enableGrouping(value) { this.#enableGrouping_accessor_storage = value; }
138
+ #search_accessor_storage = (__runInitializers(this, _enableGrouping_extraInitializers), __runInitializers(this, _search_initializers, ''));
99
139
  get search() { return this.#search_accessor_storage; }
100
140
  set search(value) { this.#search_accessor_storage = value; }
141
+ #draggingSessionId_accessor_storage = (__runInitializers(this, _search_extraInitializers), __runInitializers(this, _draggingSessionId_initializers, ''));
142
+ get draggingSessionId() { return this.#draggingSessionId_accessor_storage; }
143
+ set draggingSessionId(value) { this.#draggingSessionId_accessor_storage = value; }
144
+ #dropSlot_accessor_storage = (__runInitializers(this, _draggingSessionId_extraInitializers), __runInitializers(this, _dropSlot_initializers, undefined));
145
+ get dropSlot() { return this.#dropSlot_accessor_storage; }
146
+ set dropSlot(value) { this.#dropSlot_accessor_storage = value; }
147
+ #collapsedGroupIds_accessor_storage = (__runInitializers(this, _dropSlot_extraInitializers), __runInitializers(this, _collapsedGroupIds_initializers, new Set()));
148
+ get collapsedGroupIds() { return this.#collapsedGroupIds_accessor_storage; }
149
+ set collapsedGroupIds(value) { this.#collapsedGroupIds_accessor_storage = value; }
101
150
  static styles = [
102
151
  themeDefaultStyles,
103
152
  cssManager.defaultStyles,
@@ -170,6 +219,10 @@ let DeesHarnessSessionList = (() => {
170
219
  box-shadow: inset 2px 0 0 var(--dees-color-accent-primary);
171
220
  }
172
221
 
222
+ .item.dragging {
223
+ opacity: 0.4;
224
+ }
225
+
173
226
  .itemTitle {
174
227
  display: flex;
175
228
  align-items: baseline;
@@ -207,8 +260,103 @@ let DeesHarnessSessionList = (() => {
207
260
  font-size: var(--dees-font-control-size-sm, 12px);
208
261
  text-align: center;
209
262
  }
263
+
264
+ .groupHeader {
265
+ display: flex;
266
+ align-items: center;
267
+ gap: var(--dees-spacing-xs);
268
+ width: 100%;
269
+ margin-top: var(--dees-spacing-xs);
270
+ padding: 2px var(--dees-spacing-sm);
271
+ border: 0;
272
+ border-radius: var(--dees-radius-md);
273
+ background: transparent;
274
+ color: var(--dees-color-text-secondary);
275
+ cursor: pointer;
276
+ font-family: inherit;
277
+ font-size: var(--dees-font-caption1-size, 11px);
278
+ font-weight: 650;
279
+ text-transform: uppercase;
280
+ letter-spacing: 0.05em;
281
+ text-align: left;
282
+ }
283
+
284
+ .groupHeader:hover {
285
+ background: var(--dees-color-hover);
286
+ }
287
+
288
+ .groupHeader .chevron {
289
+ transition: transform var(--dees-transition-fast) var(--dees-ease-standard);
290
+ }
291
+
292
+ .groupHeader.collapsed .chevron {
293
+ transform: rotate(-90deg);
294
+ }
295
+
296
+ .groupHeader .groupCount {
297
+ margin-left: auto;
298
+ font-weight: 500;
299
+ text-transform: none;
300
+ letter-spacing: normal;
301
+ color: var(--dees-color-text-muted);
302
+ }
303
+
304
+ .groupHeader.dropTarget {
305
+ outline: 1px dashed var(--dees-color-accent-primary);
306
+ outline-offset: -1px;
307
+ }
308
+
309
+ .dropLine {
310
+ height: 2px;
311
+ margin: 0 var(--dees-spacing-sm);
312
+ border-radius: 1px;
313
+ background: var(--dees-color-accent-primary);
314
+ }
315
+
316
+ .newGroupRow {
317
+ flex: 0 0 auto;
318
+ padding: var(--dees-spacing-xs) var(--dees-spacing-sm) var(--dees-spacing-sm);
319
+ }
320
+
321
+ .newGroupButton {
322
+ display: flex;
323
+ align-items: center;
324
+ gap: var(--dees-spacing-xs);
325
+ width: 100%;
326
+ padding: var(--dees-spacing-xs) var(--dees-spacing-sm);
327
+ border: 1px dashed var(--dees-color-border-default);
328
+ border-radius: var(--dees-radius-md);
329
+ background: transparent;
330
+ color: var(--dees-color-text-secondary);
331
+ cursor: pointer;
332
+ font-family: inherit;
333
+ font-size: var(--dees-font-control-size-sm, 12px);
334
+ }
335
+
336
+ .newGroupButton:hover {
337
+ border-color: var(--dees-color-accent-primary);
338
+ color: var(--dees-color-text-primary);
339
+ }
210
340
  `,
211
341
  ];
342
+ get sessionsById() {
343
+ return new Map(this.sessions.map((session) => [session.id, session]));
344
+ }
345
+ get groupedSessionIds() {
346
+ const ids = new Set();
347
+ for (const group of this.groups) {
348
+ for (const id of group.sessionIds)
349
+ ids.add(id);
350
+ }
351
+ return ids;
352
+ }
353
+ /** Ungrouped sessions, most recent first. */
354
+ get ungroupedSessions() {
355
+ const grouped = this.groupedSessionIds;
356
+ return [...this.sessions]
357
+ .filter((session) => !grouped.has(session.id))
358
+ .sort((left, right) => (right.updatedAt ?? right.createdAt ?? 0) - (left.updatedAt ?? left.createdAt ?? 0));
359
+ }
212
360
  get filteredSessions() {
213
361
  const query = this.search.trim().toLowerCase();
214
362
  const sorted = [...this.sessions].sort((left, right) => (right.updatedAt ?? right.createdAt ?? 0) - (left.updatedAt ?? left.createdAt ?? 0));
@@ -220,7 +368,7 @@ let DeesHarnessSessionList = (() => {
220
368
  this.shadowRoot?.querySelector('.searchRow input')?.focus();
221
369
  }
222
370
  render() {
223
- const sessions = this.filteredSessions;
371
+ const groupingActive = this.enableGrouping && !this.search.trim();
224
372
  return html `
225
373
  <div class="searchRow">
226
374
  <input
@@ -234,23 +382,161 @@ let DeesHarnessSessionList = (() => {
234
382
  <div class="list">
235
383
  ${this.loading
236
384
  ? html `<div class="emptyNote">Loading conversations…</div>`
237
- : sessions.length
238
- ? sessions.map((session) => this.renderItem(session))
239
- : html `<div class="emptyNote">${this.sessions.length ? 'No conversations match this search.' : this.emptyText}</div>`}
385
+ : groupingActive
386
+ ? this.renderGroupedList()
387
+ : this.renderFlatList()}
240
388
  </div>
389
+ ${groupingActive
390
+ ? html `
391
+ <div class="newGroupRow">
392
+ <button
393
+ class="newGroupButton"
394
+ type="button"
395
+ @click=${() => {
396
+ this.dispatchEvent(new CustomEvent('harness-group-create-request', {
397
+ bubbles: true,
398
+ composed: true,
399
+ }));
400
+ }}
401
+ >
402
+ <dees-icon icon="lucide:FolderPlus" iconSize="13"></dees-icon>
403
+ New group
404
+ </button>
405
+ </div>
406
+ `
407
+ : ''}
408
+ `;
409
+ }
410
+ renderFlatList() {
411
+ const sessions = this.filteredSessions;
412
+ if (!sessions.length) {
413
+ return html `<div class="emptyNote">
414
+ ${this.sessions.length ? 'No conversations match this search.' : this.emptyText}
415
+ </div>`;
416
+ }
417
+ return html `${sessions.map((session) => this.renderItem(session, null, -1))}`;
418
+ }
419
+ renderGroupedList() {
420
+ const byId = this.sessionsById;
421
+ const ungrouped = this.ungroupedSessions;
422
+ if (!this.sessions.length && !this.groups.length) {
423
+ return html `<div class="emptyNote">${this.emptyText}</div>`;
424
+ }
425
+ return html `
426
+ ${this.groups.map((group) => {
427
+ const members = group.sessionIds
428
+ .map((id) => byId.get(id))
429
+ .filter((session) => session !== undefined);
430
+ const collapsed = this.collapsedGroupIds.has(group.id);
431
+ const isHeaderDrop = this.dropSlot?.groupId === group.id && this.dropSlot.index === members.length && collapsed;
432
+ return html `
433
+ <button
434
+ class="groupHeader ${collapsed ? 'collapsed' : ''} ${isHeaderDrop ? 'dropTarget' : ''}"
435
+ type="button"
436
+ @click=${() => this.toggleGroupCollapsed(group.id)}
437
+ @contextmenu=${(event) => {
438
+ event.preventDefault();
439
+ const detail = {
440
+ group,
441
+ clientX: event.clientX,
442
+ clientY: event.clientY,
443
+ originalEvent: event,
444
+ };
445
+ this.dispatchEvent(new CustomEvent('harness-group-context', { detail, bubbles: true, composed: true }));
446
+ }}
447
+ @dragover=${(event) => this.handleDragOverSlot(event, group.id, members.length)}
448
+ @drop=${(event) => this.handleDrop(event, group.id, members.length)}
449
+ >
450
+ <dees-icon class="chevron" icon="lucide:ChevronDown" iconSize="12"></dees-icon>
451
+ <span>${group.name}</span>
452
+ <span class="groupCount">${members.length}</span>
453
+ </button>
454
+ ${collapsed
455
+ ? ''
456
+ : this.renderSection(members, group.id)}
457
+ `;
458
+ })}
459
+ ${this.groups.length && ungrouped.length
460
+ ? html `
461
+ <button
462
+ class="groupHeader"
463
+ type="button"
464
+ tabindex="-1"
465
+ @dragover=${(event) => this.handleDragOverSlot(event, null, 0)}
466
+ @drop=${(event) => this.handleDrop(event, null, 0)}
467
+ >
468
+ <span>Ungrouped</span>
469
+ <span class="groupCount">${ungrouped.length}</span>
470
+ </button>
471
+ `
472
+ : ''}
473
+ ${this.renderSection(ungrouped, null)}
474
+ `;
475
+ }
476
+ renderSection(sessions, groupId) {
477
+ const slot = this.dropSlot;
478
+ return html `
479
+ ${sessions.map((session, index) => html `
480
+ ${slot && slot.groupId === groupId && slot.index === index
481
+ ? html `<div class="dropLine"></div>`
482
+ : ''}
483
+ ${this.renderItem(session, groupId, index)}
484
+ `)}
485
+ ${slot && slot.groupId === groupId && slot.index === sessions.length
486
+ ? html `<div class="dropLine"></div>`
487
+ : ''}
241
488
  `;
242
489
  }
243
- renderItem(session) {
490
+ renderItem(session, groupId, index) {
491
+ const draggable = this.enableGrouping && index >= 0;
244
492
  return html `
245
493
  <button
246
- class="item ${session.id === this.selectedSessionId ? 'selected' : ''}"
494
+ class="item ${session.id === this.selectedSessionId ? 'selected' : ''} ${this.draggingSessionId === session.id ? 'dragging' : ''}"
247
495
  type="button"
496
+ draggable=${draggable ? 'true' : 'false'}
248
497
  @click=${() => this.emit('harness-session-select', session)}
249
498
  @dblclick=${() => this.emit('harness-session-open', session)}
250
499
  @keydown=${(event) => {
251
500
  if (event.key === 'Enter')
252
501
  this.emit('harness-session-open', session);
253
502
  }}
503
+ @contextmenu=${(event) => {
504
+ event.preventDefault();
505
+ const detail = {
506
+ session,
507
+ clientX: event.clientX,
508
+ clientY: event.clientY,
509
+ originalEvent: event,
510
+ };
511
+ this.dispatchEvent(new CustomEvent('harness-session-context', { detail, bubbles: true, composed: true }));
512
+ }}
513
+ @dragstart=${(event) => {
514
+ if (!draggable)
515
+ return;
516
+ this.draggingSessionId = session.id;
517
+ event.dataTransfer?.setData('text/plain', session.id);
518
+ if (event.dataTransfer)
519
+ event.dataTransfer.effectAllowed = 'move';
520
+ }}
521
+ @dragend=${() => {
522
+ this.draggingSessionId = '';
523
+ this.dropSlot = undefined;
524
+ }}
525
+ @dragover=${(event) => {
526
+ if (!this.draggingSessionId || index < 0)
527
+ return;
528
+ event.preventDefault();
529
+ const rect = event.currentTarget.getBoundingClientRect();
530
+ const before = event.clientY < rect.top + rect.height / 2;
531
+ this.setDropSlot(groupId, before ? index : index + 1);
532
+ }}
533
+ @drop=${(event) => {
534
+ if (index < 0)
535
+ return;
536
+ const rect = event.currentTarget.getBoundingClientRect();
537
+ const before = event.clientY < rect.top + rect.height / 2;
538
+ this.handleDrop(event, groupId, before ? index : index + 1);
539
+ }}
254
540
  >
255
541
  <span class="itemTitle">
256
542
  <span class="titleText">${session.title || session.id}</span>
@@ -262,12 +548,49 @@ let DeesHarnessSessionList = (() => {
262
548
  </button>
263
549
  `;
264
550
  }
551
+ toggleGroupCollapsed(groupIdArg) {
552
+ const next = new Set(this.collapsedGroupIds);
553
+ if (next.has(groupIdArg)) {
554
+ next.delete(groupIdArg);
555
+ }
556
+ else {
557
+ next.add(groupIdArg);
558
+ }
559
+ this.collapsedGroupIds = next;
560
+ }
561
+ setDropSlot(groupIdArg, indexArg) {
562
+ const current = this.dropSlot;
563
+ if (current && current.groupId === groupIdArg && current.index === indexArg)
564
+ return;
565
+ this.dropSlot = { groupId: groupIdArg, index: indexArg };
566
+ }
567
+ handleDragOverSlot(event, groupIdArg, indexArg) {
568
+ if (!this.draggingSessionId)
569
+ return;
570
+ event.preventDefault();
571
+ this.setDropSlot(groupIdArg, indexArg);
572
+ }
573
+ handleDrop(event, groupIdArg, indexArg) {
574
+ event.preventDefault();
575
+ event.stopPropagation();
576
+ const sessionId = this.draggingSessionId || event.dataTransfer?.getData('text/plain') || '';
577
+ this.draggingSessionId = '';
578
+ this.dropSlot = undefined;
579
+ if (!sessionId)
580
+ return;
581
+ const detail = {
582
+ sessionId,
583
+ groupId: groupIdArg,
584
+ index: Math.max(0, indexArg),
585
+ };
586
+ this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
587
+ }
265
588
  emit(name, session) {
266
589
  this.dispatchEvent(new CustomEvent(name, { detail: { session }, bubbles: true, composed: true }));
267
590
  }
268
591
  constructor() {
269
592
  super(...arguments);
270
- __runInitializers(this, _search_extraInitializers);
593
+ __runInitializers(this, _collapsedGroupIds_extraInitializers);
271
594
  }
272
595
  static {
273
596
  __runInitializers(_classThis, _classExtraInitializers);
@@ -276,4 +599,4 @@ let DeesHarnessSessionList = (() => {
276
599
  return DeesHarnessSessionList = _classThis;
277
600
  })();
278
601
  export { DeesHarnessSessionList };
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sOENBQThDLENBQUM7QUFRdEQ7Ozs7R0FJRztJQUVVLHNCQUFzQjs0QkFEbEMsYUFBYSxDQUFDLDJCQUEyQixDQUFDOzs7O3NCQUNDLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBQW5CLFNBQVEsV0FBVzs7OztvQ0FJcEQsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDOzZDQUc5QixRQUFRLEVBQUU7bUNBR1YsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3FDQUczQixRQUFRLEVBQUU7a0NBR1YsS0FBSyxFQUFFO1lBWFIsNktBQVMsUUFBUSw2QkFBUixRQUFRLDJGQUE2QjtZQUc5Qyx3TUFBUyxpQkFBaUIsNkJBQWpCLGlCQUFpQiw2R0FBYztZQUd4QywwS0FBUyxPQUFPLDZCQUFQLE9BQU8seUZBQWtCO1lBR2xDLGdMQUFTLFNBQVMsNkJBQVQsU0FBUyw2RkFBbUM7WUFHckQsdUtBQVMsTUFBTSw2QkFBTixNQUFNLHVGQUFjO1lBakIvQiw2S0FpTUM7Ozs7UUFoTVEsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDdkIsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRzFDLDZFQUEyQyxFQUFFLEVBQUM7UUFBOUMsSUFBUyxRQUFRLDhDQUE2QjtRQUE5QyxJQUFTLFFBQVEsb0RBQTZCO1FBRzlDLHNKQUFxQyxFQUFFLEdBQUM7UUFBeEMsSUFBUyxpQkFBaUIsdURBQWM7UUFBeEMsSUFBUyxpQkFBaUIsNkRBQWM7UUFHeEMsMklBQTRCLEtBQUssR0FBQztRQUFsQyxJQUFTLE9BQU8sNkNBQWtCO1FBQWxDLElBQVMsT0FBTyxtREFBa0I7UUFHbEMscUlBQTZCLHVCQUF1QixHQUFDO1FBQXJELElBQVMsU0FBUywrQ0FBbUM7UUFBckQsSUFBUyxTQUFTLHFEQUFtQztRQUdyRCxpSUFBMEIsRUFBRSxHQUFDO1FBQTdCLElBQVMsTUFBTSw0Q0FBYztRQUE3QixJQUFTLE1BQU0sa0RBQWM7UUFFdEIsTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNyQixrQkFBa0I7WUFDbEIsVUFBVSxDQUFDLGFBQWE7WUFDeEIsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBMEdGO1NBQ0YsQ0FBQztRQUVGLElBQVksZ0JBQWdCO1lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0MsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3BDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQ3JHLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLE1BQU0sQ0FBQztZQUMxQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUMvQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQ3JHLENBQUM7UUFDSixDQUFDO1FBRU0sV0FBVztZQUNoQixJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBbUIsa0JBQWtCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNoRixDQUFDO1FBRU0sTUFBTTtZQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQTs7OzttQkFJSSxJQUFJLENBQUMsTUFBTTttQkFDWCxDQUFDLEtBQVksRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsTUFBTSxHQUFJLEtBQUssQ0FBQyxhQUFrQyxDQUFDLEtBQUssQ0FBQztZQUNoRSxDQUFDOzs7O1VBSUQsSUFBSSxDQUFDLE9BQU87Z0JBQ1osQ0FBQyxDQUFDLElBQUksQ0FBQSxxREFBcUQ7Z0JBQzNELENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDZixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQSwwQkFBMEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxRQUFROztLQUU1SCxDQUFDO1FBQ0osQ0FBQztRQUVPLFVBQVUsQ0FBQyxPQUE0QjtZQUM3QyxPQUFPLElBQUksQ0FBQTs7c0JBRU8sT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTs7aUJBRTVELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDO29CQUMvQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQzttQkFDakQsQ0FBQyxLQUFvQixFQUFFLEVBQUU7Z0JBQ2xDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPO29CQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDeEUsQ0FBQzs7O29DQUcyQixPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxFQUFFO21DQUM1Qix5QkFBeUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUM7O1VBRTFGLE9BQU8sQ0FBQyxPQUFPO2dCQUNmLENBQUMsQ0FBQyxJQUFJLENBQUEsNkJBQTZCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUMsWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUztnQkFDL0gsQ0FBQyxDQUFDLEVBQUU7O0tBRVQsQ0FBQztRQUNKLENBQUM7UUFFTyxJQUFJLENBQUMsSUFBWSxFQUFFLE9BQTRCO1lBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7Ozs7OztZQWhNVSx1REFBc0I7Ozs7O1NBQXRCLHNCQUFzQiJ9
602
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUXRELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sOENBQThDLENBQUM7QUFhdEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztJQUVVLHNCQUFzQjs0QkFEbEMsYUFBYSxDQUFDLDJCQUEyQixDQUFDOzs7O3NCQUNDLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBQW5CLFNBQVEsV0FBVzs7OztvQ0FJcEQsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDOzZDQUc5QixRQUFRLEVBQUU7bUNBR1YsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3FDQUczQixRQUFRLEVBQUU7a0NBR1YsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDOzBDQUc5QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7a0NBRzNCLEtBQUssRUFBRTs2Q0FHUCxLQUFLLEVBQUU7b0NBR1AsS0FBSyxFQUFFOzZDQUdQLEtB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
@@ -188,6 +188,36 @@ export interface IHarnessSessionMeta {
188
188
  messageCount?: number;
189
189
  preview?: string;
190
190
  }
191
+ /** Detail of `harness-session-context`, fired on right-click of a session item. */
192
+ export interface IHarnessSessionContextDetail {
193
+ session: IHarnessSessionMeta;
194
+ /** Viewport coordinates of the pointer, for positioning a context menu. */
195
+ clientX: number;
196
+ clientY: number;
197
+ /** The suppressed contextmenu event, e.g. for DeesContextmenu.openContextMenuWithOptions. */
198
+ originalEvent: MouseEvent;
199
+ }
200
+ /** A user-defined session group; ordering of `sessionIds` is the display order. */
201
+ export interface IHarnessSessionGroup {
202
+ id: string;
203
+ name: string;
204
+ sessionIds: string[];
205
+ }
206
+ /** Detail of `harness-session-move`: a session was dropped into a group slot. */
207
+ export interface IHarnessSessionMoveDetail {
208
+ sessionId: string;
209
+ /** Target group, or null for the ungrouped section. */
210
+ groupId: string | null;
211
+ /** Insertion index within the target section's current display order. */
212
+ index: number;
213
+ }
214
+ /** Detail of `harness-group-context`, fired on right-click of a group header. */
215
+ export interface IHarnessGroupContextDetail {
216
+ group: IHarnessSessionGroup;
217
+ clientX: number;
218
+ clientY: number;
219
+ originalEvent: MouseEvent;
220
+ }
191
221
  export type THarnessTodoStatus = 'pending' | 'in_progress' | 'completed';
192
222
  export interface IHarnessTodoItem {
193
223
  id?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "3.100.0",
3
+ "version": "3.102.0",
4
4
  "private": false,
5
5
  "description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
6
6
  "main": "dist_ts_web/index.js",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.100.0',
6
+ version: '3.102.0',
7
7
  description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  }