@design.estate/dees-catalog 4.9.0 → 4.10.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.
@@ -33,10 +33,11 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
33
33
  return useValue ? value : void 0;
34
34
  };
35
35
  import { demoFunc } from './dees-harness-session-list.demo.js';
36
- import { DeesElement, html, css, customElement, property, state, cssManager, } from '@design.estate/dees-element';
36
+ import { DeesElement, html, css, customElement, property, state, cssManager, directives, } from '@design.estate/dees-element';
37
37
  import { themeDefaultStyles } from '../../00theme.js';
38
38
  import { harnessFormatRelativeTime } from '../harness.helpers.js';
39
39
  import '../../00group-utility/dees-icon/dees-icon.js';
40
+ const { repeat } = directives;
40
41
  /**
41
42
  * Searchable conversation list, embeddable in a sidebar or a DeesModal.
42
43
  * Emits `harness-session-select` on click, `harness-session-open` on
@@ -49,7 +50,8 @@ import '../../00group-utility/dees-icon/dees-icon.js';
49
50
  * `harness-group-create-request`, and right-clicking a group header emits
50
51
  * `harness-group-context` — the host persists changes and passes fresh
51
52
  * `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.
53
+ * section with pinned entries first, then explicit order, then new sessions by
54
+ * recency. While a search query is active the list is flat.
53
55
  */
