@design.estate/dees-catalog 6.8.2 → 6.9.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.
@@ -1,5 +1,5 @@
1
1
  import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
- import type { IHarnessAttachment, IHarnessComposerOption } from '../interfaces.js';
2
+ import type { IHarnessAttachment, IHarnessComposerOption, IHarnessComposerSuggestion } from '../interfaces.js';
3
3
  import '../../00group-button/dees-button/dees-button.js';
4
4
  import '../../00group-input/dees-input-dropdown/dees-input-dropdown.js';
5
5
  import '../../00group-utility/dees-icon/dees-icon.js';
@@ -15,7 +15,7 @@ declare global {
15
15
  * additional button and Send stays available for queueing; an empty prompt
16
16
  * with queued messages offers "Steer now".
17
17
  *
18
- * Controlled component: `value` and `attachments` are owned by the host;
18
+ * Controlled component: `value`, `attachments`, and `suggestions` are owned by the host;
19
19
  * the composer emits `harness-input`, `harness-attachments-change`,
20
20
  * `harness-attachment-error`, `harness-account-change`, `harness-model-change`, `harness-send`,
21
21
  * `harness-steer`, and `harness-abort` (all bubbling + composed).
@@ -43,6 +43,12 @@ export declare class DeesHarnessComposer extends DeesElement {
43
43
  /** number of messages the host has queued while the run is busy */
44
44
  accessor queuedCount: number;
45
45
  accessor attachments: IHarnessAttachment[];
46
+ accessor suggestions: IHarnessComposerSuggestion[];
47
+ private accessor activeSuggestionIndex;
48
+ private accessor suggestionsDismissed;
49
+ private accessor promptFocused;
50
+ private composing;
51
+ private readonly suggestionListId;
46
52
  accessor maxAttachmentBytes: number;
47
53
  accessor maxTotalAttachmentBytes: number;
48
54
  accessor maxAttachmentCount: number;
@@ -62,10 +68,25 @@ export declare class DeesHarnessComposer extends DeesElement {
62
68
  static styles: import("@design.estate/dees-element").CSSResult[];
63
69
  focusPrompt(): Promise<void>;
64
70
  clear(): void;
71
+ willUpdate(changedProperties: Map<PropertyKey, unknown>): void;
72
+ updated(changedProperties: Map<PropertyKey, unknown>): void;
65
73
  render(): TemplateResult;
74
+ private renderSuggestions;
66
75
  private renderChip;
67
76
  private handleTextInput;
68
77
  private handleKeydown;
78
+ private handleCompositionStart;
79
+ private handleCompositionEnd;
80
+ private handlePromptFocus;
81
+ private handlePromptBlur;
82
+ private handleSuggestionPointerDown;
83
+ private resetSuggestionInteraction;
84
+ private get suggestionsVisible();
85
+ private suggestionOptionId;
86
+ private syncTextareaSuggestionAria;
87
+ private moveActiveSuggestion;
88
+ private scrollActiveSuggestionIntoView;
89
+ private selectSuggestion;
69
90
  private autogrow;
70
91
  private handleFileInputChange;
71
92
  private handlePaste;
@@ -33,7 +33,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
33
33
  return useValue ? value : void 0;
34
34
  };
35
35
  import { demoFunc } from './dees-harness-composer.demo.js';
36
- import { DeesElement, html, css, customElement, property, cssManager, } from '@design.estate/dees-element';
36
+ import { DeesElement, html, css, customElement, property, state, cssManager, } from '@design.estate/dees-element';
37
37
  import { themeDefaultStyles } from '../../00theme.js';
38
38
  import { harnessFileToBase64, harnessFormatBytes, harnessAttachmentKindFor, harnessMaxAttachmentBytes, harnessMaxTotalAttachmentBytes, harnessMediaTypeForFile, } from '../harness.helpers.js';
39
39
  import '../../00group-button/dees-button/dees-button.js';
@@ -41,6 +41,7 @@ import '../../00group-input/dees-input-dropdown/dees-input-dropdown.js';
41
41
  import '../../00group-utility/dees-icon/dees-icon.js';
42
42
  const toDropdownOptions = (values) => values.map((value) => ({ option: value, key: value }));
43
43
  const toLabeledDropdownOptions = (values) => values.map((value) => ({ option: value.label, key: value.value }));
44
+ let nextSuggestionListId = 0;
44
45
  /**
45
46
  * Prompt composer: autogrow textarea, attachments (picker / paste /
46
47
  * drag-drop with per-file and total size limits), optional account, model,
@@ -48,7 +49,7 @@ const toLabeledDropdownOptions = (values) => values.map((value) => ({ option: va
48
49
  * additional button and Send stays available for queueing; an empty prompt
49
50
  * with queued messages offers "Steer now".
50
51
  *
51
- * Controlled component: `value` and `attachments` are owned by the host;
52
+ * Controlled component: `value`, `attachments`, and `suggestions` are owned by the host;
52
53
  * the composer emits `harness-input`, `harness-attachments-change`,
53
54
  * `harness-attachment-error`, `harness-account-change`, `harness-model-change`, `harness-send`,
54
55
  * `harness-steer`, and `harness-abort` (all bubbling + composed).
@@ -80,6 +81,18 @@ let DeesHarnessComposer = (() => {
80
81
  let _attachments_decorators;
81
82
  let _attachments_initializers = [];
82
83
  let _attachments_extraInitializers = [];
84
+ let _suggestions_decorators;
85
+ let _suggestions_initializers = [];
86
+ let _suggestions_extraInitializers = [];
87
+ let _activeSuggestionIndex_decorators;
88
+ let _activeSuggestionIndex_initializers = [];
89
+ let _activeSuggestionIndex_extraInitializers = [];
90
+ let _suggestionsDismissed_decorators;
91
+ let _suggestionsDismissed_initializers = [];
92
+ let _suggestionsDismissed_extraInitializers = [];
93
+ let _promptFocused_decorators;
94
+ let _promptFocused_initializers = [];
95
+ let _promptFocused_extraInitializers = [];
83
96
  let _maxAttachmentBytes_decorators;
84
97
  let _maxAttachmentBytes_initializers = [];
85
98
  let _maxAttachmentBytes_extraInitializers = [];
@@ -127,6 +140,10 @@ let DeesHarnessComposer = (() => {
127
140
  _busy_decorators = [property({ type: Boolean })];
128
141
  _queuedCount_decorators = [property({ type: Number })];
129
142
  _attachments_decorators = [property({ attribute: false })];
143
+ _suggestions_decorators = [property({ attribute: false })];
144
+ _activeSuggestionIndex_decorators = [state()];
145
+ _suggestionsDismissed_decorators = [state()];
146
+ _promptFocused_decorators = [state()];
130
147
  _maxAttachmentBytes_decorators = [property({ type: Number })];
131
148
  _maxTotalAttachmentBytes_decorators = [property({ type: Number })];
132
149
  _maxAttachmentCount_decorators = [property({ type: Number })];
@@ -146,6 +163,10 @@ let DeesHarnessComposer = (() => {
146
163
  __esDecorate(this, null, _busy_decorators, { kind: "accessor", name: "busy", static: false, private: false, access: { has: obj => "busy" in obj, get: obj => obj.busy, set: (obj, value) => { obj.busy = value; } }, metadata: _metadata }, _busy_initializers, _busy_extraInitializers);
147
164
  __esDecorate(this, null, _queuedCount_decorators, { kind: "accessor", name: "queuedCount", static: false, private: false, access: { has: obj => "queuedCount" in obj, get: obj => obj.queuedCount, set: (obj, value) => { obj.queuedCount = value; } }, metadata: _metadata }, _queuedCount_initializers, _queuedCount_extraInitializers);
148
165
  __esDecorate(this, null, _attachments_decorators, { kind: "accessor", name: "attachments", static: false, private: false, access: { has: obj => "attachments" in obj, get: obj => obj.attachments, set: (obj, value) => { obj.attachments = value; } }, metadata: _metadata }, _attachments_initializers, _attachments_extraInitializers);
166
+ __esDecorate(this, null, _suggestions_decorators, { kind: "accessor", name: "suggestions", static: false, private: false, access: { has: obj => "suggestions" in obj, get: obj => obj.suggestions, set: (obj, value) => { obj.suggestions = value; } }, metadata: _metadata }, _suggestions_initializers, _suggestions_extraInitializers);
167
+ __esDecorate(this, null, _activeSuggestionIndex_decorators, { kind: "accessor", name: "activeSuggestionIndex", static: false, private: false, access: { has: obj => "activeSuggestionIndex" in obj, get: obj => obj.activeSuggestionIndex, set: (obj, value) => { obj.activeSuggestionIndex = value; } }, metadata: _metadata }, _activeSuggestionIndex_initializers, _activeSuggestionIndex_extraInitializers);
168
+ __esDecorate(this, null, _suggestionsDismissed_decorators, { kind: "accessor", name: "suggestionsDismissed", static: false, private: false, access: { has: obj => "suggestionsDismissed" in obj, get: obj => obj.suggestionsDismissed, set: (obj, value) => { obj.suggestionsDismissed = value; } }, metadata: _metadata }, _suggestionsDismissed_initializers, _suggestionsDismissed_extraInitializers);
169
+ __esDecorate(this, null, _promptFocused_decorators, { kind: "accessor", name: "promptFocused", static: false, private: false, access: { has: obj => "promptFocused" in obj, get: obj => obj.promptFocused, set: (obj, value) => { obj.promptFocused = value; } }, metadata: _metadata }, _promptFocused_initializers, _promptFocused_extraInitializers);
149
170
  __esDecorate(this, null, _maxAttachmentBytes_decorators, { kind: "accessor", name: "maxAttachmentBytes", static: false, private: false, access: { has: obj => "maxAttachmentBytes" in obj, get: obj => obj.maxAttachmentBytes, set: (obj, value) => { obj.maxAttachmentBytes = value; } }, metadata: _metadata }, _maxAttachmentBytes_initializers, _maxAttachmentBytes_extraInitializers);
150
171
  __esDecorate(this, null, _maxTotalAttachmentBytes_decorators, { kind: "accessor", name: "maxTotalAttachmentBytes", static: false, private: false, access: { has: obj => "maxTotalAttachmentBytes" in obj, get: obj => obj.maxTotalAttachmentBytes, set: (obj, value) => { obj.maxTotalAttachmentBytes = value; } }, metadata: _metadata }, _maxTotalAttachmentBytes_initializers, _maxTotalAttachmentBytes_extraInitializers);
151
172
  __esDecorate(this, null, _maxAttachmentCount_decorators, { kind: "accessor", name: "maxAttachmentCount", static: false, private: false, access: { has: obj => "maxAttachmentCount" in obj, get: obj => obj.maxAttachmentCount, set: (obj, value) => { obj.maxAttachmentCount = value; } }, metadata: _metadata }, _maxAttachmentCount_initializers, _maxAttachmentCount_extraInitializers);
@@ -198,7 +219,21 @@ let DeesHarnessComposer = (() => {
198
219
  #attachments_accessor_storage = (__runInitializers(this, _queuedCount_extraInitializers), __runInitializers(this, _attachments_initializers, []));
199
220
  get attachments() { return this.#attachments_accessor_storage; }
200
221
  set attachments(value) { this.#attachments_accessor_storage = value; }
201
- #maxAttachmentBytes_accessor_storage = (__runInitializers(this, _attachments_extraInitializers), __runInitializers(this, _maxAttachmentBytes_initializers, harnessMaxAttachmentBytes));
222
+ #suggestions_accessor_storage = (__runInitializers(this, _attachments_extraInitializers), __runInitializers(this, _suggestions_initializers, []));
223
+ get suggestions() { return this.#suggestions_accessor_storage; }
224
+ set suggestions(value) { this.#suggestions_accessor_storage = value; }
225
+ #activeSuggestionIndex_accessor_storage = (__runInitializers(this, _suggestions_extraInitializers), __runInitializers(this, _activeSuggestionIndex_initializers, -1));
226
+ get activeSuggestionIndex() { return this.#activeSuggestionIndex_accessor_storage; }
227
+ set activeSuggestionIndex(value) { this.#activeSuggestionIndex_accessor_storage = value; }
228
+ #suggestionsDismissed_accessor_storage = (__runInitializers(this, _activeSuggestionIndex_extraInitializers), __runInitializers(this, _suggestionsDismissed_initializers, false));
229
+ get suggestionsDismissed() { return this.#suggestionsDismissed_accessor_storage; }
230
+ set suggestionsDismissed(value) { this.#suggestionsDismissed_accessor_storage = value; }
231
+ #promptFocused_accessor_storage = (__runInitializers(this, _suggestionsDismissed_extraInitializers), __runInitializers(this, _promptFocused_initializers, false));
232
+ get promptFocused() { return this.#promptFocused_accessor_storage; }
233
+ set promptFocused(value) { this.#promptFocused_accessor_storage = value; }
234
+ composing = (__runInitializers(this, _promptFocused_extraInitializers), false);
235
+ suggestionListId = `dees-harness-composer-suggestions-${++nextSuggestionListId}`;
236
+ #maxAttachmentBytes_accessor_storage = __runInitializers(this, _maxAttachmentBytes_initializers, harnessMaxAttachmentBytes);
202
237
  get maxAttachmentBytes() { return this.#maxAttachmentBytes_accessor_storage; }
203
238
  set maxAttachmentBytes(value) { this.#maxAttachmentBytes_accessor_storage = value; }
204
239
  #maxTotalAttachmentBytes_accessor_storage = (__runInitializers(this, _maxAttachmentBytes_extraInitializers), __runInitializers(this, _maxTotalAttachmentBytes_initializers, harnessMaxTotalAttachmentBytes));
@@ -248,6 +283,69 @@ let DeesHarnessComposer = (() => {
248
283
  container-type: inline-size;
249
284
  }
250
285
 
286
+ .composerShell {
287
+ position: relative;
288
+ min-width: 0;
289
+ }
290
+
291
+ .suggestionList {
292
+ position: absolute;
293
+ z-index: 2;
294
+ inset-inline: 0;
295
+ bottom: calc(100% + var(--dees-spacing-xs));
296
+ box-sizing: border-box;
297
+ max-height: min(240px, 35dvh);
298
+ margin: 0;
299
+ padding: var(--dees-spacing-xs);
300
+ overflow-x: hidden;
301
+ overflow-y: auto;
302
+ overscroll-behavior: contain;
303
+ list-style: none;
304
+ border: 1px solid var(--dees-color-border-subtle);
305
+ border-radius: var(--dees-radius-xl);
306
+ corner-shape: var(--dees-corner-shape);
307
+ background: var(--dees-color-bg-primary);
308
+ box-shadow: var(--dees-shadow-up-sm);
309
+ }
310
+
311
+ .suggestionOption {
312
+ display: grid;
313
+ align-content: center;
314
+ box-sizing: border-box;
315
+ min-width: 0;
316
+ min-height: 44px;
317
+ padding: var(--dees-spacing-xs) var(--dees-spacing-sm);
318
+ border-radius: var(--dees-radius-lg);
319
+ corner-shape: var(--dees-corner-shape);
320
+ color: var(--dees-color-text-primary);
321
+ cursor: pointer;
322
+ touch-action: manipulation;
323
+ }
324
+
325
+ .suggestionOption:hover,
326
+ .suggestionOption.active {
327
+ background: var(--dees-color-fill-secondary);
328
+ }
329
+
330
+ .suggestionLabel {
331
+ min-width: 0;
332
+ overflow: hidden;
333
+ font-size: var(--dees-font-control-size, 13px);
334
+ font-weight: 600;
335
+ line-height: 1.35;
336
+ text-overflow: ellipsis;
337
+ white-space: nowrap;
338
+ }
339
+
340
+ .suggestionDescription {
341
+ min-width: 0;
342
+ margin-top: 2px;
343
+ color: var(--dees-color-text-secondary);
344
+ font-size: var(--dees-font-caption1-size, 11px);
345
+ line-height: 1.35;
346
+ overflow-wrap: anywhere;
347
+ }
348
+
251
349
  .composer {
252
350
  display: grid;
253
351
  gap: var(--dees-spacing-sm);
@@ -470,17 +568,29 @@ let DeesHarnessComposer = (() => {
470
568
  }
471
569
  clear() {
472
570
  this.value = '';
571
+ this.resetSuggestionInteraction();
473
572
  this.emitInput('');
474
573
  this.autogrow();
475
574
  }
575
+ willUpdate(changedProperties) {
576
+ super.willUpdate(changedProperties);
577
+ if (changedProperties.has('suggestions'))
578
+ this.resetSuggestionInteraction();
579
+ }
580
+ updated(changedProperties) {
581
+ super.updated(changedProperties);
582
+ this.syncTextareaSuggestionAria();
583
+ }
476
584
  render() {
477
585
  return html `
478
- <div
479
- class="composer"
480
- @dragover=${this.handleDragOver}
481
- @dragleave=${this.handleDragLeave}
482
- @drop=${this.handleDrop}
483
- >
586
+ <div class="composerShell">
587
+ ${this.suggestionsVisible ? this.renderSuggestions() : ''}
588
+ <div
589
+ class="composer"
590
+ @dragover=${this.handleDragOver}
591
+ @dragleave=${this.handleDragLeave}
592
+ @drop=${this.handleDrop}
593
+ >
484
594
  <input
485
595
  class="fileInput"
486
596
  type="file"
@@ -496,11 +606,16 @@ let DeesHarnessComposer = (() => {
496
606
  : ''}
497
607
  <textarea
498
608
  .value=${this.value}
609
+ aria-label="Message"
499
610
  placeholder=${this.placeholder}
500
611
  ?disabled=${this.disabled}
501
612
  rows="1"
502
613
  @input=${this.handleTextInput}
503
614
  @keydown=${this.handleKeydown}
615
+ @focus=${this.handlePromptFocus}
616
+ @blur=${this.handlePromptBlur}
617
+ @compositionstart=${this.handleCompositionStart}
618
+ @compositionend=${this.handleCompositionEnd}
504
619
  @paste=${this.handlePaste}
505
620
  ></textarea>
506
621
  <div class="controlsRow">
@@ -610,8 +725,38 @@ let DeesHarnessComposer = (() => {
610
725
  Send
611
726
  </dees-button>
612
727
  `}
728
+ </div>
613
729
  </div>
614
730
  </div>
731
+ `;
732
+ }
733
+ renderSuggestions() {
734
+ return html `
735
+ <ul
736
+ id=${this.suggestionListId}
737
+ class="suggestionList"
738
+ role="listbox"
739
+ aria-label="Suggestions"
740
+ @pointerdown=${this.handleSuggestionPointerDown}
741
+ >
742
+ ${this.suggestions.map((suggestion, index) => html `
743
+ <li
744
+ id=${this.suggestionOptionId(index)}
745
+ class=${`suggestionOption ${index === this.activeSuggestionIndex ? 'active' : ''}`}
746
+ role="option"
747
+ aria-selected=${String(index === this.activeSuggestionIndex)}
748
+ @pointerenter=${() => {
749
+ this.activeSuggestionIndex = index;
750
+ }}
751
+ @click=${() => void this.selectSuggestion(index)}
752
+ >
753
+ <span class="suggestionLabel">${suggestion.label}</span>
754
+ ${suggestion.description
755
+ ? html `<span class="suggestionDescription">${suggestion.description}</span>`
756
+ : ''}
757
+ </li>
758
+ `)}
759
+ </ul>
615
760
  `;
616
761
  }
617
762
  renderChip(attachment) {
@@ -641,15 +786,42 @@ let DeesHarnessComposer = (() => {
641
786
  // ------------------------------------------------------------------ input
642
787
  handleTextInput = (__runInitializers(this, _showModelControls_extraInitializers), (event) => {
643
788
  this.value = event.currentTarget.value;
789
+ this.resetSuggestionInteraction();
644
790
  this.emitInput(this.value);
645
791
  this.autogrow();
646
792
  });
647
793
  handleKeydown = (event) => {
794
+ if (event.isComposing || this.composing)
795
+ return;
648
796
  if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {
649
797
  event.preventDefault();
650
798
  this.send();
651
799
  return;
652
800
  }
801
+ if (this.suggestionsVisible) {
802
+ if (event.key === 'Escape') {
803
+ event.preventDefault();
804
+ this.suggestionsDismissed = true;
805
+ return;
806
+ }
807
+ if (!event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) {
808
+ if (event.key === 'ArrowDown') {
809
+ event.preventDefault();
810
+ this.moveActiveSuggestion(1);
811
+ return;
812
+ }
813
+ if (event.key === 'ArrowUp') {
814
+ event.preventDefault();
815
+ this.moveActiveSuggestion(-1);
816
+ return;
817
+ }
818
+ if (event.key === 'Enter') {
819
+ event.preventDefault();
820
+ void this.selectSuggestion(this.activeSuggestionIndex);
821
+ return;
822
+ }
823
+ }
824
+ }
653
825
  // Shift+Tab cycles the agent mode without leaving the prompt
654
826
  if (event.key === 'Tab' && event.shiftKey && this.modeOptions.length) {
655
827
  event.preventDefault();
@@ -659,6 +831,102 @@ let DeesHarnessComposer = (() => {
659
831
  this.emit('harness-mode-change', { mode: nextMode });
660
832
  }
661
833
  };
834
+ handleCompositionStart = () => {
835
+ this.composing = true;
836
+ };
837
+ handleCompositionEnd = () => {
838
+ this.composing = false;
839
+ };
840
+ handlePromptFocus = () => {
841
+ this.promptFocused = true;
842
+ };
843
+ handlePromptBlur = () => {
844
+ this.promptFocused = false;
845
+ };
846
+ handleSuggestionPointerDown = (event) => {
847
+ event.preventDefault();
848
+ };
849
+ resetSuggestionInteraction() {
850
+ this.activeSuggestionIndex = this.suggestions.length ? 0 : -1;
851
+ this.suggestionsDismissed = false;
852
+ }
853
+ get suggestionsVisible() {
854
+ return this.promptFocused
855
+ && !this.disabled
856
+ && !this.suggestionsDismissed
857
+ && this.suggestions.length > 0;
858
+ }
859
+ suggestionOptionId(indexArg) {
860
+ return `${this.suggestionListId}-option-${indexArg}`;
861
+ }
862
+ syncTextareaSuggestionAria() {
863
+ const textarea = this.shadowRoot?.querySelector('textarea');
864
+ if (!textarea)
865
+ return;
866
+ const suggestionsAvailable = !this.disabled && this.suggestions.length > 0;
867
+ if (suggestionsAvailable) {
868
+ textarea.setAttribute('aria-autocomplete', 'list');
869
+ textarea.setAttribute('aria-haspopup', 'listbox');
870
+ }
871
+ else {
872
+ textarea.removeAttribute('aria-autocomplete');
873
+ textarea.removeAttribute('aria-haspopup');
874
+ }
875
+ if (this.suggestionsVisible) {
876
+ textarea.setAttribute('aria-controls', this.suggestionListId);
877
+ }
878
+ else {
879
+ textarea.removeAttribute('aria-controls');
880
+ }
881
+ if (this.suggestionsVisible
882
+ && this.activeSuggestionIndex >= 0
883
+ && this.activeSuggestionIndex < this.suggestions.length) {
884
+ textarea.setAttribute('aria-activedescendant', this.suggestionOptionId(this.activeSuggestionIndex));
885
+ }
886
+ else {
887
+ textarea.removeAttribute('aria-activedescendant');
888
+ }
889
+ }
890
+ moveActiveSuggestion(offsetArg) {
891
+ if (!this.suggestions.length)
892
+ return;
893
+ this.activeSuggestionIndex = this.activeSuggestionIndex < 0
894
+ ? (offsetArg === 1 ? 0 : this.suggestions.length - 1)
895
+ : (this.activeSuggestionIndex + offsetArg + this.suggestions.length) % this.suggestions.length;
896
+ void this.scrollActiveSuggestionIntoView();
897
+ }
898
+ async scrollActiveSuggestionIntoView() {
899
+ await this.updateComplete;
900
+ const list = this.shadowRoot?.getElementById(this.suggestionListId);
901
+ const option = this.shadowRoot?.getElementById(this.suggestionOptionId(this.activeSuggestionIndex));
902
+ if (!list || !option)
903
+ return;
904
+ const optionTop = option.offsetTop;
905
+ const optionBottom = optionTop + option.offsetHeight;
906
+ if (optionTop < list.scrollTop) {
907
+ list.scrollTop = optionTop;
908
+ }
909
+ else if (optionBottom > list.scrollTop + list.clientHeight) {
910
+ list.scrollTop = optionBottom - list.clientHeight;
911
+ }
912
+ }
913
+ async selectSuggestion(indexArg) {
914
+ if (this.disabled)
915
+ return;
916
+ const suggestion = this.suggestions[indexArg];
917
+ if (!suggestion)
918
+ return;
919
+ this.value = suggestion.value;
920
+ this.suggestionsDismissed = true;
921
+ this.emitInput(this.value);
922
+ await this.updateComplete;
923
+ const textarea = this.shadowRoot?.querySelector('textarea');
924
+ if (!textarea)
925
+ return;
926
+ textarea.focus();
927
+ textarea.setSelectionRange(this.value.length, this.value.length);
928
+ this.autogrow();
929
+ }
662
930
  autogrow() {
663
931
  const textarea = this.shadowRoot?.querySelector('textarea');
664
932
  if (!textarea)
@@ -784,4 +1052,4 @@ let DeesHarnessComposer = (() => {
784
1052
  return DeesHarnessComposer = _classThis;
785
1053
  })();
786
1054
  export { DeesHarnessComposer };
787
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaGFybmVzcy9kZWVzLWhhcm5lc3MtY29tcG9zZXIvZGVlcy1oYXJuZXNzLWNvbXBvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFNdEQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6Qiw4QkFBOEIsRUFDOUIsdUJBQXVCLEdBQ3hCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLGdFQUFnRSxDQUFDO0FBQ3hFLE9BQU8sOENBQThDLENBQUM7QUFVdEQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQWdCLEVBQXFCLEVBQUUsQ0FDaEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUV6RCxNQUFNLHdCQUF3QixHQUFHLENBQUMsTUFBZ0MsRUFBcUIsRUFBRSxDQUN2RixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FB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
1055
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaGFybmVzcy9kZWVzLWhhcm5lc3MtY29tcG9zZXIvZGVlcy1oYXJuZXNzLWNvbXBvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBT3RELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIsOEJBQThCLEVBQzlCLHVCQUF1QixHQUN4QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8saURBQWlELENBQUM7QUFDekQsT0FBTyxnRUFBZ0UsQ0FBQztBQUN4RSxPQUFPLDhDQUE4QyxDQUFDO0FBVXRELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFnQixFQUFxQixFQUFFLENBQ2hFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFekQsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQWdDLEVBQXFCLEVBQUUsQ0FDdkYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFB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
@@ -412,6 +412,11 @@ export interface IHarnessComposerOption {
412
412
  label: string;
413
413
  value: string;
414
414
  }
415
+ export interface IHarnessComposerSuggestion {
416
+ label: string;
417
+ value: string;
418
+ description?: string;
419
+ }
415
420
  export interface IHarnessAccountChangeDetail {
416
421
  account: string;
417
422
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "6.8.2",
3
+ "version": "6.9.0",
4
4
  "private": false,
5
5
  "description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
6
6
  "main": "dist_ts_web/index.js",
package/readme.md CHANGED
@@ -1782,6 +1782,18 @@ chat.accountOptions = [
1782
1782
  ];
1783
1783
  chat.modelOptions = ['gpt-5.5', 'o4-mini'];
1784
1784
  chat.effortOptions = ['high', 'medium', 'low'];
1785
+ const commandSuggestions = [
1786
+ { label: 'Explain code', value: 'Explain the selected code' },
1787
+ { label: 'Review diff', value: 'Review the current diff', description: 'Focus on bugs and regressions.' },
1788
+ ];
1789
+ chat.suggestions = commandSuggestions;
1790
+
1791
+ chat.addEventListener('harness-input', (event) => {
1792
+ const value = event.detail.value;
1793
+ chat.suggestions = value.startsWith('/')
1794
+ ? commandSuggestions.filter((suggestion) => suggestion.label.toLowerCase().includes(value.slice(1).toLowerCase()))
1795
+ : [];
1796
+ });
1785
1797
 
1786
1798
  chat.addEventListener('harness-send', (event) => {
1787
1799
  const { text, attachments, account, model, reasoningEffort } = event.detail;
@@ -1803,7 +1815,7 @@ chat.applyDelta({
1803
1815
  });
1804
1816
  ```
1805
1817
 
1806
- Key props: `messages`, `permissions`, `questions`, `status`, `usage`, `todos`/`showTodosPanel`, `sessionMetrics`, `scratchpad`/`scratchpadBusy`/`scratchpadError`, `sessionIntelligenceEnabled`/`intelligenceExchanges`/`intelligenceBusy`/`intelligenceError`, `showSessionSidebar`, `heading`, `subheading`, `showToolbar`, `busy`, `queuedCount`, `disabled`, `account`/`accountOptions`, `model`/`modelOptions`, `reasoningEffort`/`effortOptions`, `mode`/`modeOptions`, `toolRegistry`. Account options use human-readable `label` values and opaque stable `value` identifiers. The status line renders inside the transcript column (it never pushes between the session panel and the composer), and both the toolbar and the docked composer cast a subtle shadow over the scrolling messages.
1818
+ Key props: `messages`, `permissions`, `questions`, `status`, `usage`, `todos`/`showTodosPanel`, `sessionMetrics`, `scratchpad`/`scratchpadBusy`/`scratchpadError`, `sessionIntelligenceEnabled`/`intelligenceExchanges`/`intelligenceBusy`/`intelligenceError`, `showSessionSidebar`, `heading`, `subheading`, `showToolbar`, `busy`, `queuedCount`, `disabled`, `suggestions`, `account`/`accountOptions`, `model`/`modelOptions`, `reasoningEffort`/`effortOptions`, `mode`/`modeOptions`, `toolRegistry`. `suggestions` is forwarded unchanged to the controlled composer. Account options use human-readable `label` values and opaque stable `value` identifiers. The status line renders inside the transcript column (it never pushes between the session panel and the composer), and both the toolbar and the docked composer cast a subtle shadow over the scrolling messages.
1807
1819
 
1808
1820
  A **session side panel** shows Tasks, Tools & Subagents, Tokens, Session Scratchpad, and Session Intelligence next to the transcript. Its sections form a single-open accordion: opening one collapses the others, clicking the open heading collapses all, and each expanded section owns its scrolling while every heading remains visible. Collapsed sections retain their region wrapper but omit the content subtree until expansion; sidebar-owned scratchpad and intelligence drafts survive that lazy remount. Tools & Subagents separates active calls from terminal history and derives both directly from top-level tool messages still present in the host's retained transcript window; evicted calls are not cached. Long activity labels and descriptions use a 40px right-edge fade instead of ellipses, reveal the full line on hover, and run through once after the two-second delay when their section has measurable width. Session Intelligence keeps its exchange history scrollable above a docked, chat-style question composer. Set `.todos` explicitly, or leave it empty and the chat derives tasks from the newest todo tool call in `messages`; `showTodosPanel={false}` hides only that section. Unknown token metrics remain absent. The toolbar controls the session panel; host-owned navigation controls belong outside the chat component. In narrow containers the session panel becomes an accessible overlay; when the toolbar is disabled, an inline Session details control keeps it reachable. `showSessionSidebar={false}` disables the complete panel. Methods: `applyDelta()`, `focusComposer()`, `clearComposer()`, `scrollToBottom()`. Events (also from children, all composed): `harness-send`, `harness-steer`, `harness-abort`, `harness-input`, `harness-attachments-change`, `harness-attachment-error`, `harness-account-change`, `harness-model-change`, `harness-mode-change`, `harness-permission-response`, `harness-question-response`, `harness-subtask-open`, `harness-scratchpad-save`, `harness-session-intelligence-ask`.
1809
1821
 
@@ -1884,7 +1896,9 @@ A question the agent asks mid-run: option buttons with descriptions (single-sele
1884
1896
 
1885
1897
  #### `DeesHarnessComposer`
1886
1898
 
1887
- Prompt input: autogrow textarea, attachment picker/paste/drag-drop with configurable `maxAttachmentCount`, `maxAttachmentBytes` (10 MB default), and `maxTotalAttachmentBytes` (30 MB default), image/text/binary classification, optional account, model, and reasoning-effort dropdowns, Cmd/Ctrl+Enter to send. Attachment count is unlimited unless the host sets it. `dees-harness-chat` forwards all three limits to its composer. Controlled component — the host owns `value`, `attachments`, `account`, and the other selections. Set `accountOptions` to `{ label, value }[]` so the dropdown displays readable labels while events retain opaque stable account values. Account changes emit `harness-account-change` with `{ account }`; `harness-send` includes optional `account` alongside `model` and `reasoningEffort`.
1899
+ Prompt input: autogrow textarea, attachment picker/paste/drag-drop with configurable `maxAttachmentCount`, `maxAttachmentBytes` (10 MB default), and `maxTotalAttachmentBytes` (30 MB default), image/text/binary classification, optional account, model, and reasoning-effort dropdowns, Cmd/Ctrl+Enter to send. Attachment count is unlimited unless the host sets it. `dees-harness-chat` forwards all three limits and `suggestions` to its composer. Controlled component — the host owns `value`, `attachments`, `suggestions`, `account`, and the other selections. Set `accountOptions` to `{ label, value }[]` so the dropdown displays readable labels while events retain opaque stable account values. Account changes emit `harness-account-change` with `{ account }`; `harness-send` includes optional `account` alongside `model` and `reasoningEffort`.
1900
+
1901
+ Set `suggestions` to `IHarnessComposerSuggestion[]`, where each item is `{ label, value, description? }`. The composer does not filter or generate suggestions: listen for `harness-input`, update the controlled `value`, and provide a fresh filtered array. While the textarea owns focus, the listbox stays anchored above the composer; moving focus to another control closes it. Arrow keys wrap through rows, Enter chooses the active row, and Escape dismisses the current list until the next text input or fresh suggestions array. Choosing a row sets `value` to the suggestion's `value` and emits the existing bubbling/composed `harness-input` event; it does not emit `harness-send`.
1888
1902
 
1889
1903
  While `busy`, Stop renders as an additional button and Send stays available so hosts can queue messages. With an empty prompt and `queuedCount > 0`, the primary action becomes **Steer now** (`harness-steer` event) to force the agent to continue with the queued messages immediately.
1890
1904
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '6.8.2',
6
+ version: '6.9.0',
7
7
  description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  }