@design.estate/dees-catalog 9.0.0 → 9.1.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 +2636 -2150
- package/dist_bundle/bundle.js.map +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.d.ts +7 -2
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.js +56 -5
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +62 -18
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.d.ts +4 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.js +7 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.js +69 -29
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +6 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.d.ts +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +419 -83
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +247 -118
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +2 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.js +2 -4
- package/dist_ts_web/elements/00group-harness/interfaces.d.ts +15 -4
- package/dist_ts_web/elements/00group-harness/toolregistry.d.ts +2 -1
- package/dist_ts_web/elements/00group-harness/toolregistry.js +1 -1
- package/dist_ts_web/elements/00group-overlay/dees-contextmenu/dees-contextmenu.d.ts +1 -1
- package/dist_ts_web/elements/00group-overlay/dees-contextmenu/dees-contextmenu.js +30 -12
- package/dist_ts_web/elements/00theme.js +3 -1
- package/package.json +1 -1
- package/readme.md +19 -3
- package/readme.plan.md +97 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.ts +48 -4
- package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +62 -17
- package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.ts +6 -1
- package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.ts +60 -27
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +341 -88
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +257 -125
- package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +1 -1
- package/ts_web/elements/00group-harness/dees-harness-tool-card/renderers.ts +1 -3
- package/ts_web/elements/00group-harness/interfaces.ts +16 -4
- package/ts_web/elements/00group-harness/toolregistry.ts +2 -1
- package/ts_web/elements/00group-overlay/dees-contextmenu/dees-contextmenu.ts +29 -15
- package/ts_web/elements/00theme.ts +2 -0
|
@@ -183,7 +183,7 @@ const renderFileWrite = (call: IHarnessToolCall, helpers: IHarnessToolRenderHelp
|
|
|
183
183
|
${helpers.diffBlock('', '', {
|
|
184
184
|
language: harnessLanguageForPath(String(change.path)),
|
|
185
185
|
filename: String(change.path).split('/').pop(),
|
|
186
|
-
|
|
186
|
+
unifiedDiff: String(change.diff),
|
|
187
187
|
})}
|
|
188
188
|
</section>
|
|
189
189
|
`)}`;
|
|
@@ -199,7 +199,6 @@ const renderFileWrite = (call: IHarnessToolCall, helpers: IHarnessToolRenderHelp
|
|
|
199
199
|
return helpers.diffBlock(file.before, file.after, {
|
|
200
200
|
language: patchLanguage,
|
|
201
201
|
filename: patchFilename,
|
|
202
|
-
view: 'split',
|
|
203
202
|
unifiedDiff: file.unifiedDiff,
|
|
204
203
|
showLineNumbers: file.lineNumbersKnown,
|
|
205
204
|
});
|
|
@@ -232,7 +231,6 @@ const renderFileWrite = (call: IHarnessToolCall, helpers: IHarnessToolRenderHelp
|
|
|
232
231
|
return helpers.diffBlock(previousContent, newContent, {
|
|
233
232
|
language,
|
|
234
233
|
filename,
|
|
235
|
-
view: 'split',
|
|
236
234
|
showLineNumbers: !isStringReplacement,
|
|
237
235
|
});
|
|
238
236
|
}
|
|
@@ -326,6 +326,14 @@ export interface IHarnessPermissionResponseDetail {
|
|
|
326
326
|
|
|
327
327
|
export type THarnessSessionCardState = 'normal' | 'working' | 'finished' | 'attention' | 'error';
|
|
328
328
|
|
|
329
|
+
/** Host-supplied harness identity, independent of the model and session state. */
|
|
330
|
+
export interface IHarnessAgentIdentity {
|
|
331
|
+
id: string;
|
|
332
|
+
name: string;
|
|
333
|
+
/** Optional dees-icon name; identity remains readable without an icon. */
|
|
334
|
+
icon?: string;
|
|
335
|
+
}
|
|
336
|
+
|
|
329
337
|
export interface IHarnessSessionMeta {
|
|
330
338
|
id: string;
|
|
331
339
|
title: string;
|
|
@@ -337,7 +345,11 @@ export interface IHarnessSessionMeta {
|
|
|
337
345
|
icon?: string;
|
|
338
346
|
/** Visual card state. Defaults to `normal`. */
|
|
339
347
|
state?: THarnessSessionCardState;
|
|
340
|
-
/**
|
|
348
|
+
/** Short visible state description, e.g. "Starting" or "Waiting for feedback". */
|
|
349
|
+
statusLabel?: string;
|
|
350
|
+
/** Harness running this session, e.g. Codex, OpenCode or FlexHarness. */
|
|
351
|
+
harness?: IHarnessAgentIdentity;
|
|
352
|
+
/** Pulse the normal/working indicator. Defaults to state === 'working'; never pulses attention/error/finished. */
|
|
341
353
|
working?: boolean;
|
|
342
354
|
/** Set false for pinned, non-sortable entries such as terminals. Defaults to true. */
|
|
343
355
|
draggable?: boolean;
|
|
@@ -410,13 +422,13 @@ export interface IHarnessResourceContextDetail<TState extends string = string>
|
|
|
410
422
|
close: () => void;
|
|
411
423
|
}
|
|
412
424
|
|
|
413
|
-
/** Detail of `harness-session-context`, fired
|
|
425
|
+
/** Detail of `harness-session-context`, fired by right-click, Actions, or ContextMenu/Shift+F10. */
|
|
414
426
|
export interface IHarnessSessionContextDetail {
|
|
415
427
|
session: IHarnessSessionMeta;
|
|
416
|
-
/**
|
|
428
|
+
/** Pointer position or invoking control anchor, in viewport coordinates. */
|
|
417
429
|
clientX: number;
|
|
418
430
|
clientY: number;
|
|
419
|
-
/**
|
|
431
|
+
/** Pass synchronously to DeesContextmenu.openContextMenuWithOptions to retain its composed dialog owner. */
|
|
420
432
|
originalEvent: MouseEvent;
|
|
421
433
|
}
|
|
422
434
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
import type { TDiffViewRequest } from '../00group-dataview/dees-dataview-codebox/dees-dataview-codebox.js';
|
|
2
3
|
import type { IHarnessToolCall, THarnessContentBlock } from './interfaces.js';
|
|
3
4
|
import { harnessIsRecord, harnessSummaryLine } from './harness.helpers.js';
|
|
4
5
|
|
|
@@ -14,7 +15,7 @@ export interface IHarnessToolRenderHelpers {
|
|
|
14
15
|
diffBlock(before: string, after: string, options?: {
|
|
15
16
|
language?: string;
|
|
16
17
|
filename?: string;
|
|
17
|
-
view?:
|
|
18
|
+
view?: TDiffViewRequest;
|
|
18
19
|
unifiedDiff?: string;
|
|
19
20
|
showLineNumbers?: boolean;
|
|
20
21
|
}): TemplateResult;
|
|
@@ -129,6 +129,7 @@ export class DeesContextmenu extends DeesElement {
|
|
|
129
129
|
// backdrop-filter drops out while an opacity/transform animation runs and
|
|
130
130
|
// snaps back in at the end. Appearing directly keeps the vibrancy stable.
|
|
131
131
|
contextMenu.style.visibility = 'visible';
|
|
132
|
+
contextMenu.focus({ preventScroll: true });
|
|
132
133
|
return contextMenu;
|
|
133
134
|
}
|
|
134
135
|
|
|
@@ -206,8 +207,10 @@ export class DeesContextmenu extends DeesElement {
|
|
|
206
207
|
position: relative;
|
|
207
208
|
}
|
|
208
209
|
|
|
209
|
-
.menuitem:hover
|
|
210
|
+
.menuitem:hover,
|
|
211
|
+
.menuitem:focus {
|
|
210
212
|
background: var(--dees-color-active);
|
|
213
|
+
outline: none;
|
|
211
214
|
}
|
|
212
215
|
|
|
213
216
|
.menuitem.has-submenu::after {
|
|
@@ -260,7 +263,7 @@ export class DeesContextmenu extends DeesElement {
|
|
|
260
263
|
|
|
261
264
|
public render(): TemplateResult {
|
|
262
265
|
return html`
|
|
263
|
-
<div class="mainbox">
|
|
266
|
+
<div class="mainbox" role="menu">
|
|
264
267
|
${this.menuItems.map((menuItemArg) => {
|
|
265
268
|
if ('divider' in menuItemArg && menuItemArg.divider) {
|
|
266
269
|
return html`<div class="menu-divider"></div>`;
|
|
@@ -271,8 +274,15 @@ export class DeesContextmenu extends DeesElement {
|
|
|
271
274
|
return html`
|
|
272
275
|
<div
|
|
273
276
|
class="menuitem ${menuItem.disabled ? 'disabled' : ''} ${hasSubmenu ? 'has-submenu' : ''}"
|
|
277
|
+
role="menuitem"
|
|
278
|
+
tabindex="-1"
|
|
279
|
+
aria-disabled=${menuItem.disabled ? 'true' : 'false'}
|
|
274
280
|
@click=${() => !menuItem.disabled && !hasSubmenu && this.handleClick(menuItem)}
|
|
275
|
-
@mouseenter=${() =>
|
|
281
|
+
@mouseenter=${(event: MouseEvent) => {
|
|
282
|
+
if (menuItem.disabled) return;
|
|
283
|
+
(event.currentTarget as HTMLElement).focus({ preventScroll: true });
|
|
284
|
+
void this.handleMenuItemHover(menuItem, hasSubmenu);
|
|
285
|
+
}}
|
|
276
286
|
@mouseleave=${() => this.handleMenuItemLeave()}
|
|
277
287
|
>
|
|
278
288
|
${menuItem.iconName ? html`
|
|
@@ -286,7 +296,7 @@ export class DeesContextmenu extends DeesElement {
|
|
|
286
296
|
`;
|
|
287
297
|
})}
|
|
288
298
|
${this.menuItems.length === 0 ? html`
|
|
289
|
-
<div class="menuitem" @click=${() => {
|
|
299
|
+
<div class="menuitem" role="menuitem" tabindex="-1" @click=${() => {
|
|
290
300
|
DeesContextmenu.contextMenuDeactivated = true;
|
|
291
301
|
this.destroy();
|
|
292
302
|
}}>
|
|
@@ -298,7 +308,8 @@ export class DeesContextmenu extends DeesElement {
|
|
|
298
308
|
`;
|
|
299
309
|
}
|
|
300
310
|
|
|
301
|
-
public
|
|
311
|
+
public firstUpdated(changedProperties: Map<string | number | symbol, unknown>): void {
|
|
312
|
+
super.firstUpdated(changedProperties);
|
|
302
313
|
// Focus on the menu for keyboard navigation
|
|
303
314
|
this.focus();
|
|
304
315
|
|
|
@@ -307,32 +318,35 @@ export class DeesContextmenu extends DeesElement {
|
|
|
307
318
|
}
|
|
308
319
|
|
|
309
320
|
private handleKeydown = (event: KeyboardEvent) => {
|
|
310
|
-
|
|
311
|
-
|
|
321
|
+
if (!['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(event.key)) return;
|
|
322
|
+
event.preventDefault();
|
|
323
|
+
event.stopPropagation();
|
|
324
|
+
const menuItems = Array.from(this.shadowRoot!.querySelectorAll<HTMLElement>('.menuitem:not(.disabled)'));
|
|
325
|
+
const currentIndex = menuItems.findIndex(item => item === this.shadowRoot!.activeElement);
|
|
312
326
|
|
|
313
327
|
switch (event.key) {
|
|
314
328
|
case 'ArrowDown':
|
|
315
|
-
|
|
329
|
+
if (!menuItems.length) return;
|
|
316
330
|
const nextIndex = currentIndex + 1 < menuItems.length ? currentIndex + 1 : 0;
|
|
317
|
-
|
|
331
|
+
menuItems[nextIndex].focus({ preventScroll: true });
|
|
332
|
+
menuItems[nextIndex].dispatchEvent(new MouseEvent('mouseenter'));
|
|
318
333
|
break;
|
|
319
334
|
|
|
320
335
|
case 'ArrowUp':
|
|
321
|
-
|
|
336
|
+
if (!menuItems.length) return;
|
|
322
337
|
const prevIndex = currentIndex - 1 >= 0 ? currentIndex - 1 : menuItems.length - 1;
|
|
323
|
-
|
|
338
|
+
menuItems[prevIndex].focus({ preventScroll: true });
|
|
339
|
+
menuItems[prevIndex].dispatchEvent(new MouseEvent('mouseenter'));
|
|
324
340
|
break;
|
|
325
341
|
|
|
326
342
|
case 'Enter':
|
|
327
|
-
event.preventDefault();
|
|
328
343
|
if (currentIndex >= 0) {
|
|
329
|
-
|
|
344
|
+
menuItems[currentIndex].click();
|
|
330
345
|
}
|
|
331
346
|
break;
|
|
332
347
|
|
|
333
348
|
case 'Escape':
|
|
334
|
-
|
|
335
|
-
this.destroy();
|
|
349
|
+
void this.destroyAll();
|
|
336
350
|
break;
|
|
337
351
|
}
|
|
338
352
|
}
|
|
@@ -664,6 +664,8 @@ export const themeDefaultStyles: CSSResult = css`
|
|
|
664
664
|
--dees-shadow-xl: ${cssManager.bdTheme(shadowsLight.xl, shadowsDark.xl)};
|
|
665
665
|
/* upward-casting bar shadow (mirrored sm) for bottom-docked chrome */
|
|
666
666
|
--dees-shadow-up-sm: ${cssManager.bdTheme(mirrorShadow(shadowsLight.sm), mirrorShadow(shadowsDark.sm))};
|
|
667
|
+
/* Contact shadow where scrolling content passes beneath opaque chrome. */
|
|
668
|
+
--dees-color-scroll-edge-shadow: ${cssManager.bdTheme('rgba(0, 0, 0, 0.11)', 'rgba(0, 0, 0, 0.55)')};
|
|
667
669
|
|
|
668
670
|
/* ========================================
|
|
669
671
|
* Materials / Vibrancy (theme-aware bg + opaque fallback; theme-agnostic filter)
|