54
56
  let DeesHarnessSessionList = (() => {
55
57
  let _classDecorators = [customElement('dees-harness-session-list')];
@@ -75,6 +77,9 @@ let DeesHarnessSessionList = (() => {
75
77
  let _enableGrouping_decorators;
76
78
  let _enableGrouping_initializers = [];
77
79
  let _enableGrouping_extraInitializers = [];
80
+ let _ungroupedSessionIds_decorators;
81
+ let _ungroupedSessionIds_initializers = [];
82
+ let _ungroupedSessionIds_extraInitializers = [];
78
83
  let _search_decorators;
79
84
  let _search_initializers = [];
80
85
  let _search_extraInitializers = [];
@@ -84,6 +89,12 @@ let DeesHarnessSessionList = (() => {
84
89
  let _dropSlot_decorators;
85
90
  let _dropSlot_initializers = [];
86
91
  let _dropSlot_extraInitializers = [];
92
+ let _draggedItemHeight_decorators;
93
+ let _draggedItemHeight_initializers = [];
94
+ let _draggedItemHeight_extraInitializers = [];
95
+ let _expandedSessionIds_decorators;
96
+ let _expandedSessionIds_initializers = [];
97
+ let _expandedSessionIds_extraInitializers = [];
87
98
  let _collapsedGroupIds_decorators;
88
99
  let _collapsedGroupIds_initializers = [];
89
100
  let _collapsedGroupIds_extraInitializers = [];
@@ -97,9 +108,12 @@ let DeesHarnessSessionList = (() => {
97
108
  _emptyText_decorators = [property()];
98
109
  _groups_decorators = [property({ attribute: false })];
99
110
  _enableGrouping_decorators = [property({ type: Boolean })];
111
+ _ungroupedSessionIds_decorators = [property({ attribute: false })];
100
112
  _search_decorators = [state()];
101
113
  _draggingSessionId_decorators = [state()];
102
114
  _dropSlot_decorators = [state()];
115
+ _draggedItemHeight_decorators = [state()];
116
+ _expandedSessionIds_decorators = [state()];
103
117
  _collapsedGroupIds_decorators = [state()];
104
118
  __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);
105
119
  __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);
@@ -107,9 +121,12 @@ let DeesHarnessSessionList = (() => {
107
121
  __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
122
  __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
123
  __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);
124
+ __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);
110
125
  __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
126
  __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
127
  __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);
128
+ __esDecorate(this, null, _draggedItemHeight_decorators, { kind: "accessor", name: "draggedItemHeight", static: false, private: false, access: { has: obj => "draggedItemHeight" in obj, get: obj => obj.draggedItemHeight, set: (obj, value) => { obj.draggedItemHeight = value; } }, metadata: _metadata }, _draggedItemHeight_initializers, _draggedItemHeight_extraInitializers);
129
+ __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);
113
130
  __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);
114
131
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
115
132
  DeesHarnessSessionList = _classThis = _classDescriptor.value;
@@ -135,7 +152,11 @@ let DeesHarnessSessionList = (() => {
135
152
  #enableGrouping_accessor_storage = (__runInitializers(this, _groups_extraInitializers), __runInitializers(this, _enableGrouping_initializers, false));
136
153
  get enableGrouping() { return this.#enableGrouping_accessor_storage; }
137
154
  set enableGrouping(value) { this.#enableGrouping_accessor_storage = value; }
138
- #search_accessor_storage = (__runInitializers(this, _enableGrouping_extraInitializers), __runInitializers(this, _search_initializers, ''));
155
+ #ungroupedSessionIds_accessor_storage = (__runInitializers(this, _enableGrouping_extraInitializers), __runInitializers(this, _ungroupedSessionIds_initializers, []));
156
+ /** Explicit order for sortable sessions outside user-defined groups. */
157
+ get ungroupedSessionIds() { return this.#ungroupedSessionIds_accessor_storage; }
158
+ set ungroupedSessionIds(value) { this.#ungroupedSessionIds_accessor_storage = value; }
159
+ #search_accessor_storage = (__runInitializers(this, _ungroupedSessionIds_extraInitializers), __runInitializers(this, _search_initializers, ''));
139
160
  get search() { return this.#search_accessor_storage; }
140
161
  set search(value) { this.#search_accessor_storage = value; }
141
162
  #draggingSessionId_accessor_storage = (__runInitializers(this, _search_extraInitializers), __runInitializers(this, _draggingSessionId_initializers, ''));
@@ -144,9 +165,18 @@ let DeesHarnessSessionList = (() => {
144
165
  #dropSlot_accessor_storage = (__runInitializers(this, _draggingSessionId_extraInitializers), __runInitializers(this, _dropSlot_initializers, undefined));
145
166
  get dropSlot() { return this.#dropSlot_accessor_storage; }
146
167
  set dropSlot(value) { this.#dropSlot_accessor_storage = value; }
147
- #collapsedGroupIds_accessor_storage = (__runInitializers(this, _dropSlot_extraInitializers), __runInitializers(this, _collapsedGroupIds_initializers, new Set()));
168
+ #draggedItemHeight_accessor_storage = (__runInitializers(this, _dropSlot_extraInitializers), __runInitializers(this, _draggedItemHeight_initializers, 0));
169
+ get draggedItemHeight() { return this.#draggedItemHeight_accessor_storage; }
170
+ set draggedItemHeight(value) { this.#draggedItemHeight_accessor_storage = value; }
171
+ #expandedSessionIds_accessor_storage = (__runInitializers(this, _draggedItemHeight_extraInitializers), __runInitializers(this, _expandedSessionIds_initializers, new Set()));
172
+ get expandedSessionIds() { return this.#expandedSessionIds_accessor_storage; }
173
+ set expandedSessionIds(value) { this.#expandedSessionIds_accessor_storage = value; }
174
+ #collapsedGroupIds_accessor_storage = (__runInitializers(this, _expandedSessionIds_extraInitializers), __runInitializers(this, _collapsedGroupIds_initializers, new Set()));
148
175
  get collapsedGroupIds() { return this.#collapsedGroupIds_accessor_storage; }
149
176
  set collapsedGroupIds(value) { this.#collapsedGroupIds_accessor_storage = value; }
177
+ reflowGeneration = (__runInitializers(this, _collapsedGroupIds_extraInitializers), 0);
178
+ reflowAnimations = new Set();
179
+ dragSourceElement;
150
180
  static styles = [
151
181
  themeDefaultStyles,
152
182
  cssManager.defaultStyles,
@@ -156,26 +186,48 @@ let DeesHarnessSessionList = (() => {
156
186
  flex-direction: column;
157
187
  min-height: 0;
158
188
  font-family: var(--dees-font-family);
189
+ --session-normal: var(--dees-color-text-muted);
190
+ --session-working: var(--dees-color-accent-primary);
191
+ --session-finished: var(--dees-color-accent-success);
192
+ --session-attention: #bf5af2;
193
+ --session-error: var(--dees-color-accent-error);
194
+ }
195
+
196
+ :host([gobright]) {
197
+ --session-attention: #af52de;
159
198
  }
160
199
 
161
200
  .searchRow {
201
+ position: relative;
162
202
  flex: 0 0 auto;
163
- padding: var(--dees-spacing-sm);
203
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md) var(--dees-spacing-md);
204
+ }
205
+
206
+ .searchIcon {
207
+ position: absolute;
208
+ top: 50%;
209
+ left: calc(var(--dees-spacing-md) + 10px);
210
+ color: var(--dees-color-text-muted);
211
+ transform: translateY(-62%);
212
+ pointer-events: none;
164
213
  }
165
214
 
166
215
  .searchRow input {
167
216
  width: 100%;
168
- height: var(--dees-control-height-sm);
169
- padding: 0 var(--dees-spacing-md);
217
+ height: var(--dees-control-height-lg);
218
+ padding: 0 var(--dees-spacing-md) 0 34px;
170
219
  border: 1px solid var(--dees-color-border-default);
171
- border-radius: var(--dees-radius-md);
220
+ border-radius: var(--dees-radius-lg);
172
221
  corner-shape: var(--dees-corner-shape);
173
- background: var(--dees-color-bg-primary);
222
+ background: color-mix(in srgb, var(--dees-color-bg-primary) 78%, transparent);
174
223
  color: var(--dees-color-text-primary);
175
224
  font-family: inherit;
176
- font-size: var(--dees-font-control-size, 13px);
225
+ font-size: var(--dees-font-control-size-sm, 12px);
177
226
  outline: none;
178
227
  box-sizing: border-box;
228
+ box-shadow: var(--dees-shadow-xs);
229
+ transition: border-color var(--dees-transition-fast) var(--dees-ease-standard),
230
+ box-shadow var(--dees-transition-fast) var(--dees-ease-standard);
179
231
  }
180
232
 
181
233
  .searchRow input:focus {
@@ -189,46 +241,146 @@ let DeesHarnessSessionList = (() => {
189
241
  overflow-y: auto;
190
242
  scrollbar-width: thin;
191
243
  scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
192
- padding: 0 var(--dees-spacing-xs) var(--dees-spacing-xs);
244
+ padding: 0 var(--dees-spacing-md) var(--dees-spacing-md);
245
+ }
246
+
247
+ .section {
248
+ position: relative;
193
249
  display: grid;
194
- gap: 2px;
250
+ gap: var(--dees-spacing-sm);
195
251
  align-content: start;
196
252
  }
197
253
 
198
254
  .item {
255
+ --card-accent: var(--session-normal);
256
+ position: relative;
199
257
  width: 100%;
200
- display: block;
201
- padding: var(--dees-spacing-xs) var(--dees-spacing-sm);
202
- border: 0;
203
- border-radius: var(--dees-radius-md);
258
+ min-width: 0;
259
+ overflow: hidden;
260
+ border: 1px solid color-mix(in srgb, var(--card-accent) 24%, var(--dees-color-border-subtle));
261
+ border-radius: var(--dees-radius-xl);
204
262
  corner-shape: var(--dees-corner-shape);
205
- background: transparent;
263
+ background: color-mix(in srgb, var(--dees-color-bg-primary) 90%, transparent);
206
264
  color: var(--dees-color-text-primary);
207
- cursor: pointer;
208
- font-family: inherit;
209
- text-align: left;
210
- transition: background var(--dees-transition-fast) var(--dees-ease-standard);
265
+ box-shadow:
266
+ var(--dees-shadow-sm),
267
+ inset 3px 0 0 var(--card-accent);
268
+ box-sizing: border-box;
269
+ transition:
270
+ border-color var(--dees-transition-fast) var(--dees-ease-standard),
271
+ background var(--dees-transition-fast) var(--dees-ease-standard),
272
+ box-shadow var(--dees-transition-fast) var(--dees-ease-standard);
211
273
  }
212
274
 
213
275
  .item:hover {
214
- background: var(--dees-color-hover);
276
+ border-color: color-mix(in srgb, var(--card-accent) 42%, var(--dees-color-border-default));
277
+ background: color-mix(in srgb, var(--dees-color-bg-primary) 96%, var(--card-accent) 4%);
215
278
  }
216
279
 
217
280
  .item.selected {
218
- background: var(--dees-color-active);
219
- box-shadow: inset 2px 0 0 var(--dees-color-accent-primary);
281
+ border-color: color-mix(in srgb, var(--dees-color-accent-primary) 65%, var(--dees-color-border-default));
282
+ box-shadow:
283
+ 0 0 0 2px color-mix(in srgb, var(--dees-color-accent-primary) 18%, transparent),
284
+ var(--dees-shadow-sm),
285
+ inset 3px 0 0 var(--card-accent);
220
286
  }
221
287
 
222
288
  .item.dragging {
223
- opacity: 0.4;
289
+ position: absolute;
290
+ inset-inline: 0;
291
+ z-index: -1;
292
+ opacity: 0;
293
+ pointer-events: none;
224
294
  }
225
295
 
226
- .itemTitle {
296
+ .item.state-working {
297
+ --card-accent: var(--session-working);
298
+ }
299
+
300
+ .item.state-finished {
301
+ --card-accent: var(--session-finished);
302
+ }
303
+
304
+ .item.state-attention {
305
+ --card-accent: var(--session-attention);
306
+ }
307
+
308
+ .item.state-error {
309
+ --card-accent: var(--session-error);
310
+ }
311
+
312
+ @keyframes attentionPulse {
313
+ 0%, 100% {
314
+ box-shadow:
315
+ 0 0 0 0 color-mix(in srgb, var(--session-attention) 0%, transparent),
316
+ var(--dees-shadow-sm),
317
+ inset 3px 0 0 var(--session-attention);
318
+ }
319
+ 50% {
320
+ box-shadow:
321
+ 0 0 0 4px color-mix(in srgb, var(--session-attention) 26%, transparent),
322
+ 0 7px 18px color-mix(in srgb, var(--session-attention) 16%, transparent),
323
+ inset 3px 0 0 var(--session-attention);
324
+ }
325
+ }
326
+
327
+ .item.state-attention:not(.selected) {
328
+ animation: attentionPulse 1.15s ease-in-out infinite;
329
+ }
330
+
331
+ .itemHeader {
332
+ display: grid;
333
+ grid-template-columns: minmax(0, 1fr) 30px;
334
+ min-height: 46px;
335
+ }
336
+
337
+ .itemPrimary,
338
+ .expandToggle {
339
+ appearance: none;
340
+ border: 0;
341
+ background: transparent;
342
+ color: inherit;
343
+ font-family: inherit;
344
+ }
345
+
346
+ .itemPrimary {
227
347
  display: flex;
228
- align-items: baseline;
348
+ min-width: 0;
349
+ align-items: center;
229
350
  gap: var(--dees-spacing-sm);
351
+ padding: var(--dees-spacing-sm) var(--dees-spacing-xs) var(--dees-spacing-sm) var(--dees-spacing-md);
352
+ text-align: left;
353
+ cursor: pointer;
354
+ }
355
+
356
+ .itemPrimary:focus-visible,
357
+ .expandToggle:focus-visible {
358
+ outline: 2px solid var(--dees-color-accent-primary);
359
+ outline-offset: -3px;
360
+ border-radius: 9px;
361
+ }
362
+
363
+ .stateDot {
364
+ width: 8px;
365
+ height: 8px;
366
+ flex: 0 0 auto;
367
+ border-radius: 50%;
368
+ background: var(--card-accent);
369
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--card-accent) 15%, transparent);
370
+ }
371
+
372
+ .itemCopy {
373
+ min-width: 0;
374
+ flex: 1;
375
+ }
376
+
377
+ .itemTitle {
378
+ display: flex;
379
+ min-width: 0;
380
+ align-items: center;
381
+ gap: 6px;
230
382
  font-size: var(--dees-font-control-size-sm, 12px);
231
- font-weight: 500;
383
+ font-weight: 590;
232
384
  }
233
385
 
234
386
  .itemTitle .titleText {
@@ -240,24 +392,99 @@ let DeesHarnessSessionList = (() => {
240
392
 
241
393
  .itemTitle .itemIcon {
242
394
  flex: 0 0 auto;
243
- align-self: center;
244
395
  color: var(--dees-color-text-secondary);
245
396
  }
246
397
 
247
398
  .itemTime {
248
- margin-left: auto;
249
- flex: 0 0 auto;
399
+ margin-top: 2px;
250
400
  color: var(--dees-color-text-muted);
251
401
  font-size: var(--dees-font-caption2-size, 10px);
252
402
  }
253
403
 
404
+ .expandToggle {
405
+ display: grid;
406
+ place-items: center;
407
+ margin: 7px 7px 7px 0;
408
+ border-radius: 9px;
409
+ color: var(--dees-color-text-muted);
410
+ cursor: pointer;
411
+ }
412
+
413
+ .expandToggle:hover {
414
+ background: color-mix(in srgb, var(--card-accent) 11%, transparent);
415
+ color: var(--dees-color-text-primary);
416
+ }
417
+
418
+ .expandToggle dees-icon {
419
+ transition: transform var(--dees-transition-fast) var(--dees-ease-standard);
420
+ }
421
+
422
+ .item.expanded .expandToggle dees-icon {
423
+ transform: rotate(180deg);
424
+ }
425
+
426
+ .itemDetails {
427
+ display: grid;
428
+ gap: 6px;
429
+ margin: 0 10px 10px 28px;
430
+ padding: 9px 10px;
431
+ border-top: 1px solid color-mix(in srgb, var(--card-accent) 20%, var(--dees-color-border-subtle));
432
+ color: var(--dees-color-text-secondary);
433
+ }
434
+
435
+ .stateLine {
436
+ display: flex;
437
+ align-items: center;
438
+ gap: 6px;
439
+ color: var(--card-accent);
440
+ font-size: var(--dees-font-caption1-size, 11px);
441
+ font-weight: 650;
442
+ }
443
+
254
444
  .itemPreview {
255
- margin-top: 1px;
256
445
  color: var(--dees-color-text-secondary);
257
446
  font-size: var(--dees-font-caption1-size, 11px);
258
447
  overflow: hidden;
259
- text-overflow: ellipsis;
448
+ display: -webkit-box;
449
+ -webkit-line-clamp: 2;
450
+ -webkit-box-orient: vertical;
451
+ }
452
+
453
+ .itemMeta {
454
+ color: var(--dees-color-text-muted);
455
+ font-size: var(--dees-font-caption2-size, 10px);
456
+ }
457
+
458
+ .visuallyHidden {
459
+ position: absolute;
460
+ width: 1px;
461
+ height: 1px;
462
+ padding: 0;
463
+ margin: -1px;
464
+ overflow: hidden;
465
+ clip: rect(0, 0, 0, 0);
260
466
  white-space: nowrap;
467
+ border: 0;
468
+ }
469
+
470
+ .dropPlaceholder,
471
+ .emptyDropZone {
472
+ display: grid;
473
+ place-items: center;
474
+ min-height: 46px;
475
+ border: 1px dashed color-mix(in srgb, var(--dees-color-accent-primary) 68%, transparent);
476
+ border-radius: var(--dees-radius-xl);
477
+ background: color-mix(in srgb, var(--dees-color-accent-primary) 8%, transparent);
478
+ color: var(--dees-color-accent-primary);
479
+ box-sizing: border-box;
480
+ }
481
+
482
+ .dropPlaceholder::after,
483
+ .emptyDropZone::after {
484
+ content: 'Drop conversation here';
485
+ font-size: var(--dees-font-caption2-size, 10px);
486
+ font-weight: 650;
487
+ letter-spacing: 0.02em;
261
488
  }
262
489
 
263
490
  .emptyNote {
@@ -272,8 +499,8 @@ let DeesHarnessSessionList = (() => {
272
499
  align-items: center;
273
500
  gap: var(--dees-spacing-xs);
274
501
  width: 100%;
275
- margin-top: var(--dees-spacing-xs);
276
- padding: 2px var(--dees-spacing-sm);
502
+ margin: var(--dees-spacing-md) 0 7px;
503
+ padding: var(--dees-spacing-xs) 6px;
277
504
  border: 0;
278
505
  border-radius: var(--dees-radius-md);
279
506
  background: transparent;
@@ -313,15 +540,12 @@ let DeesHarnessSessionList = (() => {
313
540
  }
314
541
 
315
542
  .dropLine {
316
- height: 2px;
317
- margin: 0 var(--dees-spacing-sm);
318
- border-radius: 1px;
319
- background: var(--dees-color-accent-primary);
543
+ display: none;
320
544
  }
321
545
 
322
546
  .newGroupRow {
323
547
  flex: 0 0 auto;
324
- padding: var(--dees-spacing-xs) var(--dees-spacing-sm) var(--dees-spacing-sm);
548
+ padding: 0 var(--dees-spacing-md) var(--dees-spacing-md);
325
549
  }
326
550
 
327
551
  .newGroupButton {
@@ -329,10 +553,12 @@ let DeesHarnessSessionList = (() => {
329
553
  align-items: center;
330
554
  gap: var(--dees-spacing-xs);
331
555
  width: 100%;
556
+ min-height: 34px;
557
+ justify-content: center;
332
558
  padding: var(--dees-spacing-xs) var(--dees-spacing-sm);
333
559
  border: 1px dashed var(--dees-color-border-default);
334
- border-radius: var(--dees-radius-md);
335
- background: transparent;
560
+ border-radius: 11px;
561
+ background: color-mix(in srgb, var(--dees-color-bg-primary) 55%, transparent);
336
562
  color: var(--dees-color-text-secondary);
337
563
  cursor: pointer;
338
564
  font-family: inherit;
@@ -343,6 +569,15 @@ let DeesHarnessSessionList = (() => {
343
569
  border-color: var(--dees-color-accent-primary);
344
570
  color: var(--dees-color-text-primary);
345
571
  }
572
+
573
+ @media (prefers-reduced-motion: reduce) {
574
+ .item,
575
+ .item.state-attention,
576
+ .expandToggle dees-icon {
577
+ animation: none;
578
+ transition: none;
579
+ }
580
+ }
346
581
  `,
347
582
  ];
348
583
  get sessionsById() {
@@ -356,12 +591,22 @@ let DeesHarnessSessionList = (() => {
356
591
  }
357
592
  return ids;
358
593
  }
359
- /** Ungrouped sessions, most recent first. */
594
+ /** Pinned entries first, followed by explicitly ordered sortable sessions. */
360
595
  get ungroupedSessions() {
361
596
  const grouped = this.groupedSessionIds;
362
- return [...this.sessions]
363
- .filter((session) => !grouped.has(session.id))
364
- .sort((left, right) => (right.updatedAt ?? right.createdAt ?? 0) - (left.updatedAt ?? left.createdAt ?? 0));
597
+ const available = this.sessions.filter((session) => !grouped.has(session.id));
598
+ const pinned = available.filter((session) => session.draggable === false);
599
+ const sortableById = new Map(available.filter((session) => session.draggable !== false).map((session) => [session.id, session]));
600
+ const ordered = [];
601
+ for (const sessionId of this.ungroupedSessionIds) {
602
+ const session = sortableById.get(sessionId);
603
+ if (!session)
604
+ continue;
605
+ ordered.push(session);
606
+ sortableById.delete(sessionId);
607
+ }
608
+ const newSessions = [...sortableById.values()].sort((left, right) => (right.updatedAt ?? right.createdAt ?? 0) - (left.updatedAt ?? left.createdAt ?? 0));
609
+ return [...pinned, ...ordered, ...newSessions];
365
610
  }
366
611
  get filteredSessions() {
367
612
  const query = this.search.trim().toLowerCase();
@@ -373,10 +618,40 @@ let DeesHarnessSessionList = (() => {
373
618
  focusSearch() {
374
619
  this.shadowRoot?.querySelector('.searchRow input')?.focus();
375
620
  }
621
+ updated(changedProperties) {
622
+ super.updated(changedProperties);
623
+ if (this.draggingSessionId && !this.dragSourceElement?.isConnected) {
624
+ this.clearDragState();
625
+ }
626
+ if (!changedProperties.has('sessions'))
627
+ return;
628
+ const previousSessions = changedProperties.get('sessions');
629
+ const previousById = new Map((previousSessions ?? []).map((session) => [session.id, session]));
630
+ const knownIds = new Set(this.sessions.map((session) => session.id));
631
+ if (this.draggingSessionId && !knownIds.has(this.draggingSessionId)) {
632
+ this.clearDragState();
633
+ }
634
+ const nextExpanded = new Set([...this.expandedSessionIds].filter((sessionId) => knownIds.has(sessionId)));
635
+ for (const session of this.sessions) {
636
+ const previous = previousById.get(session.id);
637
+ if (previous && previous.working !== true && session.working === true) {
638
+ nextExpanded.add(session.id);
639
+ }
640
+ }
641
+ if (nextExpanded.size !== this.expandedSessionIds.size
642
+ || [...nextExpanded].some((sessionId) => !this.expandedSessionIds.has(sessionId))) {
643
+ this.expandedSessionIds = nextExpanded;
644
+ }
645
+ }
646
+ async disconnectedCallback() {
647
+ this.clearDragState();
648
+ await super.disconnectedCallback();
649
+ }
376
650
  render() {
377
651
  const groupingActive = this.enableGrouping && !this.search.trim();
378
652
  return html `
379
653
  <div class="searchRow">
654
+ <dees-icon class="searchIcon" icon="lucide:Search" iconSize="13"></dees-icon>
380
655
  <input
381
656
  placeholder="Search conversations"
382
657
  .value=${this.search}
@@ -420,7 +695,11 @@ let DeesHarnessSessionList = (() => {
420
695
  ${this.sessions.length ? 'No conversations match this search.' : this.emptyText}
421
696
  </div>`;
422
697
  }
423
- return html `${sessions.map((session) => this.renderItem(session, null, -1))}`;
698
+ return html `
699
+ <div class="section">
700
+ ${repeat(sessions, (session) => session.id, (session) => this.renderItem(session, null, -1))}
701
+ </div>
702
+ `;
424
703
  }
425
704
  renderGroupedList() {
426
705
  const byId = this.sessionsById;
@@ -434,7 +713,9 @@ let DeesHarnessSessionList = (() => {
434
713
  .map((id) => byId.get(id))
435
714
  .filter((session) => session !== undefined);
436
715
  const collapsed = this.collapsedGroupIds.has(group.id);
437
- const isHeaderDrop = this.dropSlot?.groupId === group.id && this.dropSlot.index === members.length && collapsed;
716
+ const isHeaderDrop = this.dropSlot?.groupId === group.id
717
+ && this.dropSlot.index === this.sortableSessions(members).length
718
+ && collapsed;
438
719
  return html `
439
720
  <button
440
721
  class="groupHeader ${collapsed ? 'collapsed' : ''} ${isHeaderDrop ? 'dropTarget' : ''}"
@@ -450,8 +731,8 @@ let DeesHarnessSessionList = (() => {
450
731
  };
451
732
  this.dispatchEvent(new CustomEvent('harness-group-context', { detail, bubbles: true, composed: true }));
452
733
  }}
453
- @dragover=${(event) => this.handleDragOverSlot(event, group.id, members.length)}
454
- @drop=${(event) => this.handleDrop(event, group.id, members.length)}
734
+ @dragover=${(event) => this.handleDragOverSlot(event, group.id, this.sortableSessions(members).length)}
735
+ @drop=${(event) => this.handleDrop(event, group.id, this.sortableSessions(members).length)}
455
736
  >
456
737
  <dees-icon class="chevron" icon="lucide:ChevronDown" iconSize="12"></dees-icon>
457
738
  <span>${group.name}</span>
@@ -462,7 +743,7 @@ let DeesHarnessSessionList = (() => {
462
743
  : this.renderSection(members, group.id)}
463
744
  `;
464
745
  })}
465
- ${this.groups.length && ungrouped.length
746
+ ${this.groups.length && (ungrouped.length || this.draggingSessionId)
466
747
  ? html `
467
748
  <button
468
749
  class="groupHeader"
@@ -481,32 +762,79 @@ let DeesHarnessSessionList = (() => {
481
762
  }
482
763
  renderSection(sessions, groupId) {
483
764
  const slot = this.dropSlot;
765
+ const entries = [];
766
+ let logicalIndex = 0;
767
+ for (const session of sessions) {
768
+ const isDragging = session.id === this.draggingSessionId;
769
+ const sortable = session.draggable !== false;
770
+ if (slot
771
+ && slot.groupId === groupId
772
+ && slot.index === logicalIndex
773
+ && !isDragging
774
+ && sortable) {
775
+ entries.push({ type: 'placeholder', key: `placeholder:${groupId ?? 'ungrouped'}` });
776
+ }
777
+ entries.push({
778
+ type: 'session',
779
+ key: `session:${session.id}`,
780
+ session,
781
+ logicalIndex: sortable ? logicalIndex : -1,
782
+ });
783
+ if (sortable && !isDragging)
784
+ logicalIndex += 1;
785
+ }
786
+ if (slot && slot.groupId === groupId && slot.index === logicalIndex) {
787
+ entries.push({ type: 'placeholder', key: `placeholder:${groupId ?? 'ungrouped'}` });
788
+ }
789
+ const hasPlaceholder = entries.some((entry) => entry.type === 'placeholder');
484
790
  return html `
485
- ${sessions.map((session, index) => html `
486
- ${slot && slot.groupId === groupId && slot.index === index
487
- ? html `<div class="dropLine"></div>`
488
- : ''}
489
- ${this.renderItem(session, groupId, index)}
490
- `)}
491
- ${slot && slot.groupId === groupId && slot.index === sessions.length
492
- ? html `<div class="dropLine"></div>`
791
+ <div class="section" data-group-id=${groupId ?? ''}>
792
+ ${repeat(entries, (entry) => entry.key, (entry) => entry.type === 'placeholder'
793
+ ? this.renderDropPlaceholder(groupId, slot?.index ?? 0)
794
+ : this.renderItem(entry.session, groupId, entry.logicalIndex))}
795
+ ${this.draggingSessionId && !hasPlaceholder && this.sortableSessions(sessions).length === 0
796
+ ? html `
797
+ <div
798
+ class="emptyDropZone"
799
+ @dragover=${(event) => this.handleDragOverSlot(event, groupId, 0)}
800
+ @drop=${(event) => this.handleDrop(event, groupId, 0)}
801
+ ></div>
802
+ `
493
803
  : ''}
804
+ </div>
805
+ `;
806
+ }
807
+ renderDropPlaceholder(groupId, index) {
808
+ return html `
809
+ <div
810
+ class="dropPlaceholder"
811
+ style=${`height: ${Math.max(46, this.draggedItemHeight)}px`}
812
+ @dragover=${(event) => this.handleDragOverSlot(event, groupId, index)}
813
+ @drop=${(event) => this.handleDrop(event, groupId, index)}
814
+ ></div>
494
815
  `;
495
816
  }
496
817
  renderItem(session, groupId, index) {
497
- const draggable = this.enableGrouping && index >= 0;
818
+ const draggable = (this.enableGrouping
819
+ && session.draggable !== false
820
+ && index >= 0
821
+ && !globalThis.matchMedia?.('(pointer: coarse)').matches);
822
+ const expanded = this.expandedSessionIds.has(session.id);
823
+ const state = session.state ?? 'normal';
824
+ const detailsId = `session-details-${session.id}`;
498
825
  return html `
499
- <button
500
- class="item ${session.id === this.selectedSessionId ? 'selected' : ''} ${this.draggingSessionId === session.id ? 'dragging' : ''}"
501
- type="button"
502
- draggable=${draggable ? 'true' : 'false'}
503
- @click=${() => this.emit('harness-session-select', session)}
504
- @dblclick=${() => this.emit('harness-session-open', session)}
505
- @keydown=${(event) => {
506
- if (event.key === 'Enter')
507
- this.emit('harness-session-open', session);
826
+ <article
827
+ class="item state-${state} ${expanded ? 'expanded' : ''} ${session.id === this.selectedSessionId ? 'selected' : ''} ${this.draggingSessionId === session.id ? 'dragging' : ''}"
828
+ data-session-id=${session.id}
829
+ .draggable=${draggable}
830
+ @dblclick=${(event) => {
831
+ if (this.eventTargetsExpandToggle(event))
832
+ return;
833
+ this.emit('harness-session-open', session);
508
834
  }}
509
835
  @contextmenu=${(event) => {
836
+ if (this.eventTargetsExpandToggle(event))
837
+ return;
510
838
  event.preventDefault();
511
839
  const detail = {
512
840
  session,
@@ -517,19 +845,11 @@ let DeesHarnessSessionList = (() => {
517
845
  this.dispatchEvent(new CustomEvent('harness-session-context', { detail, bubbles: true, composed: true }));
518
846
  }}
519
847
  @dragstart=${(event) => {
520
- if (!draggable)
521
- return;
522
- this.draggingSessionId = session.id;
523
- event.dataTransfer?.setData('text/plain', session.id);
524
- if (event.dataTransfer)
525
- event.dataTransfer.effectAllowed = 'move';
526
- }}
527
- @dragend=${() => {
528
- this.draggingSessionId = '';
529
- this.dropSlot = undefined;
848
+ this.handleDragStart(event, session, groupId, index, draggable);
530
849
  }}
850
+ @dragend=${() => this.clearDragState()}
531
851
  @dragover=${(event) => {
532
- if (!this.draggingSessionId || index < 0)
852
+ if (!this.draggingSessionId || index < 0 || session.id === this.draggingSessionId)
533
853
  return;
534
854
  event.preventDefault();
535
855
  const rect = event.currentTarget.getBoundingClientRect();
@@ -537,26 +857,89 @@ let DeesHarnessSessionList = (() => {
537
857
  this.setDropSlot(groupId, before ? index : index + 1);
538
858
  }}
539
859
  @drop=${(event) => {
540
- if (index < 0)
860
+ if (index < 0 || session.id === this.draggingSessionId)
541
861
  return;
542
862
  const rect = event.currentTarget.getBoundingClientRect();
543
863
  const before = event.clientY < rect.top + rect.height / 2;
544
864
  this.handleDrop(event, groupId, before ? index : index + 1);
545
865
  }}
546
866
  >
547
- <span class="itemTitle">
548
- ${session.icon
549
- ? html `<dees-icon class="itemIcon" icon=${session.icon} iconSize="12"></dees-icon>`
867
+ <div class="itemHeader">
868
+ <button
869
+ class="itemPrimary"
870
+ type="button"
871
+ aria-current=${session.id === this.selectedSessionId ? 'true' : 'false'}
872
+ @click=${() => this.emit('harness-session-select', session)}
873
+ @keydown=${(event) => {
874
+ if (event.key !== 'Enter')
875
+ return;
876
+ event.preventDefault();
877
+ this.emit('harness-session-open', session);
878
+ }}
879
+ >
880
+ <span class="stateDot"></span>
881
+ <span class="itemCopy">
882
+ <span class="itemTitle">
883
+ ${session.icon
884
+ ? html `<dees-icon class="itemIcon" icon=${session.icon} iconSize="13"></dees-icon>`
550
885
  : ''}
551
- <span class="titleText">${session.title || session.id}</span>
552
- <span class="itemTime">${harnessFormatRelativeTime(session.updatedAt ?? session.createdAt)}</span>
553
- </span>
554
- ${session.preview
555
- ? html `<span class="itemPreview">${session.preview}${session.messageCount ? ` · ${session.messageCount} messages` : ''}</span>`
886
+ <span class="titleText">${session.title || session.id}</span>
887
+ </span>
888
+ <span class="itemTime">${harnessFormatRelativeTime(session.updatedAt ?? session.createdAt)}</span>
889
+ <span class="visuallyHidden">Status: ${this.sessionStateLabel(state)}</span>
890
+ </span>
891
+ </button>
892
+ <button
893
+ class="expandToggle"
894
+ type="button"
895
+ aria-expanded=${expanded ? 'true' : 'false'}
896
+ aria-controls=${detailsId}
897
+ title=${expanded ? 'Collapse conversation card' : 'Expand conversation card'}
898
+ @click=${(event) => {
899
+ event.stopPropagation();
900
+ this.toggleSessionExpanded(session.id);
901
+ }}
902
+ >
903
+ <dees-icon icon="lucide:ChevronDown" iconSize="15"></dees-icon>
904
+ </button>
905
+ </div>
906
+ ${expanded
907
+ ? html `
908
+ <div class="itemDetails" id=${detailsId}>
909
+ <div class="stateLine">
910
+ <span class="stateDot"></span>
911
+ <span>${this.sessionStateLabel(state)}</span>
912
+ </div>
913
+ ${session.preview ? html `<div class="itemPreview">${session.preview}</div>` : ''}
914
+ <div class="itemMeta">
915
+ ${session.messageCount ? `${session.messageCount} messages · ` : ''}${session.id}
916
+ </div>
917
+ </div>
918
+ `
556
919
  : ''}
557
- </button>
920
+ </article>
558
921
  `;
559
922
  }
923
+ eventTargetsExpandToggle(event) {
924
+ return event.composedPath().some((target) => target instanceof HTMLElement && target.classList.contains('expandToggle'));
925
+ }
926
+ sessionStateLabel(state) {
927
+ switch (state) {
928
+ case 'working': return 'Working';
929
+ case 'finished': return 'Finished';
930
+ case 'attention': return 'Needs attention';
931
+ case 'error': return 'Error';
932
+ default: return 'Idle';
933
+ }
934
+ }
935
+ toggleSessionExpanded(sessionIdArg) {
936
+ const next = new Set(this.expandedSessionIds);
937
+ if (next.has(sessionIdArg))
938
+ next.delete(sessionIdArg);
939
+ else
940
+ next.add(sessionIdArg);
941
+ this.expandedSessionIds = next;
942
+ }
560
943
  toggleGroupCollapsed(groupIdArg) {
561
944
  const next = new Set(this.collapsedGroupIds);
562
945
  if (next.has(groupIdArg)) {
@@ -567,40 +950,133 @@ let DeesHarnessSessionList = (() => {
567
950
  }
568
951
  this.collapsedGroupIds = next;
569
952
  }
953
+ sortableSessions(sessionsArg, excludeDraggingArg = true) {
954
+ return sessionsArg.filter((session) => (session.draggable !== false
955
+ && (!excludeDraggingArg || session.id !== this.draggingSessionId)));
956
+ }
957
+ sessionsForGroup(groupIdArg) {
958
+ if (groupIdArg === null)
959
+ return this.ungroupedSessions;
960
+ const group = this.groups.find((candidate) => candidate.id === groupIdArg);
961
+ if (!group)
962
+ return [];
963
+ const byId = this.sessionsById;
964
+ return group.sessionIds
965
+ .map((sessionId) => byId.get(sessionId))
966
+ .filter((session) => session !== undefined);
967
+ }
968
+ handleDragStart(event, session, groupId, logicalIndex, draggable) {
969
+ if (!draggable || logicalIndex < 0) {
970
+ event.preventDefault();
971
+ return;
972
+ }
973
+ const item = event.currentTarget;
974
+ this.reflowGeneration += 1;
975
+ this.cancelReflowAnimations();
976
+ this.draggedItemHeight = Math.ceil(item.getBoundingClientRect().height);
977
+ this.dragSourceElement = item;
978
+ this.draggingSessionId = session.id;
979
+ const remainingCount = this.sortableSessions(this.sessionsForGroup(groupId)).length;
980
+ this.dropSlot = { groupId, index: Math.min(logicalIndex, remainingCount) };
981
+ event.dataTransfer?.setData('text/plain', session.id);
982
+ if (event.dataTransfer)
983
+ event.dataTransfer.effectAllowed = 'move';
984
+ }
570
985
  setDropSlot(groupIdArg, indexArg) {
571
986
  const current = this.dropSlot;
572
987
  if (current && current.groupId === groupIdArg && current.index === indexArg)
573
988
  return;
989
+ const previousRects = this.captureCardRects();
990
+ const generation = ++this.reflowGeneration;
574
991
  this.dropSlot = { groupId: groupIdArg, index: indexArg };
992
+ void this.animateCardReflow(previousRects, generation);
575
993
  }
576
994
  handleDragOverSlot(event, groupIdArg, indexArg) {
577
995
  if (!this.draggingSessionId)
578
996
  return;
579
997
  event.preventDefault();
998
+ if (event.dataTransfer)
999
+ event.dataTransfer.dropEffect = 'move';
580
1000
  this.setDropSlot(groupIdArg, indexArg);
581
1001
  }
582
1002
  handleDrop(event, groupIdArg, indexArg) {
583
1003
  event.preventDefault();
584
1004
  event.stopPropagation();
585
1005
  const sessionId = this.draggingSessionId || event.dataTransfer?.getData('text/plain') || '';
586
- this.draggingSessionId = '';
587
- this.dropSlot = undefined;
588
- if (!sessionId)
1006
+ if (!sessionId) {
1007
+ this.clearDragState();
589
1008
  return;
1009
+ }
1010
+ const targetSessions = this.sortableSessions(this.sessionsForGroup(groupIdArg));
1011
+ const beforeSessionId = targetSessions[Math.max(0, indexArg)]?.id;
1012
+ const sourceGroupId = this.groups.find((group) => group.sessionIds.includes(sessionId))?.id ?? null;
1013
+ const sourceSessions = this.sortableSessions(this.sessionsForGroup(sourceGroupId), false);
1014
+ const sourceIndex = sourceSessions.findIndex((session) => session.id === sessionId);
1015
+ const compatibilityIndex = (sourceGroupId === groupIdArg
1016
+ && sourceIndex >= 0
1017
+ && indexArg > sourceIndex) ? indexArg + 1 : indexArg;
590
1018
  const detail = {
591
1019
  sessionId,
592
1020
  groupId: groupIdArg,
593
- index: Math.max(0, indexArg),
1021
+ index: Math.max(0, compatibilityIndex),
1022
+ ...(beforeSessionId ? { beforeSessionId } : {}),
594
1023
  };
1024
+ this.clearDragState();
595
1025
  this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
596
1026
  }
1027
+ captureCardRects() {
1028
+ const result = new Map();
1029
+ for (const item of this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []) {
1030
+ if (item.dataset.sessionId === this.draggingSessionId)
1031
+ continue;
1032
+ result.set(item.dataset.sessionId ?? '', item.getBoundingClientRect());
1033
+ }
1034
+ return result;
1035
+ }
1036
+ async animateCardReflow(previousRectsArg, generationArg) {
1037
+ await this.updateComplete;
1038
+ if (generationArg !== this.reflowGeneration
1039
+ || !this.isConnected
1040
+ || globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches)
1041
+ return;
1042
+ this.cancelReflowAnimations();
1043
+ for (const item of this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []) {
1044
+ const sessionId = item.dataset.sessionId ?? '';
1045
+ if (!sessionId || sessionId === this.draggingSessionId)
1046
+ continue;
1047
+ const previous = previousRectsArg.get(sessionId);
1048
+ if (!previous)
1049
+ continue;
1050
+ const current = item.getBoundingClientRect();
1051
+ const deltaY = previous.top - current.top;
1052
+ if (Math.abs(deltaY) < 0.5)
1053
+ continue;
1054
+ const animation = item.animate([
1055
+ { transform: `translateY(${deltaY}px)` },
1056
+ { transform: 'translateY(0)' },
1057
+ ], { duration: 180, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' });
1058
+ this.reflowAnimations.add(animation);
1059
+ void animation.finished.catch(() => undefined).finally(() => {
1060
+ this.reflowAnimations.delete(animation);
1061
+ });
1062
+ }
1063
+ }
1064
+ cancelReflowAnimations() {
1065
+ for (const animation of this.reflowAnimations)
1066
+ animation.cancel();
1067
+ this.reflowAnimations.clear();
1068
+ }
1069
+ clearDragState() {
1070
+ this.reflowGeneration += 1;
1071
+ this.cancelReflowAnimations();
1072
+ this.draggingSessionId = '';
1073
+ this.draggedItemHeight = 0;
1074
+ this.dropSlot = undefined;
1075
+ this.dragSourceElement = undefined;
1076
+ }
597
1077
  emit(name, session) {
598
1078
  this.dispatchEvent(new CustomEvent(name, { detail: { session }, bubbles: true, composed: true }));
599
1079
  }
600
- constructor() {
601
- super(...arguments);
602
- __runInitializers(this, _collapsedGroupIds_extraInitializers);
603
- }
604
1080
  static {
605
1081
  __runInitializers(_classThis, _classExtraInitializers);
606
1082
  }
@@ -608,4 +1084,4 @@ let DeesHarnessSessionList = (() => {
608
1084
  return DeesHarnessSessionList = _classThis;
609
1085
  })();
610
1086
  export { DeesHarnessSessionList };
611
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUXRELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sOENBQThDLENBQUM7QUFhdEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztJQUVVLHNCQUFzQjs0QkFEbEMsYUFBYSxDQUFDLDJCQUEyQixDQUFDOzs7O3NCQUNDLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBQW5CLFNBQVEsV0FBVzs7OztvQ0FJcEQsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDOzZDQUc5QixRQUFRLEVBQUU7bUNBR1YsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3FDQUczQixRQUFRLEVBQUU7a0NBR1YsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDOzBDQUc5QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7a0NBRzNCLEtBQUssRUFBRTs2Q0FHUCxLQUFLLEVBQUU7b0NBR1AsS0FBSyxFQUFFOzZDQUdQLEtB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
1087
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVF0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLDhDQUE4QyxDQUFDO0FBRXRELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFpQjlCOzs7Ozs7Ozs7Ozs7OztHQWNHO0lBRVUsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUlwRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NkNBRzlCLFFBQVEsRUFBRTttQ0FHVixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7cUNBRzNCLFFBQVEsRUFBRTtrQ0FHVixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7MENBRzlCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUs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