@design.estate/dees-catalog 3.93.0 → 3.94.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 (42) hide show
  1. package/dist_bundle/bundle.js +1936 -1376
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.d.ts +6 -3
  4. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.js +34 -4
  5. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +49 -45
  6. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.d.ts +13 -0
  7. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.js +5 -2
  8. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.js +118 -3
  9. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.d.ts +25 -3
  10. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +156 -48
  11. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.d.ts +2 -0
  12. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.js +9 -5
  13. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.d.ts +31 -0
  14. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.demo.d.ts +1 -0
  15. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.demo.js +69 -0
  16. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.js +382 -0
  17. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/index.d.ts +1 -0
  18. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/index.js +2 -0
  19. package/dist_ts_web/elements/00group-harness/index.d.ts +1 -0
  20. package/dist_ts_web/elements/00group-harness/index.js +2 -1
  21. package/dist_ts_web/elements/00group-harness/interfaces.d.ts +33 -0
  22. package/dist_ts_web/elements/00group-harness/toolregistry.js +9 -1
  23. package/dist_ts_web/elements/00theme.js +6 -1
  24. package/dist_watch/bundle.js +1937 -1377
  25. package/dist_watch/bundle.js.map +4 -4
  26. package/package.json +1 -1
  27. package/readme.md +13 -5
  28. package/readme.playbook.md +1 -1
  29. package/ts_web/00_commitinfo_data.ts +1 -1
  30. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.ts +37 -3
  31. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +31 -44
  32. package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.ts +4 -1
  33. package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.ts +99 -0
  34. package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +148 -46
  35. package/ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.ts +9 -4
  36. package/ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.demo.ts +70 -0
  37. package/ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.ts +319 -0
  38. package/ts_web/elements/00group-harness/dees-harness-question-card/index.ts +1 -0
  39. package/ts_web/elements/00group-harness/index.ts +1 -0
  40. package/ts_web/elements/00group-harness/interfaces.ts +36 -0
  41. package/ts_web/elements/00group-harness/toolregistry.ts +8 -0
  42. package/ts_web/elements/00theme.ts +7 -0
@@ -38,6 +38,8 @@ import { themeDefaultStyles } from '../../00theme.js';
38
38
  import { DeesHarnessMessage } from '../dees-harness-message/dees-harness-message.js';
39
39
  import { DeesHarnessToolRegistry } from '../toolregistry.js';
40
40
  import '../dees-harness-status/dees-harness-status.js';
41
+ import '../dees-harness-permission-card/dees-harness-permission-card.js';
42
+ import '../dees-harness-question-card/dees-harness-question-card.js';
41
43
  import '../../00group-utility/dees-icon/dees-icon.js';
42
44
  const { repeat } = directives;
43
45
  const pinThresholdPx = 48;
