@design.estate/dees-catalog 6.7.0 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist_bundle/bundle.js +1153 -193
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.d.ts +2 -1
  4. package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.js +57 -17
  5. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.d.ts +92 -6
  6. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +921 -49
  7. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.d.ts +5 -1
  8. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.js +42 -7
  9. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.d.ts +6 -1
  10. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.js +53 -14
  11. package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.d.ts +2 -1
  12. package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.js +13 -3
  13. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +31 -13
  14. package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.js +9 -3
  15. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.d.ts +6 -1
  16. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +135 -13
  17. package/dist_ts_web/elements/00group-harness/harness.styles.js +16 -13
  18. package/dist_ts_web/elements/00group-harness/interfaces.d.ts +30 -0
  19. package/dist_ts_web/elements/00group-harness/toolregistry.d.ts +2 -0
  20. package/dist_ts_web/elements/00group-harness/toolregistry.js +7 -1
  21. package/package.json +2 -2
  22. package/readme.md +4 -2
  23. package/ts_web/00_commitinfo_data.ts +1 -1
  24. package/ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.ts +53 -15
  25. package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +943 -51
  26. package/ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.ts +37 -8
  27. package/ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.ts +40 -12
  28. package/ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.ts +6 -2
  29. package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +30 -12
  30. package/ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.ts +8 -2
  31. package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +119 -11
  32. package/ts_web/elements/00group-harness/harness.styles.ts +15 -12
  33. package/ts_web/elements/00group-harness/interfaces.ts +34 -0
  34. package/ts_web/elements/00group-harness/toolregistry.ts +7 -0
@@ -44,12 +44,15 @@ import '../dees-harness-question-card/dees-harness-question-card.js';
44
44
  import '../../00group-utility/dees-icon/dees-icon.js';
45
45
  const { repeat } = directives;
46
46
  const pinThresholdPx = 48;
47
+ const virtualizationThreshold = 40;
48
+ const virtualOverscanPx = 800;
49
+ const virtualGapPx = 8;
50
+ const maximumToolMessagesPerGroup = 4;
47
51
  /**
48
- * Scrollable, streaming-safe message log. Messages render through a keyed
49
- * repeat (stable DOM per message id); `applyDelta()` routes incremental
50
- * updates to the affected message element only. Auto-follows the bottom
51
- * while the user is pinned there; otherwise new content raises a
52
- * "jump to latest" chip instead of yanking the scroll position.
52
+ * Scrollable, streaming-safe message log. Short transcripts keep stable keyed
53
+ * DOM; long transcripts mount a bounded, measured window and retain row state
54
+ * by id. `applyDelta()` targets a mounted row or updates its offscreen model.
55
+ * Auto-follow stays at the bottom until the user intentionally scrolls away.
53
56
  */
