@design.estate/dees-catalog 3.103.0 → 4.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.
@@ -172563,19 +172563,29 @@ var demoFunc54 = /* @__PURE__ */ __name(() => b2`
172563
172563
  </style>
172564
172564
  <div class="reasoningDemo">
172565
172565
  <dees-harness-reasoning
172566
- .reasoningPart=${{
172567
- id: "r1",
172568
- text: "The user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.",
172569
- startedAt: Date.now() - 4200,
172570
- endedAt: Date.now()
172571
- }}
172566
+ .reasoningParts=${[
172567
+ {
172568
+ id: "r1",
172569
+ text: "Summarize the failing test before touching code.\nThe user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.",
172570
+ startedAt: Date.now() - 9200,
172571
+ endedAt: Date.now() - 5200
172572
+ },
172573
+ {
172574
+ id: "r2",
172575
+ text: "The fixture predates the schema change; regenerating it should settle both assertions.",
172576
+ startedAt: Date.now() - 5200,
172577
+ endedAt: Date.now() - 4100
172578
+ }
172579
+ ]}
172572
172580
  ></dees-harness-reasoning>
172573
172581
  <dees-harness-reasoning
172574
- .reasoningPart=${{
172575
- id: "r2",
172576
- text: "Considering the tradeoffs between the two migration paths",
172577
- startedAt: Date.now() - 1500
172578
- }}
172582
+ .reasoningParts=${[
172583
+ {
172584
+ id: "r3",
172585
+ text: "Considering the tradeoffs between the two migration paths",
172586
+ startedAt: Date.now() - 1500
172587
+ }
172588
+ ]}
172579
172589
  ></dees-harness-reasoning>
172580
172590
  </div>
172581
172591
  `, "demoFunc");