@@ -60,6 +62,15 @@ let DeesHarnessMessageList = (() => {
60
62
  let _status_decorators;
61
63
  let _status_initializers = [];
62
64
  let _status_extraInitializers = [];
65
+ let _permissions_decorators;
66
+ let _permissions_initializers = [];
67
+ let _permissions_extraInitializers = [];
68
+ let _permissionsBusy_decorators;
69
+ let _permissionsBusy_initializers = [];
70
+ let _permissionsBusy_extraInitializers = [];
71
+ let _questions_decorators;
72
+ let _questions_initializers = [];
73
+ let _questions_extraInitializers = [];
63
74
  let _autoFollow_decorators;
64
75
  let _autoFollow_initializers = [];
65
76
  let _autoFollow_extraInitializers = [];
@@ -90,6 +101,9 @@ let DeesHarnessMessageList = (() => {
90
101
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
91
102
  _messages_decorators = [property({ attribute: false })];
92
103
  _status_decorators = [property({ attribute: false })];
104
+ _permissions_decorators = [property({ attribute: false })];
105
+ _permissionsBusy_decorators = [property({ type: Boolean })];
106
+ _questions_decorators = [property({ attribute: false })];
93
107
  _autoFollow_decorators = [property({ type: Boolean })];
94
108
  _toolRegistry_decorators = [property({ attribute: false })];
95
109
  _showRoles_decorators = [property({ type: Boolean })];
@@ -100,6 +114,9 @@ let DeesHarnessMessageList = (() => {
100
114
  _entryAnimationsEnabled_decorators = [state()];
101
115
  __esDecorate(this, null, _messages_decorators, { kind: "accessor", name: "messages", static: false, private: false, access: { has: obj => "messages" in obj, get: obj => obj.messages, set: (obj, value) => { obj.messages = value; } }, metadata: _metadata }, _messages_initializers, _messages_extraInitializers);
102
116
  __esDecorate(this, null, _status_decorators, { kind: "accessor", name: "status", static: false, private: false, access: { has: obj => "status" in obj, get: obj => obj.status, set: (obj, value) => { obj.status = value; } }, metadata: _metadata }, _status_initializers, _status_extraInitializers);
117
+ __esDecorate(this, null, _permissions_decorators, { kind: "accessor", name: "permissions", static: false, private: false, access: { has: obj => "permissions" in obj, get: obj => obj.permissions, set: (obj, value) => { obj.permissions = value; } }, metadata: _metadata }, _permissions_initializers, _permissions_extraInitializers);
118
+ __esDecorate(this, null, _permissionsBusy_decorators, { kind: "accessor", name: "permissionsBusy", static: false, private: false, access: { has: obj => "permissionsBusy" in obj, get: obj => obj.permissionsBusy, set: (obj, value) => { obj.permissionsBusy = value; } }, metadata: _metadata }, _permissionsBusy_initializers, _permissionsBusy_extraInitializers);
119
+ __esDecorate(this, null, _questions_decorators, { kind: "accessor", name: "questions", static: false, private: false, access: { has: obj => "questions" in obj, get: obj => obj.questions, set: (obj, value) => { obj.questions = value; } }, metadata: _metadata }, _questions_initializers, _questions_extraInitializers);
103
120
  __esDecorate(this, null, _autoFollow_decorators, { kind: "accessor", name: "autoFollow", static: false, private: false, access: { has: obj => "autoFollow" in obj, get: obj => obj.autoFollow, set: (obj, value) => { obj.autoFollow = value; } }, metadata: _metadata }, _autoFollow_initializers, _autoFollow_extraInitializers);
104
121
  __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);
105
122
  __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);
@@ -120,7 +137,19 @@ let DeesHarnessMessageList = (() => {
120
137
  #status_accessor_storage = (__runInitializers(this, _messages_extraInitializers), __runInitializers(this, _status_initializers, { type: 'idle' }));
121
138
  get status() { return this.#status_accessor_storage; }
122
139
  set status(value) { this.#status_accessor_storage = value; }
123
- #autoFollow_accessor_storage = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _autoFollow_initializers, true));
140
+ #permissions_accessor_storage = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _permissions_initializers, []));
141
+ /** permission requests interleave chronologically with the messages;
142
+ * answered ones stay visible showing their outcome */
143
+ get permissions() { return this.#permissions_accessor_storage; }
144
+ set permissions(value) { this.#permissions_accessor_storage = value; }
145
+ #permissionsBusy_accessor_storage = (__runInitializers(this, _permissions_extraInitializers), __runInitializers(this, _permissionsBusy_initializers, false));
146
+ get permissionsBusy() { return this.#permissionsBusy_accessor_storage; }
147
+ set permissionsBusy(value) { this.#permissionsBusy_accessor_storage = value; }
148
+ #questions_accessor_storage = (__runInitializers(this, _permissionsBusy_extraInitializers), __runInitializers(this, _questions_initializers, []));
149
+ /** agent questions interleave like permissions; answered ones persist */
150
+ get questions() { return this.#questions_accessor_storage; }
151
+ set questions(value) { this.#questions_accessor_storage = value; }
152
+ #autoFollow_accessor_storage = (__runInitializers(this, _questions_extraInitializers), __runInitializers(this, _autoFollow_initializers, true));
124
153
  get autoFollow() { return this.#autoFollow_accessor_storage; }
125
154
  set autoFollow(value) { this.#autoFollow_accessor_storage = value; }
126
155
  #toolRegistry_accessor_storage = (__runInitializers(this, _autoFollow_extraInitializers), __runInitializers(this, _toolRegistry_initializers, DeesHarnessToolRegistry.default));
@@ -164,6 +193,14 @@ let DeesHarnessMessageList = (() => {
164
193
  box-sizing: border-box;
165
194
  }
166
195
 
196
+ /* observed by the follow ResizeObserver; fills the viewport so the
197
+ empty state can center */
198
+ .scrollContent {
199
+ min-height: 100%;
200
+ display: flex;
201
+ flex-direction: column;
202
+ }
203
+
167
204
  .stack {
168
205
  display: block;
169
206
  }
@@ -179,10 +216,10 @@ let DeesHarnessMessageList = (() => {
179
216
  }
180
217
 
181
218
  .empty {
219
+ flex: 1;
182
220
  display: grid;
183
221
  place-content: center;
184
222
  gap: var(--dees-spacing-xs);
185
- height: 100%;
186
223
  min-height: 120px;
187
224
  text-align: center;
188
225
  }
@@ -223,25 +260,75 @@ let DeesHarnessMessageList = (() => {
223
260
  }
224
261
  `,
225
262
  ];
263
+ /** messages and permissions merged chronologically (stable ids as keys) */
264
+ get timelineItems() {
265
+ const items = this.messages.map((message) => ({
266
+ kind: 'message',
267
+ time: message.createdAt || 0,
268
+ key: message.id,
269
+ message,
270
+ }));
271
+ for (const request of this.permissions) {
272
+ items.push({
273
+ kind: 'permission',
274
+ // pending requests pin to the end (action required); answered ones
275
+ // freeze at their response time in the flow
276
+ time: request.response
277
+ ? (request.respondedAt ?? request.createdAt ?? 0)
278
+ : Number.MAX_SAFE_INTEGER,
279
+ key: `perm:${request.id}`,
280
+ request,
281
+ });
282
+ }
283
+ for (const question of this.questions) {
284
+ items.push({
285
+ kind: 'question',
286
+ time: question.response
287
+ ? (question.respondedAt ?? question.createdAt ?? 0)
288
+ : Number.MAX_SAFE_INTEGER,
289
+ key: `question:${question.id}`,
290
+ question,
291
+ });
292
+ }
293
+ return items.sort((left, right) => left.time - right.time);
294
+ }
226
295
  render() {
296
+ const items = this.timelineItems;
227
297
  return html `
228
- <div class="scroll" @scroll=${this.handleScroll}>
229
- ${this.messages.length
298
+ <div
299
+ class="scroll"
300
+ @scroll=${this.handleScroll}
301
+ @wheel=${this.handleUserScrollIntent}
302
+ @touchmove=${this.handleUserScrollIntent}
303
+ >
304
+ <div class="scrollContent">
305
+ ${items.length
230
306
  ? html `
231
307
  <div class="stack">
232
- ${repeat(this.messages, (message) => message.id, (message) => html `
233
- <dees-harness-message
234
- data-message-id=${message.id}
235
- .message=${message}
236
- .showRole=${this.showRoles}
237
- .showTimestamp=${this.showTimestamps}
238
- .toolRegistry=${this.toolRegistry}
239
- .suppressEntry=${!this.entryAnimationsEnabled}
240
- ></dees-harness-message>
241
- `)}
242
- <div class="statusRow">
243
- <dees-harness-status .status=${this.status}></dees-harness-status>
244
- </div>
308
+ ${repeat(items, (item) => item.key, (item) => item.kind === 'message'
309
+ ? html `
310
+ <dees-harness-message
311
+ data-message-id=${item.message.id}
312
+ .message=${item.message}
313
+ .showRole=${this.showRoles}
314
+ .showTimestamp=${this.showTimestamps}
315
+ .toolRegistry=${this.toolRegistry}
316
+ .suppressEntry=${!this.entryAnimationsEnabled}
317
+ ></dees-harness-message>
318
+ `
319
+ : item.kind === 'permission'
320
+ ? html `
321
+ <dees-harness-permission-card
322
+ .request=${item.request}
323
+ .busy=${this.permissionsBusy}
324
+ ></dees-harness-permission-card>
325
+ `
326
+ : html `
327
+ <dees-harness-question-card
328
+ .request=${item.question}
329
+ .busy=${this.permissionsBusy}
330
+ ></dees-harness-question-card>
331
+ `)}
245
332
  </div>
246
333
  `
247
334
  : html `
@@ -252,6 +339,10 @@ let DeesHarnessMessageList = (() => {
252
339
  </slot>
253
340
  </div>
254
341
  `}
342
+ <div class="statusRow">
343
+ <dees-harness-status .status=${this.status}></dees-harness-status>
344
+ </div>
345
+ </div>
255
346
  </div>
256
347
  ${this.showJumpChip
257
348
  ? html `
@@ -344,36 +435,53 @@ let DeesHarnessMessageList = (() => {
344
435
  return true;
345
436
  return container.scrollHeight - container.scrollTop - container.clientHeight < pinThresholdPx;
346
437
  }
347
- followFrame = (__runInitializers(this, _entryAnimationsEnabled_extraInitializers), 0);
348
- settleTimeout = null;
438
+ followUntilTs = (__runInitializers(this, _entryAnimationsEnabled_extraInitializers), 0);
439
+ lastFollowScrollTop = -1;
440
+ contentResizeObserver = null;
441
+ /**
442
+ * One-motion follow: while pinned, content changes open a short follow
443
+ * window (entry animation duration plus margin) and a ResizeObserver on
444
+ * the scroll content re-pins the bottom on every layout change — after
445
+ * layout but before paint, so a growing box and the scroll move together
446
+ * in the same frame. Wheel/touch toward the top, or any external upward
447
+ * scroll (deviation guard), ends the window so it never fights the user.
448
+ */
349
449
  followAfterContentChange() {
350
450
  if (!this.autoFollow)
351
451
  return;
352
452
  if (this.isPinnedToBottom) {
353
- if (!this.followFrame) {
354
- this.followFrame = requestAnimationFrame(() => {
355
- this.followFrame = 0;
356
- this.scrollToBottom(true);
357
- });
358
- }
359
- // entry animations grow content for ~200ms after insertion; follow
360
- // through once they settle (unless the user scrolled far away)
361
- if (this.settleTimeout)
362
- clearTimeout(this.settleTimeout);
363
- this.settleTimeout = setTimeout(() => {
364
- this.settleTimeout = null;
365
- const container = this.scrollContainer;
366
- if (!container)
367
- return;
368
- const distance = container.scrollHeight - container.scrollTop - container.clientHeight;
369
- if (distance < 400)
370
- this.scrollToBottom(true);
371
- }, 250);
453
+ this.followUntilTs = performance.now() + 320;
454
+ this.lastFollowScrollTop = -1;
455
+ this.pinIfFollowing();
372
456
  }
373
457
  else {
374
458
  this.showJumpChip = true;
375
459
  }
376
460
  }
461
+ pinIfFollowing = () => {
462
+ if (performance.now() >= this.followUntilTs)
463
+ return;
464
+ const container = this.scrollContainer;
465
+ if (!container)
466
+ return;
467
+ // position moved up since our last pin → someone else scrolled; stop
468
+ // before forcing so following never fights the user
469
+ if (this.lastFollowScrollTop >= 0 && container.scrollTop < this.lastFollowScrollTop - 1) {
470
+ this.stopFollowing();
471
+ return;
472
+ }
473
+ container.scrollTop = container.scrollHeight;
474
+ this.lastFollowScrollTop = container.scrollTop;
475
+ };
476
+ stopFollowing() {
477
+ this.followUntilTs = 0;
478
+ this.lastFollowScrollTop = -1;
479
+ }
480
+ handleUserScrollIntent = (event) => {
481
+ if (event.type === 'wheel' && event.deltaY >= 0)
482
+ return;
483
+ this.stopFollowing();
484
+ };
377
485
  scrollToBottom(force = false) {
378
486
  const container = this.scrollContainer;
379
487
  if (!container)
@@ -390,12 +498,17 @@ let DeesHarnessMessageList = (() => {
390
498
  };
391
499
  updated(changedProperties) {
392
500
  super.updated(changedProperties);
393
- if (changedProperties.has('messages') || changedProperties.has('status')) {
501
+ if (changedProperties.has('messages') || changedProperties.has('status') || changedProperties.has('permissions') || changedProperties.has('questions')) {
394
502
  this.followAfterContentChange();
395
503
  }
396
504
  }
397
505
  firstUpdated(changedProperties) {
398
506
  super.firstUpdated(changedProperties);
507
+ const content = this.shadowRoot?.querySelector('.scrollContent');
508
+ if (content) {
509
+ this.contentResizeObserver = new ResizeObserver(this.pinIfFollowing);
510
+ this.contentResizeObserver.observe(content);
511
+ }
399
512
  // let the initial batch paint without entry animations, then enable them
400
513
  requestAnimationFrame(() => {
401
514
  requestAnimationFrame(() => {
@@ -404,14 +517,9 @@ let DeesHarnessMessageList = (() => {
404
517
  });
405
518
  }
406
519
  async disconnectedCallback() {
407
- if (this.followFrame) {
408
- cancelAnimationFrame(this.followFrame);
409
- this.followFrame = 0;
410
- }
411
- if (this.settleTimeout) {
412
- clearTimeout(this.settleTimeout);
413
- this.settleTimeout = null;
414
- }
520
+ this.stopFollowing();
521
+ this.contentResizeObserver?.disconnect();
522
+ this.contentResizeObserver = null;
415
523
  await super.disconnectedCallback();
416
524
  }
417
525
  static {
@@ -421,4 +529,4 @@ let DeesHarnessMessageList = (() => {
421
529
  return DeesHarnessMessageList = _classThis;
422
530
  })();
423
531
  export { DeesHarnessMessageList };
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLW1lc3NhZ2UtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLW1lc3NhZ2UtbGlzdC9kZWVzLWhhcm5lc3MtbWVzc2FnZS1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLCtDQUErQyxDQUFDO0FBQ3ZELE9BQU8sOENBQThDLENBQUM7QUFFdEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztBQVE5QixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFFMUI7Ozs7OztHQU1HO0lBRVUsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7O29DQUlwRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7a0NBRzlCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztzQ0FHOUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFB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
532
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLW1lc3NhZ2UtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLW1lc3NhZ2UtbGlzdC9kZWVzLWhhcm5lc3MtbWVzc2FnZS1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0QsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLCtDQUErQyxDQUFDO0FBQ3ZELE9BQU8saUVBQWlFLENBQUM7QUFDekUsT0FBTyw2REFBNkQsQ0FBQztBQUNyRSxPQUFPLDhDQUE4QyxDQUFDO0FBRXRELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFROUIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBTzFCOzs7Ozs7R0FNRztJQUVVLHNCQUFzQjs0QkFEbEMsYUFBYSxDQUFDLDJCQUEyQixDQUFDOzs7O3NCQUNDLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0NBQW5CLFNBQVEsV0FBVzs7OztvQ0FJcEQsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO2tDQUc5QixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUs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
@@ -20,7 +20,9 @@ export declare class DeesHarnessPermissionCard extends DeesElement {
20
20
  accessor request: IHarnessPermissionRequest;
21
21
  accessor busy: boolean;
22
22
  accessor remember: boolean;
23
+ /** local optimistic answer; request.response (host echo) takes precedence */
23
24
  accessor answered: THarnessPermissionResponse | undefined;
25
+ get effectiveResponse(): THarnessPermissionResponse | undefined;
24
26
  static styles: import("@design.estate/dees-element").CSSResult[];
25
27
  render(): TemplateResult;
26
28
  private respond;
@@ -98,8 +98,12 @@ let DeesHarnessPermissionCard = (() => {
98
98
  get remember() { return this.#remember_accessor_storage; }
99
99
  set remember(value) { this.#remember_accessor_storage = value; }
100
100
  #answered_accessor_storage = (__runInitializers(this, _remember_extraInitializers), __runInitializers(this, _answered_initializers, undefined));
101
+ /** local optimistic answer; request.response (host echo) takes precedence */
101
102
  get answered() { return this.#answered_accessor_storage; }
102
103
  set answered(value) { this.#answered_accessor_storage = value; }
104
+ get effectiveResponse() {
105
+ return this.request.response ?? this.answered;
106
+ }
103
107
  static styles = [
104
108
  themeDefaultStyles,
105
109
  cssManager.defaultStyles,
@@ -205,7 +209,7 @@ let DeesHarnessPermissionCard = (() => {
205
209
  ];
206
210
  render() {
207
211
  const request = this.request;
208
- const disabled = this.busy || this.answered !== undefined;
212
+ const disabled = this.busy || this.effectiveResponse !== undefined;
209
213
  const metadataEntries = Object.entries(request.metadata ?? {});
210
214
  return html `
211
215
  <div class="card">
@@ -225,8 +229,8 @@ let DeesHarnessPermissionCard = (() => {
225
229
  `
226
230
  : ''}
227
231
  <div class="actions">
228
- ${this.answered
229
- ? html `<span class="answeredNote">Answered: ${this.answered}${this.remember ? ' (remembered)' : ''}</span>`
232
+ ${this.effectiveResponse
233
+ ? html `<span class="answeredNote">Answered: ${this.effectiveResponse}${this.remember ? ' (remembered)' : ''}</span>`
230
234
  : html `
231
235
  <dees-button type="accent" size="sm" ?disabled=${disabled} @clicked=${() => this.respond('once')}>
232
236
  Allow Once
@@ -254,7 +258,7 @@ let DeesHarnessPermissionCard = (() => {
254
258
  `;
255
259
  }
256
260
  respond(response) {
257
- if (this.busy || this.answered !== undefined)
261
+ if (this.busy || this.effectiveResponse !== undefined)
258
262
  return;
259
263
  this.answered = response;
260
264
  this.dispatchEvent(new CustomEvent('harness-permission-response', {
@@ -279,4 +283,4 @@ let DeesHarnessPermissionCard = (() => {
279
283
  return DeesHarnessPermissionCard = _classThis;
280
284
  })();
281
285
  export { DeesHarnessPermissionCard };
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXBlcm1pc3Npb24tY2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXBlcm1pc3Npb24tY2FyZC9kZWVzLWhhcm5lc3MtcGVybWlzc2lvbi1jYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEUsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8saURBQWlELENBQUM7QUFDekQsT0FBTyxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLDhDQUE4QyxDQUFDO0FBUXRELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxjQUFzQixFQUFtQyxFQUFFO0lBQ3pGLElBQUksY0FBYyxLQUFLLFFBQVEsSUFBSSxjQUFjLEtBQUssT0FBTztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQzlFLElBQUksY0FBYyxLQUFLLE9BQU8sSUFBSSxjQUFjLEtBQUssU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0lBRVUseUJBQXlCOzRCQURyQyxhQUFhLENBQUMsOEJBQThCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozt5Q0FBbkIsU0FBUSxXQUFXOzs7O21DQUl2RCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FB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
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXBlcm1pc3Npb24tY2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXBlcm1pc3Npb24tY2FyZC9kZWVzLWhhcm5lc3MtcGVybWlzc2lvbi1jYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEUsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8saURBQWlELENBQUM7QUFDekQsT0FBTyxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLDhDQUE4QyxDQUFDO0FBUXRELE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxjQUFzQixFQUFtQyxFQUFFO0lBQ3pGLElBQUksY0FBYyxLQUFLLFFBQVEsSUFBSSxjQUFjLEtBQUssT0FBTztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQzlFLElBQUksY0FBYyxLQUFLLE9BQU8sSUFBSSxjQUFjLEtBQUssU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0lBRVUseUJBQXlCOzRCQURyQyxhQUFhLENBQUMsOEJBQThCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozt5Q0FBbkIsU0FBUSxXQUFXOzs7O21DQUl2RCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FB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
@@ -0,0 +1,31 @@
1
+ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import type { IHarnessQuestionRequest } from '../interfaces.js';
3
+ import '../../00group-button/dees-button/dees-button.js';
4
+ import '../../00group-utility/dees-icon/dees-icon.js';
5
+ declare global {
6
+ interface HTMLElementTagNameMap {
7
+ 'dees-harness-question-card': DeesHarnessQuestionCard;
8
+ }
9
+ }
10
+ /**
11
+ * A question the agent asks mid-run: option buttons (single-select answers
12
+ * immediately, multi-select collects then confirms) plus an optional
13
+ * free-text answer. Emits `harness-question-response` (bubbles, composed).
14
+ * Answered cards persist showing the chosen answer(s) — the host sets
15
+ * `response`/`respondedAt` on the request and keeps it in the array.
16
+ */
17
+ export declare class DeesHarnessQuestionCard extends DeesElement {
18
+ static demo: () => TemplateResult<1>;
19
+ static demoGroups: string[];
20
+ accessor request: IHarnessQuestionRequest;
21
+ accessor busy: boolean;
22
+ /** local optimistic answer; request.response (host echo) takes precedence */
23
+ accessor answered: string[] | undefined;
24
+ accessor selected: ReadonlySet<string>;
25
+ accessor customText: string;
26
+ get effectiveResponse(): string[] | undefined;
27
+ static styles: import("@design.estate/dees-element").CSSResult[];
28
+ render(): TemplateResult;
29
+ private handleOptionClick;
30
+ private respond;
31
+ }
@@ -0,0 +1 @@
1
+ export declare const demoFunc: () => import("@design.estate/dees-element").TemplateResult<1>;
@@ -0,0 +1,69 @@
1
+ import { html } from '@design.estate/dees-element';
2
+ const logResponse = (event) => {
3
+ console.log('harness-question-response', event.detail);
4
+ };
5
+ export const demoFunc = () => html `
6
+ <style>
7
+ .questionDemo {
8
+ display: grid;
9
+ gap: 16px;
10
+ max-width: 640px;
11
+ margin: 40px auto;
12
+ padding: 24px;
13
+ border-radius: var(--dees-radius-xl);
14
+ background: var(--dees-color-bg-primary);
15
+ }
16
+ </style>
17
+ <div class="questionDemo" @harness-question-response=${logResponse}>
18
+ <dees-harness-question-card
19
+ .request=${{
20
+ id: 'q1',
21
+ question: 'Which database should the new service use?',
22
+ createdAt: Date.now(),
23
+ options: [
24
+ { label: 'PostgreSQL', description: 'Relational, already in the stack' },
25
+ { label: 'MongoDB', description: 'Document store, flexible schema' },
26
+ { label: 'SQLite', description: 'Embedded, zero ops' },
27
+ ],
28
+ }}
29
+ ></dees-harness-question-card>
30
+ <dees-harness-question-card
31
+ .request=${{
32
+ id: 'q2',
33
+ question: 'Which environments should the rollout include?',
34
+ multiSelect: true,
35
+ allowCustom: false,
36
+ options: [
37
+ { label: 'staging' },
38
+ { label: 'production-eu' },
39
+ { label: 'production-us' },
40
+ ],
41
+ }}
42
+ ></dees-harness-question-card>
43
+ <dees-harness-question-card
44
+ .request=${{
45
+ id: 'q3',
46
+ question: 'Anything else I should know before migrating?',
47
+ options: [],
48
+ }}
49
+ ></dees-harness-question-card>
50
+ <dees-harness-question-card
51
+ busy
52
+ .request=${{
53
+ id: 'q-busy',
54
+ question: 'Waiting for the runtime — which region?',
55
+ options: [{ label: 'eu-central' }, { label: 'us-east' }],
56
+ }}
57
+ ></dees-harness-question-card>
58
+ <dees-harness-question-card
59
+ .request=${{
60
+ id: 'q4',
61
+ question: 'Which framework for the admin UI?',
62
+ options: [{ label: 'Lit' }, { label: 'React' }],
63
+ response: ['Lit'],
64
+ respondedAt: Date.now() - 60_000,
65
+ }}
66
+ ></dees-harness-question-card>
67
+ </div>
68
+ `;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXF1ZXN0aW9uLWNhcmQuZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXF1ZXN0aW9uLWNhcmQvZGVlcy1oYXJuZXNzLXF1ZXN0aW9uLWNhcmQuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUU7SUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7Ozs7Ozs7Ozs7O3lEQVl1QixXQUFXOztpQkFFbkQ7SUFDVCxFQUFFLEVBQUUsSUFBSTtJQUNSLFFBQVEsRUFBRSw0Q0FBNEM7SUFDdEQsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDckIsT0FBTyxFQUFFO1FBQ1AsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxrQ0FBa0MsRUFBRTtRQUN4RSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFFO1FBQ3BFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUU7S0FDdkQ7Q0FDRjs7O2lCQUdVO0lBQ1QsRUFBRSxFQUFFLElBQUk7SUFDUixRQUFRLEVBQUUsZ0RBQWdEO0lBQzFELFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLE9BQU8sRUFBRTtRQUNQLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtRQUNwQixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7UUFDMUIsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO0tBQzNCO0NBQ0Y7OztpQkFHVTtJQUNULEVBQUUsRUFBRSxJQUFJO0lBQ1IsUUFBUSxFQUFFLCtDQUErQztJQUN6RCxPQUFPLEVBQUUsRUFBRTtDQUNaOzs7O2lCQUlVO0lBQ1QsRUFBRSxFQUFFLFFBQVE7SUFDWixRQUFRLEVBQUUseUNBQXlDO0lBQ25ELE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO0NBQ3pEOzs7aUJBR1U7SUFDVCxFQUFFLEVBQUUsSUFBSTtJQUNSLFFBQVEsRUFBRSxtQ0FBbUM7SUFDN0MsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTTtDQUNqQzs7O0NBR04sQ0FBQyJ9