54
57
  let DeesHarnessMessageList = (() => {
55
58
  let _classDecorators = [customElement('dees-harness-message-list')];
@@ -84,6 +87,9 @@ let DeesHarnessMessageList = (() => {
84
87
  let _toolRegistry_decorators;
85
88
  let _toolRegistry_initializers = [];
86
89
  let _toolRegistry_extraInitializers = [];
90
+ let _viewState_decorators;
91
+ let _viewState_initializers = [];
92
+ let _viewState_extraInitializers = [];
87
93
  let _allowSubtaskStreams_decorators;
88
94
  let _allowSubtaskStreams_initializers = [];
89
95
  let _allowSubtaskStreams_extraInitializers = [];
@@ -124,6 +130,7 @@ let DeesHarnessMessageList = (() => {
124
130
  _hideScrollbar_decorators = [property({ type: Boolean })];
125
131
  _fadeScrollEdges_decorators = [property({ type: Boolean })];
126
132
  _toolRegistry_decorators = [property({ attribute: false })];
133
+ _viewState_decorators = [property({ attribute: false })];
127
134
  _allowSubtaskStreams_decorators = [property({ type: Boolean })];
128
135
  _showRoles_decorators = [property({ type: Boolean })];
129
136
  _showTimestamps_decorators = [property({ type: Boolean })];
@@ -142,6 +149,7 @@ let DeesHarnessMessageList = (() => {
142
149
  __esDecorate(this, null, _hideScrollbar_decorators, { kind: "accessor", name: "hideScrollbar", static: false, private: false, access: { has: obj => "hideScrollbar" in obj, get: obj => obj.hideScrollbar, set: (obj, value) => { obj.hideScrollbar = value; } }, metadata: _metadata }, _hideScrollbar_initializers, _hideScrollbar_extraInitializers);
143
150
  __esDecorate(this, null, _fadeScrollEdges_decorators, { kind: "accessor", name: "fadeScrollEdges", static: false, private: false, access: { has: obj => "fadeScrollEdges" in obj, get: obj => obj.fadeScrollEdges, set: (obj, value) => { obj.fadeScrollEdges = value; } }, metadata: _metadata }, _fadeScrollEdges_initializers, _fadeScrollEdges_extraInitializers);
144
151
  __esDecorate(this, null, _toolRegistry_decorators, { kind: "accessor", name: "toolRegistry", static: false, private: false, access: { has: obj => "toolRegistry" in obj, get: obj => obj.toolRegistry, set: (obj, value) => { obj.toolRegistry = value; } }, metadata: _metadata }, _toolRegistry_initializers, _toolRegistry_extraInitializers);
152
+ __esDecorate(this, null, _viewState_decorators, { kind: "accessor", name: "viewState", static: false, private: false, access: { has: obj => "viewState" in obj, get: obj => obj.viewState, set: (obj, value) => { obj.viewState = value; } }, metadata: _metadata }, _viewState_initializers, _viewState_extraInitializers);
145
153
  __esDecorate(this, null, _allowSubtaskStreams_decorators, { kind: "accessor", name: "allowSubtaskStreams", static: false, private: false, access: { has: obj => "allowSubtaskStreams" in obj, get: obj => obj.allowSubtaskStreams, set: (obj, value) => { obj.allowSubtaskStreams = value; } }, metadata: _metadata }, _allowSubtaskStreams_initializers, _allowSubtaskStreams_extraInitializers);
146
154
  __esDecorate(this, null, _showRoles_decorators, { kind: "accessor", name: "showRoles", static: false, private: false, access: { has: obj => "showRoles" in obj, get: obj => obj.showRoles, set: (obj, value) => { obj.showRoles = value; } }, metadata: _metadata }, _showRoles_initializers, _showRoles_extraInitializers);
147
155
  __esDecorate(this, null, _showTimestamps_decorators, { kind: "accessor", name: "showTimestamps", static: false, private: false, access: { has: obj => "showTimestamps" in obj, get: obj => obj.showTimestamps, set: (obj, value) => { obj.showTimestamps = value; } }, metadata: _metadata }, _showTimestamps_initializers, _showTimestamps_extraInitializers);
@@ -187,7 +195,10 @@ let DeesHarnessMessageList = (() => {
187
195
  #toolRegistry_accessor_storage = (__runInitializers(this, _fadeScrollEdges_extraInitializers), __runInitializers(this, _toolRegistry_initializers, DeesHarnessToolRegistry.default));
188
196
  get toolRegistry() { return this.#toolRegistry_accessor_storage; }
189
197
  set toolRegistry(value) { this.#toolRegistry_accessor_storage = value; }
190
- #allowSubtaskStreams_accessor_storage = (__runInitializers(this, _toolRegistry_extraInitializers), __runInitializers(this, _allowSubtaskStreams_initializers, true));
198
+ #viewState_accessor_storage = (__runInitializers(this, _toolRegistry_extraInitializers), __runInitializers(this, _viewState_initializers, undefined));
199
+ get viewState() { return this.#viewState_accessor_storage; }
200
+ set viewState(value) { this.#viewState_accessor_storage = value; }
201
+ #allowSubtaskStreams_accessor_storage = (__runInitializers(this, _viewState_extraInitializers), __runInitializers(this, _allowSubtaskStreams_initializers, true));
191
202
  /** Nested transcripts set this false to prevent recursive inline streams. */
192
203
  get allowSubtaskStreams() { return this.#allowSubtaskStreams_accessor_storage; }
193
204
  set allowSubtaskStreams(value) { this.#allowSubtaskStreams_accessor_storage = value; }
@@ -218,6 +229,41 @@ let DeesHarnessMessageList = (() => {
218
229
  toolGroupIdByMessageId = (__runInitializers(this, _scrollFadeBottom_extraInitializers), new Map());
219
230
  nextToolGroupId = 1;
220
231
  timelineRenderItems = [];
232
+ timelineRegistryRevision = -1;
233
+ knownContentKeys = new Set();
234
+ currentNewContentKeys = new Set();
235
+ localViewState = {
236
+ messages: {},
237
+ permissions: {},
238
+ questions: {},
239
+ };
240
+ measuredVirtualHeights = new Map();
241
+ timelineIndexByKey = new Map();
242
+ virtualOffsets = [];
243
+ virtualTotalHeight = 0;
244
+ virtualStartIndex = 0;
245
+ virtualEndIndex = 0;
246
+ retainedVirtualKeys = new Set();
247
+ selectionGestureKeys = new Set();
248
+ selectionGestureActive = false;
249
+ selectionGestureStartOwner;
250
+ selectionGestureCrossesOwners = false;
251
+ selectionGestureSnapshot;
252
+ explicitRetainedVirtualKey;
253
+ virtualRowResizeObserver = null;
254
+ virtualViewportResizeObserver = null;
255
+ virtualMeasureFrame = null;
256
+ virtualRangeFrame = null;
257
+ lastVirtualViewportWidth = 0;
258
+ pendingVirtualAnchor;
259
+ pendingFullAnchor;
260
+ measurementAnchor;
261
+ pendingVirtualRepin = false;
262
+ virtualizationEnabled = false;
263
+ virtualizationEnablePending = false;
264
+ virtualizationDisablePending = false;
265
+ virtualizationActivationFrame = null;
266
+ selectionChangeListening = false;
221
267
  static styles = [
222
268
  themeDefaultStyles,
223
269
  cssManager.defaultStyles,
@@ -234,6 +280,7 @@ let DeesHarnessMessageList = (() => {
234
280
  .scroll {
235
281
  height: 100%;
236
282
  overflow-y: auto;
283
+ overflow-anchor: none;
237
284
  overscroll-behavior: contain;
238
285
  scrollbar-width: thin;
239
286
  scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
@@ -302,6 +349,19 @@ let DeesHarnessMessageList = (() => {
302
349
  grid-column: 1 / -1;
303
350
  }
304
351
 
352
+ .virtualStack {
353
+ position: relative;
354
+ flex: 0 0 auto;
355
+ min-width: 0;
356
+ }
357
+
358
+ .virtualItem {
359
+ position: absolute;
360
+ inset: 0 0 auto;
361
+ min-width: 0;
362
+ transform: translate3d(0, var(--harness-virtual-offset), 0);
363
+ }
364
+
305
365
  .toolGroup {
306
366
  min-width: 0;
307
367
  }
@@ -484,23 +544,250 @@ let DeesHarnessMessageList = (() => {
484
544
  }
485
545
  willUpdate(changedProperties) {
486
546
  super.willUpdate(changedProperties);
487
- this.timelineRenderItems = this.buildTimelineRenderItems();
547
+ if (changedProperties.has('viewState') && this.viewState) {
548
+ this.clearTranscriptViewState(this.localViewState);
549
+ }
550
+ const registryChanged = this.timelineRegistryRevision !== this.toolRegistry.revision;
551
+ if (this.timelineRegistryRevision < 0
552
+ || changedProperties.has('messages')
553
+ || changedProperties.has('permissions')
554
+ || changedProperties.has('questions')
555
+ || changedProperties.has('toolRegistry')
556
+ || changedProperties.has('viewState')
557
+ || registryChanged) {
558
+ this.rebuildTimeline();
559
+ }
488
560
  }
489
561
  appendToolRun(targetArg, runArg, layoutArg, usedGroupIdsArg) {
490
- const groupId = runArg
491
- .map((item) => this.toolGroupIdByMessageId.get(item.message.id))
492
- .find((candidate) => candidate !== undefined && !usedGroupIdsArg.has(candidate))
493
- ?? `tool-group-${this.nextToolGroupId++}`;
494
- usedGroupIdsArg.add(groupId);
495
- for (const item of runArg) {
496
- this.toolGroupIdByMessageId.set(item.message.id, groupId);
497
- }
498
- targetArg.push({
499
- kind: 'tool-group',
500
- key: groupId,
501
- layout: layoutArg,
502
- messages: runArg,
503
- });
562
+ for (let offset = 0; offset < runArg.length; offset += maximumToolMessagesPerGroup) {
563
+ const messages = runArg.slice(offset, offset + maximumToolMessagesPerGroup);
564
+ const groupId = messages
565
+ .map((item) => this.toolGroupIdByMessageId.get(item.message.id))
566
+ .find((candidate) => candidate !== undefined && !usedGroupIdsArg.has(candidate))
567
+ ?? `tool-group-${this.nextToolGroupId++}`;
568
+ usedGroupIdsArg.add(groupId);
569
+ for (const item of messages) {
570
+ this.toolGroupIdByMessageId.set(item.message.id, groupId);
571
+ }
572
+ targetArg.push({
573
+ kind: 'tool-group',
574
+ key: groupId,
575
+ layout: layoutArg,
576
+ messages,
577
+ });
578
+ }
579
+ }
580
+ rebuildTimeline() {
581
+ const container = this.scrollContainer;
582
+ const preserveAnchor = this.userUnpinned || !this.autoFollow;
583
+ const anchor = container && preserveAnchor
584
+ ? this.captureCurrentAnchor(container)
585
+ : undefined;
586
+ const nextItems = this.buildTimelineRenderItems();
587
+ const retainedKeys = new Set(nextItems.map((item) => item.key));
588
+ const contentKeys = [
589
+ ...this.messages.map((message) => `message:${message.id}`),
590
+ ...this.permissions.map((request) => `permission:${request.id}`),
591
+ ...this.questions.map((request) => `question:${request.id}`),
592
+ ];
593
+ this.currentNewContentKeys = new Set(contentKeys.filter((key) => !this.knownContentKeys.has(key)));
594
+ this.knownContentKeys.clear();
595
+ for (const key of contentKeys)
596
+ this.knownContentKeys.add(key);
597
+ for (const key of this.measuredVirtualHeights.keys()) {
598
+ if (!retainedKeys.has(key))
599
+ this.measuredVirtualHeights.delete(key);
600
+ }
601
+ if (this.explicitRetainedVirtualKey && !retainedKeys.has(this.explicitRetainedVirtualKey)) {
602
+ this.explicitRetainedVirtualKey = undefined;
603
+ }
604
+ for (const key of this.retainedVirtualKeys) {
605
+ if (!retainedKeys.has(key))
606
+ this.retainedVirtualKeys.delete(key);
607
+ }
608
+ const messageIds = new Set(this.messages.map((message) => message.id));
609
+ const permissionIds = new Set(this.permissions.map((request) => request.id));
610
+ const questionIds = new Set(this.questions.map((request) => request.id));
611
+ const effectiveViewState = this.effectiveViewState;
612
+ for (const key of Object.keys(effectiveViewState.messages)) {
613
+ if (!messageIds.has(key))
614
+ delete effectiveViewState.messages[key];
615
+ }
616
+ for (const key of Object.keys(effectiveViewState.permissions)) {
617
+ if (!permissionIds.has(key))
618
+ delete effectiveViewState.permissions[key];
619
+ }
620
+ for (const key of Object.keys(effectiveViewState.questions)) {
621
+ if (!questionIds.has(key))
622
+ delete effectiveViewState.questions[key];
623
+ }
624
+ for (const message of this.messages)
625
+ effectiveViewState.messages[message.id] ??= {};
626
+ for (const request of this.permissions)
627
+ effectiveViewState.permissions[request.id] ??= {};
628
+ for (const request of this.questions)
629
+ effectiveViewState.questions[request.id] ??= {};
630
+ for (const message of this.messages)
631
+ this.syncSubtaskViewState(message);
632
+ this.timelineRenderItems = nextItems;
633
+ this.timelineIndexByKey = new Map(nextItems.map((item, index) => [item.key, index]));
634
+ this.timelineRegistryRevision = this.toolRegistry.revision;
635
+ const shouldVirtualize = contentKeys.length > virtualizationThreshold;
636
+ if (!this.virtualizationEnabled && shouldVirtualize) {
637
+ this.virtualizationDisablePending = false;
638
+ if (this.activeTimelineKey()) {
639
+ this.virtualizationEnablePending = true;
640
+ this.connectSelectionChangeListener();
641
+ }
642
+ else {
643
+ this.captureFullTimelineMeasurements();
644
+ this.virtualizationEnabled = true;
645
+ this.virtualizationEnablePending = false;
646
+ this.disconnectSelectionChangeListener();
647
+ }
648
+ }
649
+ else if (this.virtualizationEnabled && !shouldVirtualize) {
650
+ this.virtualizationEnablePending = false;
651
+ if (this.activeTimelineKey()) {
652
+ this.virtualizationDisablePending = true;
653
+ this.connectSelectionChangeListener();
654
+ }
655
+ else {
656
+ this.virtualizationEnabled = false;
657
+ this.virtualizationDisablePending = false;
658
+ this.retainedVirtualKeys.clear();
659
+ this.disconnectSelectionChangeListener();
660
+ }
661
+ }
662
+ else {
663
+ this.virtualizationEnablePending = false;
664
+ this.virtualizationDisablePending = false;
665
+ if (this.activeSelectionKeys().length === 0)
666
+ this.disconnectSelectionChangeListener();
667
+ }
668
+ this.recomputeVirtualOffsets();
669
+ if (anchor && container) {
670
+ if (this.virtualizationActive) {
671
+ this.pendingVirtualAnchor = anchor;
672
+ this.measurementAnchor = anchor;
673
+ this.setVirtualRangeAround(anchor.key);
674
+ }
675
+ else {
676
+ this.pendingVirtualAnchor = undefined;
677
+ this.pendingFullAnchor = anchor;
678
+ this.setInitialVirtualRange();
679
+ }
680
+ }
681
+ else {
682
+ this.measurementAnchor = undefined;
683
+ this.setInitialVirtualRange();
684
+ }
685
+ }
686
+ pruneViewState(stateArg, messageIdsArg, permissionIdsArg, questionIdsArg) {
687
+ const messageIds = new Set(messageIdsArg);
688
+ const permissionIds = new Set(permissionIdsArg);
689
+ const questionIds = new Set(questionIdsArg);
690
+ for (const key of Object.keys(stateArg.messages))
691
+ if (!messageIds.has(key))
692
+ delete stateArg.messages[key];
693
+ for (const key of Object.keys(stateArg.permissions))
694
+ if (!permissionIds.has(key))
695
+ delete stateArg.permissions[key];
696
+ for (const key of Object.keys(stateArg.questions))
697
+ if (!questionIds.has(key))
698
+ delete stateArg.questions[key];
699
+ }
700
+ clearTranscriptViewState(stateArg) {
701
+ for (const key of Object.keys(stateArg.messages))
702
+ delete stateArg.messages[key];
703
+ for (const key of Object.keys(stateArg.permissions))
704
+ delete stateArg.permissions[key];
705
+ for (const key of Object.keys(stateArg.questions))
706
+ delete stateArg.questions[key];
707
+ }
708
+ syncSubtaskViewState(messageArg) {
709
+ const messageState = this.effectiveViewState.messages[messageArg.id];
710
+ if (!messageState)
711
+ return;
712
+ const subtask = messageArg.toolCall?.subtask;
713
+ if (!this.allowSubtaskStreams
714
+ || !subtask
715
+ || subtask.previewState !== 'ready'
716
+ || subtask.status.type !== 'busy') {
717
+ delete messageState.subtaskTranscript;
718
+ delete messageState.subtaskTranscriptSessionId;
719
+ return;
720
+ }
721
+ if (messageState.subtaskTranscriptSessionId !== subtask.sessionId
722
+ || !messageState.subtaskTranscript) {
723
+ messageState.subtaskTranscriptSessionId = subtask.sessionId;
724
+ messageState.subtaskTranscript = { messages: {}, permissions: {}, questions: {} };
725
+ }
726
+ this.pruneViewState(messageState.subtaskTranscript, subtask.messages.map((entry) => entry.id), (subtask.permissions ?? []).map((entry) => entry.id), (subtask.questions ?? []).map((entry) => entry.id));
727
+ }
728
+ get virtualizationActive() {
729
+ return this.virtualizationEnabled;
730
+ }
731
+ estimatedVirtualHeight(itemArg) {
732
+ if (itemArg.kind === 'permission')
733
+ return 150;
734
+ if (itemArg.kind === 'question')
735
+ return 180;
736
+ if (itemArg.kind === 'tool-group') {
737
+ if (itemArg.layout === 'subtask')
738
+ return 320;
739
+ return itemArg.layout === 'full-row' ? 120 * itemArg.messages.length : 110;
740
+ }
741
+ if (itemArg.message.reasoning?.some((part) => !part.endedAt))
742
+ return 220;
743
+ return itemArg.message.text.length > 1_000 ? 180 : 96;
744
+ }
745
+ recomputeVirtualOffsets() {
746
+ const offsets = [];
747
+ let offset = 0;
748
+ for (const item of this.timelineRenderItems) {
749
+ offsets.push(offset);
750
+ offset += this.measuredVirtualHeights.get(item.key) ?? this.estimatedVirtualHeight(item);
751
+ offset += virtualGapPx;
752
+ }
753
+ this.virtualOffsets = offsets;
754
+ this.virtualTotalHeight = Math.max(0, offset - virtualGapPx);
755
+ }
756
+ setInitialVirtualRange() {
757
+ if (!this.virtualizationActive) {
758
+ this.virtualStartIndex = 0;
759
+ this.virtualEndIndex = this.timelineRenderItems.length;
760
+ return;
761
+ }
762
+ const initialCount = Math.min(this.timelineRenderItems.length, 24);
763
+ this.virtualEndIndex = this.autoFollow ? this.timelineRenderItems.length : initialCount;
764
+ this.virtualStartIndex = this.autoFollow ? this.virtualEndIndex - initialCount : 0;
765
+ }
766
+ setVirtualRangeAround(keyArg) {
767
+ const anchorIndex = this.timelineIndexByKey.get(keyArg);
768
+ if (anchorIndex === undefined) {
769
+ this.setInitialVirtualRange();
770
+ return;
771
+ }
772
+ this.virtualStartIndex = Math.max(0, anchorIndex - 12);
773
+ this.virtualEndIndex = Math.min(this.timelineRenderItems.length, anchorIndex + 13);
774
+ }
775
+ captureFullTimelineMeasurements() {
776
+ for (const element of this.shadowRoot?.querySelectorAll('.stack > [data-timeline-key]') ?? []) {
777
+ const key = element.dataset.timelineKey;
778
+ const height = element?.getBoundingClientRect().height ?? 0;
779
+ if (key && height > 0)
780
+ this.measuredVirtualHeights.set(key, height);
781
+ }
782
+ }
783
+ captureCurrentAnchor(containerArg) {
784
+ if (this.virtualizationActive)
785
+ return this.captureVirtualAnchor(containerArg);
786
+ const containerTop = containerArg.getBoundingClientRect().top;
787
+ const itemElements = Array.from(this.shadowRoot?.querySelectorAll('.stack > [data-timeline-key]') ?? []);
788
+ const element = itemElements.find((candidate) => candidate.getBoundingClientRect().bottom > containerTop);
789
+ const key = element?.dataset.timelineKey;
790
+ return key ? { key, offset: containerTop - element.getBoundingClientRect().top } : undefined;
504
791
  }
505
792
  render() {
506
793
  const items = this.timelineRenderItems;
@@ -510,33 +797,18 @@ let DeesHarnessMessageList = (() => {
510
797
  @scroll=${this.handleScroll}
511
798
  @wheel=${this.handleUserScrollIntent}
512
799
  @touchmove=${this.handleUserScrollIntent}
513
- @pointerdown=${this.handleUserScrollIntent}
800
+ @pointerdown=${this.handlePointerDown}
801
+ @pointerup=${this.handlePointerUp}
802
+ @pointercancel=${this.handlePointerCancel}
514
803
  @keydown=${this.handleUserScrollIntent}
804
+ @keyup=${this.handleProtectedStateChange}
805
+ @focusout=${this.handleProtectedStateChange}
806
+ @harness-card-retention=${this.handleCardRetention}
515
807
  >
516
808
  <div class="scrollContent">
517
809
  <slot name="leading"></slot>
518
810
  ${items.length
519
- ? html `
520
- <div class="stack">
521
- ${repeat(items, (item) => item.key, (item) => item.kind === 'tool-group'
522
- ? this.renderToolGroup(item)
523
- : item.kind === 'message'
524
- ? this.renderMessage(item)
525
- : item.kind === 'permission'
526
- ? html `
527
- <dees-harness-permission-card
528
- .request=${item.request}
529
- .busy=${this.permissionsBusy}
530
- ></dees-harness-permission-card>
531
- `
532
- : html `
533
- <dees-harness-question-card
534
- .request=${item.question}
535
- .busy=${this.permissionsBusy}
536
- ></dees-harness-question-card>
537
- `)}
538
- </div>
539
- `
811
+ ? this.virtualizationActive ? this.renderVirtualTimeline() : this.renderFullTimeline(items)
540
812
  : html `
541
813
  <div class="empty">
542
814
  <slot name="empty">
@@ -560,9 +832,85 @@ let DeesHarnessMessageList = (() => {
560
832
  : ''}
561
833
  `;
562
834
  }
563
- renderMessage(itemArg) {
835
+ renderFullTimeline(itemsArg) {
836
+ return html `
837
+ <div class="stack" role="log" aria-label="Conversation transcript">
838
+ ${repeat(itemsArg, (item) => item.key, (item, index) => this.renderTimelineItem(item, index))}
839
+ </div>
840
+ `;
841
+ }
842
+ renderVirtualTimeline() {
843
+ const indexedItems = this.virtualRenderedIndexes().map((index) => ({
844
+ index,
845
+ item: this.timelineRenderItems[index],
846
+ }));
847
+ return html `
848
+ <div
849
+ class="virtualStack"
850
+ role="log"
851
+ aria-label="Conversation transcript"
852
+ style=${`height: ${this.virtualTotalHeight}px;`}
853
+ >
854
+ ${repeat(indexedItems, (entry) => entry.item.key, (entry) => html `
855
+ <article
856
+ class="virtualItem"
857
+ data-virtual-key=${entry.item.key}
858
+ aria-posinset=${entry.index + 1}
859
+ aria-setsize=${this.timelineRenderItems.length}
860
+ style=${`--harness-virtual-offset: ${this.virtualOffsets[entry.index] ?? 0}px;`}
861
+ >
862
+ ${this.renderTimelineItem(entry.item, entry.index)}
863
+ </article>
864
+ `)}
865
+ </div>
866
+ `;
867
+ }
868
+ virtualRenderedIndexes() {
869
+ const indexes = [];
870
+ for (let index = this.virtualStartIndex; index < this.virtualEndIndex; index += 1) {
871
+ indexes.push(index);
872
+ }
873
+ for (const retainedKey of this.retainedVirtualKeys) {
874
+ const retainedIndex = this.timelineIndexByKey.get(retainedKey);
875
+ if (retainedIndex !== undefined && !indexes.includes(retainedIndex))
876
+ indexes.push(retainedIndex);
877
+ }
878
+ return indexes.sort((left, right) => left - right);
879
+ }
880
+ renderTimelineItem(itemArg, logicalIndexArg) {
881
+ if (itemArg.kind === 'tool-group')
882
+ return this.renderToolGroup(itemArg);
883
+ if (itemArg.kind === 'message')
884
+ return this.renderMessage(itemArg, itemArg.key);
885
+ if (itemArg.kind === 'permission') {
886
+ return html `
887
+ <dees-harness-permission-card
888
+ data-timeline-key=${itemArg.key}
889
+ aria-posinset=${logicalIndexArg + 1}
890
+ aria-setsize=${this.timelineRenderItems.length}
891
+ .request=${itemArg.request}
892
+ .busy=${this.permissionsBusy}
893
+ .viewState=${this.permissionViewState(itemArg.request.id)}
894
+ .suppressEntry=${!this.entryAnimationsEnabled || !this.currentNewContentKeys.has(itemArg.key)}
895
+ ></dees-harness-permission-card>
896
+ `;
897
+ }
898
+ return html `
899
+ <dees-harness-question-card
900
+ data-timeline-key=${itemArg.key}
901
+ aria-posinset=${logicalIndexArg + 1}
902
+ aria-setsize=${this.timelineRenderItems.length}
903
+ .request=${itemArg.question}
904
+ .busy=${this.permissionsBusy}
905
+ .viewState=${this.questionViewState(itemArg.question.id)}
906
+ .suppressEntry=${!this.entryAnimationsEnabled || !this.currentNewContentKeys.has(itemArg.key)}
907
+ ></dees-harness-question-card>
908
+ `;
909
+ }
910
+ renderMessage(itemArg, timelineKeyArg) {
564
911
  return html `
565
912
  <dees-harness-message
913
+ data-timeline-key=${timelineKeyArg}
566
914
  data-message-id=${itemArg.message.id}
567
915
  data-tool-layout=${itemArg.toolLayout ?? 'message'}
568
916
  .message=${itemArg.message}
@@ -570,21 +918,35 @@ let DeesHarnessMessageList = (() => {
570
918
  .showTimestamp=${this.showTimestamps}
571
919
  .toolRegistry=${this.toolRegistry}
572
920
  .allowSubtaskStreams=${this.allowSubtaskStreams}
573
- .suppressEntry=${!this.entryAnimationsEnabled}
921
+ .viewState=${this.messageViewState(itemArg.message.id)}
922
+ .suppressEntry=${!this.entryAnimationsEnabled || !this.currentNewContentKeys.has(itemArg.key)}
574
923
  ></dees-harness-message>
575
924
  `;
576
925
  }
926
+ messageViewState(messageIdArg) {
927
+ return this.effectiveViewState.messages[messageIdArg];
928
+ }
929
+ permissionViewState(requestIdArg) {
930
+ return this.effectiveViewState.permissions[requestIdArg];
931
+ }
932
+ questionViewState(requestIdArg) {
933
+ return this.effectiveViewState.questions[requestIdArg];
934
+ }
935
+ get effectiveViewState() {
936
+ return this.viewState ?? this.localViewState;
937
+ }
577
938
  renderToolGroup(groupArg) {
578
939
  const count = groupArg.messages.length;
579
940
  const countClass = count >= 4 ? 'toolCount4' : `toolCount${count}`;
580
941
  return html `
581
942
  <section
582
943
  class="toolGroup"
944
+ data-timeline-key=${groupArg.key}
583
945
  data-tool-group-id=${groupArg.key}
584
946
  data-tool-layout=${groupArg.layout}
585
947
  >
586
948
  <div class=${`toolGrid ${countClass}`}>
587
- ${repeat(groupArg.messages, (item) => item.key, (item) => this.renderMessage(item))}
949
+ ${repeat(groupArg.messages, (item) => item.key, (item) => this.renderMessage(item, groupArg.key))}
588
950
  </div>
589
951
  </section>
590
952
  `;
@@ -644,9 +1006,15 @@ let DeesHarnessMessageList = (() => {
644
1006
  harnessApplyMessageDelta(this.messages, delta);
645
1007
  break;
646
1008
  case 'tool-update':
1009
+ const previousLayout = message.toolCall ? this.toolRegistry.resolveLayout(message.toolCall) : null;
647
1010
  message.toolCall = { ...(message.toolCall ?? { id: delta.tool.id, name: '', status: 'pending' }), ...delta.tool };
1011
+ const nextLayout = this.toolRegistry.resolveLayout(message.toolCall);
1012
+ this.syncSubtaskViewState(message);
648
1013
  element?.requestUpdate();
649
- this.requestUpdate();
1014
+ if (previousLayout !== nextLayout) {
1015
+ this.rebuildTimeline();
1016
+ this.requestUpdate();
1017
+ }
650
1018
  break;
651
1019
  case 'message-end':
652
1020
  if (element)
@@ -730,6 +1098,7 @@ let DeesHarnessMessageList = (() => {
730
1098
  if (event.type === 'pointerdown' && event.target !== this.scrollContainer)
731
1099
  return;
732
1100
  this.userUnpinned = true;
1101
+ this.measurementAnchor = undefined;
733
1102
  };
734
1103
  scrollToBottom(force = false) {
735
1104
  const container = this.scrollContainer;
@@ -737,6 +1106,7 @@ let DeesHarnessMessageList = (() => {
737
1106
  return;
738
1107
  if (force) {
739
1108
  this.userUnpinned = false;
1109
+ this.measurementAnchor = undefined;
740
1110
  }
741
1111
  if (force || this.isPinnedToBottom) {
742
1112
  container.scrollTop = container.scrollHeight;
@@ -759,7 +1129,106 @@ let DeesHarnessMessageList = (() => {
759
1129
  }
760
1130
  }
761
1131
  this.lastObservedScrollTop = top;
1132
+ this.scheduleVirtualRangeUpdate();
1133
+ this.schedulePendingVirtualizationActivation();
762
1134
  };
1135
+ schedulePendingVirtualizationActivation() {
1136
+ if ((!this.virtualizationEnablePending && !this.virtualizationDisablePending)
1137
+ || this.virtualizationActivationFrame !== null)
1138
+ return;
1139
+ this.virtualizationActivationFrame = requestAnimationFrame(() => {
1140
+ this.virtualizationActivationFrame = null;
1141
+ if (!this.isConnected || this.activeTimelineKey())
1142
+ return;
1143
+ const container = this.scrollContainer;
1144
+ const anchor = container ? this.captureCurrentAnchor(container) : undefined;
1145
+ if (this.virtualizationEnablePending) {
1146
+ this.captureFullTimelineMeasurements();
1147
+ this.virtualizationEnabled = true;
1148
+ this.virtualizationEnablePending = false;
1149
+ this.recomputeVirtualOffsets();
1150
+ if (anchor) {
1151
+ this.pendingVirtualAnchor = anchor;
1152
+ this.setVirtualRangeAround(anchor.key);
1153
+ }
1154
+ else {
1155
+ this.setInitialVirtualRange();
1156
+ }
1157
+ }
1158
+ else if (this.virtualizationDisablePending) {
1159
+ this.virtualizationEnabled = false;
1160
+ this.virtualizationDisablePending = false;
1161
+ this.retainedVirtualKeys.clear();
1162
+ if (anchor)
1163
+ this.pendingFullAnchor = anchor;
1164
+ this.setInitialVirtualRange();
1165
+ }
1166
+ this.disconnectSelectionChangeListener();
1167
+ this.requestUpdate();
1168
+ });
1169
+ }
1170
+ handleSelectionChange = () => {
1171
+ const selection = document.getSelection();
1172
+ if (!selection
1173
+ || selection.rangeCount === 0
1174
+ || (!this.selectionGestureActive
1175
+ && this.selectionGestureSnapshot
1176
+ && !this.selectionMatchesGestureSnapshot(selection))
1177
+ || (!this.selectionGestureActive
1178
+ && selection.isCollapsed
1179
+ && !this.hasCrossShadowSelectionFallback))
1180
+ this.clearSelectionGesture();
1181
+ this.scheduleVirtualRangeUpdate();
1182
+ this.schedulePendingVirtualizationActivation();
1183
+ };
1184
+ handlePointerDown = (eventArg) => {
1185
+ this.handleUserScrollIntent(eventArg);
1186
+ if (eventArg.button !== 0)
1187
+ return;
1188
+ this.clearSelectionGesture();
1189
+ this.selectionGestureActive = true;
1190
+ this.selectionGestureStartOwner = this.selectionOwnerForEvent(eventArg);
1191
+ const key = this.timelineKeyForEvent(eventArg);
1192
+ if (key)
1193
+ this.selectionGestureKeys.add(key);
1194
+ };
1195
+ handlePointerUp = (eventArg) => {
1196
+ if (eventArg.button !== 0)
1197
+ return;
1198
+ const key = this.timelineKeyForEvent(eventArg);
1199
+ if (key)
1200
+ this.selectionGestureKeys.add(key);
1201
+ const endOwner = this.selectionOwnerForEvent(eventArg);
1202
+ this.selectionGestureCrossesOwners = Boolean(this.selectionGestureStartOwner
1203
+ && endOwner
1204
+ && this.selectionGestureStartOwner !== endOwner);
1205
+ this.selectionGestureActive = false;
1206
+ this.selectionGestureSnapshot = this.captureSelectionSnapshot(document.getSelection());
1207
+ if (!this.hasCrossShadowSelectionFallback && document.getSelection()?.isCollapsed !== false) {
1208
+ this.clearSelectionGesture();
1209
+ }
1210
+ this.handleProtectedStateChange();
1211
+ };
1212
+ handlePointerCancel = () => {
1213
+ this.clearSelectionGesture();
1214
+ this.handleProtectedStateChange();
1215
+ };
1216
+ handleProtectedStateChange = () => {
1217
+ this.scheduleVirtualRangeUpdate();
1218
+ this.schedulePendingVirtualizationActivation();
1219
+ };
1220
+ connectSelectionChangeListener() {
1221
+ if (this.selectionChangeListening)
1222
+ return;
1223
+ document.addEventListener('selectionchange', this.handleSelectionChange);
1224
+ this.selectionChangeListening = true;
1225
+ }
1226
+ disconnectSelectionChangeListener() {
1227
+ if (!this.selectionChangeListening)
1228
+ return;
1229
+ document.removeEventListener('selectionchange', this.handleSelectionChange);
1230
+ this.selectionChangeListening = false;
1231
+ }
763
1232
  updated(changedProperties) {
764
1233
  super.updated(changedProperties);
765
1234
  if (changedProperties.has('messages') || changedProperties.has('status') || changedProperties.has('permissions') || changedProperties.has('questions')) {
@@ -778,6 +1247,25 @@ let DeesHarnessMessageList = (() => {
778
1247
  || changedProperties.has('permissions')
779
1248
  || changedProperties.has('questions'))
780
1249
  this.syncScrollEdgeFades();
1250
+ if (this.virtualizationActive) {
1251
+ this.connectVirtualObservers();
1252
+ if (this.pendingVirtualAnchor) {
1253
+ this.restoreVirtualAnchor(this.scrollContainer, this.pendingVirtualAnchor);
1254
+ this.pendingVirtualAnchor = undefined;
1255
+ }
1256
+ else if (this.pendingVirtualRepin) {
1257
+ this.repinToBottom();
1258
+ this.pendingVirtualRepin = false;
1259
+ }
1260
+ this.scheduleVirtualRangeUpdate();
1261
+ }
1262
+ else {
1263
+ this.disconnectVirtualObservers();
1264
+ if (this.pendingFullAnchor) {
1265
+ this.restoreFullAnchor(this.scrollContainer, this.pendingFullAnchor);
1266
+ this.pendingFullAnchor = undefined;
1267
+ }
1268
+ }
781
1269
  }
782
1270
  firstUpdated(changedProperties) {
783
1271
  super.firstUpdated(changedProperties);
@@ -786,6 +1274,8 @@ let DeesHarnessMessageList = (() => {
786
1274
  this.connectContentResizeObserver();
787
1275
  this.repinToBottom();
788
1276
  this.syncScrollEdgeFades();
1277
+ if (this.virtualizationActive)
1278
+ this.connectVirtualObservers();
789
1279
  // let the initial batch paint without entry animations, then enable them
790
1280
  this.entryFrame = requestAnimationFrame(() => {
791
1281
  this.entryFrame = null;
@@ -801,8 +1291,15 @@ let DeesHarnessMessageList = (() => {
801
1291
  }
802
1292
  async connectedCallback() {
803
1293
  const connected = super.connectedCallback();
804
- if (this.hasUpdated)
1294
+ if (this.virtualizationEnablePending || this.virtualizationDisablePending) {
1295
+ this.connectSelectionChangeListener();
1296
+ }
1297
+ if (this.hasUpdated) {
805
1298
  this.connectContentResizeObserver();
1299
+ if (this.virtualizationActive)
1300
+ this.connectVirtualObservers();
1301
+ this.schedulePendingVirtualizationActivation();
1302
+ }
806
1303
  await connected;
807
1304
  }
808
1305
  connectContentResizeObserver() {
@@ -823,6 +1320,361 @@ let DeesHarnessMessageList = (() => {
823
1320
  this.contentResizeObserver.observe(content);
824
1321
  this.observedScrollContent = content;
825
1322
  }
1323
+ connectVirtualObservers() {
1324
+ const container = this.scrollContainer;
1325
+ if (!container)
1326
+ return;
1327
+ this.virtualViewportResizeObserver ??= new ResizeObserver((entries) => {
1328
+ const width = entries[0]?.contentRect.width ?? 0;
1329
+ if (width > 0 && Math.abs(width - this.lastVirtualViewportWidth) > 0.5) {
1330
+ const preserveAnchor = this.userUnpinned || !this.autoFollow;
1331
+ const anchor = preserveAnchor ? this.captureVirtualMetricAnchor(container) : undefined;
1332
+ this.lastVirtualViewportWidth = width;
1333
+ this.measuredVirtualHeights.clear();
1334
+ this.recomputeVirtualOffsets();
1335
+ if (anchor)
1336
+ this.pendingVirtualAnchor = anchor;
1337
+ else
1338
+ this.pendingVirtualRepin = true;
1339
+ this.requestUpdate();
1340
+ this.scheduleVirtualRangeUpdate(true);
1341
+ }
1342
+ });
1343
+ this.virtualViewportResizeObserver.disconnect();
1344
+ this.virtualViewportResizeObserver.observe(container);
1345
+ this.lastVirtualViewportWidth ||= container.getBoundingClientRect().width;
1346
+ this.virtualRowResizeObserver ??= new ResizeObserver(() => this.scheduleVirtualMeasurements());
1347
+ this.virtualRowResizeObserver.disconnect();
1348
+ for (const row of this.shadowRoot?.querySelectorAll('.virtualItem') ?? []) {
1349
+ this.virtualRowResizeObserver.observe(row);
1350
+ }
1351
+ }
1352
+ scheduleVirtualMeasurements() {
1353
+ if (this.virtualMeasureFrame !== null)
1354
+ return;
1355
+ this.virtualMeasureFrame = requestAnimationFrame(() => {
1356
+ this.virtualMeasureFrame = null;
1357
+ this.measureVirtualRows();
1358
+ });
1359
+ }
1360
+ measureVirtualRows() {
1361
+ const container = this.scrollContainer;
1362
+ if (!container || !this.virtualizationActive)
1363
+ return;
1364
+ const preserveAnchor = this.userUnpinned || !this.autoFollow;
1365
+ const anchor = preserveAnchor
1366
+ ? (this.measurementAnchor ?? this.captureVirtualMetricAnchor(container))
1367
+ : undefined;
1368
+ let changed = false;
1369
+ for (const row of this.shadowRoot?.querySelectorAll('.virtualItem') ?? []) {
1370
+ const key = row.dataset.virtualKey;
1371
+ if (!key)
1372
+ continue;
1373
+ const height = row.getBoundingClientRect().height;
1374
+ if (height <= 0 || Math.abs((this.measuredVirtualHeights.get(key) ?? 0) - height) <= 0.5)
1375
+ continue;
1376
+ this.measuredVirtualHeights.set(key, height);
1377
+ changed = true;
1378
+ }
1379
+ if (!changed) {
1380
+ this.measurementAnchor = undefined;
1381
+ return;
1382
+ }
1383
+ this.recomputeVirtualOffsets();
1384
+ if (anchor)
1385
+ this.pendingVirtualAnchor = anchor;
1386
+ else
1387
+ this.pendingVirtualRepin = true;
1388
+ this.requestUpdate();
1389
+ if (this.measurementAnchor)
1390
+ this.scheduleVirtualMeasurements();
1391
+ }
1392
+ captureVirtualAnchor(containerArg) {
1393
+ const containerTop = containerArg.getBoundingClientRect().top;
1394
+ const row = Array.from(this.shadowRoot?.querySelectorAll('.virtualItem') ?? [])
1395
+ .find((candidate) => candidate.getBoundingClientRect().bottom > containerTop);
1396
+ const key = row?.dataset.virtualKey;
1397
+ if (row && key)
1398
+ return { key, offset: containerTop - row.getBoundingClientRect().top };
1399
+ const localTop = this.virtualLocalScrollTop(containerArg);
1400
+ return this.captureVirtualOffsetAnchorAt(localTop);
1401
+ }
1402
+ captureVirtualMetricAnchor(containerArg) {
1403
+ const localTop = this.virtualLocalScrollTop(containerArg);
1404
+ for (const row of this.shadowRoot?.querySelectorAll('.virtualItem') ?? []) {
1405
+ const key = row.dataset.virtualKey;
1406
+ const index = key ? this.timelineIndexByKey.get(key) : undefined;
1407
+ if (index === undefined)
1408
+ continue;
1409
+ const item = this.timelineRenderItems[index];
1410
+ const offset = this.virtualOffsets[index] ?? 0;
1411
+ const height = this.measuredVirtualHeights.get(item.key) ?? this.estimatedVirtualHeight(item);
1412
+ if (offset + height > localTop)
1413
+ return { key: item.key, offset: localTop - offset };
1414
+ }
1415
+ return this.captureVirtualOffsetAnchorAt(localTop);
1416
+ }
1417
+ captureVirtualOffsetAnchorAt(localTopArg) {
1418
+ let index = this.virtualIndexAtOffset(localTopArg);
1419
+ const item = this.timelineRenderItems[index];
1420
+ const itemHeight = item
1421
+ ? (this.measuredVirtualHeights.get(item.key) ?? this.estimatedVirtualHeight(item))
1422
+ : 0;
1423
+ if (item
1424
+ && localTopArg > (this.virtualOffsets[index] ?? 0) + itemHeight
1425
+ && index + 1 < this.timelineRenderItems.length)
1426
+ index += 1;
1427
+ const anchorItem = this.timelineRenderItems[index];
1428
+ return anchorItem
1429
+ ? { key: anchorItem.key, offset: localTopArg - (this.virtualOffsets[index] ?? 0) }
1430
+ : undefined;
1431
+ }
1432
+ restoreVirtualAnchor(containerArg, anchorArg) {
1433
+ const index = this.timelineIndexByKey.get(anchorArg.key);
1434
+ if (index === undefined)
1435
+ return;
1436
+ const stack = this.shadowRoot?.querySelector('.virtualStack');
1437
+ containerArg.scrollTop = (stack?.offsetTop ?? 0) + (this.virtualOffsets[index] ?? 0) + anchorArg.offset;
1438
+ }
1439
+ restoreFullAnchor(containerArg, anchorArg) {
1440
+ const element = this.shadowRoot?.querySelector(`.stack > [data-timeline-key="${CSS.escape(anchorArg.key)}"]`);
1441
+ if (!element)
1442
+ return;
1443
+ containerArg.scrollTop += element.getBoundingClientRect().top
1444
+ - containerArg.getBoundingClientRect().top
1445
+ + anchorArg.offset;
1446
+ }
1447
+ virtualLocalScrollTop(containerArg) {
1448
+ const stack = this.shadowRoot?.querySelector('.virtualStack');
1449
+ return Math.max(0, containerArg.scrollTop - (stack?.offsetTop ?? 0));
1450
+ }
1451
+ virtualIndexAtOffset(offsetArg, offsetsArg = this.virtualOffsets) {
1452
+ if (offsetsArg.length === 0)
1453
+ return 0;
1454
+ let low = 0;
1455
+ let high = offsetsArg.length - 1;
1456
+ while (low < high) {
1457
+ const middle = Math.floor((low + high + 1) / 2);
1458
+ if ((offsetsArg[middle] ?? 0) <= offsetArg)
1459
+ low = middle;
1460
+ else
1461
+ high = middle - 1;
1462
+ }
1463
+ return low;
1464
+ }
1465
+ scheduleVirtualRangeUpdate(force = false) {
1466
+ if (!this.virtualizationActive)
1467
+ return;
1468
+ if (force && this.virtualRangeFrame !== null) {
1469
+ cancelAnimationFrame(this.virtualRangeFrame);
1470
+ this.virtualRangeFrame = null;
1471
+ }
1472
+ if (this.virtualRangeFrame !== null)
1473
+ return;
1474
+ this.virtualRangeFrame = requestAnimationFrame(() => {
1475
+ this.virtualRangeFrame = null;
1476
+ this.updateVirtualRange();
1477
+ });
1478
+ }
1479
+ updateVirtualRange() {
1480
+ const container = this.scrollContainer;
1481
+ if (!container || !this.virtualizationActive)
1482
+ return;
1483
+ const localTop = this.virtualLocalScrollTop(container);
1484
+ const startTarget = Math.max(0, localTop - virtualOverscanPx);
1485
+ const endTarget = localTop + container.clientHeight + virtualOverscanPx;
1486
+ const start = Math.max(0, this.virtualIndexAtOffset(startTarget) - 1);
1487
+ const end = Math.min(this.timelineRenderItems.length, this.virtualIndexAtOffset(endTarget) + 2);
1488
+ const retainedKeys = new Set(this.activeVirtualKeys());
1489
+ if (start === this.virtualStartIndex
1490
+ && end === this.virtualEndIndex
1491
+ && retainedKeys.size === this.retainedVirtualKeys.size
1492
+ && [...retainedKeys].every((key) => this.retainedVirtualKeys.has(key)))
1493
+ return;
1494
+ this.virtualStartIndex = start;
1495
+ this.virtualEndIndex = end;
1496
+ this.retainedVirtualKeys = retainedKeys;
1497
+ if (this.activeSelectionKeys().length > 0)
1498
+ this.connectSelectionChangeListener();
1499
+ else if (!this.virtualizationEnablePending && !this.virtualizationDisablePending) {
1500
+ this.disconnectSelectionChangeListener();
1501
+ }
1502
+ this.requestUpdate();
1503
+ }
1504
+ activeVirtualKeys() {
1505
+ const focusKey = this.activeFocusKey();
1506
+ return [
1507
+ ...(this.explicitRetainedVirtualKey ? [this.explicitRetainedVirtualKey] : []),
1508
+ ...(focusKey ? [focusKey] : []),
1509
+ ...this.activeSelectionKeys(),
1510
+ ].filter((key, index, keys) => keys.indexOf(key) === index);
1511
+ }
1512
+ activeTimelineKey() {
1513
+ if (this.explicitRetainedVirtualKey)
1514
+ return this.explicitRetainedVirtualKey;
1515
+ return this.activeFocusKey() ?? this.activeSelectionKeys()[0];
1516
+ }
1517
+ activeFocusKey() {
1518
+ const activeElement = this.shadowRoot?.activeElement;
1519
+ if (activeElement instanceof Element) {
1520
+ const focusedKey = this.ownedTimelineElement(activeElement)?.dataset.timelineKey
1521
+ ?? this.ownedVirtualRow(activeElement)?.dataset.virtualKey;
1522
+ if (focusedKey)
1523
+ return focusedKey;
1524
+ }
1525
+ return undefined;
1526
+ }
1527
+ activeSelectionKeys() {
1528
+ if (this.selectionGestureActive)
1529
+ return [...this.selectionGestureKeys];
1530
+ const selection = document.getSelection();
1531
+ if (!selection || selection.rangeCount === 0)
1532
+ return [];
1533
+ if (selection.isCollapsed) {
1534
+ return this.hasCrossShadowSelectionFallback ? [...this.selectionGestureKeys] : [];
1535
+ }
1536
+ const range = selection.getRangeAt(0);
1537
+ const nodes = [
1538
+ selection.anchorNode,
1539
+ selection.focusNode,
1540
+ range.startContainer,
1541
+ range.endContainer,
1542
+ ];
1543
+ if ('getComposedRanges' in selection && typeof selection.getComposedRanges === 'function') {
1544
+ const composedRanges = selection.getComposedRanges({
1545
+ shadowRoots: this.mountedShadowRoots(),
1546
+ });
1547
+ const composedRange = composedRanges[0];
1548
+ if (composedRange)
1549
+ nodes.push(composedRange.startContainer, composedRange.endContainer);
1550
+ }
1551
+ return [
1552
+ ...nodes
1553
+ .filter((node) => node !== null)
1554
+ .map((node) => this.timelineKeyForNode(node))
1555
+ .filter((key) => key !== undefined),
1556
+ ...this.selectionGestureKeys,
1557
+ ]
1558
+ .filter((key, index, keys) => keys.indexOf(key) === index);
1559
+ }
1560
+ mountedShadowRoots() {
1561
+ const roots = [];
1562
+ const collect = (rootArg) => {
1563
+ for (const element of rootArg.querySelectorAll('*')) {
1564
+ if (!element.shadowRoot)
1565
+ continue;
1566
+ roots.push(element.shadowRoot);
1567
+ collect(element.shadowRoot);
1568
+ }
1569
+ };
1570
+ if (this.shadowRoot)
1571
+ collect(this.shadowRoot);
1572
+ return roots;
1573
+ }
1574
+ timelineKeyForNode(nodeArg) {
1575
+ let node = nodeArg;
1576
+ while (node) {
1577
+ if (node instanceof HTMLElement && node.classList.contains('virtualItem')) {
1578
+ const ownedRow = this.ownedVirtualRow(node);
1579
+ if (ownedRow)
1580
+ return ownedRow.dataset.virtualKey;
1581
+ }
1582
+ if (node instanceof HTMLElement) {
1583
+ const timelineElement = this.ownedTimelineElement(node);
1584
+ if (timelineElement)
1585
+ return timelineElement.dataset.timelineKey;
1586
+ }
1587
+ const root = node.getRootNode();
1588
+ node = node.parentNode ?? (root instanceof ShadowRoot ? root.host : null);
1589
+ }
1590
+ return undefined;
1591
+ }
1592
+ timelineKeyForEvent(eventArg) {
1593
+ for (const candidate of eventArg.composedPath()) {
1594
+ if (!(candidate instanceof Element))
1595
+ continue;
1596
+ const rowKey = this.ownedVirtualRow(candidate)?.dataset.virtualKey;
1597
+ if (rowKey)
1598
+ return rowKey;
1599
+ const timelineKey = this.ownedTimelineElement(candidate)?.dataset.timelineKey;
1600
+ if (timelineKey)
1601
+ return timelineKey;
1602
+ }
1603
+ return undefined;
1604
+ }
1605
+ selectionOwnerForEvent(eventArg) {
1606
+ for (const candidate of eventArg.composedPath()) {
1607
+ if (!(candidate instanceof HTMLElement))
1608
+ continue;
1609
+ if ((candidate.tagName === 'DEES-HARNESS-MESSAGE'
1610
+ || candidate.tagName === 'DEES-HARNESS-PERMISSION-CARD'
1611
+ || candidate.tagName === 'DEES-HARNESS-QUESTION-CARD')
1612
+ && this.timelineKeyForNode(candidate))
1613
+ return candidate;
1614
+ }
1615
+ return eventArg.composedPath()
1616
+ .filter((candidate) => candidate instanceof Element)
1617
+ .map((candidate) => this.ownedTimelineElement(candidate) ?? this.ownedVirtualRow(candidate))
1618
+ .find((candidate) => candidate !== undefined);
1619
+ }
1620
+ get hasCrossShadowSelectionFallback() {
1621
+ return this.selectionGestureKeys.size > 1 || this.selectionGestureCrossesOwners;
1622
+ }
1623
+ captureSelectionSnapshot(selectionArg) {
1624
+ if (!selectionArg)
1625
+ return undefined;
1626
+ return {
1627
+ anchorNode: selectionArg.anchorNode,
1628
+ anchorOffset: selectionArg.anchorOffset,
1629
+ focusNode: selectionArg.focusNode,
1630
+ focusOffset: selectionArg.focusOffset,
1631
+ rangeCount: selectionArg.rangeCount,
1632
+ };
1633
+ }
1634
+ selectionMatchesGestureSnapshot(selectionArg) {
1635
+ const snapshot = this.selectionGestureSnapshot;
1636
+ return Boolean(snapshot
1637
+ && snapshot.anchorNode === selectionArg.anchorNode
1638
+ && snapshot.anchorOffset === selectionArg.anchorOffset
1639
+ && snapshot.focusNode === selectionArg.focusNode
1640
+ && snapshot.focusOffset === selectionArg.focusOffset
1641
+ && snapshot.rangeCount === selectionArg.rangeCount);
1642
+ }
1643
+ clearSelectionGesture() {
1644
+ this.selectionGestureKeys.clear();
1645
+ this.selectionGestureActive = false;
1646
+ this.selectionGestureStartOwner = undefined;
1647
+ this.selectionGestureCrossesOwners = false;
1648
+ this.selectionGestureSnapshot = undefined;
1649
+ }
1650
+ handleCardRetention = (eventArg) => {
1651
+ const pathElements = eventArg.composedPath()
1652
+ .filter((candidate) => candidate instanceof HTMLElement);
1653
+ const row = pathElements.map((candidate) => this.ownedVirtualRow(candidate))
1654
+ .find((candidate) => candidate !== undefined);
1655
+ const timelineElement = pathElements.map((candidate) => this.ownedTimelineElement(candidate))
1656
+ .find((candidate) => candidate !== undefined);
1657
+ const key = row?.dataset.virtualKey ?? timelineElement?.dataset.timelineKey;
1658
+ if (eventArg.detail?.active === true && key)
1659
+ this.explicitRetainedVirtualKey = key;
1660
+ else if (!key || this.explicitRetainedVirtualKey === key)
1661
+ this.explicitRetainedVirtualKey = undefined;
1662
+ this.retainedVirtualKeys = new Set(this.activeVirtualKeys());
1663
+ this.scheduleVirtualRangeUpdate();
1664
+ this.schedulePendingVirtualizationActivation();
1665
+ };
1666
+ ownedVirtualRow(elementArg) {
1667
+ const row = elementArg.closest('.virtualItem');
1668
+ return row?.getRootNode() === this.shadowRoot ? row : undefined;
1669
+ }
1670
+ ownedTimelineElement(elementArg) {
1671
+ const timelineElement = elementArg.closest('[data-timeline-key]');
1672
+ return timelineElement?.getRootNode() === this.shadowRoot ? timelineElement : undefined;
1673
+ }
1674
+ disconnectVirtualObservers() {
1675
+ this.virtualRowResizeObserver?.disconnect();
1676
+ this.virtualViewportResizeObserver?.disconnect();
1677
+ }
826
1678
  repinAfterContentGrowth() {
827
1679
  const content = this.observedScrollContent;
828
1680
  if (!content)
@@ -857,6 +1709,7 @@ let DeesHarnessMessageList = (() => {
857
1709
  this.observedContentBlockSize = null;
858
1710
  }
859
1711
  async disconnectedCallback() {
1712
+ this.disconnectSelectionChangeListener();
860
1713
  if (this.followFrame !== null)
861
1714
  cancelAnimationFrame(this.followFrame);
862
1715
  if (this.followSecondFrame !== null)
@@ -865,12 +1718,31 @@ let DeesHarnessMessageList = (() => {
865
1718
  cancelAnimationFrame(this.entryFrame);
866
1719
  if (this.entrySecondFrame !== null)
867
1720
  cancelAnimationFrame(this.entrySecondFrame);
1721
+ if (this.virtualMeasureFrame !== null)
1722
+ cancelAnimationFrame(this.virtualMeasureFrame);
1723
+ if (this.virtualRangeFrame !== null)
1724
+ cancelAnimationFrame(this.virtualRangeFrame);
1725
+ if (this.virtualizationActivationFrame !== null)
1726
+ cancelAnimationFrame(this.virtualizationActivationFrame);
868
1727
  this.followFrame = null;
869
1728
  this.followSecondFrame = null;
870
1729
  this.entryFrame = null;
871
1730
  this.entrySecondFrame = null;
1731
+ this.virtualMeasureFrame = null;
1732
+ this.virtualRangeFrame = null;
1733
+ this.virtualizationActivationFrame = null;
1734
+ this.pendingVirtualAnchor = undefined;
1735
+ this.pendingFullAnchor = undefined;
1736
+ this.measurementAnchor = undefined;
1737
+ this.pendingVirtualRepin = false;
1738
+ this.explicitRetainedVirtualKey = undefined;
1739
+ this.retainedVirtualKeys.clear();
1740
+ this.clearSelectionGesture();
872
1741
  this.entryAnimationsEnabled = true;
873
1742
  this.disconnectContentResizeObserver();
1743
+ this.disconnectVirtualObservers();
1744
+ this.virtualRowResizeObserver = null;
1745
+ this.virtualViewportResizeObserver = null;
874
1746
  await super.disconnectedCallback();
875
1747
  }
876
1748
  static {
@@ -880,4 +1752,4 @@ let DeesHarnessMessageList = (() => {
880
1752
  return DeesHarnessMessageList = _classThis;
881
1753
  })();
882
1754
  export { DeesHarnessMessageList };
883
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLW1lc3NhZ2UtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLW1lc3NhZ2UtbGlzdC9kZWVzLWhhcm5lc3MtbWVzc2FnZS1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQTJCLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTywrQ0FBK0MsQ0FBQztBQUN2RCxPQUFPLGlFQUFpRSxDQUFDO0FBQ3pFLE9BQU8sNkRBQTZELENBQUM7QUFDckUsT0FBTyw4Q0FBOEMsQ0FBQztBQUV0RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBUTlCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQXFDMUI7Ozs7OztHQU1HO0lBRVUsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUlwRCxRQUFRLENBQUMs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
1755
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLW1lc3NhZ2UtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLW1lc3NhZ2UtbGlzdC9kZWVzLWhhcm5lc3MtbWVzc2FnZS1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWF0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQTJCLE1BQU0sb0JBQW9CLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTywrQ0FBK0MsQ0FBQztBQUN2RCxPQUFPLGlFQUFpRSxDQUFDO0FBQ3pFLE9BQU8sNkRBQTZELENBQUM7QUFDckUsT0FBTyw4Q0FBOEMsQ0FBQztBQUV0RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBUTlCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUNuQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUM5QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLENBQUM7QUFxQ3RDOzs7OztHQUtHO0lBRVUsc0JBQXNCOzRCQURs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