@@ -172584,22 +172594,38 @@ var demoFunc54 = /* @__PURE__ */ __name(() => b2`
172584
172594
  init_dist_ts25();
172585
172595
  init_theme();
172586
172596
  init_dees_icon();
172587
- var _expanded_dec, _reasoningPart_dec, _a76, _DeesHarnessReasoning_decorators, _init77, _reasoningPart, _expanded;
172597
+ var _expanded_dec, _reasoningParts_dec, _a76, _DeesHarnessReasoning_decorators, _init77, _reasoningParts, _expanded;
172588
172598
  _DeesHarnessReasoning_decorators = [customElement("dees-harness-reasoning")];
172589
- var _DeesHarnessReasoning = class _DeesHarnessReasoning extends (_a76 = DeesElement, _reasoningPart_dec = [n5({ attribute: false })], _expanded_dec = [r5()], _a76) {
172599
+ var _DeesHarnessReasoning = class _DeesHarnessReasoning extends (_a76 = DeesElement, _reasoningParts_dec = [n5({ attribute: false })], _expanded_dec = [r5()], _a76) {
172590
172600
  constructor() {
172591
172601
  super(...arguments);
172592
- __privateAdd(this, _reasoningPart, __runInitializers(_init77, 8, this, { id: "", text: "" })), __runInitializers(_init77, 11, this);
172602
+ __privateAdd(this, _reasoningParts, __runInitializers(_init77, 8, this, [])), __runInitializers(_init77, 11, this);
172593
172603
  __privateAdd(this, _expanded, __runInitializers(_init77, 12, this)), __runInitializers(_init77, 15, this);
172594
172604
  }
172595
172605
  get isStreaming() {
172596
- return Boolean(this.reasoningPart.startedAt) && !this.reasoningPart.endedAt;
172606
+ return this.reasoningParts.some((part) => Boolean(part.startedAt) && !part.endedAt);
172597
172607
  }
172598
172608
  get isOpen() {
172599
172609
  return this.expanded ?? this.isStreaming;
172600
172610
  }
172611
+ /** All parts joined into the one full trace the expanded body shows. */
172612
+ get fullText() {
172613
+ return this.reasoningParts.map((part) => part.text.trim()).filter((text8) => text8.length > 0).join("\n\n");
172614
+ }
172615
+ /**
172616
+ * One line for the collapsed state: the latest line while streaming (live
172617
+ * progress), the first line once finished (the trace's own summary).
172618
+ */
172619
+ get previewLine() {
172620
+ const lines = this.fullText.split("\n").map((line) => line.trim()).filter((line) => line.length > 0);
172621
+ if (lines.length === 0) return "";
172622
+ return this.isStreaming ? lines[lines.length - 1] : lines[0];
172623
+ }
172601
172624
  render() {
172602
- const duration = harnessFormatDuration(this.reasoningPart.startedAt, this.reasoningPart.endedAt);
172625
+ const startedAt = this.reasoningParts.find((part) => part.startedAt)?.startedAt;
172626
+ const endedAt = this.isStreaming ? void 0 : [...this.reasoningParts].reverse().find((part) => part.endedAt)?.endedAt;
172627
+ const duration = harnessFormatDuration(startedAt, endedAt);
172628
+ const preview = this.previewLine;
172603
172629
  return b2`
172604
172630
  <div class="reasoning">
172605
172631
  <button
@@ -172613,14 +172639,15 @@ var _DeesHarnessReasoning = class _DeesHarnessReasoning extends (_a76 = DeesElem
172613
172639
  <span class="chevron ${this.isOpen ? "open" : ""}">
172614
172640
  <dees-icon icon="lucide:ChevronRight" iconSize="12"></dees-icon>
172615
172641
  </span>
172616
- <span class=${this.isStreaming ? "thinkingDots" : ""}>
172642
+ <span class="label ${this.isStreaming ? "thinkingDots" : ""}">
172617
172643
  ${this.isStreaming ? "Thinking" : "Thought"}
172618
172644
  </span>
172645
+ ${!this.isOpen && preview ? b2`<span class="preview">${preview}</span>` : ""}
172619
172646
  ${duration ? b2`<span class="duration">${duration}</span>` : ""}
172620
172647
  </button>
172621
172648
  <div class="bodyWrap ${this.isOpen ? "open" : ""}" aria-hidden=${this.isOpen ? "false" : "true"}>
172622
172649
  <div class="bodyClip">
172623
- <pre class="body">${this.reasoningPart.text || (this.isStreaming ? "Waiting for reasoning\u2026" : "No reasoning emitted.")}</pre>
172650
+ <pre class="body">${this.fullText || (this.isStreaming ? "Waiting for reasoning\u2026" : "No reasoning emitted.")}</pre>
172624
172651
  </div>
172625
172652
  </div>
172626
172653
  </div>
@@ -172628,9 +172655,9 @@ var _DeesHarnessReasoning = class _DeesHarnessReasoning extends (_a76 = DeesElem
172628
172655
  }
172629
172656
  };
172630
172657
  _init77 = __decoratorStart(_a76);
172631
- _reasoningPart = new WeakMap();
172658
+ _reasoningParts = new WeakMap();
172632
172659
  _expanded = new WeakMap();
172633
- __decorateElement(_init77, 4, "reasoningPart", _reasoningPart_dec, _DeesHarnessReasoning, _reasoningPart);
172660
+ __decorateElement(_init77, 4, "reasoningParts", _reasoningParts_dec, _DeesHarnessReasoning, _reasoningParts);
172634
172661
  __decorateElement(_init77, 4, "expanded", _expanded_dec, _DeesHarnessReasoning, _expanded);
172635
172662
  _DeesHarnessReasoning = __decorateElement(_init77, 0, "DeesHarnessReasoning", _DeesHarnessReasoning_decorators, _DeesHarnessReasoning);
172636
172663
  __name(_DeesHarnessReasoning, "DeesHarnessReasoning");
@@ -172715,6 +172742,7 @@ __publicField(_DeesHarnessReasoning, "styles", [
172715
172742
  .chevron {
172716
172743
  display: grid;
172717
172744
  place-items: center;
172745
+ flex: 0 0 auto;
172718
172746
  transition: transform var(--dees-transition-fast) var(--dees-ease-standard);
172719
172747
  }
172720
172748
 
@@ -172722,8 +172750,23 @@ __publicField(_DeesHarnessReasoning, "styles", [
172722
172750
  transform: rotate(90deg);
172723
172751
  }
172724
172752
 
172753
+ .label {
172754
+ flex: 0 0 auto;
172755
+ }
172756
+
172757
+ .preview {
172758
+ min-width: 0;
172759
+ overflow: hidden;
172760
+ text-overflow: ellipsis;
172761
+ white-space: nowrap;
172762
+ color: var(--dees-color-text-muted);
172763
+ font-weight: 400;
172764
+ font-style: italic;
172765
+ }
172766
+
172725
172767
  .duration {
172726
172768
  margin-left: auto;
172769
+ flex: 0 0 auto;
172727
172770
  color: var(--dees-color-text-muted);
172728
172771
  font-weight: 400;
172729
172772
  }
@@ -173861,9 +173904,7 @@ var _DeesHarnessMessage = class _DeesHarnessMessage extends (_a80 = DeesElement,
173861
173904
  ` : ""}
173862
173905
  ${message2.reasoning?.length ? b2`
173863
173906
  <div class="reasoningStack">
173864
- ${message2.reasoning.map(
173865
- (part) => b2`<dees-harness-reasoning .reasoningPart=${part}></dees-harness-reasoning>`
173866
- )}
173907
+ <dees-harness-reasoning .reasoningParts=${message2.reasoning}></dees-harness-reasoning>
173867
173908
  </div>
173868
173909
  ` : ""}
173869
173910
  ${message2.attachments?.length ? this.renderAttachments(message2.attachments) : ""}
@@ -198977,13 +199018,16 @@ init_group_runtime();
198977
199018
  // ts_web/00_commitinfo_data.ts
198978
199019
  var commitinfo = {
198979
199020
  name: "@design.estate/dees-catalog",
198980
- version: "3.103.0",
199021
+ version: "4.0.0",
198981
199022
  description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
198982
199023
  };
198983
199024
 
198984
199025
  // ts_web/index.ts
199026
+ init_services();
198985
199027
  init_colors();
198986
199028
  export {
199029
+ CDN_BASE,
199030
+ CDN_VERSIONS,
198987
199031
  CHART_LEGEND_STATS,
198988
199032
  CanvasPool,
198989
199033
  DeesActionbar,
@@ -199065,6 +199109,7 @@ export {
199065
199109
  DeesPreview,
199066
199110
  DeesProgressbar,
199067
199111
  DeesSearchbar,
199112
+ DeesServiceLibLoader,
199068
199113
  DeesSettings,
199069
199114
  DeesShoppingProductcard,
199070
199115
  DeesSimpleAppDash,
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.103.0',
6
+ version: '4.0.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
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
@@ -402,7 +402,7 @@ let DeesHarnessMessage = (() => {
402
402
  ${message.reasoning?.length
403
403
  ? html `
404
404
  <div class="reasoningStack">
405
- ${message.reasoning.map((part) => html `<dees-harness-reasoning .reasoningPart=${part}></dees-harness-reasoning>`)}
405
+ <dees-harness-reasoning .reasoningParts=${message.reasoning}></dees-harness-reasoning>
406
406
  </div>
407
407
  `
408
408
  : ''}
@@ -548,4 +548,4 @@ let DeesHarnessMessage = (() => {
548
548
  return DeesHarnessMessage = _classThis;
549
549
  })();
550
550
  export { DeesHarnessMessage };
551
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLW1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1tZXNzYWdlL2RlZXMtaGFybmVzcy1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUczRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8scURBQXFELENBQUM7QUFDN0QsT0FBTyxxREFBcUQsQ0FBQztBQUM3RCxPQUFPLDhDQUE4QyxDQUFDO0FBUXRELE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRXBDOzs7OztHQUtHO0lBRVUsa0JBQWtCOzRCQUQ5QixhQUFhLENBQUMsc0JBQXNCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FBbkIsU0FBUSxXQUFXOzs7O21DQUloRCxR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
551
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLW1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1tZXNzYWdlL2RlZXMtaGFybmVzcy1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUczRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8scURBQXFELENBQUM7QUFDN0QsT0FBTyxxREFBcUQsQ0FBQztBQUM3RCxPQUFPLDhDQUE4QyxDQUFDO0FBUXRELE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRXBDOzs7OztHQUtHO0lBRVUsa0JBQWtCOzRCQUQ5QixhQUFhLENBQUMsc0JBQXNCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FBbkIsU0FBUSxXQUFXOzs7O21DQUloRCxR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
@@ -7,18 +7,28 @@ declare global {
7
7
  }
8
8
  }
9
9
  /**
10
- * Reasoning ("thinking") disclosure for one reasoning part. Auto-opens while
11
- * the part is streaming (no endedAt) unless the user has interacted; the
12
- * user's expand/collapse choice wins afterwards and survives re-renders
13
- * because it lives on this element, not in the parent's template.
10
+ * Reasoning ("thinking") disclosure for a message's complete reasoning trace.
11
+ * Collapsed it shows a one-line summary the trace's first line, or the
12
+ * latest line while streaming and expanding reveals the FULL concatenated
13
+ * trace of every part in one flat body. Auto-opens while streaming (no
14
+ * endedAt on some part) unless the user has interacted; the user's
15
+ * expand/collapse choice wins afterwards and survives re-renders because it
16
+ * lives on this element, not in the parent's template.
14
17
  */
15
18
  export declare class DeesHarnessReasoning extends DeesElement {
16
19
  static demo: () => TemplateResult<1>;
17
20
  static demoGroups: string[];
18
- accessor reasoningPart: IHarnessReasoningPart;
21
+ accessor reasoningParts: IHarnessReasoningPart[];
19
22
  accessor expanded: boolean | undefined;
20
23
  static styles: import("@design.estate/dees-element").CSSResult[];
21
24
  get isStreaming(): boolean;
22
25
  get isOpen(): boolean;
26
+ /** All parts joined into the one full trace the expanded body shows. */
27
+ get fullText(): string;
28
+ /**
29
+ * One line for the collapsed state: the latest line while streaming (live
30
+ * progress), the first line once finished (the trace's own summary).
31
+ */
32
+ get previewLine(): string;
23
33
  render(): TemplateResult;
24
34
  }
@@ -13,20 +13,30 @@ export const demoFunc = () => html `
13
13
  </style>
14
14
  <div class="reasoningDemo">
15
15
  <dees-harness-reasoning
16
- .reasoningPart=${{
17
- id: 'r1',
18
- text: 'The user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.',
19
- startedAt: Date.now() - 4200,
20
- endedAt: Date.now(),
21
- }}
16
+ .reasoningParts=${[
17
+ {
18
+ id: 'r1',
19
+ text: 'Summarize the failing test before touching code.\nThe user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.',
20
+ startedAt: Date.now() - 9200,
21
+ endedAt: Date.now() - 5200,
22
+ },
23
+ {
24
+ id: 'r2',
25
+ text: 'The fixture predates the schema change; regenerating it should settle both assertions.',
26
+ startedAt: Date.now() - 5200,
27
+ endedAt: Date.now() - 4100,
28
+ },
29
+ ]}
22
30
  ></dees-harness-reasoning>
23
31
  <dees-harness-reasoning
24
- .reasoningPart=${{
25
- id: 'r2',
26
- text: 'Considering the tradeoffs between the two migration paths',
27
- startedAt: Date.now() - 1500,
28
- }}
32
+ .reasoningParts=${[
33
+ {
34
+ id: 'r3',
35
+ text: 'Considering the tradeoffs between the two migration paths',
36
+ startedAt: Date.now() - 1500,
37
+ },
38
+ ]}
29
39
  ></dees-harness-reasoning>
30
40
  </div>
31
41
  `;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXJlYXNvbmluZy5kZW1vLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaGFybmVzcy9kZWVzLWhhcm5lc3MtcmVhc29uaW5nL2RlZXMtaGFybmVzcy1yZWFzb25pbmcuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7Ozs7Ozs7Ozs7Ozs7dUJBY1g7SUFDZixFQUFFLEVBQUUsSUFBSTtJQUNSLElBQUksRUFBRSw0SkFBNEo7SUFDbEssU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0NBQ3BCOzs7dUJBR2dCO0lBQ2YsRUFBRSxFQUFFLElBQUk7SUFDUixJQUFJLEVBQUUsMkRBQTJEO0lBQ2pFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUM3Qjs7O0NBR04sQ0FBQyJ9
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXJlYXNvbmluZy5kZW1vLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaGFybmVzcy9kZWVzLWhhcm5lc3MtcmVhc29uaW5nL2RlZXMtaGFybmVzcy1yZWFzb25pbmcuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7Ozs7Ozs7Ozs7Ozs7d0JBY1Y7SUFDaEI7UUFDRSxFQUFFLEVBQUUsSUFBSTtRQUNSLElBQUksRUFBRSw4TUFBOE07UUFDcE4sU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJO1FBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtLQUMzQjtJQUNEO1FBQ0UsRUFBRSxFQUFFLElBQUk7UUFDUixJQUFJLEVBQUUsd0ZBQXdGO1FBQzlGLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtRQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7S0FDM0I7Q0FDRjs7O3dCQUdpQjtJQUNoQjtRQUNFLEVBQUUsRUFBRSxJQUFJO1FBQ1IsSUFBSSxFQUFFLDJEQUEyRDtRQUNqRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7S0FDN0I7Q0FDRjs7O0NBR04sQ0FBQyJ9
@@ -38,10 +38,13 @@ import { themeDefaultStyles } from '../../00theme.js';
38
38
  import { harnessFormatDuration } from '../harness.helpers.js';
39
39
  import '../../00group-utility/dees-icon/dees-icon.js';
40
40
  /**
41
- * Reasoning ("thinking") disclosure for one reasoning part. Auto-opens while
42
- * the part is streaming (no endedAt) unless the user has interacted; the
43
- * user's expand/collapse choice wins afterwards and survives re-renders
44
- * because it lives on this element, not in the parent's template.
41
+ * Reasoning ("thinking") disclosure for a message's complete reasoning trace.
42
+ * Collapsed it shows a one-line summary the trace's first line, or the
43
+ * latest line while streaming and expanding reveals the FULL concatenated
44
+ * trace of every part in one flat body. Auto-opens while streaming (no
45
+ * endedAt on some part) unless the user has interacted; the user's
46
+ * expand/collapse choice wins afterwards and survives re-renders because it
47
+ * lives on this element, not in the parent's template.
45
48
  */
46
49
  let DeesHarnessReasoning = (() => {
47
50
  let _classDecorators = [customElement('dees-harness-reasoning')];
@@ -49,9 +52,9 @@ let DeesHarnessReasoning = (() => {
49
52
  let _classExtraInitializers = [];
50
53
  let _classThis;
51
54
  let _classSuper = DeesElement;
52
- let _reasoningPart_decorators;
53
- let _reasoningPart_initializers = [];
54
- let _reasoningPart_extraInitializers = [];
55
+ let _reasoningParts_decorators;
56
+ let _reasoningParts_initializers = [];
57
+ let _reasoningParts_extraInitializers = [];
55
58
  let _expanded_decorators;
56
59
  let _expanded_initializers = [];
57
60
  let _expanded_extraInitializers = [];
@@ -59,9 +62,9 @@ let DeesHarnessReasoning = (() => {
59
62
  static { _classThis = this; }
60
63
  static {
61
64
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
62
- _reasoningPart_decorators = [property({ attribute: false })];
65
+ _reasoningParts_decorators = [property({ attribute: false })];
63
66
  _expanded_decorators = [state()];
64
- __esDecorate(this, null, _reasoningPart_decorators, { kind: "accessor", name: "reasoningPart", static: false, private: false, access: { has: obj => "reasoningPart" in obj, get: obj => obj.reasoningPart, set: (obj, value) => { obj.reasoningPart = value; } }, metadata: _metadata }, _reasoningPart_initializers, _reasoningPart_extraInitializers);
67
+ __esDecorate(this, null, _reasoningParts_decorators, { kind: "accessor", name: "reasoningParts", static: false, private: false, access: { has: obj => "reasoningParts" in obj, get: obj => obj.reasoningParts, set: (obj, value) => { obj.reasoningParts = value; } }, metadata: _metadata }, _reasoningParts_initializers, _reasoningParts_extraInitializers);
65
68
  __esDecorate(this, null, _expanded_decorators, { kind: "accessor", name: "expanded", static: false, private: false, access: { has: obj => "expanded" in obj, get: obj => obj.expanded, set: (obj, value) => { obj.expanded = value; } }, metadata: _metadata }, _expanded_initializers, _expanded_extraInitializers);
66
69
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
67
70
  DeesHarnessReasoning = _classThis = _classDescriptor.value;
@@ -69,10 +72,10 @@ let DeesHarnessReasoning = (() => {
69
72
  }
70
73
  static demo = demoFunc;
71
74
  static demoGroups = ['Agent Chat'];
72
- #reasoningPart_accessor_storage = __runInitializers(this, _reasoningPart_initializers, { id: '', text: '' });
73
- get reasoningPart() { return this.#reasoningPart_accessor_storage; }
74
- set reasoningPart(value) { this.#reasoningPart_accessor_storage = value; }
75
- #expanded_accessor_storage = (__runInitializers(this, _reasoningPart_extraInitializers), __runInitializers(this, _expanded_initializers, undefined));
75
+ #reasoningParts_accessor_storage = __runInitializers(this, _reasoningParts_initializers, []);
76
+ get reasoningParts() { return this.#reasoningParts_accessor_storage; }
77
+ set reasoningParts(value) { this.#reasoningParts_accessor_storage = value; }
78
+ #expanded_accessor_storage = (__runInitializers(this, _reasoningParts_extraInitializers), __runInitializers(this, _expanded_initializers, undefined));
76
79
  get expanded() { return this.#expanded_accessor_storage; }
77
80
  set expanded(value) { this.#expanded_accessor_storage = value; }
78
81
  static styles = [
@@ -154,6 +157,7 @@ let DeesHarnessReasoning = (() => {
154
157
  .chevron {
155
158
  display: grid;
156
159
  place-items: center;
160
+ flex: 0 0 auto;
157
161
  transition: transform var(--dees-transition-fast) var(--dees-ease-standard);
158
162
  }
159
163
 
@@ -161,8 +165,23 @@ let DeesHarnessReasoning = (() => {
161
165
  transform: rotate(90deg);
162
166
  }
163
167
 
168
+ .label {
169
+ flex: 0 0 auto;
170
+ }
171
+
172
+ .preview {
173
+ min-width: 0;
174
+ overflow: hidden;
175
+ text-overflow: ellipsis;
176
+ white-space: nowrap;
177
+ color: var(--dees-color-text-muted);
178
+ font-weight: 400;
179
+ font-style: italic;
180
+ }
181
+
164
182
  .duration {
165
183
  margin-left: auto;
184
+ flex: 0 0 auto;
166
185
  color: var(--dees-color-text-muted);
167
186
  font-weight: 400;
168
187
  }
@@ -194,13 +213,38 @@ let DeesHarnessReasoning = (() => {
194
213
  `,
195
214
  ];
196
215
  get isStreaming() {
197
- return Boolean(this.reasoningPart.startedAt) && !this.reasoningPart.endedAt;
216
+ return this.reasoningParts.some((part) => Boolean(part.startedAt) && !part.endedAt);
198
217
  }
199
218
  get isOpen() {
200
219
  return this.expanded ?? this.isStreaming;
201
220
  }
221
+ /** All parts joined into the one full trace the expanded body shows. */
222
+ get fullText() {
223
+ return this.reasoningParts
224
+ .map((part) => part.text.trim())
225
+ .filter((text) => text.length > 0)
226
+ .join('\n\n');
227
+ }
228
+ /**
229
+ * One line for the collapsed state: the latest line while streaming (live
230
+ * progress), the first line once finished (the trace's own summary).
231
+ */
232
+ get previewLine() {
233
+ const lines = this.fullText
234
+ .split('\n')
235
+ .map((line) => line.trim())
236
+ .filter((line) => line.length > 0);
237
+ if (lines.length === 0)
238
+ return '';
239
+ return this.isStreaming ? lines[lines.length - 1] : lines[0];
240
+ }
202
241
  render() {
203
- const duration = harnessFormatDuration(this.reasoningPart.startedAt, this.reasoningPart.endedAt);
242
+ const startedAt = this.reasoningParts.find((part) => part.startedAt)?.startedAt;
243
+ const endedAt = this.isStreaming
244
+ ? undefined
245
+ : [...this.reasoningParts].reverse().find((part) => part.endedAt)?.endedAt;
246
+ const duration = harnessFormatDuration(startedAt, endedAt);
247
+ const preview = this.previewLine;
204
248
  return html `
205
249
  <div class="reasoning">
206
250
  <button
@@ -214,14 +258,15 @@ let DeesHarnessReasoning = (() => {
214
258
  <span class="chevron ${this.isOpen ? 'open' : ''}">
215
259
  <dees-icon icon="lucide:ChevronRight" iconSize="12"></dees-icon>
216
260
  </span>
217
- <span class=${this.isStreaming ? 'thinkingDots' : ''}>
261
+ <span class="label ${this.isStreaming ? 'thinkingDots' : ''}">
218
262
  ${this.isStreaming ? 'Thinking' : 'Thought'}
219
263
  </span>
264
+ ${!this.isOpen && preview ? html `<span class="preview">${preview}</span>` : ''}
220
265
  ${duration ? html `<span class="duration">${duration}</span>` : ''}
221
266
  </button>
222
267
  <div class="bodyWrap ${this.isOpen ? 'open' : ''}" aria-hidden=${this.isOpen ? 'false' : 'true'}>
223
268
  <div class="bodyClip">
224
- <pre class="body">${this.reasoningPart.text || (this.isStreaming ? 'Waiting for reasoning…' : 'No reasoning emitted.')}</pre>
269
+ <pre class="body">${this.fullText || (this.isStreaming ? 'Waiting for reasoning…' : 'No reasoning emitted.')}</pre>
225
270
  </div>
226
271
  </div>
227
272
  </div>
@@ -238,4 +283,4 @@ let DeesHarnessReasoning = (() => {
238
283
  return DeesHarnessReasoning = _classThis;
239
284
  })();
240
285
  export { DeesHarnessReasoning };
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXJlYXNvbmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXJlYXNvbmluZy9kZWVzLWhhcm5lc3MtcmVhc29uaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sOENBQThDLENBQUM7QUFRdEQ7Ozs7O0dBS0c7SUFFVSxvQkFBb0I7NEJBRGhDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7O29DQUFuQixTQUFRLFdBQVc7Ozs7eUNBSWxELFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztvQ0FHOUIsS0FBSyxFQUFFO1lBRlIsNExBQVMsYUFBYSw2QkFBYixhQUFhLHFHQUErQztZQUdyRSw2S0FBUyxRQUFRLDZCQUFSLFFBQVEsMkZBQWtDO1lBUnJELDZLQXFLQzs7OztRQXBLUSxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUN2QixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFHMUMsdUZBQWdELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUM7UUFBckUsSUFBUyxhQUFhLG1EQUErQztRQUFyRSxJQUFTLGFBQWEseURBQStDO1FBR3JFLHlJQUF5QyxTQUFTLEdBQUM7UUFBbkQsSUFBUyxRQUFRLDhDQUFrQztRQUFuRCxJQUFTLFFBQVEsb0RBQWtDO1FBRTVDLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDckIsa0JBQWtCO1lBQ2xCLFVBQVUsQ0FBQyxhQUFhO1lBQ3hCLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpSEY7U0FDRixDQUFDO1FBRUYsSUFBVyxXQUFXO1lBQ3BCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUM5RSxDQUFDO1FBRUQsSUFBVyxNQUFNO1lBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDM0MsQ0FBQztRQUVNLE1BQU07WUFDWCxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sSUFBSSxDQUFBOzs7OzswQkFLVyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87bUJBQ3JDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMvQixDQUFDOztpQ0FFc0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7d0JBR2xDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtjQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVM7O1lBRTNDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLDBCQUEwQixRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7K0JBRTVDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNOztnQ0FFdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUM7Ozs7S0FJN0gsQ0FBQztRQUNKLENBQUM7Ozs7OztZQXBLVSx1REFBb0I7Ozs7O1NBQXBCLG9CQUFvQiJ9
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXJlYXNvbmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXJlYXNvbmluZy9kZWVzLWhhcm5lc3MtcmVhc29uaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sOENBQThDLENBQUM7QUFRdEQ7Ozs7Ozs7O0dBUUc7SUFFVSxvQkFBb0I7NEJBRGhDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7O29DQUFuQixTQUFRLFdBQVc7Ozs7MENBSWxELFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztvQ0FHOUIsS0FBSyxFQUFFO1lBRlIsK0xBQVMsY0FBYyw2QkFBZCxjQUFjLHVHQUErQjtZQUd0RCw2S0FBUyxRQUFRLDZCQUFSLFFBQVEsMkZBQWtDO1lBUnJELDZLQWdOQzs7OztRQS9NUSxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUN2QixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFHMUMseUZBQW1ELEVBQUUsRUFBQztRQUF0RCxJQUFTLGNBQWMsb0RBQStCO1FBQXRELElBQVMsY0FBYywwREFBK0I7UUFHdEQsMElBQXlDLFNB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
@@ -1,4 +1,5 @@
1
1
  export * from './elements/index.js';
2
+ export * from './services/index.js';
2
3
  import * as colors from './elements/00colors.js';
3
4
  export { colors };
4
5
  export { commitinfo } from './00_commitinfo_data.js';
@@ -1,5 +1,8 @@
1
1
  export * from './elements/index.js';
2
+ // Lib loader is public API: CSP-locked hosts pre-register bundled modules
3
+ // (e.g. xterm) through provideXtermModules instead of the CDN path.
4
+ export * from './services/index.js';
2
5
  import * as colors from './elements/00colors.js';
3
6
  export { colors };
4
7
  export { commitinfo } from './00_commitinfo_data.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c193ZWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNsQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUMifQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c193ZWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQywwRUFBMEU7QUFDMUUsb0VBQW9FO0FBQ3BFLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "3.103.0",
3
+ "version": "4.0.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",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.103.0',
6
+ version: '4.0.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
  }
@@ -351,9 +351,7 @@ export class DeesHarnessMessage extends DeesElement {
351
351
  ${message.reasoning?.length
352
352
  ? html`
353
353
  <div class="reasoningStack">
354
- ${message.reasoning.map(
355
- (part) => html`<dees-harness-reasoning .reasoningPart=${part}></dees-harness-reasoning>`,
356
- )}
354
+ <dees-harness-reasoning .reasoningParts=${message.reasoning}></dees-harness-reasoning>
357
355
  </div>
358
356
  `
359
357
  : ''}
@@ -14,19 +14,29 @@ export const demoFunc = () => html`
14
14
  </style>
15
15
  <div class="reasoningDemo">
16
16
  <dees-harness-reasoning
17
- .reasoningPart=${{
18
- id: 'r1',
19
- text: 'The user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.',
20
- startedAt: Date.now() - 4200,
21
- endedAt: Date.now(),
22
- }}
17
+ .reasoningParts=${[
18
+ {
19
+ id: 'r1',
20
+ text: 'Summarize the failing test before touching code.\nThe user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.',
21
+ startedAt: Date.now() - 9200,
22
+ endedAt: Date.now() - 5200,
23
+ },
24
+ {
25
+ id: 'r2',
26
+ text: 'The fixture predates the schema change; regenerating it should settle both assertions.',
27
+ startedAt: Date.now() - 5200,
28
+ endedAt: Date.now() - 4100,
29
+ },
30
+ ]}
23
31
  ></dees-harness-reasoning>
24
32
  <dees-harness-reasoning
25
- .reasoningPart=${{
26
- id: 'r2',
27
- text: 'Considering the tradeoffs between the two migration paths',
28
- startedAt: Date.now() - 1500,
29
- }}
33
+ .reasoningParts=${[
34
+ {
35
+ id: 'r3',
36
+ text: 'Considering the tradeoffs between the two migration paths',
37
+ startedAt: Date.now() - 1500,
38
+ },
39
+ ]}
30
40
  ></dees-harness-reasoning>
31
41
  </div>
32
42
  `;
@@ -21,10 +21,13 @@ declare global {
21
21
  }
22
22
 
23
23
  /**
24
- * Reasoning ("thinking") disclosure for one reasoning part. Auto-opens while
25
- * the part is streaming (no endedAt) unless the user has interacted; the
26
- * user's expand/collapse choice wins afterwards and survives re-renders
27
- * because it lives on this element, not in the parent's template.
24
+ * Reasoning ("thinking") disclosure for a message's complete reasoning trace.
25
+ * Collapsed it shows a one-line summary the trace's first line, or the
26
+ * latest line while streaming and expanding reveals the FULL concatenated
27
+ * trace of every part in one flat body. Auto-opens while streaming (no
28
+ * endedAt on some part) unless the user has interacted; the user's
29
+ * expand/collapse choice wins afterwards and survives re-renders because it
30
+ * lives on this element, not in the parent's template.
28
31
  */
29
32
  @customElement('dees-harness-reasoning')
30
33
  export class DeesHarnessReasoning extends DeesElement {
@@ -32,7 +35,7 @@ export class DeesHarnessReasoning extends DeesElement {
32
35
  public static demoGroups = ['Agent Chat'];
33
36
 
34
37
  @property({ attribute: false })
35
- accessor reasoningPart: IHarnessReasoningPart = { id: '', text: '' };
38
+ accessor reasoningParts: IHarnessReasoningPart[] = [];
36
39
 
37
40
  @state()
38
41
  accessor expanded: boolean | undefined = undefined;
@@ -116,6 +119,7 @@ export class DeesHarnessReasoning extends DeesElement {
116
119
  .chevron {
117
120
  display: grid;
118
121
  place-items: center;
122
+ flex: 0 0 auto;
119
123
  transition: transform var(--dees-transition-fast) var(--dees-ease-standard);
120
124
  }
121
125
 
@@ -123,8 +127,23 @@ export class DeesHarnessReasoning extends DeesElement {
123
127
  transform: rotate(90deg);
124
128
  }
125
129
 
130
+ .label {
131
+ flex: 0 0 auto;
132
+ }
133
+
134
+ .preview {
135
+ min-width: 0;
136
+ overflow: hidden;
137
+ text-overflow: ellipsis;
138
+ white-space: nowrap;
139
+ color: var(--dees-color-text-muted);
140
+ font-weight: 400;
141
+ font-style: italic;
142
+ }
143
+
126
144
  .duration {
127
145
  margin-left: auto;
146
+ flex: 0 0 auto;
128
147
  color: var(--dees-color-text-muted);
129
148
  font-weight: 400;
130
149
  }
@@ -157,15 +176,41 @@ export class DeesHarnessReasoning extends DeesElement {
157
176
  ];
158
177
 
159
178
  public get isStreaming(): boolean {
160
- return Boolean(this.reasoningPart.startedAt) && !this.reasoningPart.endedAt;
179
+ return this.reasoningParts.some((part) => Boolean(part.startedAt) && !part.endedAt);
161
180
  }
162
181
 
163
182
  public get isOpen(): boolean {
164
183
  return this.expanded ?? this.isStreaming;
165
184
  }
166
185
 
186
+ /** All parts joined into the one full trace the expanded body shows. */
187
+ public get fullText(): string {
188
+ return this.reasoningParts
189
+ .map((part) => part.text.trim())
190
+ .filter((text) => text.length > 0)
191
+ .join('\n\n');
192
+ }
193
+
194
+ /**
195
+ * One line for the collapsed state: the latest line while streaming (live
196
+ * progress), the first line once finished (the trace's own summary).
197
+ */
198
+ public get previewLine(): string {
199
+ const lines = this.fullText
200
+ .split('\n')
201
+ .map((line) => line.trim())
202
+ .filter((line) => line.length > 0);
203
+ if (lines.length === 0) return '';
204
+ return this.isStreaming ? lines[lines.length - 1] : lines[0];
205
+ }
206
+
167
207
  public render(): TemplateResult {
168
- const duration = harnessFormatDuration(this.reasoningPart.startedAt, this.reasoningPart.endedAt);
208
+ const startedAt = this.reasoningParts.find((part) => part.startedAt)?.startedAt;
209
+ const endedAt = this.isStreaming
210
+ ? undefined
211
+ : [...this.reasoningParts].reverse().find((part) => part.endedAt)?.endedAt;
212
+ const duration = harnessFormatDuration(startedAt, endedAt);
213
+ const preview = this.previewLine;
169
214
  return html`
170
215
  <div class="reasoning">
171
216
  <button
@@ -179,14 +224,15 @@ export class DeesHarnessReasoning extends DeesElement {
179
224
  <span class="chevron ${this.isOpen ? 'open' : ''}">
180
225
  <dees-icon icon="lucide:ChevronRight" iconSize="12"></dees-icon>
181
226
  </span>
182
- <span class=${this.isStreaming ? 'thinkingDots' : ''}>
227
+ <span class="label ${this.isStreaming ? 'thinkingDots' : ''}">
183
228
  ${this.isStreaming ? 'Thinking' : 'Thought'}
184
229
  </span>
230
+ ${!this.isOpen && preview ? html`<span class="preview">${preview}</span>` : ''}
185
231
  ${duration ? html`<span class="duration">${duration}</span>` : ''}
186
232
  </button>
187
233
  <div class="bodyWrap ${this.isOpen ? 'open' : ''}" aria-hidden=${this.isOpen ? 'false' : 'true'}>
188
234
  <div class="bodyClip">
189
- <pre class="body">${this.reasoningPart.text || (this.isStreaming ? 'Waiting for reasoning…' : 'No reasoning emitted.')}</pre>
235
+ <pre class="body">${this.fullText || (this.isStreaming ? 'Waiting for reasoning…' : 'No reasoning emitted.')}</pre>
190
236
  </div>
191
237
  </div>
192
238
  </div>
package/ts_web/index.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  export * from './elements/index.js';
2
+ // Lib loader is public API: CSP-locked hosts pre-register bundled modules
3
+ // (e.g. xterm) through provideXtermModules instead of the CDN path.
4
+ export * from './services/index.js';
2
5
  import * as colors from './elements/00colors.js';
3
6
  export { colors };
4
7
  export { commitinfo } from './00_commitinfo_data.js';