@design.estate/dees-catalog 4.9.0 → 4.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +4965 -2314
- package/dist_ts_web/00_commitinfo_data.js +2 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +56 -4
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +35 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +1107 -127
- package/dist_ts_web/elements/00group-harness/interfaces.d.ts +10 -1
- package/package.json +5 -5
- package/readme.md +3 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +45 -2
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +1194 -126
- package/ts_web/elements/00group-harness/interfaces.ts +11 -1
- package/dist_watch/bundle.js +0 -235637
- package/dist_watch/bundle.js.map +0 -7
- package/dist_watch/index.html +0 -28
package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js
CHANGED
|
@@ -33,10 +33,13 @@ 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;
|
|
41
|
+
const dragAutoScrollMaxPixelsPerSecond = 900;
|
|
42
|
+
const dragThresholdPixels = 4;
|
|
40
43
|
/**
|
|
41
44
|
* Searchable conversation list, embeddable in a sidebar or a DeesModal.
|
|
42
45
|
* Emits `harness-session-select` on click, `harness-session-open` on
|
|
@@ -49,7 +52,8 @@ import '../../00group-utility/dees-icon/dees-icon.js';
|
|
|
49
52
|
* `harness-group-create-request`, and right-clicking a group header emits
|
|
50
53
|
* `harness-group-context` — the host persists changes and passes fresh
|
|
51
54
|
* `groups` back in. Sessions in no group render in the trailing ungrouped
|
|
52
|
-
* section
|
|
55
|
+
* section with pinned entries first, then explicit order, then new sessions by
|
|
56
|
+
* recency. While a search query is active the list is flat.
|
|
53
57
|
*/
|
|
54
58
|
let DeesHarnessSessionList = (() => {
|
|
55
59
|
let _classDecorators = [customElement('dees-harness-session-list')];
|
|
@@ -75,6 +79,9 @@ let DeesHarnessSessionList = (() => {
|
|
|
75
79
|
let _enableGrouping_decorators;
|
|
76
80
|
let _enableGrouping_initializers = [];
|
|
77
81
|
let _enableGrouping_extraInitializers = [];
|
|
82
|
+
let _ungroupedSessionIds_decorators;
|
|
83
|
+
let _ungroupedSessionIds_initializers = [];
|
|
84
|
+
let _ungroupedSessionIds_extraInitializers = [];
|
|
78
85
|
let _search_decorators;
|
|
79
86
|
let _search_initializers = [];
|
|
80
87
|
let _search_extraInitializers = [];
|
|
@@ -84,9 +91,24 @@ let DeesHarnessSessionList = (() => {
|
|
|
84
91
|
let _dropSlot_decorators;
|
|
85
92
|
let _dropSlot_initializers = [];
|
|
86
93
|
let _dropSlot_extraInitializers = [];
|
|
94
|
+
let _draggedItemHeight_decorators;
|
|
95
|
+
let _draggedItemHeight_initializers = [];
|
|
96
|
+
let _draggedItemHeight_extraInitializers = [];
|
|
97
|
+
let _expandedSessionIds_decorators;
|
|
98
|
+
let _expandedSessionIds_initializers = [];
|
|
99
|
+
let _expandedSessionIds_extraInitializers = [];
|
|
87
100
|
let _collapsedGroupIds_decorators;
|
|
88
101
|
let _collapsedGroupIds_initializers = [];
|
|
89
102
|
let _collapsedGroupIds_extraInitializers = [];
|
|
103
|
+
let _topScrollShadowVisible_decorators;
|
|
104
|
+
let _topScrollShadowVisible_initializers = [];
|
|
105
|
+
let _topScrollShadowVisible_extraInitializers = [];
|
|
106
|
+
let _bottomScrollShadowVisible_decorators;
|
|
107
|
+
let _bottomScrollShadowVisible_initializers = [];
|
|
108
|
+
let _bottomScrollShadowVisible_extraInitializers = [];
|
|
109
|
+
let _moveAnnouncement_decorators;
|
|
110
|
+
let _moveAnnouncement_initializers = [];
|
|
111
|
+
let _moveAnnouncement_extraInitializers = [];
|
|
90
112
|
var DeesHarnessSessionList = class extends _classSuper {
|
|
91
113
|
static { _classThis = this; }
|
|
92
114
|
static {
|
|
@@ -97,20 +119,32 @@ let DeesHarnessSessionList = (() => {
|
|
|
97
119
|
_emptyText_decorators = [property()];
|
|
98
120
|
_groups_decorators = [property({ attribute: false })];
|
|
99
121
|
_enableGrouping_decorators = [property({ type: Boolean })];
|
|
122
|
+
_ungroupedSessionIds_decorators = [property({ attribute: false })];
|
|
100
123
|
_search_decorators = [state()];
|
|
101
124
|
_draggingSessionId_decorators = [state()];
|
|
102
125
|
_dropSlot_decorators = [state()];
|
|
126
|
+
_draggedItemHeight_decorators = [state()];
|
|
127
|
+
_expandedSessionIds_decorators = [state()];
|
|
103
128
|
_collapsedGroupIds_decorators = [state()];
|
|
129
|
+
_topScrollShadowVisible_decorators = [state()];
|
|
130
|
+
_bottomScrollShadowVisible_decorators = [state()];
|
|
131
|
+
_moveAnnouncement_decorators = [state()];
|
|
104
132
|
__esDecorate(this, null, _sessions_decorators, { kind: "accessor", name: "sessions", static: false, private: false, access: { has: obj => "sessions" in obj, get: obj => obj.sessions, set: (obj, value) => { obj.sessions = value; } }, metadata: _metadata }, _sessions_initializers, _sessions_extraInitializers);
|
|
105
133
|
__esDecorate(this, null, _selectedSessionId_decorators, { kind: "accessor", name: "selectedSessionId", static: false, private: false, access: { has: obj => "selectedSessionId" in obj, get: obj => obj.selectedSessionId, set: (obj, value) => { obj.selectedSessionId = value; } }, metadata: _metadata }, _selectedSessionId_initializers, _selectedSessionId_extraInitializers);
|
|
106
134
|
__esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
|
|
107
135
|
__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
136
|
__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
137
|
__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);
|
|
138
|
+
__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
139
|
__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
140
|
__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
141
|
__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);
|
|
142
|
+
__esDecorate(this, null, _draggedItemHeight_decorators, { kind: "accessor", name: "draggedItemHeight", static: false, private: false, access: { has: obj => "draggedItemHeight" in obj, get: obj => obj.draggedItemHeight, set: (obj, value) => { obj.draggedItemHeight = value; } }, metadata: _metadata }, _draggedItemHeight_initializers, _draggedItemHeight_extraInitializers);
|
|
143
|
+
__esDecorate(this, null, _expandedSessionIds_decorators, { kind: "accessor", name: "expandedSessionIds", static: false, private: false, access: { has: obj => "expandedSessionIds" in obj, get: obj => obj.expandedSessionIds, set: (obj, value) => { obj.expandedSessionIds = value; } }, metadata: _metadata }, _expandedSessionIds_initializers, _expandedSessionIds_extraInitializers);
|
|
113
144
|
__esDecorate(this, null, _collapsedGroupIds_decorators, { kind: "accessor", name: "collapsedGroupIds", static: false, private: false, access: { has: obj => "collapsedGroupIds" in obj, get: obj => obj.collapsedGroupIds, set: (obj, value) => { obj.collapsedGroupIds = value; } }, metadata: _metadata }, _collapsedGroupIds_initializers, _collapsedGroupIds_extraInitializers);
|
|
145
|
+
__esDecorate(this, null, _topScrollShadowVisible_decorators, { kind: "accessor", name: "topScrollShadowVisible", static: false, private: false, access: { has: obj => "topScrollShadowVisible" in obj, get: obj => obj.topScrollShadowVisible, set: (obj, value) => { obj.topScrollShadowVisible = value; } }, metadata: _metadata }, _topScrollShadowVisible_initializers, _topScrollShadowVisible_extraInitializers);
|
|
146
|
+
__esDecorate(this, null, _bottomScrollShadowVisible_decorators, { kind: "accessor", name: "bottomScrollShadowVisible", static: false, private: false, access: { has: obj => "bottomScrollShadowVisible" in obj, get: obj => obj.bottomScrollShadowVisible, set: (obj, value) => { obj.bottomScrollShadowVisible = value; } }, metadata: _metadata }, _bottomScrollShadowVisible_initializers, _bottomScrollShadowVisible_extraInitializers);
|
|
147
|
+
__esDecorate(this, null, _moveAnnouncement_decorators, { kind: "accessor", name: "moveAnnouncement", static: false, private: false, access: { has: obj => "moveAnnouncement" in obj, get: obj => obj.moveAnnouncement, set: (obj, value) => { obj.moveAnnouncement = value; } }, metadata: _metadata }, _moveAnnouncement_initializers, _moveAnnouncement_extraInitializers);
|
|
114
148
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
115
149
|
DeesHarnessSessionList = _classThis = _classDescriptor.value;
|
|
116
150
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -135,7 +169,11 @@ let DeesHarnessSessionList = (() => {
|
|
|
135
169
|
#enableGrouping_accessor_storage = (__runInitializers(this, _groups_extraInitializers), __runInitializers(this, _enableGrouping_initializers, false));
|
|
136
170
|
get enableGrouping() { return this.#enableGrouping_accessor_storage; }
|
|
137
171
|
set enableGrouping(value) { this.#enableGrouping_accessor_storage = value; }
|
|
138
|
-
#
|
|
172
|
+
#ungroupedSessionIds_accessor_storage = (__runInitializers(this, _enableGrouping_extraInitializers), __runInitializers(this, _ungroupedSessionIds_initializers, []));
|
|
173
|
+
/** Explicit order for sortable sessions outside user-defined groups. */
|
|
174
|
+
get ungroupedSessionIds() { return this.#ungroupedSessionIds_accessor_storage; }
|
|
175
|
+
set ungroupedSessionIds(value) { this.#ungroupedSessionIds_accessor_storage = value; }
|
|
176
|
+
#search_accessor_storage = (__runInitializers(this, _ungroupedSessionIds_extraInitializers), __runInitializers(this, _search_initializers, ''));
|
|
139
177
|
get search() { return this.#search_accessor_storage; }
|
|
140
178
|
set search(value) { this.#search_accessor_storage = value; }
|
|
141
179
|
#draggingSessionId_accessor_storage = (__runInitializers(this, _search_extraInitializers), __runInitializers(this, _draggingSessionId_initializers, ''));
|
|
@@ -144,9 +182,36 @@ let DeesHarnessSessionList = (() => {
|
|
|
144
182
|
#dropSlot_accessor_storage = (__runInitializers(this, _draggingSessionId_extraInitializers), __runInitializers(this, _dropSlot_initializers, undefined));
|
|
145
183
|
get dropSlot() { return this.#dropSlot_accessor_storage; }
|
|
146
184
|
set dropSlot(value) { this.#dropSlot_accessor_storage = value; }
|
|
147
|
-
#
|
|
185
|
+
#draggedItemHeight_accessor_storage = (__runInitializers(this, _dropSlot_extraInitializers), __runInitializers(this, _draggedItemHeight_initializers, 0));
|
|
186
|
+
get draggedItemHeight() { return this.#draggedItemHeight_accessor_storage; }
|
|
187
|
+
set draggedItemHeight(value) { this.#draggedItemHeight_accessor_storage = value; }
|
|
188
|
+
#expandedSessionIds_accessor_storage = (__runInitializers(this, _draggedItemHeight_extraInitializers), __runInitializers(this, _expandedSessionIds_initializers, new Set()));
|
|
189
|
+
get expandedSessionIds() { return this.#expandedSessionIds_accessor_storage; }
|
|
190
|
+
set expandedSessionIds(value) { this.#expandedSessionIds_accessor_storage = value; }
|
|
191
|
+
#collapsedGroupIds_accessor_storage = (__runInitializers(this, _expandedSessionIds_extraInitializers), __runInitializers(this, _collapsedGroupIds_initializers, new Set()));
|
|
148
192
|
get collapsedGroupIds() { return this.#collapsedGroupIds_accessor_storage; }
|
|
149
193
|
set collapsedGroupIds(value) { this.#collapsedGroupIds_accessor_storage = value; }
|
|
194
|
+
#topScrollShadowVisible_accessor_storage = (__runInitializers(this, _collapsedGroupIds_extraInitializers), __runInitializers(this, _topScrollShadowVisible_initializers, false));
|
|
195
|
+
get topScrollShadowVisible() { return this.#topScrollShadowVisible_accessor_storage; }
|
|
196
|
+
set topScrollShadowVisible(value) { this.#topScrollShadowVisible_accessor_storage = value; }
|
|
197
|
+
#bottomScrollShadowVisible_accessor_storage = (__runInitializers(this, _topScrollShadowVisible_extraInitializers), __runInitializers(this, _bottomScrollShadowVisible_initializers, false));
|
|
198
|
+
get bottomScrollShadowVisible() { return this.#bottomScrollShadowVisible_accessor_storage; }
|
|
199
|
+
set bottomScrollShadowVisible(value) { this.#bottomScrollShadowVisible_accessor_storage = value; }
|
|
200
|
+
#moveAnnouncement_accessor_storage = (__runInitializers(this, _bottomScrollShadowVisible_extraInitializers), __runInitializers(this, _moveAnnouncement_initializers, ''));
|
|
201
|
+
get moveAnnouncement() { return this.#moveAnnouncement_accessor_storage; }
|
|
202
|
+
set moveAnnouncement(value) { this.#moveAnnouncement_accessor_storage = value; }
|
|
203
|
+
reflowGeneration = (__runInitializers(this, _moveAnnouncement_extraInitializers), 0);
|
|
204
|
+
reflowAnimations = new Set();
|
|
205
|
+
pointerDragGesture;
|
|
206
|
+
keyboardMoveFocus;
|
|
207
|
+
scrollResizeObserver;
|
|
208
|
+
observedScrollContainer;
|
|
209
|
+
observedScrollContent;
|
|
210
|
+
dragAutoScrollFrame;
|
|
211
|
+
dragAutoScrollClientX = 0;
|
|
212
|
+
dragAutoScrollClientY = 0;
|
|
213
|
+
dragAutoScrollVelocity = 0;
|
|
214
|
+
dragAutoScrollLastFrame = 0;
|
|
150
215
|
static styles = [
|
|
151
216
|
themeDefaultStyles,
|
|
152
217
|
cssManager.defaultStyles,
|
|
@@ -156,26 +221,48 @@ let DeesHarnessSessionList = (() => {
|
|
|
156
221
|
flex-direction: column;
|
|
157
222
|
min-height: 0;
|
|
158
223
|
font-family: var(--dees-font-family);
|
|
224
|
+
--session-normal: var(--dees-color-text-muted);
|
|
225
|
+
--session-working: var(--dees-color-accent-primary);
|
|
226
|
+
--session-finished: var(--dees-color-accent-success);
|
|
227
|
+
--session-attention: #bf5af2;
|
|
228
|
+
--session-error: var(--dees-color-accent-error);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
:host([gobright]) {
|
|
232
|
+
--session-attention: #af52de;
|
|
159
233
|
}
|
|
160
234
|
|
|
161
235
|
.searchRow {
|
|
236
|
+
position: relative;
|
|
162
237
|
flex: 0 0 auto;
|
|
163
|
-
padding: var(--dees-spacing-sm);
|
|
238
|
+
padding: var(--dees-spacing-sm) var(--dees-spacing-md) var(--dees-spacing-md);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.searchIcon {
|
|
242
|
+
position: absolute;
|
|
243
|
+
top: 50%;
|
|
244
|
+
left: calc(var(--dees-spacing-md) + 10px);
|
|
245
|
+
color: var(--dees-color-text-muted);
|
|
246
|
+
transform: translateY(-62%);
|
|
247
|
+
pointer-events: none;
|
|
164
248
|
}
|
|
165
249
|
|
|
166
250
|
.searchRow input {
|
|
167
251
|
width: 100%;
|
|
168
|
-
height: var(--dees-control-height-
|
|
169
|
-
padding: 0 var(--dees-spacing-md);
|
|
252
|
+
height: var(--dees-control-height-lg);
|
|
253
|
+
padding: 0 var(--dees-spacing-md) 0 34px;
|
|
170
254
|
border: 1px solid var(--dees-color-border-default);
|
|
171
|
-
border-radius: var(--dees-radius-
|
|
255
|
+
border-radius: var(--dees-radius-lg);
|
|
172
256
|
corner-shape: var(--dees-corner-shape);
|
|
173
|
-
background: var(--dees-color-bg-primary);
|
|
257
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 78%, transparent);
|
|
174
258
|
color: var(--dees-color-text-primary);
|
|
175
259
|
font-family: inherit;
|
|
176
|
-
font-size: var(--dees-font-control-size,
|
|
260
|
+
font-size: var(--dees-font-control-size-sm, 12px);
|
|
177
261
|
outline: none;
|
|
178
262
|
box-sizing: border-box;
|
|
263
|
+
box-shadow: var(--dees-shadow-xs);
|
|
264
|
+
transition: border-color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
265
|
+
box-shadow var(--dees-transition-fast) var(--dees-ease-standard);
|
|
179
266
|
}
|
|
180
267
|
|
|
181
268
|
.searchRow input:focus {
|
|
@@ -184,51 +271,253 @@ let DeesHarnessSessionList = (() => {
|
|
|
184
271
|
}
|
|
185
272
|
|
|
186
273
|
.list {
|
|
187
|
-
|
|
188
|
-
|
|
274
|
+
width: 100%;
|
|
275
|
+
height: 100%;
|
|
189
276
|
overflow-y: auto;
|
|
190
277
|
scrollbar-width: thin;
|
|
191
278
|
scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
|
|
192
|
-
padding: 0 var(--dees-spacing-
|
|
279
|
+
padding: 0 var(--dees-spacing-md) var(--dees-spacing-md);
|
|
280
|
+
box-sizing: border-box;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.listFrame {
|
|
284
|
+
position: relative;
|
|
285
|
+
flex: 1;
|
|
286
|
+
min-height: 0;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.scrollShadow {
|
|
290
|
+
position: absolute;
|
|
291
|
+
z-index: 1;
|
|
292
|
+
left: 0;
|
|
293
|
+
right: 0;
|
|
294
|
+
height: 16px;
|
|
295
|
+
opacity: 0;
|
|
296
|
+
pointer-events: none;
|
|
297
|
+
transition: opacity var(--dees-transition-fast) var(--dees-ease-standard);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
.scrollShadow.visible {
|
|
301
|
+
opacity: 1;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.scrollShadow.top {
|
|
305
|
+
top: 0;
|
|
306
|
+
background: linear-gradient(
|
|
307
|
+
to bottom,
|
|
308
|
+
color-mix(in srgb, var(--dees-material-thin-bg-opaque) 74%, transparent),
|
|
309
|
+
transparent
|
|
310
|
+
);
|
|
311
|
+
box-shadow: var(--dees-shadow-sm);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.scrollShadow.bottom {
|
|
315
|
+
bottom: 0;
|
|
316
|
+
background: linear-gradient(
|
|
317
|
+
to top,
|
|
318
|
+
color-mix(in srgb, var(--dees-material-thin-bg-opaque) 74%, transparent),
|
|
319
|
+
transparent
|
|
320
|
+
);
|
|
321
|
+
box-shadow: var(--dees-shadow-up-sm);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
.section {
|
|
325
|
+
position: relative;
|
|
193
326
|
display: grid;
|
|
194
|
-
gap:
|
|
327
|
+
gap: var(--dees-spacing-sm);
|
|
195
328
|
align-content: start;
|
|
196
329
|
}
|
|
197
330
|
|
|
198
331
|
.item {
|
|
332
|
+
--card-accent: var(--session-normal);
|
|
333
|
+
position: relative;
|
|
199
334
|
width: 100%;
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
border:
|
|
203
|
-
border-radius: var(--dees-radius-
|
|
335
|
+
min-width: 0;
|
|
336
|
+
overflow: hidden;
|
|
337
|
+
border: 1px solid color-mix(in srgb, var(--card-accent) 24%, var(--dees-color-border-subtle));
|
|
338
|
+
border-radius: var(--dees-radius-xl);
|
|
204
339
|
corner-shape: var(--dees-corner-shape);
|
|
205
|
-
background: transparent;
|
|
340
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 90%, transparent);
|
|
206
341
|
color: var(--dees-color-text-primary);
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
342
|
+
box-shadow:
|
|
343
|
+
var(--dees-shadow-sm),
|
|
344
|
+
inset 3px 0 0 var(--card-accent);
|
|
345
|
+
box-sizing: border-box;
|
|
346
|
+
transition:
|
|
347
|
+
border-color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
348
|
+
background var(--dees-transition-fast) var(--dees-ease-standard),
|
|
349
|
+
box-shadow var(--dees-transition-fast) var(--dees-ease-standard);
|
|
211
350
|
}
|
|
212
351
|
|
|
213
352
|
.item:hover {
|
|
214
|
-
|
|
353
|
+
border-color: color-mix(in srgb, var(--card-accent) 42%, var(--dees-color-border-default));
|
|
354
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 90%, var(--card-accent) 10%);
|
|
355
|
+
box-shadow:
|
|
356
|
+
var(--dees-shadow-md),
|
|
357
|
+
inset 3px 0 0 var(--card-accent);
|
|
215
358
|
}
|
|
216
359
|
|
|
217
360
|
.item.selected {
|
|
218
|
-
|
|
219
|
-
|
|
361
|
+
border-color: var(--dees-color-border-default);
|
|
362
|
+
border-left-color: var(--dees-color-accent-primary);
|
|
363
|
+
border-left-width: 3px;
|
|
364
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 90%, transparent);
|
|
365
|
+
box-shadow: var(--dees-shadow-md);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.item.selected:hover {
|
|
369
|
+
border-color: var(--dees-color-border-default);
|
|
370
|
+
border-left-color: var(--dees-color-accent-primary);
|
|
371
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 90%, transparent);
|
|
372
|
+
box-shadow: var(--dees-shadow-md);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
.item.selected .titleText {
|
|
376
|
+
font-weight: 700;
|
|
220
377
|
}
|
|
221
378
|
|
|
222
379
|
.item.dragging {
|
|
223
|
-
|
|
380
|
+
position: fixed;
|
|
381
|
+
inset: 0 auto auto 0;
|
|
382
|
+
width: var(--drag-preview-width);
|
|
383
|
+
height: var(--drag-preview-height);
|
|
384
|
+
max-width: none;
|
|
385
|
+
margin: 0;
|
|
386
|
+
padding: 0;
|
|
387
|
+
opacity: 0.96;
|
|
388
|
+
pointer-events: none;
|
|
389
|
+
transform: translate3d(var(--drag-preview-x), var(--drag-preview-y), 0);
|
|
390
|
+
box-shadow: var(--dees-shadow-xl);
|
|
224
391
|
}
|
|
225
392
|
|
|
226
|
-
.
|
|
393
|
+
.item.state-working {
|
|
394
|
+
--card-accent: var(--session-working);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
@keyframes workingDotPulse {
|
|
398
|
+
0%, 100% {
|
|
399
|
+
transform: scale(0.92);
|
|
400
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--session-working) 14%, transparent);
|
|
401
|
+
}
|
|
402
|
+
50% {
|
|
403
|
+
transform: scale(1.08);
|
|
404
|
+
box-shadow: 0 0 0 6px color-mix(in srgb, var(--session-working) 3%, transparent);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.item.state-working .itemHeader .stateDot {
|
|
409
|
+
animation: workingDotPulse 2.4s ease-in-out infinite;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
.item.state-finished {
|
|
413
|
+
--card-accent: var(--session-finished);
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.item.state-attention {
|
|
417
|
+
--card-accent: var(--session-attention);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.item.state-error {
|
|
421
|
+
--card-accent: var(--session-error);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
@keyframes attentionPulse {
|
|
425
|
+
0%, 100% {
|
|
426
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 94%, var(--session-attention) 6%);
|
|
427
|
+
}
|
|
428
|
+
50% {
|
|
429
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 84%, var(--session-attention) 16%);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
.item.state-attention:not(.selected) {
|
|
434
|
+
animation: attentionPulse 1.15s ease-in-out infinite;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
.item.state-attention:not(.selected):hover {
|
|
438
|
+
animation: none;
|
|
439
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 82%, var(--session-attention) 18%);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
.itemHeader {
|
|
443
|
+
display: grid;
|
|
444
|
+
grid-template-columns: minmax(0, 1fr) 30px;
|
|
445
|
+
min-height: 46px;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.itemHeader.draggable {
|
|
449
|
+
grid-template-columns: 24px minmax(0, 1fr) 30px;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.dragHandle {
|
|
453
|
+
appearance: none;
|
|
454
|
+
display: grid;
|
|
455
|
+
place-items: center;
|
|
456
|
+
padding: 0;
|
|
457
|
+
border: 0;
|
|
458
|
+
background: transparent;
|
|
459
|
+
color: var(--dees-color-text-muted);
|
|
460
|
+
cursor: grab;
|
|
461
|
+
touch-action: none;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
.dragHandle:active {
|
|
465
|
+
cursor: grabbing;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.dragHandle:focus-visible {
|
|
469
|
+
outline: 2px solid var(--dees-color-accent-primary);
|
|
470
|
+
outline-offset: -3px;
|
|
471
|
+
border-radius: 8px;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
.itemPrimary,
|
|
475
|
+
.expandToggle {
|
|
476
|
+
appearance: none;
|
|
477
|
+
border: 0;
|
|
478
|
+
background: transparent;
|
|
479
|
+
color: inherit;
|
|
480
|
+
font-family: inherit;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
.itemPrimary {
|
|
227
484
|
display: flex;
|
|
228
|
-
|
|
485
|
+
min-width: 0;
|
|
486
|
+
align-items: center;
|
|
229
487
|
gap: var(--dees-spacing-sm);
|
|
488
|
+
padding: var(--dees-spacing-sm) var(--dees-spacing-xs) var(--dees-spacing-sm) var(--dees-spacing-md);
|
|
489
|
+
text-align: left;
|
|
490
|
+
cursor: pointer;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
.itemPrimary:focus-visible,
|
|
494
|
+
.expandToggle:focus-visible {
|
|
495
|
+
outline: 2px solid var(--dees-color-accent-primary);
|
|
496
|
+
outline-offset: -3px;
|
|
497
|
+
border-radius: 9px;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
.stateDot {
|
|
501
|
+
width: 8px;
|
|
502
|
+
height: 8px;
|
|
503
|
+
flex: 0 0 auto;
|
|
504
|
+
border-radius: 50%;
|
|
505
|
+
background: var(--card-accent);
|
|
506
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--card-accent) 15%, transparent);
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
.itemCopy {
|
|
510
|
+
min-width: 0;
|
|
511
|
+
flex: 1;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
.itemTitle {
|
|
515
|
+
display: flex;
|
|
516
|
+
min-width: 0;
|
|
517
|
+
align-items: center;
|
|
518
|
+
gap: 6px;
|
|
230
519
|
font-size: var(--dees-font-control-size-sm, 12px);
|
|
231
|
-
font-weight:
|
|
520
|
+
font-weight: 590;
|
|
232
521
|
}
|
|
233
522
|
|
|
234
523
|
.itemTitle .titleText {
|
|
@@ -240,24 +529,99 @@ let DeesHarnessSessionList = (() => {
|
|
|
240
529
|
|
|
241
530
|
.itemTitle .itemIcon {
|
|
242
531
|
flex: 0 0 auto;
|
|
243
|
-
align-self: center;
|
|
244
532
|
color: var(--dees-color-text-secondary);
|
|
245
533
|
}
|
|
246
534
|
|
|
247
535
|
.itemTime {
|
|
248
|
-
margin-
|
|
249
|
-
flex: 0 0 auto;
|
|
536
|
+
margin-top: 2px;
|
|
250
537
|
color: var(--dees-color-text-muted);
|
|
251
538
|
font-size: var(--dees-font-caption2-size, 10px);
|
|
252
539
|
}
|
|
253
540
|
|
|
541
|
+
.expandToggle {
|
|
542
|
+
display: grid;
|
|
543
|
+
place-items: center;
|
|
544
|
+
margin: 7px 7px 7px 0;
|
|
545
|
+
border-radius: 9px;
|
|
546
|
+
color: var(--dees-color-text-muted);
|
|
547
|
+
cursor: pointer;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
.expandToggle:hover {
|
|
551
|
+
background: color-mix(in srgb, var(--card-accent) 11%, transparent);
|
|
552
|
+
color: var(--dees-color-text-primary);
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.expandToggle dees-icon {
|
|
556
|
+
transition: transform var(--dees-transition-fast) var(--dees-ease-standard);
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
.item.expanded .expandToggle dees-icon {
|
|
560
|
+
transform: rotate(180deg);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.itemDetails {
|
|
564
|
+
display: grid;
|
|
565
|
+
gap: 6px;
|
|
566
|
+
margin: 0 10px 10px 28px;
|
|
567
|
+
padding: 9px 10px;
|
|
568
|
+
border-top: 1px solid color-mix(in srgb, var(--card-accent) 20%, var(--dees-color-border-subtle));
|
|
569
|
+
color: var(--dees-color-text-secondary);
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
.stateLine {
|
|
573
|
+
display: flex;
|
|
574
|
+
align-items: center;
|
|
575
|
+
gap: 6px;
|
|
576
|
+
color: var(--card-accent);
|
|
577
|
+
font-size: var(--dees-font-caption1-size, 11px);
|
|
578
|
+
font-weight: 650;
|
|
579
|
+
}
|
|
580
|
+
|
|
254
581
|
.itemPreview {
|
|
255
|
-
margin-top: 1px;
|
|
256
582
|
color: var(--dees-color-text-secondary);
|
|
257
583
|
font-size: var(--dees-font-caption1-size, 11px);
|
|
258
584
|
overflow: hidden;
|
|
259
|
-
|
|
585
|
+
display: -webkit-box;
|
|
586
|
+
-webkit-line-clamp: 2;
|
|
587
|
+
-webkit-box-orient: vertical;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.itemMeta {
|
|
591
|
+
color: var(--dees-color-text-muted);
|
|
592
|
+
font-size: var(--dees-font-caption2-size, 10px);
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
.visuallyHidden {
|
|
596
|
+
position: absolute;
|
|
597
|
+
width: 1px;
|
|
598
|
+
height: 1px;
|
|
599
|
+
padding: 0;
|
|
600
|
+
margin: -1px;
|
|
601
|
+
overflow: hidden;
|
|
602
|
+
clip: rect(0, 0, 0, 0);
|
|
260
603
|
white-space: nowrap;
|
|
604
|
+
border: 0;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
.dropPlaceholder,
|
|
608
|
+
.emptyDropZone {
|
|
609
|
+
display: grid;
|
|
610
|
+
place-items: center;
|
|
611
|
+
min-height: 46px;
|
|
612
|
+
border: 1px dashed color-mix(in srgb, var(--dees-color-accent-primary) 68%, transparent);
|
|
613
|
+
border-radius: var(--dees-radius-xl);
|
|
614
|
+
background: color-mix(in srgb, var(--dees-color-accent-primary) 8%, transparent);
|
|
615
|
+
color: var(--dees-color-accent-primary);
|
|
616
|
+
box-sizing: border-box;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
.dropPlaceholder::after,
|
|
620
|
+
.emptyDropZone::after {
|
|
621
|
+
content: 'Drop conversation here';
|
|
622
|
+
font-size: var(--dees-font-caption2-size, 10px);
|
|
623
|
+
font-weight: 650;
|
|
624
|
+
letter-spacing: 0.02em;
|
|
261
625
|
}
|
|
262
626
|
|
|
263
627
|
.emptyNote {
|
|
@@ -272,8 +636,8 @@ let DeesHarnessSessionList = (() => {
|
|
|
272
636
|
align-items: center;
|
|
273
637
|
gap: var(--dees-spacing-xs);
|
|
274
638
|
width: 100%;
|
|
275
|
-
margin
|
|
276
|
-
padding:
|
|
639
|
+
margin: var(--dees-spacing-md) 0 7px;
|
|
640
|
+
padding: var(--dees-spacing-xs) 6px;
|
|
277
641
|
border: 0;
|
|
278
642
|
border-radius: var(--dees-radius-md);
|
|
279
643
|
background: transparent;
|
|
@@ -313,15 +677,12 @@ let DeesHarnessSessionList = (() => {
|
|
|
313
677
|
}
|
|
314
678
|
|
|
315
679
|
.dropLine {
|
|
316
|
-
|
|
317
|
-
margin: 0 var(--dees-spacing-sm);
|
|
318
|
-
border-radius: 1px;
|
|
319
|
-
background: var(--dees-color-accent-primary);
|
|
680
|
+
display: none;
|
|
320
681
|
}
|
|
321
682
|
|
|
322
683
|
.newGroupRow {
|
|
323
684
|
flex: 0 0 auto;
|
|
324
|
-
padding:
|
|
685
|
+
padding: 0 var(--dees-spacing-md) var(--dees-spacing-md);
|
|
325
686
|
}
|
|
326
687
|
|
|
327
688
|
.newGroupButton {
|
|
@@ -329,10 +690,12 @@ let DeesHarnessSessionList = (() => {
|
|
|
329
690
|
align-items: center;
|
|
330
691
|
gap: var(--dees-spacing-xs);
|
|
331
692
|
width: 100%;
|
|
693
|
+
min-height: 34px;
|
|
694
|
+
justify-content: center;
|
|
332
695
|
padding: var(--dees-spacing-xs) var(--dees-spacing-sm);
|
|
333
696
|
border: 1px dashed var(--dees-color-border-default);
|
|
334
|
-
border-radius:
|
|
335
|
-
background: transparent;
|
|
697
|
+
border-radius: 11px;
|
|
698
|
+
background: color-mix(in srgb, var(--dees-color-bg-primary) 55%, transparent);
|
|
336
699
|
color: var(--dees-color-text-secondary);
|
|
337
700
|
cursor: pointer;
|
|
338
701
|
font-family: inherit;
|
|
@@ -343,6 +706,17 @@ let DeesHarnessSessionList = (() => {
|
|
|
343
706
|
border-color: var(--dees-color-accent-primary);
|
|
344
707
|
color: var(--dees-color-text-primary);
|
|
345
708
|
}
|
|
709
|
+
|
|
710
|
+
@media (prefers-reduced-motion: reduce) {
|
|
711
|
+
.item,
|
|
712
|
+
.item.state-attention,
|
|
713
|
+
.item.state-working .itemHeader .stateDot,
|
|
714
|
+
.scrollShadow,
|
|
715
|
+
.expandToggle dees-icon {
|
|
716
|
+
animation: none;
|
|
717
|
+
transition: none;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
346
720
|
`,
|
|
347
721
|
];
|
|
348
722
|
get sessionsById() {
|
|
@@ -356,12 +730,22 @@ let DeesHarnessSessionList = (() => {
|
|
|
356
730
|
}
|
|
357
731
|
return ids;
|
|
358
732
|
}
|
|
359
|
-
/**
|
|
733
|
+
/** Pinned entries first, followed by explicitly ordered sortable sessions. */
|
|
360
734
|
get ungroupedSessions() {
|
|
361
735
|
const grouped = this.groupedSessionIds;
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
736
|
+
const available = this.sessions.filter((session) => !grouped.has(session.id));
|
|
737
|
+
const pinned = available.filter((session) => session.draggable === false);
|
|
738
|
+
const sortableById = new Map(available.filter((session) => session.draggable !== false).map((session) => [session.id, session]));
|
|
739
|
+
const ordered = [];
|
|
740
|
+
for (const sessionId of this.ungroupedSessionIds) {
|
|
741
|
+
const session = sortableById.get(sessionId);
|
|
742
|
+
if (!session)
|
|
743
|
+
continue;
|
|
744
|
+
ordered.push(session);
|
|
745
|
+
sortableById.delete(sessionId);
|
|
746
|
+
}
|
|
747
|
+
const newSessions = [...sortableById.values()].sort((left, right) => (right.updatedAt ?? right.createdAt ?? 0) - (left.updatedAt ?? left.createdAt ?? 0));
|
|
748
|
+
return [...pinned, ...ordered, ...newSessions];
|
|
365
749
|
}
|
|
366
750
|
get filteredSessions() {
|
|
367
751
|
const query = this.search.trim().toLowerCase();
|
|
@@ -373,10 +757,56 @@ let DeesHarnessSessionList = (() => {
|
|
|
373
757
|
focusSearch() {
|
|
374
758
|
this.shadowRoot?.querySelector('.searchRow input')?.focus();
|
|
375
759
|
}
|
|
760
|
+
updated(changedProperties) {
|
|
761
|
+
super.updated(changedProperties);
|
|
762
|
+
this.observeScrollGeometry();
|
|
763
|
+
this.syncScrollShadowState();
|
|
764
|
+
this.restoreKeyboardMoveFocus();
|
|
765
|
+
if (this.pointerDragGesture
|
|
766
|
+
&& (!this.pointerDragGesture.source.isConnected || !this.pointerDragGesture.handle.isConnected)) {
|
|
767
|
+
this.finishPointerDrag(false);
|
|
768
|
+
}
|
|
769
|
+
if (!changedProperties.has('sessions'))
|
|
770
|
+
return;
|
|
771
|
+
const previousSessions = changedProperties.get('sessions');
|
|
772
|
+
const previousById = new Map((previousSessions ?? []).map((session) => [session.id, session]));
|
|
773
|
+
const knownIds = new Set(this.sessions.map((session) => session.id));
|
|
774
|
+
if (this.pointerDragGesture && !knownIds.has(this.pointerDragGesture.sessionId)) {
|
|
775
|
+
this.finishPointerDrag(false);
|
|
776
|
+
}
|
|
777
|
+
const nextExpanded = new Set([...this.expandedSessionIds].filter((sessionId) => knownIds.has(sessionId)));
|
|
778
|
+
for (const session of this.sessions) {
|
|
779
|
+
const previous = previousById.get(session.id);
|
|
780
|
+
if (previous && previous.working !== true && session.working === true) {
|
|
781
|
+
nextExpanded.add(session.id);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
if (nextExpanded.size !== this.expandedSessionIds.size
|
|
785
|
+
|| [...nextExpanded].some((sessionId) => !this.expandedSessionIds.has(sessionId))) {
|
|
786
|
+
this.expandedSessionIds = nextExpanded;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
async connectedCallback() {
|
|
790
|
+
await super.connectedCallback();
|
|
791
|
+
await this.updateComplete;
|
|
792
|
+
if (!this.isConnected)
|
|
793
|
+
return;
|
|
794
|
+
this.observeScrollGeometry();
|
|
795
|
+
this.syncScrollShadowState();
|
|
796
|
+
}
|
|
797
|
+
async disconnectedCallback() {
|
|
798
|
+
this.finishPointerDrag(false);
|
|
799
|
+
this.scrollResizeObserver?.disconnect();
|
|
800
|
+
this.scrollResizeObserver = undefined;
|
|
801
|
+
this.observedScrollContainer = undefined;
|
|
802
|
+
this.observedScrollContent = undefined;
|
|
803
|
+
await super.disconnectedCallback();
|
|
804
|
+
}
|
|
376
805
|
render() {
|
|
377
806
|
const groupingActive = this.enableGrouping && !this.search.trim();
|
|
378
807
|
return html `
|
|
379
808
|
<div class="searchRow">
|
|
809
|
+
<dees-icon class="searchIcon" icon="lucide:Search" iconSize="13"></dees-icon>
|
|
380
810
|
<input
|
|
381
811
|
placeholder="Search conversations"
|
|
382
812
|
.value=${this.search}
|
|
@@ -385,13 +815,23 @@ let DeesHarnessSessionList = (() => {
|
|
|
385
815
|
}}
|
|
386
816
|
/>
|
|
387
817
|
</div>
|
|
388
|
-
<div class="
|
|
389
|
-
${this.
|
|
818
|
+
<div class="listFrame">
|
|
819
|
+
<div class="scrollShadow top ${this.topScrollShadowVisible ? 'visible' : ''}"></div>
|
|
820
|
+
<div
|
|
821
|
+
class="list"
|
|
822
|
+
@scroll=${this.syncScrollShadowState}
|
|
823
|
+
>
|
|
824
|
+
<div class="listContent">
|
|
825
|
+
${this.loading
|
|
390
826
|
? html `<div class="emptyNote">Loading conversations…</div>`
|
|
391
827
|
: groupingActive
|
|
392
828
|
? this.renderGroupedList()
|
|
393
829
|
: this.renderFlatList()}
|
|
830
|
+
</div>
|
|
831
|
+
</div>
|
|
832
|
+
<div class="scrollShadow bottom ${this.bottomScrollShadowVisible ? 'visible' : ''}"></div>
|
|
394
833
|
</div>
|
|
834
|
+
<div class="visuallyHidden" aria-live="polite">${this.moveAnnouncement}</div>
|
|
395
835
|
${groupingActive
|
|
396
836
|
? html `
|
|
397
837
|
<div class="newGroupRow">
|
|
@@ -420,7 +860,11 @@ let DeesHarnessSessionList = (() => {
|
|
|
420
860
|
${this.sessions.length ? 'No conversations match this search.' : this.emptyText}
|
|
421
861
|
</div>`;
|
|
422
862
|
}
|
|
423
|
-
return html
|
|
863
|
+
return html `
|
|
864
|
+
<div class="section">
|
|
865
|
+
${repeat(sessions, (session) => session.id, (session) => this.renderItem(session, null, -1))}
|
|
866
|
+
</div>
|
|
867
|
+
`;
|
|
424
868
|
}
|
|
425
869
|
renderGroupedList() {
|
|
426
870
|
const byId = this.sessionsById;
|
|
@@ -434,10 +878,15 @@ let DeesHarnessSessionList = (() => {
|
|
|
434
878
|
.map((id) => byId.get(id))
|
|
435
879
|
.filter((session) => session !== undefined);
|
|
436
880
|
const collapsed = this.collapsedGroupIds.has(group.id);
|
|
437
|
-
const isHeaderDrop = this.dropSlot?.groupId === group.id
|
|
881
|
+
const isHeaderDrop = this.dropSlot?.groupId === group.id
|
|
882
|
+
&& this.dropSlot.index === this.sortableSessions(members).length
|
|
883
|
+
&& collapsed;
|
|
438
884
|
return html `
|
|
439
885
|
<button
|
|
440
886
|
class="groupHeader ${collapsed ? 'collapsed' : ''} ${isHeaderDrop ? 'dropTarget' : ''}"
|
|
887
|
+
data-drop-group-id=${group.id}
|
|
888
|
+
data-drop-index=${this.sortableSessions(members).length}
|
|
889
|
+
data-drop-kind="slot"
|
|
441
890
|
type="button"
|
|
442
891
|
@click=${() => this.toggleGroupCollapsed(group.id)}
|
|
443
892
|
@contextmenu=${(event) => {
|
|
@@ -450,8 +899,6 @@ let DeesHarnessSessionList = (() => {
|
|
|
450
899
|
};
|
|
451
900
|
this.dispatchEvent(new CustomEvent('harness-group-context', { detail, bubbles: true, composed: true }));
|
|
452
901
|
}}
|
|
453
|
-
@dragover=${(event) => this.handleDragOverSlot(event, group.id, members.length)}
|
|
454
|
-
@drop=${(event) => this.handleDrop(event, group.id, members.length)}
|
|
455
902
|
>
|
|
456
903
|
<dees-icon class="chevron" icon="lucide:ChevronDown" iconSize="12"></dees-icon>
|
|
457
904
|
<span>${group.name}</span>
|
|
@@ -462,14 +909,15 @@ let DeesHarnessSessionList = (() => {
|
|
|
462
909
|
: this.renderSection(members, group.id)}
|
|
463
910
|
`;
|
|
464
911
|
})}
|
|
465
|
-
${this.groups.length && ungrouped.length
|
|
912
|
+
${this.groups.length && (ungrouped.length || this.draggingSessionId)
|
|
466
913
|
? html `
|
|
467
914
|
<button
|
|
468
915
|
class="groupHeader"
|
|
916
|
+
data-drop-group-id=""
|
|
917
|
+
data-drop-index="0"
|
|
918
|
+
data-drop-kind="slot"
|
|
469
919
|
type="button"
|
|
470
920
|
tabindex="-1"
|
|
471
|
-
@dragover=${(event) => this.handleDragOverSlot(event, null, 0)}
|
|
472
|
-
@drop=${(event) => this.handleDrop(event, null, 0)}
|
|
473
921
|
>
|
|
474
922
|
<span>Ungrouped</span>
|
|
475
923
|
<span class="groupCount">${ungrouped.length}</span>
|
|
@@ -481,32 +929,83 @@ let DeesHarnessSessionList = (() => {
|
|
|
481
929
|
}
|
|
482
930
|
renderSection(sessions, groupId) {
|
|
483
931
|
const slot = this.dropSlot;
|
|
932
|
+
const entries = [];
|
|
933
|
+
let logicalIndex = 0;
|
|
934
|
+
for (const session of sessions) {
|
|
935
|
+
const isDragging = session.id === this.draggingSessionId;
|
|
936
|
+
const sortable = session.draggable !== false;
|
|
937
|
+
if (slot
|
|
938
|
+
&& slot.groupId === groupId
|
|
939
|
+
&& slot.index === logicalIndex
|
|
940
|
+
&& !isDragging
|
|
941
|
+
&& sortable) {
|
|
942
|
+
entries.push({ type: 'placeholder', key: `placeholder:${groupId ?? 'ungrouped'}` });
|
|
943
|
+
}
|
|
944
|
+
entries.push({
|
|
945
|
+
type: 'session',
|
|
946
|
+
key: `session:${session.id}`,
|
|
947
|
+
session,
|
|
948
|
+
logicalIndex: sortable ? logicalIndex : -1,
|
|
949
|
+
});
|
|
950
|
+
if (sortable && !isDragging)
|
|
951
|
+
logicalIndex += 1;
|
|
952
|
+
}
|
|
953
|
+
if (slot && slot.groupId === groupId && slot.index === logicalIndex) {
|
|
954
|
+
entries.push({ type: 'placeholder', key: `placeholder:${groupId ?? 'ungrouped'}` });
|
|
955
|
+
}
|
|
956
|
+
const hasPlaceholder = entries.some((entry) => entry.type === 'placeholder');
|
|
484
957
|
return html `
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
?
|
|
488
|
-
:
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
958
|
+
<div class="section" data-group-id=${groupId ?? ''}>
|
|
959
|
+
${repeat(entries, (entry) => entry.key, (entry) => entry.type === 'placeholder'
|
|
960
|
+
? this.renderDropPlaceholder(groupId, slot?.index ?? 0)
|
|
961
|
+
: this.renderItem(entry.session, groupId, entry.logicalIndex))}
|
|
962
|
+
${this.draggingSessionId && !hasPlaceholder && this.sortableSessions(sessions).length === 0
|
|
963
|
+
? html `
|
|
964
|
+
<div
|
|
965
|
+
class="emptyDropZone"
|
|
966
|
+
data-drop-group-id=${groupId ?? ''}
|
|
967
|
+
data-drop-index="0"
|
|
968
|
+
data-drop-kind="slot"
|
|
969
|
+
></div>
|
|
970
|
+
`
|
|
493
971
|
: ''}
|
|
972
|
+
</div>
|
|
973
|
+
`;
|
|
974
|
+
}
|
|
975
|
+
renderDropPlaceholder(groupId, index) {
|
|
976
|
+
return html `
|
|
977
|
+
<div
|
|
978
|
+
class="dropPlaceholder"
|
|
979
|
+
data-drop-group-id=${groupId ?? ''}
|
|
980
|
+
data-drop-index=${index}
|
|
981
|
+
data-drop-kind="slot"
|
|
982
|
+
style=${`height: ${Math.max(46, this.draggedItemHeight)}px`}
|
|
983
|
+
></div>
|
|
494
984
|
`;
|
|
495
985
|
}
|
|
496
986
|
renderItem(session, groupId, index) {
|
|
497
|
-
const draggable = this.enableGrouping
|
|
987
|
+
const draggable = (this.enableGrouping
|
|
988
|
+
&& session.draggable !== false
|
|
989
|
+
&& index >= 0);
|
|
990
|
+
const expanded = this.expandedSessionIds.has(session.id);
|
|
991
|
+
const state = session.state ?? 'normal';
|
|
992
|
+
const detailsId = `session-details-${session.id}`;
|
|
993
|
+
const dropIndex = index < 0 ? 0 : index;
|
|
498
994
|
return html `
|
|
499
|
-
<
|
|
500
|
-
class="item ${session.id === this.selectedSessionId ? 'selected' : ''} ${this.draggingSessionId === session.id ? 'dragging' : ''}"
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
@
|
|
506
|
-
if (event
|
|
507
|
-
|
|
995
|
+
<article
|
|
996
|
+
class="item state-${state} ${expanded ? 'expanded' : ''} ${session.id === this.selectedSessionId ? 'selected' : ''} ${this.draggingSessionId === session.id ? 'dragging' : ''}"
|
|
997
|
+
data-session-id=${session.id}
|
|
998
|
+
data-drop-group-id=${groupId ?? ''}
|
|
999
|
+
data-drop-index=${dropIndex}
|
|
1000
|
+
data-drop-kind=${index < 0 ? 'slot' : 'card'}
|
|
1001
|
+
@dblclick=${(event) => {
|
|
1002
|
+
if (this.eventTargetsExpandToggle(event) || this.eventTargetsDragHandle(event))
|
|
1003
|
+
return;
|
|
1004
|
+
this.emit('harness-session-open', session);
|
|
508
1005
|
}}
|
|
509
1006
|
@contextmenu=${(event) => {
|
|
1007
|
+
if (this.eventTargetsExpandToggle(event))
|
|
1008
|
+
return;
|
|
510
1009
|
event.preventDefault();
|
|
511
1010
|
const detail = {
|
|
512
1011
|
session,
|
|
@@ -516,47 +1015,109 @@ let DeesHarnessSessionList = (() => {
|
|
|
516
1015
|
};
|
|
517
1016
|
this.dispatchEvent(new CustomEvent('harness-session-context', { detail, bubbles: true, composed: true }));
|
|
518
1017
|
}}
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
1018
|
+
>
|
|
1019
|
+
<div class="itemHeader ${draggable ? 'draggable' : ''}">
|
|
1020
|
+
${draggable
|
|
1021
|
+
? html `
|
|
1022
|
+
<button
|
|
1023
|
+
class="dragHandle"
|
|
1024
|
+
type="button"
|
|
1025
|
+
title="Drag to reorder; use arrow, Home, or End keys for keyboard reordering"
|
|
1026
|
+
aria-label=${`Reorder ${session.title || session.id}`}
|
|
1027
|
+
aria-keyshortcuts="ArrowUp ArrowDown Home End"
|
|
1028
|
+
@pointerdown=${(event) => {
|
|
1029
|
+
this.handlePointerDown(event, session, groupId, index);
|
|
1030
|
+
}}
|
|
1031
|
+
@pointermove=${this.handlePointerMove}
|
|
1032
|
+
@pointerup=${this.handlePointerUp}
|
|
1033
|
+
@pointercancel=${this.handlePointerCancel}
|
|
1034
|
+
@lostpointercapture=${this.handleLostPointerCapture}
|
|
1035
|
+
@keydown=${(event) => {
|
|
1036
|
+
this.handleKeyboardMove(event, session, groupId);
|
|
1037
|
+
}}
|
|
1038
|
+
>
|
|
1039
|
+
<dees-icon icon="lucide:GripVertical" iconSize="14"></dees-icon>
|
|
1040
|
+
</button>
|
|
1041
|
+
`
|
|
1042
|
+
: ''}
|
|
1043
|
+
<button
|
|
1044
|
+
class="itemPrimary"
|
|
1045
|
+
type="button"
|
|
1046
|
+
aria-current=${session.id === this.selectedSessionId ? 'true' : 'false'}
|
|
1047
|
+
@click=${() => this.emit('harness-session-select', session)}
|
|
1048
|
+
@keydown=${(event) => {
|
|
1049
|
+
if (event.key !== 'Enter')
|
|
533
1050
|
return;
|
|
534
1051
|
event.preventDefault();
|
|
535
|
-
|
|
536
|
-
const before = event.clientY < rect.top + rect.height / 2;
|
|
537
|
-
this.setDropSlot(groupId, before ? index : index + 1);
|
|
538
|
-
}}
|
|
539
|
-
@drop=${(event) => {
|
|
540
|
-
if (index < 0)
|
|
541
|
-
return;
|
|
542
|
-
const rect = event.currentTarget.getBoundingClientRect();
|
|
543
|
-
const before = event.clientY < rect.top + rect.height / 2;
|
|
544
|
-
this.handleDrop(event, groupId, before ? index : index + 1);
|
|
1052
|
+
this.emit('harness-session-open', session);
|
|
545
1053
|
}}
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
1054
|
+
>
|
|
1055
|
+
<span class="stateDot"></span>
|
|
1056
|
+
<span class="itemCopy">
|
|
1057
|
+
<span class="itemTitle">
|
|
1058
|
+
${session.icon
|
|
1059
|
+
? html `<dees-icon class="itemIcon" icon=${session.icon} iconSize="13"></dees-icon>`
|
|
550
1060
|
: ''}
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
1061
|
+
<span class="titleText">${session.title || session.id}</span>
|
|
1062
|
+
</span>
|
|
1063
|
+
<span class="itemTime">${harnessFormatRelativeTime(session.updatedAt ?? session.createdAt)}</span>
|
|
1064
|
+
<span class="visuallyHidden">Status: ${this.sessionStateLabel(state)}</span>
|
|
1065
|
+
</span>
|
|
1066
|
+
</button>
|
|
1067
|
+
<button
|
|
1068
|
+
class="expandToggle"
|
|
1069
|
+
type="button"
|
|
1070
|
+
aria-expanded=${expanded ? 'true' : 'false'}
|
|
1071
|
+
aria-controls=${detailsId}
|
|
1072
|
+
title=${expanded ? 'Collapse conversation card' : 'Expand conversation card'}
|
|
1073
|
+
@click=${(event) => {
|
|
1074
|
+
event.stopPropagation();
|
|
1075
|
+
this.toggleSessionExpanded(session.id);
|
|
1076
|
+
}}
|
|
1077
|
+
>
|
|
1078
|
+
<dees-icon icon="lucide:ChevronDown" iconSize="15"></dees-icon>
|
|
1079
|
+
</button>
|
|
1080
|
+
</div>
|
|
1081
|
+
${expanded
|
|
1082
|
+
? html `
|
|
1083
|
+
<div class="itemDetails" id=${detailsId}>
|
|
1084
|
+
<div class="stateLine">
|
|
1085
|
+
<span class="stateDot"></span>
|
|
1086
|
+
<span>${this.sessionStateLabel(state)}</span>
|
|
1087
|
+
</div>
|
|
1088
|
+
${session.preview ? html `<div class="itemPreview">${session.preview}</div>` : ''}
|
|
1089
|
+
<div class="itemMeta">
|
|
1090
|
+
${session.messageCount ? `${session.messageCount} messages · ` : ''}${session.id}
|
|
1091
|
+
</div>
|
|
1092
|
+
</div>
|
|
1093
|
+
`
|
|
556
1094
|
: ''}
|
|
557
|
-
</
|
|
1095
|
+
</article>
|
|
558
1096
|
`;
|
|
559
1097
|
}
|
|
1098
|
+
eventTargetsExpandToggle(event) {
|
|
1099
|
+
return event.composedPath().some((target) => target instanceof HTMLElement && target.classList.contains('expandToggle'));
|
|
1100
|
+
}
|
|
1101
|
+
eventTargetsDragHandle(event) {
|
|
1102
|
+
return event.composedPath().some((target) => target instanceof HTMLElement && target.classList.contains('dragHandle'));
|
|
1103
|
+
}
|
|
1104
|
+
sessionStateLabel(state) {
|
|
1105
|
+
switch (state) {
|
|
1106
|
+
case 'working': return 'Working';
|
|
1107
|
+
case 'finished': return 'Finished';
|
|
1108
|
+
case 'attention': return 'Needs attention';
|
|
1109
|
+
case 'error': return 'Error';
|
|
1110
|
+
default: return 'Idle';
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
toggleSessionExpanded(sessionIdArg) {
|
|
1114
|
+
const next = new Set(this.expandedSessionIds);
|
|
1115
|
+
if (next.has(sessionIdArg))
|
|
1116
|
+
next.delete(sessionIdArg);
|
|
1117
|
+
else
|
|
1118
|
+
next.add(sessionIdArg);
|
|
1119
|
+
this.expandedSessionIds = next;
|
|
1120
|
+
}
|
|
560
1121
|
toggleGroupCollapsed(groupIdArg) {
|
|
561
1122
|
const next = new Set(this.collapsedGroupIds);
|
|
562
1123
|
if (next.has(groupIdArg)) {
|
|
@@ -567,40 +1128,459 @@ let DeesHarnessSessionList = (() => {
|
|
|
567
1128
|
}
|
|
568
1129
|
this.collapsedGroupIds = next;
|
|
569
1130
|
}
|
|
1131
|
+
sortableSessions(sessionsArg, excludeDraggingArg = true) {
|
|
1132
|
+
return sessionsArg.filter((session) => (session.draggable !== false
|
|
1133
|
+
&& (!excludeDraggingArg || session.id !== this.draggingSessionId)));
|
|
1134
|
+
}
|
|
1135
|
+
sessionsForGroup(groupIdArg) {
|
|
1136
|
+
if (groupIdArg === null)
|
|
1137
|
+
return this.ungroupedSessions;
|
|
1138
|
+
const group = this.groups.find((candidate) => candidate.id === groupIdArg);
|
|
1139
|
+
if (!group)
|
|
1140
|
+
return [];
|
|
1141
|
+
const byId = this.sessionsById;
|
|
1142
|
+
return group.sessionIds
|
|
1143
|
+
.map((sessionId) => byId.get(sessionId))
|
|
1144
|
+
.filter((session) => session !== undefined);
|
|
1145
|
+
}
|
|
1146
|
+
handlePointerDown(eventArg, sessionArg, groupIdArg, logicalIndexArg) {
|
|
1147
|
+
if (this.pointerDragGesture
|
|
1148
|
+
|| eventArg.button !== 0
|
|
1149
|
+
|| !eventArg.isPrimary
|
|
1150
|
+
|| logicalIndexArg < 0)
|
|
1151
|
+
return;
|
|
1152
|
+
const handle = eventArg.currentTarget;
|
|
1153
|
+
const source = handle.closest('.item');
|
|
1154
|
+
if (!source)
|
|
1155
|
+
return;
|
|
1156
|
+
const sourceRect = source.getBoundingClientRect();
|
|
1157
|
+
this.pointerDragGesture = {
|
|
1158
|
+
pointerId: eventArg.pointerId,
|
|
1159
|
+
handle,
|
|
1160
|
+
source,
|
|
1161
|
+
sessionId: sessionArg.id,
|
|
1162
|
+
sourceGroupId: groupIdArg,
|
|
1163
|
+
sourceLogicalIndex: logicalIndexArg,
|
|
1164
|
+
startClientX: eventArg.clientX,
|
|
1165
|
+
startClientY: eventArg.clientY,
|
|
1166
|
+
grabOffsetX: eventArg.clientX - sourceRect.left,
|
|
1167
|
+
grabOffsetY: eventArg.clientY - sourceRect.top,
|
|
1168
|
+
phase: 'pending',
|
|
1169
|
+
};
|
|
1170
|
+
window.addEventListener('keydown', this.handleDragKeyDown, true);
|
|
1171
|
+
window.addEventListener('blur', this.handleDragWindowBlur);
|
|
1172
|
+
try {
|
|
1173
|
+
handle.setPointerCapture(eventArg.pointerId);
|
|
1174
|
+
}
|
|
1175
|
+
catch {
|
|
1176
|
+
this.finishPointerDrag(false);
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1179
|
+
handlePointerMove = (eventArg) => {
|
|
1180
|
+
const gesture = this.pointerDragGesture;
|
|
1181
|
+
if (!gesture || eventArg.pointerId !== gesture.pointerId)
|
|
1182
|
+
return;
|
|
1183
|
+
if (!gesture.source.isConnected || !gesture.handle.isConnected) {
|
|
1184
|
+
this.finishPointerDrag(false);
|
|
1185
|
+
return;
|
|
1186
|
+
}
|
|
1187
|
+
if (gesture.phase === 'pending'
|
|
1188
|
+
&& Math.hypot(eventArg.clientX - gesture.startClientX, eventArg.clientY - gesture.startClientY) < dragThresholdPixels)
|
|
1189
|
+
return;
|
|
1190
|
+
if (gesture.phase === 'pending' && !this.startPointerDrag(eventArg, gesture))
|
|
1191
|
+
return;
|
|
1192
|
+
eventArg.preventDefault();
|
|
1193
|
+
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
1194
|
+
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1195
|
+
this.dragAutoScrollClientY = eventArg.clientY;
|
|
1196
|
+
this.updateDragAutoScrollVelocity();
|
|
1197
|
+
this.updateDropSlotFromPointer();
|
|
1198
|
+
};
|
|
1199
|
+
handlePointerUp = (eventArg) => {
|
|
1200
|
+
const gesture = this.pointerDragGesture;
|
|
1201
|
+
if (!gesture || eventArg.pointerId !== gesture.pointerId)
|
|
1202
|
+
return;
|
|
1203
|
+
if (gesture.phase === 'active') {
|
|
1204
|
+
this.dragAutoScrollClientX = eventArg.clientX;
|
|
1205
|
+
this.dragAutoScrollClientY = eventArg.clientY;
|
|
1206
|
+
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gesture);
|
|
1207
|
+
this.updateDropSlotFromPointer();
|
|
1208
|
+
this.finishPointerDrag(true);
|
|
1209
|
+
return;
|
|
1210
|
+
}
|
|
1211
|
+
this.finishPointerDrag(false);
|
|
1212
|
+
};
|
|
1213
|
+
handlePointerCancel = (eventArg) => {
|
|
1214
|
+
if (eventArg.pointerId === this.pointerDragGesture?.pointerId)
|
|
1215
|
+
this.finishPointerDrag(false);
|
|
1216
|
+
};
|
|
1217
|
+
handleLostPointerCapture = (eventArg) => {
|
|
1218
|
+
if (eventArg.pointerId === this.pointerDragGesture?.pointerId)
|
|
1219
|
+
this.finishPointerDrag(false);
|
|
1220
|
+
};
|
|
1221
|
+
handleDragKeyDown = (eventArg) => {
|
|
1222
|
+
if (eventArg.key !== 'Escape' || !this.pointerDragGesture)
|
|
1223
|
+
return;
|
|
1224
|
+
eventArg.preventDefault();
|
|
1225
|
+
eventArg.stopPropagation();
|
|
1226
|
+
this.finishPointerDrag(false);
|
|
1227
|
+
};
|
|
1228
|
+
handleDragWindowBlur = () => {
|
|
1229
|
+
this.finishPointerDrag(false);
|
|
1230
|
+
};
|
|
1231
|
+
startPointerDrag(eventArg, gestureArg) {
|
|
1232
|
+
const sourceRect = gestureArg.source.getBoundingClientRect();
|
|
1233
|
+
gestureArg.source.classList.add('dragging');
|
|
1234
|
+
gestureArg.source.style.setProperty('--drag-preview-width', `${sourceRect.width}px`);
|
|
1235
|
+
gestureArg.source.style.setProperty('--drag-preview-height', `${sourceRect.height}px`);
|
|
1236
|
+
this.moveDragPreview(eventArg.clientX, eventArg.clientY, gestureArg);
|
|
1237
|
+
gestureArg.source.setAttribute('popover', 'manual');
|
|
1238
|
+
try {
|
|
1239
|
+
gestureArg.source.showPopover();
|
|
1240
|
+
}
|
|
1241
|
+
catch {
|
|
1242
|
+
this.finishPointerDrag(false);
|
|
1243
|
+
return false;
|
|
1244
|
+
}
|
|
1245
|
+
gestureArg.phase = 'active';
|
|
1246
|
+
this.reflowGeneration += 1;
|
|
1247
|
+
this.cancelReflowAnimations();
|
|
1248
|
+
this.draggedItemHeight = Math.ceil(sourceRect.height);
|
|
1249
|
+
this.draggingSessionId = gestureArg.sessionId;
|
|
1250
|
+
const remainingCount = this.sortableSessions(this.sessionsForGroup(gestureArg.sourceGroupId)).length;
|
|
1251
|
+
this.dropSlot = {
|
|
1252
|
+
groupId: gestureArg.sourceGroupId,
|
|
1253
|
+
index: Math.min(gestureArg.sourceLogicalIndex, remainingCount),
|
|
1254
|
+
};
|
|
1255
|
+
return true;
|
|
1256
|
+
}
|
|
1257
|
+
moveDragPreview(clientXArg, clientYArg, gestureArg) {
|
|
1258
|
+
gestureArg.source.style.setProperty('--drag-preview-x', `${clientXArg - gestureArg.grabOffsetX}px`);
|
|
1259
|
+
gestureArg.source.style.setProperty('--drag-preview-y', `${clientYArg - gestureArg.grabOffsetY}px`);
|
|
1260
|
+
}
|
|
570
1261
|
setDropSlot(groupIdArg, indexArg) {
|
|
571
1262
|
const current = this.dropSlot;
|
|
572
1263
|
if (current && current.groupId === groupIdArg && current.index === indexArg)
|
|
573
1264
|
return;
|
|
1265
|
+
const previousRects = this.captureCardRects();
|
|
1266
|
+
const generation = ++this.reflowGeneration;
|
|
574
1267
|
this.dropSlot = { groupId: groupIdArg, index: indexArg };
|
|
1268
|
+
void this.animateCardReflow(previousRects, generation);
|
|
575
1269
|
}
|
|
576
|
-
|
|
577
|
-
if (!this.
|
|
1270
|
+
clearDropSlot() {
|
|
1271
|
+
if (!this.dropSlot)
|
|
578
1272
|
return;
|
|
579
|
-
|
|
580
|
-
this.
|
|
581
|
-
}
|
|
582
|
-
handleDrop(event, groupIdArg, indexArg) {
|
|
583
|
-
event.preventDefault();
|
|
584
|
-
event.stopPropagation();
|
|
585
|
-
const sessionId = this.draggingSessionId || event.dataTransfer?.getData('text/plain') || '';
|
|
586
|
-
this.draggingSessionId = '';
|
|
1273
|
+
const previousRects = this.captureCardRects();
|
|
1274
|
+
const generation = ++this.reflowGeneration;
|
|
587
1275
|
this.dropSlot = undefined;
|
|
588
|
-
|
|
1276
|
+
void this.animateCardReflow(previousRects, generation);
|
|
1277
|
+
}
|
|
1278
|
+
updateDragAutoScrollVelocity() {
|
|
1279
|
+
const container = this.scrollContainer;
|
|
1280
|
+
if (!container || !this.draggingSessionId)
|
|
1281
|
+
return;
|
|
1282
|
+
const rect = container.getBoundingClientRect();
|
|
1283
|
+
if (this.dragAutoScrollClientX < rect.left || this.dragAutoScrollClientX > rect.right) {
|
|
1284
|
+
this.stopDragAutoScroll();
|
|
1285
|
+
return;
|
|
1286
|
+
}
|
|
1287
|
+
const edgeSize = Math.min(64, Math.max(32, rect.height * 0.25));
|
|
1288
|
+
const topDepth = Math.max(0, Math.min(1, (rect.top + edgeSize - this.dragAutoScrollClientY) / edgeSize));
|
|
1289
|
+
const bottomDepth = Math.max(0, Math.min(1, (this.dragAutoScrollClientY - (rect.bottom - edgeSize)) / edgeSize));
|
|
1290
|
+
this.dragAutoScrollVelocity = bottomDepth > 0
|
|
1291
|
+
? dragAutoScrollMaxPixelsPerSecond * bottomDepth * bottomDepth
|
|
1292
|
+
: topDepth > 0
|
|
1293
|
+
? -dragAutoScrollMaxPixelsPerSecond * topDepth * topDepth
|
|
1294
|
+
: 0;
|
|
1295
|
+
if (this.dragAutoScrollVelocity === 0) {
|
|
1296
|
+
this.stopDragAutoScroll();
|
|
1297
|
+
return;
|
|
1298
|
+
}
|
|
1299
|
+
if (this.dragAutoScrollFrame === undefined) {
|
|
1300
|
+
this.dragAutoScrollLastFrame = performance.now();
|
|
1301
|
+
this.dragAutoScrollFrame = requestAnimationFrame(this.runDragAutoScroll);
|
|
1302
|
+
}
|
|
1303
|
+
}
|
|
1304
|
+
runDragAutoScroll = (timestampArg) => {
|
|
1305
|
+
this.dragAutoScrollFrame = undefined;
|
|
1306
|
+
const container = this.scrollContainer;
|
|
1307
|
+
if (!container || !this.draggingSessionId || this.dragAutoScrollVelocity === 0)
|
|
1308
|
+
return;
|
|
1309
|
+
const elapsedMs = Math.min(34, Math.max(0, timestampArg - this.dragAutoScrollLastFrame));
|
|
1310
|
+
this.dragAutoScrollLastFrame = timestampArg;
|
|
1311
|
+
const previousScrollTop = container.scrollTop;
|
|
1312
|
+
container.scrollTop += this.dragAutoScrollVelocity * elapsedMs / 1000;
|
|
1313
|
+
this.syncScrollShadowState();
|
|
1314
|
+
const atScrollBoundary = this.dragAutoScrollVelocity < 0
|
|
1315
|
+
? container.scrollTop <= 0
|
|
1316
|
+
: container.scrollTop + container.clientHeight >= container.scrollHeight - 1;
|
|
1317
|
+
if (container.scrollTop === previousScrollTop && atScrollBoundary) {
|
|
1318
|
+
this.stopDragAutoScroll();
|
|
1319
|
+
return;
|
|
1320
|
+
}
|
|
1321
|
+
this.updateDropSlotFromPointer();
|
|
1322
|
+
this.dragAutoScrollFrame = requestAnimationFrame(this.runDragAutoScroll);
|
|
1323
|
+
};
|
|
1324
|
+
updateDropSlotFromPointer() {
|
|
1325
|
+
const pointerX = this.dragAutoScrollClientX;
|
|
1326
|
+
const pointerY = this.dragAutoScrollClientY;
|
|
1327
|
+
const placeholder = this.shadowRoot?.querySelector('.dropPlaceholder');
|
|
1328
|
+
if (placeholder) {
|
|
1329
|
+
const rect = placeholder.getBoundingClientRect();
|
|
1330
|
+
if (pointerX >= rect.left
|
|
1331
|
+
&& pointerX <= rect.right
|
|
1332
|
+
&& pointerY >= rect.top
|
|
1333
|
+
&& pointerY <= rect.bottom) {
|
|
1334
|
+
this.setDropSlot(placeholder.dataset.dropGroupId || null, Number(placeholder.dataset.dropIndex));
|
|
1335
|
+
return;
|
|
1336
|
+
}
|
|
1337
|
+
}
|
|
1338
|
+
const selector = '[data-drop-group-id][data-drop-index][data-drop-kind]';
|
|
1339
|
+
let target;
|
|
1340
|
+
const offsets = this.dragAutoScrollVelocity === 0
|
|
1341
|
+
? [0, -8, 8, -16, 16, -32, 32]
|
|
1342
|
+
: [0, 8, 16, 32, 48, 64, 96].map((value) => value * (this.dragAutoScrollVelocity < 0 ? 1 : -1));
|
|
1343
|
+
for (const offset of offsets) {
|
|
1344
|
+
const hit = this.shadowRoot?.elementFromPoint(pointerX, pointerY + offset);
|
|
1345
|
+
const candidate = hit?.closest(selector);
|
|
1346
|
+
if (candidate
|
|
1347
|
+
&& candidate.dataset.sessionId !== this.draggingSessionId
|
|
1348
|
+
&& Number(candidate.dataset.dropIndex) >= 0) {
|
|
1349
|
+
target = candidate;
|
|
1350
|
+
break;
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
if (!target) {
|
|
1354
|
+
this.clearDropSlot();
|
|
1355
|
+
return;
|
|
1356
|
+
}
|
|
1357
|
+
const baseIndex = Number(target.dataset.dropIndex);
|
|
1358
|
+
const groupId = target.dataset.dropGroupId || null;
|
|
1359
|
+
const rect = target.getBoundingClientRect();
|
|
1360
|
+
const index = target.dataset.dropKind === 'card' && pointerY >= rect.top + rect.height / 2
|
|
1361
|
+
? baseIndex + 1
|
|
1362
|
+
: baseIndex;
|
|
1363
|
+
this.setDropSlot(groupId, index);
|
|
1364
|
+
}
|
|
1365
|
+
get scrollContainer() {
|
|
1366
|
+
return this.shadowRoot?.querySelector('.list') ?? undefined;
|
|
1367
|
+
}
|
|
1368
|
+
observeScrollGeometry() {
|
|
1369
|
+
if (!this.isConnected)
|
|
1370
|
+
return;
|
|
1371
|
+
const container = this.scrollContainer;
|
|
1372
|
+
const content = this.shadowRoot?.querySelector('.listContent') ?? undefined;
|
|
1373
|
+
if (!container || !content)
|
|
589
1374
|
return;
|
|
1375
|
+
if (this.scrollResizeObserver
|
|
1376
|
+
&& this.observedScrollContainer === container
|
|
1377
|
+
&& this.observedScrollContent === content)
|
|
1378
|
+
return;
|
|
1379
|
+
this.scrollResizeObserver?.disconnect();
|
|
1380
|
+
this.scrollResizeObserver = new ResizeObserver(this.syncScrollShadowState);
|
|
1381
|
+
this.scrollResizeObserver.observe(container);
|
|
1382
|
+
this.scrollResizeObserver.observe(content);
|
|
1383
|
+
this.observedScrollContainer = container;
|
|
1384
|
+
this.observedScrollContent = content;
|
|
1385
|
+
}
|
|
1386
|
+
syncScrollShadowState = () => {
|
|
1387
|
+
const container = this.scrollContainer;
|
|
1388
|
+
if (!container)
|
|
1389
|
+
return;
|
|
1390
|
+
const topVisible = container.scrollTop > 1;
|
|
1391
|
+
const bottomVisible = container.scrollTop + container.clientHeight < container.scrollHeight - 1;
|
|
1392
|
+
if (this.topScrollShadowVisible !== topVisible)
|
|
1393
|
+
this.topScrollShadowVisible = topVisible;
|
|
1394
|
+
if (this.bottomScrollShadowVisible !== bottomVisible)
|
|
1395
|
+
this.bottomScrollShadowVisible = bottomVisible;
|
|
1396
|
+
};
|
|
1397
|
+
stopDragAutoScroll() {
|
|
1398
|
+
if (this.dragAutoScrollFrame !== undefined)
|
|
1399
|
+
cancelAnimationFrame(this.dragAutoScrollFrame);
|
|
1400
|
+
this.dragAutoScrollFrame = undefined;
|
|
1401
|
+
this.dragAutoScrollVelocity = 0;
|
|
1402
|
+
this.dragAutoScrollLastFrame = 0;
|
|
1403
|
+
}
|
|
1404
|
+
createMoveDetail(sessionIdArg, groupIdArg, indexArg) {
|
|
1405
|
+
const targetSessions = this.sortableSessions(this.sessionsForGroup(groupIdArg));
|
|
1406
|
+
const beforeSessionId = targetSessions[Math.max(0, indexArg)]?.id;
|
|
1407
|
+
const sourceGroupId = this.groups.find((group) => group.sessionIds.includes(sessionIdArg))?.id ?? null;
|
|
1408
|
+
const sourceSessions = this.sortableSessions(this.sessionsForGroup(sourceGroupId), false);
|
|
1409
|
+
const sourceIndex = sourceSessions.findIndex((session) => session.id === sessionIdArg);
|
|
1410
|
+
const compatibilityIndex = (sourceGroupId === groupIdArg
|
|
1411
|
+
&& sourceIndex >= 0
|
|
1412
|
+
&& indexArg > sourceIndex) ? indexArg + 1 : indexArg;
|
|
1413
|
+
return {
|
|
1414
|
+
sessionId: sessionIdArg,
|
|
1415
|
+
groupId: groupIdArg,
|
|
1416
|
+
index: Math.max(0, compatibilityIndex),
|
|
1417
|
+
...(beforeSessionId ? { beforeSessionId } : {}),
|
|
1418
|
+
};
|
|
1419
|
+
}
|
|
1420
|
+
handleKeyboardMove(eventArg, sessionArg, groupIdArg) {
|
|
1421
|
+
if (!['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(eventArg.key))
|
|
1422
|
+
return;
|
|
1423
|
+
eventArg.preventDefault();
|
|
1424
|
+
eventArg.stopPropagation();
|
|
1425
|
+
const sessions = this.sortableSessions(this.sessionsForGroup(groupIdArg), false);
|
|
1426
|
+
const sourceIndex = sessions.findIndex((session) => session.id === sessionArg.id);
|
|
1427
|
+
if (sourceIndex < 0)
|
|
1428
|
+
return;
|
|
1429
|
+
const sectionIds = [...this.groups.map((group) => group.id), null];
|
|
1430
|
+
const sectionIndex = sectionIds.indexOf(groupIdArg);
|
|
1431
|
+
const adjacentGroupId = eventArg.key === 'ArrowUp' && sourceIndex === 0 && sectionIndex > 0
|
|
1432
|
+
? sectionIds[sectionIndex - 1]
|
|
1433
|
+
: eventArg.key === 'ArrowDown'
|
|
1434
|
+
&& sourceIndex === sessions.length - 1
|
|
1435
|
+
&& sectionIndex >= 0
|
|
1436
|
+
&& sectionIndex < sectionIds.length - 1
|
|
1437
|
+
? sectionIds[sectionIndex + 1]
|
|
1438
|
+
: undefined;
|
|
1439
|
+
if (adjacentGroupId !== undefined) {
|
|
1440
|
+
const targetSessions = this.sortableSessions(this.sessionsForGroup(adjacentGroupId), false);
|
|
1441
|
+
const targetIndex = eventArg.key === 'ArrowUp' ? targetSessions.length : 0;
|
|
1442
|
+
const beforeSession = targetSessions[targetIndex];
|
|
1443
|
+
const detail = {
|
|
1444
|
+
sessionId: sessionArg.id,
|
|
1445
|
+
groupId: adjacentGroupId,
|
|
1446
|
+
index: targetIndex,
|
|
1447
|
+
...(beforeSession ? { beforeSessionId: beforeSession.id } : {}),
|
|
1448
|
+
};
|
|
1449
|
+
const groupName = adjacentGroupId === null
|
|
1450
|
+
? 'Ungrouped'
|
|
1451
|
+
: this.groups.find((group) => group.id === adjacentGroupId)?.name ?? adjacentGroupId;
|
|
1452
|
+
this.moveAnnouncement = `Moved ${sessionArg.title || sessionArg.id} to ${groupName}.`;
|
|
1453
|
+
this.keyboardMoveFocus = { sessionId: sessionArg.id, groupId: adjacentGroupId };
|
|
1454
|
+
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
1455
|
+
return;
|
|
1456
|
+
}
|
|
1457
|
+
const remaining = sessions.filter((session) => session.id !== sessionArg.id);
|
|
1458
|
+
const targetIndex = eventArg.key === 'Home'
|
|
1459
|
+
? 0
|
|
1460
|
+
: eventArg.key === 'End'
|
|
1461
|
+
? remaining.length
|
|
1462
|
+
: eventArg.key === 'ArrowUp'
|
|
1463
|
+
? Math.max(0, sourceIndex - 1)
|
|
1464
|
+
: Math.min(remaining.length, sourceIndex + 1);
|
|
1465
|
+
if (targetIndex === sourceIndex)
|
|
1466
|
+
return;
|
|
1467
|
+
const beforeSession = remaining[targetIndex];
|
|
1468
|
+
const compatibilityIndex = targetIndex > sourceIndex ? targetIndex + 1 : targetIndex;
|
|
590
1469
|
const detail = {
|
|
591
|
-
sessionId,
|
|
1470
|
+
sessionId: sessionArg.id,
|
|
592
1471
|
groupId: groupIdArg,
|
|
593
|
-
index:
|
|
1472
|
+
index: compatibilityIndex,
|
|
1473
|
+
...(beforeSession ? { beforeSessionId: beforeSession.id } : {}),
|
|
594
1474
|
};
|
|
1475
|
+
this.moveAnnouncement = beforeSession
|
|
1476
|
+
? `Moved ${sessionArg.title || sessionArg.id} before ${beforeSession.title || beforeSession.id}.`
|
|
1477
|
+
: `Moved ${sessionArg.title || sessionArg.id} to the end.`;
|
|
595
1478
|
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
596
1479
|
}
|
|
1480
|
+
captureCardRects() {
|
|
1481
|
+
const result = new Map();
|
|
1482
|
+
for (const item of this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []) {
|
|
1483
|
+
if (item.dataset.sessionId === this.draggingSessionId)
|
|
1484
|
+
continue;
|
|
1485
|
+
result.set(item.dataset.sessionId ?? '', item.getBoundingClientRect());
|
|
1486
|
+
}
|
|
1487
|
+
return result;
|
|
1488
|
+
}
|
|
1489
|
+
restoreKeyboardMoveFocus() {
|
|
1490
|
+
const pending = this.keyboardMoveFocus;
|
|
1491
|
+
if (!pending)
|
|
1492
|
+
return;
|
|
1493
|
+
const currentGroupId = this.groups.find((group) => group.sessionIds.includes(pending.sessionId))?.id ?? null;
|
|
1494
|
+
if (currentGroupId !== pending.groupId)
|
|
1495
|
+
return;
|
|
1496
|
+
const item = Array.from(this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []).find((candidate) => candidate.dataset.sessionId === pending.sessionId);
|
|
1497
|
+
const handle = item?.querySelector('.dragHandle');
|
|
1498
|
+
if (handle) {
|
|
1499
|
+
handle.focus();
|
|
1500
|
+
this.keyboardMoveFocus = undefined;
|
|
1501
|
+
return;
|
|
1502
|
+
}
|
|
1503
|
+
const groupHeader = Array.from(this.shadowRoot?.querySelectorAll('.groupHeader[data-drop-group-id]') ?? []).find((candidate) => candidate.dataset.dropGroupId === (pending.groupId ?? ''));
|
|
1504
|
+
if (groupHeader) {
|
|
1505
|
+
groupHeader.focus();
|
|
1506
|
+
this.keyboardMoveFocus = undefined;
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1509
|
+
async animateCardReflow(previousRectsArg, generationArg) {
|
|
1510
|
+
await this.updateComplete;
|
|
1511
|
+
if (generationArg !== this.reflowGeneration
|
|
1512
|
+
|| !this.isConnected
|
|
1513
|
+
|| globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches)
|
|
1514
|
+
return;
|
|
1515
|
+
this.cancelReflowAnimations();
|
|
1516
|
+
for (const item of this.shadowRoot?.querySelectorAll('.item[data-session-id]') ?? []) {
|
|
1517
|
+
const sessionId = item.dataset.sessionId ?? '';
|
|
1518
|
+
if (!sessionId || sessionId === this.draggingSessionId)
|
|
1519
|
+
continue;
|
|
1520
|
+
const previous = previousRectsArg.get(sessionId);
|
|
1521
|
+
if (!previous)
|
|
1522
|
+
continue;
|
|
1523
|
+
const current = item.getBoundingClientRect();
|
|
1524
|
+
const deltaY = previous.top - current.top;
|
|
1525
|
+
if (Math.abs(deltaY) < 0.5)
|
|
1526
|
+
continue;
|
|
1527
|
+
const animation = item.animate([
|
|
1528
|
+
{ transform: `translateY(${deltaY}px)` },
|
|
1529
|
+
{ transform: 'translateY(0)' },
|
|
1530
|
+
], { duration: 180, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' });
|
|
1531
|
+
this.reflowAnimations.add(animation);
|
|
1532
|
+
void animation.finished.catch(() => undefined).finally(() => {
|
|
1533
|
+
this.reflowAnimations.delete(animation);
|
|
1534
|
+
});
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
cancelReflowAnimations() {
|
|
1538
|
+
for (const animation of this.reflowAnimations)
|
|
1539
|
+
animation.cancel();
|
|
1540
|
+
this.reflowAnimations.clear();
|
|
1541
|
+
}
|
|
1542
|
+
finishPointerDrag(commitArg) {
|
|
1543
|
+
const gesture = this.pointerDragGesture;
|
|
1544
|
+
if (!gesture)
|
|
1545
|
+
return;
|
|
1546
|
+
const detail = commitArg && gesture.phase === 'active' && this.dropSlot
|
|
1547
|
+
? this.createMoveDetail(gesture.sessionId, this.dropSlot.groupId, this.dropSlot.index)
|
|
1548
|
+
: undefined;
|
|
1549
|
+
this.pointerDragGesture = undefined;
|
|
1550
|
+
window.removeEventListener('keydown', this.handleDragKeyDown, true);
|
|
1551
|
+
window.removeEventListener('blur', this.handleDragWindowBlur);
|
|
1552
|
+
this.stopDragAutoScroll();
|
|
1553
|
+
this.reflowGeneration += 1;
|
|
1554
|
+
this.cancelReflowAnimations();
|
|
1555
|
+
if (gesture.source.matches(':popover-open'))
|
|
1556
|
+
gesture.source.hidePopover();
|
|
1557
|
+
gesture.source.removeAttribute('popover');
|
|
1558
|
+
gesture.source.classList.remove('dragging');
|
|
1559
|
+
for (const property of [
|
|
1560
|
+
'--drag-preview-width',
|
|
1561
|
+
'--drag-preview-height',
|
|
1562
|
+
'--drag-preview-x',
|
|
1563
|
+
'--drag-preview-y',
|
|
1564
|
+
])
|
|
1565
|
+
gesture.source.style.removeProperty(property);
|
|
1566
|
+
this.draggingSessionId = '';
|
|
1567
|
+
this.draggedItemHeight = 0;
|
|
1568
|
+
this.dropSlot = undefined;
|
|
1569
|
+
try {
|
|
1570
|
+
if (gesture.handle.hasPointerCapture(gesture.pointerId)) {
|
|
1571
|
+
gesture.handle.releasePointerCapture(gesture.pointerId);
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
catch {
|
|
1575
|
+
// Capture may already be released or the handle may have disconnected.
|
|
1576
|
+
}
|
|
1577
|
+
if (detail) {
|
|
1578
|
+
this.dispatchEvent(new CustomEvent('harness-session-move', { detail, bubbles: true, composed: true }));
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
597
1581
|
emit(name, session) {
|
|
598
1582
|
this.dispatchEvent(new CustomEvent(name, { detail: { session }, bubbles: true, composed: true }));
|
|
599
1583
|
}
|
|
600
|
-
constructor() {
|
|
601
|
-
super(...arguments);
|
|
602
|
-
__runInitializers(this, _collapsedGroupIds_extraInitializers);
|
|
603
|
-
}
|
|
604
1584
|
static {
|
|
605
1585
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
606
1586
|
}
|
|
@@ -608,4 +1588,4 @@ let DeesHarnessSessionList = (() => {
|
|
|
608
1588
|
return DeesHarnessSessionList = _classThis;
|
|
609
1589
|
})();
|
|
610
1590
|
export { DeesHarnessSessionList };
|
|
611
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUXRELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sOENBQThDLENBQUM7QUFhdEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztJQUVVLHNCQUFzQjs0QkFEbEMsYUFBYSxDQUFDLDJCQUEyQixDQUFDOzs7O3NCQUNDLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBQW5CLFNBQVEsV0FBVzs7OztvQ0FJcEQsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDOzZDQUc5QixRQUFRLEVBQUU7bUNBR1YsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3FDQUczQixRQUFRLEVBQUU7a0NBR1YsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDOzBDQUc5QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7a0NBRzNCLEtBQUssRUFBRTs2Q0FHUCxLQUFLLEVBQUU7b0NBR1AsS0FBSyxFQUFFOzZDQUdQLEtB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
|
|
1591
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tbGlzdC9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVF0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLDhDQUE4QyxDQUFDO0FBRXRELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFDOUIsTUFBTSxnQ0FBZ0MsR0FBRyxHQUFHLENBQUM7QUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFvQzlCOzs7Ozs7Ozs7Ozs7OztHQWNHO0lBRVUsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUlwRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NkNBRzlCLFFBQVEsRUFBRTttQ0FHVixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7cUNBRzNCLFFBQVEsRUFBRTtrQ0FHVixRQUFRLENB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
|