@design.estate/dees-catalog 11.2.1 → 12.0.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 +1927 -1305
- package/dist_bundle/bundle.js.map +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-conversation-picker/dees-harness-conversation-picker.d.ts +62 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-conversation-picker/dees-harness-conversation-picker.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-conversation-picker/dees-harness-conversation-picker.demo.js +38 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-conversation-picker/dees-harness-conversation-picker.js +455 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-conversation-picker/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-conversation-picker/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +39 -10
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +81 -27
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +327 -115
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.d.ts +6 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +68 -17
- package/dist_ts_web/elements/00group-harness/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/index.js +2 -1
- package/dist_ts_web/elements/00group-harness/interfaces.d.ts +35 -16
- package/package.json +2 -2
- package/readme.md +56 -24
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-harness/dees-harness-conversation-picker/dees-harness-conversation-picker.demo.ts +46 -0
- package/ts_web/elements/00group-harness/dees-harness-conversation-picker/dees-harness-conversation-picker.ts +420 -0
- package/ts_web/elements/00group-harness/dees-harness-conversation-picker/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +94 -36
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +357 -120
- package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +67 -16
- package/ts_web/elements/00group-harness/index.ts +1 -0
- package/ts_web/elements/00group-harness/interfaces.ts +41 -16
|
@@ -131,20 +131,31 @@ export class DeesHarnessToolCard extends DeesElement {
|
|
|
131
131
|
:host {
|
|
132
132
|
display: block;
|
|
133
133
|
container-type: inline-size;
|
|
134
|
-
margin-inline: auto;
|
|
135
134
|
max-width: 100%;
|
|
136
135
|
font-family: var(--dees-font-family);
|
|
137
|
-
transition: max-width var(--dees-transition-default) var(--dees-ease-standard);
|
|
138
136
|
}
|
|
139
137
|
|
|
140
138
|
/*
|
|
141
|
-
* A collapsed card may be held to a narrower measure than its row. The
|
|
142
|
-
* surface
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
139
|
+
* A collapsed card may be held to a narrower measure than its row. The constraint lives on
|
|
140
|
+
* the card surface rather than the host for two reasons: the surface is its own inline-size
|
|
141
|
+
* container, so the header's container queries measure what is actually rendered, and a host
|
|
142
|
+
* cannot transition its own width. The shared default stylesheet applies a universal
|
|
143
|
+
* transition of background and color to every element; from the parent's tree that rule
|
|
144
|
+
* targets this host and outranks any host-scoped rule, so a width transition declared on the
|
|
145
|
+
* host is silently dropped and the card snaps instead of interpolating.
|
|
146
|
+
*
|
|
147
|
+
* The width comes from the context the card sits in: a transcript row of terminal and
|
|
148
|
+
* file-write cards sets it, side-by-side grids leave it unset, and a direct host falls back
|
|
149
|
+
* to the full row.
|
|
146
150
|
*/
|
|
147
|
-
|
|
151
|
+
.harness-card {
|
|
152
|
+
max-width: 100%;
|
|
153
|
+
margin-inline: auto;
|
|
154
|
+
container-type: inline-size;
|
|
155
|
+
transition: max-width var(--dees-transition-default) var(--dees-ease-standard);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
:host([data-collapsed]) .harness-card {
|
|
148
159
|
max-width: var(--dees-harness-collapsed-tool-width, 100%);
|
|
149
160
|
}
|
|
150
161
|
|
|
@@ -297,7 +308,31 @@ export class DeesHarnessToolCard extends DeesElement {
|
|
|
297
308
|
font-size: 12px;
|
|
298
309
|
}
|
|
299
310
|
|
|
300
|
-
/*
|
|
311
|
+
/*
|
|
312
|
+
* Stands in for the body while a finished card is collapsed. It opens and closes on the same
|
|
313
|
+
* timing as the body and the width, so the header never steps by a line at the instant of a
|
|
314
|
+
* toggle; the node stays mounted and is hidden from assistive technology while open.
|
|
315
|
+
*/
|
|
316
|
+
.summaryDisclosure {
|
|
317
|
+
display: grid;
|
|
318
|
+
grid-template-rows: 1fr;
|
|
319
|
+
min-height: 0;
|
|
320
|
+
opacity: 1;
|
|
321
|
+
transition:
|
|
322
|
+
grid-template-rows var(--dees-transition-default) var(--dees-ease-standard),
|
|
323
|
+
opacity var(--dees-transition-fast) var(--dees-ease-standard);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
.summaryDisclosure[aria-hidden='true'] {
|
|
327
|
+
grid-template-rows: 0fr;
|
|
328
|
+
opacity: 0;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.summaryDisclosureInner {
|
|
332
|
+
min-height: 0;
|
|
333
|
+
overflow: hidden;
|
|
334
|
+
}
|
|
335
|
+
|
|
301
336
|
.resultSummary {
|
|
302
337
|
display: block;
|
|
303
338
|
margin-top: 2px;
|
|
@@ -690,7 +725,10 @@ export class DeesHarnessToolCard extends DeesElement {
|
|
|
690
725
|
}
|
|
691
726
|
|
|
692
727
|
@media (prefers-reduced-motion: reduce) {
|
|
693
|
-
.
|
|
728
|
+
/* The disclosure moves as one piece, so all three parts of it stop together. */
|
|
729
|
+
.bodyDisclosure,
|
|
730
|
+
.harness-card,
|
|
731
|
+
.summaryDisclosure {
|
|
694
732
|
transition: none;
|
|
695
733
|
}
|
|
696
734
|
|
|
@@ -741,9 +779,13 @@ export class DeesHarnessToolCard extends DeesElement {
|
|
|
741
779
|
return collapseWhenFinished ?? false;
|
|
742
780
|
}
|
|
743
781
|
|
|
744
|
-
/**
|
|
745
|
-
|
|
746
|
-
|
|
782
|
+
/**
|
|
783
|
+
* Outcome line that stands in for the body while collapsed; the subtitle already carries the
|
|
784
|
+
* request. Derived from the settled call alone, not from the disclosure state, so the text stays
|
|
785
|
+
* put while the line animates open or closed instead of appearing and vanishing mid-transition.
|
|
786
|
+
*/
|
|
787
|
+
private get resultSummary(): string {
|
|
788
|
+
if (!this.descriptor.summary) return '';
|
|
747
789
|
if (this.call.status !== 'completed' && this.call.status !== 'stopped') return '';
|
|
748
790
|
return this.descriptor.summary(this.enrichedCall).trim();
|
|
749
791
|
}
|
|
@@ -780,7 +822,7 @@ export class DeesHarnessToolCard extends DeesElement {
|
|
|
780
822
|
const statusTone = effectiveStatus === 'completed' ? 'success'
|
|
781
823
|
: effectiveStatus === 'stopped' ? 'warning' : effectiveStatus;
|
|
782
824
|
const duration = harnessFormatDuration(call.startedAt, call.finishedAt);
|
|
783
|
-
const
|
|
825
|
+
const resultSummary = this.resultSummary;
|
|
784
826
|
return html`
|
|
785
827
|
<div class="harness-card status-${effectiveStatus} ${descriptor.destructive ? 'destructive' : ''} ${this.hasSubtaskPreview ? 'subtaskPreviewCard' : ''} ${this.hasSubtaskPreview && open ? 'subtaskPreviewOpen' : ''} ${this.returnFlash ? 'returnFlash' : ''} ${this.outcomeScanTone ? `outcomeScan outcomeScan-${this.outcomeScanTone}` : ''}"
|
|
786
828
|
@mouseenter=${this.cancelTerminalTailReturn}
|
|
@@ -808,8 +850,17 @@ export class DeesHarnessToolCard extends DeesElement {
|
|
|
808
850
|
${subtitle
|
|
809
851
|
? html`<dees-harness-overflow-text class="subtitle" title=${subtitleTooltip}>${subtitle}</dees-harness-overflow-text>`
|
|
810
852
|
: ''}
|
|
811
|
-
${
|
|
812
|
-
? html
|
|
853
|
+
${resultSummary
|
|
854
|
+
? html`
|
|
855
|
+
<span class="summaryDisclosure" aria-hidden=${open ? 'true' : 'false'}>
|
|
856
|
+
<span class="summaryDisclosureInner">
|
|
857
|
+
<dees-harness-overflow-text
|
|
858
|
+
class="resultSummary"
|
|
859
|
+
title=${resultSummary}
|
|
860
|
+
>${resultSummary}</dees-harness-overflow-text>
|
|
861
|
+
</span>
|
|
862
|
+
</span>
|
|
863
|
+
`
|
|
813
864
|
: ''}
|
|
814
865
|
</span>
|
|
815
866
|
<span class="metaColumn">
|
|
@@ -12,6 +12,7 @@ export * from './dees-harness-overflow-text.js';
|
|
|
12
12
|
export * from './dees-harness-chat/index.js';
|
|
13
13
|
export * from './dees-harness-composer/index.js';
|
|
14
14
|
export * from './dees-harness-content-blocks/index.js';
|
|
15
|
+
export * from './dees-harness-conversation-picker/index.js';
|
|
15
16
|
export * from './dees-harness-message/index.js';
|
|
16
17
|
export * from './dees-harness-permission-card/index.js';
|
|
17
18
|
export * from './dees-harness-question-card/index.js';
|
|
@@ -401,49 +401,66 @@ export interface IHarnessResourceMeta<TState extends string = string> {
|
|
|
401
401
|
}
|
|
402
402
|
|
|
403
403
|
/**
|
|
404
|
-
*
|
|
405
|
-
* other list item — a session or another resource such as a
|
|
404
|
+
* The controlled set of associations for one resource. A resource can be attached to several
|
|
405
|
+
* items at once, and a target is any other list item — a session or another resource such as a
|
|
406
|
+
* terminal. An empty array is an unattached resource.
|
|
406
407
|
*/
|
|
407
408
|
export interface IHarnessResourceAssociation {
|
|
408
409
|
resourceId: string;
|
|
409
|
-
|
|
410
|
+
targets: IHarnessSessionListItemRef[];
|
|
410
411
|
}
|
|
411
412
|
|
|
412
413
|
export interface IHarnessResourceEventDetail<TState extends string = string> {
|
|
413
414
|
resource: IHarnessResourceMeta<TState>;
|
|
414
|
-
/** The controlled association
|
|
415
|
-
|
|
415
|
+
/** The controlled association targets; empty when the resource is unattached. */
|
|
416
|
+
targets: IHarnessSessionListItemRef[];
|
|
416
417
|
}
|
|
417
418
|
|
|
418
419
|
/**
|
|
419
|
-
*
|
|
420
|
-
*
|
|
420
|
+
* Attaching is an explicit choice, never an accident of reordering: a drag only attaches when it
|
|
421
|
+
* is released on the centre of a row, and the edges of that same row stay positional. Keyboard
|
|
422
|
+
* moves are always positional; keyboard attaching goes through the host's menu.
|
|
421
423
|
*/
|
|
422
|
-
export type THarnessResourceAssociationInteractionSource = 'action' | 'keyboard';
|
|
424
|
+
export type THarnessResourceAssociationInteractionSource = 'action' | 'keyboard' | 'pointer';
|
|
423
425
|
|
|
424
|
-
|
|
426
|
+
/**
|
|
427
|
+
* A validated association request. `attach` adds the first target, `attach-additional` adds
|
|
428
|
+
* another one beside existing targets, `move` replaces one specific target, and `detach` removes
|
|
429
|
+
* one. `fromTarget` always names the attachment being replaced or removed, never the whole set.
|
|
430
|
+
*/
|
|
431
|
+
export type THarnessResourceAssociateDetail<TState extends string = string> =
|
|
425
432
|
| {
|
|
426
|
-
|
|
433
|
+
mode: 'attach';
|
|
427
434
|
resource: IHarnessResourceMeta<TState>;
|
|
428
435
|
fromTarget: null;
|
|
429
436
|
toTarget: IHarnessSessionListItemRef;
|
|
430
437
|
source: THarnessResourceAssociationInteractionSource;
|
|
431
438
|
}
|
|
432
439
|
| {
|
|
433
|
-
|
|
440
|
+
mode: 'attach-additional';
|
|
434
441
|
resource: IHarnessResourceMeta<TState>;
|
|
435
|
-
fromTarget:
|
|
436
|
-
toTarget:
|
|
442
|
+
fromTarget: null;
|
|
443
|
+
toTarget: IHarnessSessionListItemRef;
|
|
437
444
|
source: THarnessResourceAssociationInteractionSource;
|
|
438
445
|
}
|
|
439
446
|
| {
|
|
440
|
-
|
|
447
|
+
mode: 'move';
|
|
441
448
|
resource: IHarnessResourceMeta<TState>;
|
|
442
449
|
fromTarget: IHarnessSessionListItemRef;
|
|
443
450
|
toTarget: IHarnessSessionListItemRef;
|
|
444
451
|
source: THarnessResourceAssociationInteractionSource;
|
|
452
|
+
}
|
|
453
|
+
| {
|
|
454
|
+
mode: 'detach';
|
|
455
|
+
resource: IHarnessResourceMeta<TState>;
|
|
456
|
+
fromTarget: IHarnessSessionListItemRef;
|
|
457
|
+
toTarget: null;
|
|
458
|
+
source: THarnessResourceAssociationInteractionSource;
|
|
445
459
|
};
|
|
446
460
|
|
|
461
|
+
/** Explicit mode for `requestAssociation`; omitted lets the list infer it from the current set. */
|
|
462
|
+
export type THarnessResourceAssociateMode = THarnessResourceAssociateDetail['mode'];
|
|
463
|
+
|
|
447
464
|
export type THarnessResourceContextSource = 'pointer' | 'action' | 'keyboard';
|
|
448
465
|
|
|
449
466
|
/** Detail of `harness-resource-context`; the host owns the actual menu. */
|
|
@@ -453,8 +470,16 @@ export interface IHarnessResourceContextDetail<TState extends string = string>
|
|
|
453
470
|
clientY: number;
|
|
454
471
|
source: THarnessResourceContextSource;
|
|
455
472
|
originalEvent: MouseEvent | KeyboardEvent;
|
|
456
|
-
/**
|
|
457
|
-
|
|
473
|
+
/**
|
|
474
|
+
* Routes a host menu choice through the component's validated controlled request event. With no
|
|
475
|
+
* mode, an unattached resource attaches and a singly attached one moves; a resource with several
|
|
476
|
+
* attachments is refused, because only the host knows which attachment was meant.
|
|
477
|
+
*/
|
|
478
|
+
requestAssociation: (
|
|
479
|
+
toTarget: IHarnessSessionListItemRef | null,
|
|
480
|
+
mode?: THarnessResourceAssociateMode,
|
|
481
|
+
fromTarget?: IHarnessSessionListItemRef | null,
|
|
482
|
+
) => boolean;
|
|
458
483
|
/** Closes the external-menu disclosure state and restores focus to its invoking control. */
|
|
459
484
|
close: () => void;
|
|
460
485
|
}
|