@design.estate/dees-catalog 6.6.0 → 6.7.1

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.
@@ -208,18 +208,18 @@ export class DeesHarnessToolCard extends DeesElement {
208
208
 
209
209
  @keyframes harness-card-open-chat-scan {
210
210
  0% {
211
- background-position: 100% 0;
211
+ transform: translate3d(-60%, 0, 0);
212
212
  opacity: 0;
213
213
  }
214
214
  1% {
215
215
  opacity: 0.35;
216
216
  }
217
217
  20% {
218
- background-position: 0 0;
218
+ transform: translate3d(0, 0, 0);
219
219
  opacity: 0.35;
220
220
  }
221
221
  24%, 100% {
222
- background-position: 0 0;
222
+ transform: translate3d(0, 0, 0);
223
223
  opacity: 0;
224
224
  }
225
225
  }
@@ -608,7 +608,8 @@ export class DeesHarnessToolCard extends DeesElement {
608
608
  .harness-card.outcomeScan::after {
609
609
  content: '';
610
610
  position: absolute;
611
- inset: 0;
611
+ inset: 0 auto 0 0;
612
+ width: 250%;
612
613
  pointer-events: none;
613
614
  background: linear-gradient(
614
615
  105deg,
@@ -617,7 +618,9 @@ export class DeesHarnessToolCard extends DeesElement {
617
618
  color-mix(in srgb, var(--harness-outcome-scan-color) 14%, transparent) 50%,
618
619
  color-mix(in srgb, var(--harness-outcome-scan-color) 3%, transparent) 55%,
619
620
  transparent 60%
620
- ) 100% 0 / 250% 100% no-repeat;
621
+ );
622
+ transform: translate3d(-60%, 0, 0);
623
+ will-change: transform;
621
624
  animation: harness-tool-outcome-scan 0.48s linear 0.08s both;
622
625
  }
623
626
 
@@ -631,8 +634,8 @@ export class DeesHarnessToolCard extends DeesElement {
631
634
  }
632
635
 
633
636
  @keyframes harness-tool-outcome-scan {
634
- from { background-position: 100% 0; }
635
- to { background-position: 0 0; }
637
+ from { transform: translate3d(-60%, 0, 0); }
638
+ to { transform: translate3d(0, 0, 0); }
636
639
  }
637
640
 
638
641
  @media (prefers-reduced-motion: reduce) {
@@ -647,6 +650,7 @@ export class DeesHarnessToolCard extends DeesElement {
647
650
  .harness-card.outcomeScan::after {
648
651
  animation: none;
649
652
  opacity: 0;
653
+ will-change: auto;
650
654
  }
651
655
  }
652
656
  `,
@@ -24,17 +24,19 @@ export const harnessCardStyles: CSSResult = css`
24
24
  .harness-card.outcomeScan::before {
25
25
  content: '';
26
26
  position: absolute;
27
- inset: 0;
27
+ inset: 0 auto 0 0;
28
+ width: 250%;
28
29
  pointer-events: none;
29
- background:
30
- linear-gradient(
31
- 105deg,
32
- transparent 40%,
33
- color-mix(in srgb, var(--dees-color-accent-primary) 6%, transparent) 45%,
34
- color-mix(in srgb, var(--dees-color-accent-primary) 20%, transparent) 50%,
35
- color-mix(in srgb, var(--dees-color-accent-primary) 6%, transparent) 55%,
36
- transparent 60%
37
- ) 100% 0 / 250% 100% no-repeat;
30
+ background: linear-gradient(
31
+ 105deg,
32
+ transparent 40%,
33
+ color-mix(in srgb, var(--dees-color-accent-primary) 6%, transparent) 45%,
34
+ color-mix(in srgb, var(--dees-color-accent-primary) 20%, transparent) 50%,
35
+ color-mix(in srgb, var(--dees-color-accent-primary) 6%, transparent) 55%,
36
+ transparent 60%
37
+ );
38
+ transform: translate3d(-60%, 0, 0);
39
+ will-change: transform;
38
40
  animation: harness-card-running-scan 2s linear infinite;
39
41
  opacity: 1;
40
42
  transition: opacity 0.18s var(--dees-ease-out);
@@ -53,8 +55,8 @@ export const harnessCardStyles: CSSResult = css`
53
55
  }
54
56
 
55
57
  @keyframes harness-card-running-scan {
56
- from { background-position: 100% 0; }
57
- to { background-position: 0 0; }
58
+ from { transform: translate3d(-60%, 0, 0); }
59
+ to { transform: translate3d(0, 0, 0); }
58
60
  }
59
61
 
60
62
  @media (prefers-reduced-motion: reduce) {
@@ -72,6 +74,7 @@ export const harnessCardStyles: CSSResult = css`
72
74
  animation: none;
73
75
  opacity: 0;
74
76
  transition: none;
77
+ will-change: auto;
75
78
  }
76
79
  }
77
80
  `;
@@ -307,6 +307,73 @@ export interface IHarnessSessionMeta {
307
307
  draggable?: boolean;
308
308
  }
309
309
 
310
+ /** Host-owned metadata for a resource that can be associated with a harness session. */
311
+ export interface IHarnessResourceMeta<TState extends string = string> {
312
+ /** Stable identity used by selection and association records. */
313
+ id: string;
314
+ /** Open resource kind supplied by the host, for example `terminal`, `file`, or `browser`. */
315
+ kind: string;
316
+ title: string;
317
+ /** Optional dees-icon name (e.g. `lucide:FileText`). */
318
+ icon?: string;
319
+ preview?: string;
320
+ createdAt?: number;
321
+ updatedAt?: number;
322
+ /** Optional host-defined display state. */
323
+ state?: TState;
324
+ }
325
+
326
+ /** A controlled zero-or-one session association for one resource. */
327
+ export interface IHarnessResourceAssociation {
328
+ resourceId: string;
329
+ sessionId: string;
330
+ }
331
+
332
+ export interface IHarnessResourceEventDetail<TState extends string = string> {
333
+ resource: IHarnessResourceMeta<TState>;
334
+ sessionId: string | null;
335
+ }
336
+
337
+ export type THarnessResourceAssociationInteractionSource = 'drop' | 'action' | 'keyboard';
338
+
339
+ export type THarnessResourceAssociationRequestDetail<TState extends string = string> =
340
+ | {
341
+ intent: 'attach';
342
+ resource: IHarnessResourceMeta<TState>;
343
+ fromSessionId: null;
344
+ toSessionId: string;
345
+ source: THarnessResourceAssociationInteractionSource;
346
+ }
347
+ | {
348
+ intent: 'detach';
349
+ resource: IHarnessResourceMeta<TState>;
350
+ fromSessionId: string;
351
+ toSessionId: null;
352
+ source: THarnessResourceAssociationInteractionSource;
353
+ }
354
+ | {
355
+ intent: 'reassign';
356
+ resource: IHarnessResourceMeta<TState>;
357
+ fromSessionId: string;
358
+ toSessionId: string;
359
+ source: THarnessResourceAssociationInteractionSource;
360
+ };
361
+
362
+ export type THarnessResourceContextSource = 'pointer' | 'action' | 'keyboard';
363
+
364
+ /** Detail of `harness-resource-context`; the host owns the actual menu. */
365
+ export interface IHarnessResourceContextDetail<TState extends string = string>
366
+ extends IHarnessResourceEventDetail<TState> {
367
+ clientX: number;
368
+ clientY: number;
369
+ source: THarnessResourceContextSource;
370
+ originalEvent: MouseEvent | KeyboardEvent;
371
+ /** Routes a host menu choice through the component's validated controlled request event. */
372
+ requestAssociation: (toSessionId: string | null) => boolean;
373
+ /** Closes the external-menu disclosure state and restores focus to its invoking control. */
374
+ close: () => void;
375
+ }
376
+
310
377
  /** Detail of `harness-session-context`, fired on right-click of a session item. */
311
378
  export interface IHarnessSessionContextDetail {
312
379
  session: IHarnessSessionMeta;