@aceshooting/lyra-ui 21.0.0 → 21.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.
Files changed (272) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +6 -3
  3. package/custom-elements.json +1 -1
  4. package/dist/ai/runtime.js +1 -1
  5. package/dist/ai/types.d.ts +13 -5
  6. package/dist/cli/lyra-rename-ledger.mjs +1 -0
  7. package/dist/cli/migrate-wa.mjs +33 -13
  8. package/dist/cli/migration-contract.json +1 -1
  9. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +5 -3
  10. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +3 -2
  11. package/dist/components/agent-tools/tool-call-block/tool-call-block.class.d.ts +15 -3
  12. package/dist/components/agent-tools/tool-call-block/tool-call-block.class.js +3 -3
  13. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +24 -8
  14. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +3 -3
  15. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +4 -0
  16. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.d.ts +9 -5
  17. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
  18. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  19. package/dist/components/agent-tools/tool-status.js +2 -2
  20. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +8 -0
  21. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +3 -2
  22. package/dist/components/agent-tools/tool-timeline/tool-timeline.styles.js +1 -1
  23. package/dist/components/agent-tools/trace-tree/span.d.ts +2 -2
  24. package/dist/components/charts/chart/box-plot.class.d.ts +3 -1
  25. package/dist/components/charts/chart/box-plot.class.js +9 -9
  26. package/dist/components/charts/chart/chart-bidi.d.ts +109 -0
  27. package/dist/components/charts/chart/chart-bidi.js +1 -0
  28. package/dist/components/charts/chart/chart.class.d.ts +17 -2
  29. package/dist/components/charts/chart/chart.class.js +10 -8
  30. package/dist/components/charts/chart/histogram.class.js +1 -1
  31. package/dist/components/charts/chart/lite-chart.class.d.ts +24 -5
  32. package/dist/components/charts/chart/lite-chart.class.js +9 -9
  33. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  34. package/dist/components/conversation/code-block/shiki-dark-theme.d.ts +2 -2
  35. package/dist/components/conversation/code-block/shiki-dark-theme.js +1 -1
  36. package/dist/components/conversation/conversation-item/conversation-item.class.d.ts +18 -2
  37. package/dist/components/conversation/conversation-item/conversation-item.class.js +3 -3
  38. package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
  39. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  40. package/dist/components/conversation/markdown/markdown-core.class.d.ts +3 -1
  41. package/dist/components/conversation/markdown/markdown.class.d.ts +3 -1
  42. package/dist/components/conversation/message-actions/message-actions.class.d.ts +7 -2
  43. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  44. package/dist/components/conversation/message-parts/message-parts.class.d.ts +6 -2
  45. package/dist/components/conversation/message-parts/message-parts.class.js +5 -3
  46. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +3 -2
  47. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  48. package/dist/components/conversation/streaming-text/streaming-text-base.class.d.ts +1 -5
  49. package/dist/components/conversation/streaming-text/streaming-text-base.class.js +2 -2
  50. package/dist/components/conversation/streaming-text/streaming-text-core.class.d.ts +7 -1
  51. package/dist/components/conversation/streaming-text/streaming-text-core.class.js +3 -4
  52. package/dist/components/conversation/streaming-text/streaming-text.class.d.ts +7 -1
  53. package/dist/components/conversation/streaming-text/streaming-text.class.js +3 -4
  54. package/dist/components/conversation/thread-list/thread-list.class.d.ts +13 -2
  55. package/dist/components/conversation/thread-list/thread-list.class.js +3 -3
  56. package/dist/components/data/data-grid/data-grid.class.js +1 -1
  57. package/dist/components/data/document-library/document-library.class.js +2 -0
  58. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -1
  59. package/dist/components/data/flow-minimap/flow-minimap.class.js +1 -1
  60. package/dist/components/data/flow-node/flow-node.class.d.ts +6 -2
  61. package/dist/components/data/flow-node/flow-node.class.js +6 -2
  62. package/dist/components/data/flow-node/flow-node.styles.js +1 -1
  63. package/dist/components/data/gauge/gauge.styles.js +1 -1
  64. package/dist/components/data/heatmap/heatmap.class.d.ts +3 -0
  65. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  66. package/dist/components/data/heatmap/heatmap.styles.js +1 -1
  67. package/dist/components/data/sparkline/sparkline.class.d.ts +5 -3
  68. package/dist/components/data/stat/stat.class.d.ts +4 -3
  69. package/dist/components/data/table/table.class.d.ts +32 -5
  70. package/dist/components/data/table/table.class.js +3 -2
  71. package/dist/components/forms/button/button.class.d.ts +7 -1
  72. package/dist/components/forms/button/button.styles.js +1 -1
  73. package/dist/components/forms/date-picker/date-input.styles.js +1 -1
  74. package/dist/components/forms/input/input.styles.js +1 -1
  75. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -0
  76. package/dist/components/layout/app-rail/app-rail.class.d.ts +50 -11
  77. package/dist/components/layout/app-rail/app-rail.class.js +2 -2
  78. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  79. package/dist/components/layout/menu/menu.class.d.ts +6 -5
  80. package/dist/components/layout/split-panel/split-panel.class.d.ts +2 -1
  81. package/dist/components/media/flag/language-map.d.ts +8 -0
  82. package/dist/components/media/flag/language-map.js +1 -1
  83. package/dist/components/media/map/map-loader.d.ts +7 -1
  84. package/dist/components/media/map/map.class.d.ts +111 -5
  85. package/dist/components/media/map/map.class.js +3 -3
  86. package/dist/components/media/media-card/media-card.class.d.ts +18 -5
  87. package/dist/components/media/media-card/media-card.class.js +1 -1
  88. package/dist/components/overlays/overlay/popover.class.d.ts +20 -0
  89. package/dist/components/overlays/overlay/popover.class.js +2 -2
  90. package/dist/components/retrieval/graph/graph.class.d.ts +3 -3
  91. package/dist/components/retrieval/graph/graph.class.js +1 -1
  92. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +5 -3
  93. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +3 -2
  94. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +3 -3
  95. package/dist/components/retrieval/mind-map/mind-map.class.js +1 -1
  96. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +4 -1
  97. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -1
  98. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +4 -1
  99. package/dist/components/retrieval/source-picker/source-picker.class.js +5 -1
  100. package/dist/components/utility/icon/icon.class.d.ts +9 -3
  101. package/dist/components/utility/icon/icon.class.js +1 -1
  102. package/dist/components/utility/mutation-observer/mutation-observer.class.d.ts +14 -8
  103. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  104. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +6 -1
  105. package/dist/components/viewers/document-viewer/document-viewer.class.js +7 -1
  106. package/dist/components/viewers/document-viewer/registry.d.ts +12 -3
  107. package/dist/components/viewers/geojson-view/geojson-view.class.d.ts +13 -5
  108. package/dist/components/viewers/geojson-view/geojson-view.class.js +1 -1
  109. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +3 -2
  110. package/dist/custom-elements-jsx.d.ts +1 -1
  111. package/dist/events.d.ts +644 -1242
  112. package/dist/internal/anchored-overlay-runtime.d.ts +2 -2
  113. package/dist/internal/cell-range.d.ts +0 -6
  114. package/dist/internal/cell-range.js +1 -1
  115. package/dist/internal/css-token-length.d.ts +7 -0
  116. package/dist/internal/css-token-length.js +1 -0
  117. package/dist/internal/default-strings.generated.d.ts +1 -1
  118. package/dist/internal/default-strings.generated.js +1 -1
  119. package/dist/internal/deferred-focus-return.d.ts +7 -4
  120. package/dist/internal/deferred-focus-return.js +1 -1
  121. package/dist/internal/dev-mode-attribute-warning.d.ts +35 -0
  122. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  123. package/dist/internal/localization-runtime.js +1 -1
  124. package/dist/internal/localization-types.d.ts +1 -1
  125. package/dist/internal/localization.js +2 -2
  126. package/dist/internal/package-metadata.d.ts +1 -1
  127. package/dist/internal/package-metadata.js +1 -1
  128. package/dist/internal/papaparse-loader.d.ts +1 -1
  129. package/dist/internal/papaparse-loader.js +1 -1
  130. package/dist/internal/positioner.d.ts +10 -0
  131. package/dist/internal/positioner.js +1 -1
  132. package/dist/internal/shared-unions.d.ts +2 -1
  133. package/dist/internal/slotted-overlay-controller.d.ts +20 -0
  134. package/dist/internal/slotted-overlay-controller.js +1 -0
  135. package/dist/internal/text-quote.d.ts +1 -1
  136. package/dist/internal/text-quote.js +1 -1
  137. package/dist/internal/theme-observation.d.ts +4 -0
  138. package/dist/internal/theme-observation.js +1 -0
  139. package/dist/internal/theme-watcher.js +1 -1
  140. package/dist/localization.d.ts +6 -1
  141. package/dist/localization.js +1 -1
  142. package/dist/lyra.d.ts +1 -1
  143. package/dist/lyra.js +1 -1
  144. package/dist/svelte.d.ts +1 -1
  145. package/dist/testing/lyra-tag-event-map.js +1 -1
  146. package/dist/translations/ar/agent-tools.js +1 -1
  147. package/dist/translations/cs/agent-tools.js +1 -1
  148. package/dist/translations/da/agent-tools.js +1 -1
  149. package/dist/translations/de/agent-tools.js +1 -1
  150. package/dist/translations/de-CH/agent-tools.js +1 -1
  151. package/dist/translations/es/agent-tools.js +1 -1
  152. package/dist/translations/fa/agent-tools.js +1 -1
  153. package/dist/translations/fi/agent-tools.js +1 -1
  154. package/dist/translations/fr/agent-tools.js +1 -1
  155. package/dist/translations/he/agent-tools.js +1 -1
  156. package/dist/translations/hi/agent-tools.js +1 -1
  157. package/dist/translations/hr/agent-tools.js +1 -1
  158. package/dist/translations/hu/agent-tools.js +1 -1
  159. package/dist/translations/id/agent-tools.js +1 -1
  160. package/dist/translations/it/agent-tools.js +1 -1
  161. package/dist/translations/ja/agent-tools.js +1 -1
  162. package/dist/translations/kk/agent-tools.js +1 -1
  163. package/dist/translations/ko/agent-tools.js +1 -1
  164. package/dist/translations/nb/agent-tools.js +1 -1
  165. package/dist/translations/nl/agent-tools.js +1 -1
  166. package/dist/translations/nn/agent-tools.js +1 -1
  167. package/dist/translations/pl/agent-tools.js +1 -1
  168. package/dist/translations/pt-BR/agent-tools.js +1 -1
  169. package/dist/translations/pt-PT/agent-tools.js +1 -1
  170. package/dist/translations/pt-PT/charts.js +1 -1
  171. package/dist/translations/pt-PT/conversation.js +1 -1
  172. package/dist/translations/pt-PT/data.js +1 -1
  173. package/dist/translations/pt-PT/forms.js +1 -1
  174. package/dist/translations/pt-PT/layout.js +1 -1
  175. package/dist/translations/pt-PT/media.js +1 -1
  176. package/dist/translations/pt-PT/retrieval.js +1 -1
  177. package/dist/translations/pt-PT/shared.js +1 -1
  178. package/dist/translations/pt-PT/utility.js +1 -1
  179. package/dist/translations/pt-PT/viewers.js +2 -2
  180. package/dist/translations/ro/agent-tools.js +1 -1
  181. package/dist/translations/ru/agent-tools.js +1 -1
  182. package/dist/translations/sl/agent-tools.js +1 -1
  183. package/dist/translations/sv/agent-tools.js +1 -1
  184. package/dist/translations/tr/agent-tools.js +1 -1
  185. package/dist/translations/uk/agent-tools.js +1 -1
  186. package/dist/translations/zh-CN/agent-tools.js +1 -1
  187. package/dist/translations/zh-TW/agent-tools.js +1 -1
  188. package/dist/utilities/index.d.ts +1 -1
  189. package/dist/utilities/index.js +1 -1
  190. package/dist/utilities/localization.d.ts +28 -10
  191. package/dist/vue.d.ts +1 -1
  192. package/llms/components/lr-accordion-item.md +2 -344
  193. package/llms/components/lr-accordion.md +2 -344
  194. package/llms/components/lr-app-rail-group.md +2 -721
  195. package/llms/components/lr-app-rail-item.md +2 -721
  196. package/llms/components/lr-app-rail.md +29 -4
  197. package/llms/components/lr-bar-chart.md +2 -87
  198. package/llms/components/lr-box-plot.md +1 -1
  199. package/llms/components/lr-breadcrumb-item.md +2 -67
  200. package/llms/components/lr-bubble-chart.md +2 -87
  201. package/llms/components/lr-button.md +7 -0
  202. package/llms/components/lr-chart.md +4 -5
  203. package/llms/components/lr-chip-group.md +2 -272
  204. package/llms/components/lr-conversation-item.md +20 -2
  205. package/llms/components/lr-date-input.md +2 -457
  206. package/llms/components/lr-date-picker.md +6 -2
  207. package/llms/components/lr-document-library.md +3 -3
  208. package/llms/components/lr-document-viewer.md +14 -5
  209. package/llms/components/lr-doughnut-chart.md +2 -87
  210. package/llms/components/lr-dropdown-item.md +2 -306
  211. package/llms/components/lr-dropdown.md +6 -0
  212. package/llms/components/lr-flag.md +9 -1
  213. package/llms/components/lr-flow-node.md +4 -1
  214. package/llms/components/lr-geojson-view.md +3 -90
  215. package/llms/components/lr-geojson-viewer.md +13 -5
  216. package/llms/components/lr-icon-button.md +4 -1
  217. package/llms/components/lr-icon.md +14 -6
  218. package/llms/components/lr-input.md +9 -2
  219. package/llms/components/lr-lite-chart.md +17 -9
  220. package/llms/components/lr-map.md +87 -2
  221. package/llms/components/lr-markdown-core.md +5 -4
  222. package/llms/components/lr-markdown.md +4 -2
  223. package/llms/components/lr-media-card.md +10 -5
  224. package/llms/components/lr-menu-item.md +2 -306
  225. package/llms/components/lr-menu.md +9 -6
  226. package/llms/components/lr-menubar-item.md +2 -125
  227. package/llms/components/lr-message-actions.md +4 -1
  228. package/llms/components/lr-message-parts.md +14 -5
  229. package/llms/components/lr-mutation-observer.md +12 -6
  230. package/llms/components/lr-navigation-menu-item.md +2 -237
  231. package/llms/components/lr-number-input.md +4 -0
  232. package/llms/components/lr-option.md +2 -712
  233. package/llms/components/lr-pie-chart.md +2 -87
  234. package/llms/components/lr-polar-area-chart.md +2 -87
  235. package/llms/components/lr-popover.md +10 -0
  236. package/llms/components/lr-prompt-input.md +5 -1
  237. package/llms/components/lr-radar-chart.md +2 -87
  238. package/llms/components/lr-reorder-item.md +2 -157
  239. package/llms/components/lr-result-field.md +2 -117
  240. package/llms/components/lr-retrieval-results.md +3 -1
  241. package/llms/components/lr-rubric-form.md +3 -2
  242. package/llms/components/lr-scatter-chart.md +2 -87
  243. package/llms/components/lr-selection-toolbar.md +4 -2
  244. package/llms/components/lr-source-card.md +2 -186
  245. package/llms/components/lr-source-picker.md +3 -1
  246. package/llms/components/lr-sparkline.md +9 -4
  247. package/llms/components/lr-split-panel.md +5 -3
  248. package/llms/components/lr-stat.md +4 -3
  249. package/llms/components/lr-streaming-text-core.md +7 -5
  250. package/llms/components/lr-streaming-text.md +9 -6
  251. package/llms/components/lr-swatch-picker.md +130 -0
  252. package/llms/components/lr-tag.md +2 -177
  253. package/llms/components/lr-thread-list.md +27 -4
  254. package/llms/components/lr-timeline-item.md +2 -120
  255. package/llms/components/lr-toast-item.md +2 -223
  256. package/llms/components/lr-tool-call-block.md +12 -3
  257. package/llms/components/lr-tool-call-chip.md +12 -6
  258. package/llms/components/lr-tool-param-form.md +3 -2
  259. package/llms/components/lr-tool-result-dialog.md +7 -3
  260. package/llms/components/lr-tool-result-view.md +4 -3
  261. package/llms/components/lr-tool-timeline.md +12 -5
  262. package/llms/components/lr-tree-item.md +2 -354
  263. package/llms/index.md +22 -4
  264. package/llms/migration.md +75 -1
  265. package/llms/peers.md +1 -1
  266. package/llms/shared.md +86 -39
  267. package/llms-full.txt +739 -163
  268. package/package.json +6 -6
  269. package/registrations.json +1 -1
  270. package/vscode-css-data.json +1 -1
  271. package/vscode-html-data.json +1 -1
  272. package/web-types.json +1 -1
@@ -92,9 +92,11 @@ private handoffFromAgent;
92
92
  /** Same computation `<lr-handoff-divider>` performs internally for its own `aria-label`, reused
93
93
  * here (not reimplemented with different wording) for this button's accessible name. */
94
94
  private handoffAccessibleLabel;private onVisibilityChange;
95
- /** Keeps the composed legend's cancelable proposal within this wrapper without changing its
96
- * default-prevented state. The child still owns the proposal, commit, and announcement. */
97
- private onBeforeVisibilityChange;
95
+ /** Keeps the composed legend's cancelable proposal within this wrapper under both its canonical
96
+ * `lr-visibility-change-request` name and its deprecated `lr-before-visibility-change` alias,
97
+ * without changing its default-prevented state. The child still owns the proposal, commit, and
98
+ * announcement. */
99
+ private onVisibilityChangeProposal;
98
100
  /** Keeps `activeSpanId` (and therefore the handoff list's own highlighting) in sync when
99
101
  * selection originates inside the composed `<lr-trace-tree>` rather than the handoff quick-jump
100
102
  * list. The original event is never stopped here, so it still reaches a host listener on this
@@ -1,10 +1,11 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{styles}from"./agent-trace.styles.js";import{normalizeLyraSpans}from"../trace-tree/span.js";import{LYRA_DEFAULT_agentTraceFilterLabel,LYRA_DEFAULT_handoffFromToAgent,LYRA_DEFAULT_handoffToAgent,LYRA_DEFAULT_popover,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool,LYRA_DEFAULT_tokensIn,LYRA_DEFAULT_tokensOut}from"../../../internal/default-strings.generated.js";const KIND_ORDER=["agent","llm","tool","retriever","embedding","other"],KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"};class LyraAgentTrace extends LyraElement{constructor(){super(...arguments),this.spans=[],this.activeSpanId=null,this.hiddenKinds=[],this.showTokens=!1,this.showCost=!1,this.showBars=!0,this.onVisibilityChange=e=>{e.stopPropagation(),this.hiddenKinds=e.detail.hiddenTypes,this.emit("lr-span-visibility-change",{hiddenKinds:[...this.hiddenKinds]})},this.onBeforeVisibilityChange=event=>{event.stopPropagation()},this.onTreeSpanSelect=e=>{this.activeSpanId=e.detail.spanId}}static{this.defaultStrings={...super.defaultStrings,agentTraceFilterLabel:LYRA_DEFAULT_agentTraceFilterLabel,handoffFromToAgent:LYRA_DEFAULT_handoffFromToAgent,handoffToAgent:LYRA_DEFAULT_handoffToAgent,popover:LYRA_DEFAULT_popover,spanKindAgent:LYRA_DEFAULT_spanKindAgent,spanKindEmbedding:LYRA_DEFAULT_spanKindEmbedding,spanKindLlm:LYRA_DEFAULT_spanKindLlm,spanKindOther:LYRA_DEFAULT_spanKindOther,spanKindRetriever:LYRA_DEFAULT_spanKindRetriever,spanKindTool:LYRA_DEFAULT_spanKindTool,tokensIn:LYRA_DEFAULT_tokensIn,tokensOut:LYRA_DEFAULT_tokensOut}}static{this.ownedCollectionProperties=Object.freeze(["spans","hiddenKinds"])}static{this.identityCollectionProperties=Object.freeze(["spans"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-span-visibility-change"])}presentKinds(spans){const present=new Set(spans.map(s=>s.kind));return KIND_ORDER.filter(k=>present.has(k))}filteredSpans(spans){if(this.hiddenKinds.length===0)return[...spans];const hidden=new Set(this.hiddenKinds);return spans.filter(span=>!hidden.has(span.kind))}handoffSpans(spans){return spans.filter(span=>span.kind==="agent")}handoffFromAgent(span,byId){if(!span.parentId)return"";const parent=byId.get(span.parentId);return parent?.kind==="agent"?parent.name:""}handoffAccessibleLabel(span,fromAgent){return fromAgent?this.localize("handoffFromToAgent",void 0,{from:fromAgent,to:span.name}):this.localize("handoffToAgent",void 0,{agent:span.name})}selectSpan(id){this.activeSpanId=id,this.emit("lr-span-select",{spanId:id})}renderFilter(spans){const kinds=this.presentKinds(spans);if(kinds.length===0)return nothing;const types=kinds.map(k=>({id:k,label:this.localize(KIND_LABEL_KEY[k])}));return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{styles}from"./agent-trace.styles.js";import{normalizeLyraSpans}from"../trace-tree/span.js";import{LYRA_DEFAULT_agentTraceFilterLabel,LYRA_DEFAULT_handoffFromToAgent,LYRA_DEFAULT_handoffToAgent,LYRA_DEFAULT_popover,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool,LYRA_DEFAULT_tokensIn,LYRA_DEFAULT_tokensOut}from"../../../internal/default-strings.generated.js";const KIND_ORDER=["agent","llm","tool","retriever","embedding","other"],KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"};class LyraAgentTrace extends LyraElement{constructor(){super(...arguments),this.spans=[],this.activeSpanId=null,this.hiddenKinds=[],this.showTokens=!1,this.showCost=!1,this.showBars=!0,this.onVisibilityChange=e=>{e.stopPropagation(),this.hiddenKinds=e.detail.hiddenTypes,this.emit("lr-span-visibility-change",{hiddenKinds:[...this.hiddenKinds]})},this.onVisibilityChangeProposal=event=>{event.stopPropagation()},this.onTreeSpanSelect=e=>{this.activeSpanId=e.detail.spanId}}static{this.defaultStrings={...super.defaultStrings,agentTraceFilterLabel:LYRA_DEFAULT_agentTraceFilterLabel,handoffFromToAgent:LYRA_DEFAULT_handoffFromToAgent,handoffToAgent:LYRA_DEFAULT_handoffToAgent,popover:LYRA_DEFAULT_popover,spanKindAgent:LYRA_DEFAULT_spanKindAgent,spanKindEmbedding:LYRA_DEFAULT_spanKindEmbedding,spanKindLlm:LYRA_DEFAULT_spanKindLlm,spanKindOther:LYRA_DEFAULT_spanKindOther,spanKindRetriever:LYRA_DEFAULT_spanKindRetriever,spanKindTool:LYRA_DEFAULT_spanKindTool,tokensIn:LYRA_DEFAULT_tokensIn,tokensOut:LYRA_DEFAULT_tokensOut}}static{this.ownedCollectionProperties=Object.freeze(["spans","hiddenKinds"])}static{this.identityCollectionProperties=Object.freeze(["spans"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-span-visibility-change"])}presentKinds(spans){const present=new Set(spans.map(s=>s.kind));return KIND_ORDER.filter(k=>present.has(k))}filteredSpans(spans){if(this.hiddenKinds.length===0)return[...spans];const hidden=new Set(this.hiddenKinds);return spans.filter(span=>!hidden.has(span.kind))}handoffSpans(spans){return spans.filter(span=>span.kind==="agent")}handoffFromAgent(span,byId){if(!span.parentId)return"";const parent=byId.get(span.parentId);return parent?.kind==="agent"?parent.name:""}handoffAccessibleLabel(span,fromAgent){return fromAgent?this.localize("handoffFromToAgent",void 0,{from:fromAgent,to:span.name}):this.localize("handoffToAgent",void 0,{agent:span.name})}selectSpan(id){this.activeSpanId=id,this.emit("lr-span-select",{spanId:id})}renderFilter(spans){const kinds=this.presentKinds(spans);if(kinds.length===0)return nothing;const types=kinds.map(k=>({id:k,label:this.localize(KIND_LABEL_KEY[k])}));return html`
2
2
  <lr-graph-legend
3
3
  part="filter"
4
4
  .label=${this.localize("agentTraceFilterLabel")}
5
5
  .types=${types}
6
6
  .hiddenTypes=${this.hiddenKinds}
7
- @lr-before-visibility-change=${this.onBeforeVisibilityChange}
7
+ @lr-visibility-change-request=${this.onVisibilityChangeProposal}
8
+ @lr-before-visibility-change=${this.onVisibilityChangeProposal}
8
9
  @lr-visibility-change=${this.onVisibilityChange}
9
10
  ></lr-graph-legend>
10
11
  `}renderHandoff(span,byId){const fromAgent=this.handoffFromAgent(span,byId),isActive=this.activeSpanId===span.id;return html`
@@ -9,6 +9,12 @@ export interface ToolCallBlockRenderErrorDetail{toolName:string;error:unknown;ca
9
9
  * header reads a status-aware verb (`Used web_search`) beside a status glyph and an optional
10
10
  * duration; expanding it in place reveals the call's arguments, then its error, then its result.
11
11
  *
12
+ * `display-name` puts the application's own, already-translated tool label into that verb in place
13
+ * of `name` (`Used Lecture d’un fichier`), so the status wording stays localized. `name` still
14
+ * selects the result renderer and is still reported in `lr-render-error`. `status="incomplete"`
15
+ * is a call that ended without a result (an interrupted stream, a cancelled run): it reads
16
+ * `Did not finish using …` with a static glyph and the neutral accent.
17
+ *
12
18
  * Details are deferred: a collapsed block renders an empty body and never reads `args` or
13
19
  * `result`. Expanding renders `args` through `<lr-json-viewer>` and `result` through
14
20
  * `<lr-tool-result-view>`, so any renderer registered with `registerToolRenderer()` still applies.
@@ -50,7 +56,7 @@ export interface ToolCallBlockRenderErrorDetail{toolName:string;error:unknown;ca
50
56
  * @cssprop [--lr-tool-call-block-background=var(--lr-color-surface)] - Card fill.
51
57
  * @cssprop [--lr-tool-call-block-border-color=var(--lr-color-border)] - Card edge and header/body divider.
52
58
  * @cssprop [--lr-tool-call-block-radius=var(--lr-radius)] - Card corner radius.
53
- * @cssprop [--lr-tool-call-block-accent=var(--lr-color-text-quiet)] - Status glyph colour; defaults per status (brand while running, success, danger on error, warning when denied).
59
+ * @cssprop [--lr-tool-call-block-accent=var(--lr-color-text-quiet)] - Status glyph colour; defaults per status (brand while running, success, danger on error, warning when denied, neutral while pending or incomplete).
54
60
  * @cssprop [--lr-tool-call-block-error-color=var(--lr-color-danger)] - Error section text colour.
55
61
  * @status experimental
56
62
  * @since 21.0.0
@@ -58,10 +64,16 @@ export interface ToolCallBlockRenderErrorDetail{toolName:string;error:unknown;ca
58
64
  export declare class LyraToolCallBlock extends LyraElement<LyraToolCallBlockEventMap>{static styles:import("lit").CSSResultGroup[];protected static readonly ownedCollectionProperties:readonly string[];
59
65
  /** Tool name. An empty name renders the localized generic tool-call label in its place. */
60
66
  name:string;
67
+ /** The tool's display label, e.g. an application-translated `Lecture d’un fichier`. Replaces
68
+ * `name` in the header verb only; `name` still selects the result renderer and is still reported
69
+ * in `lr-render-error`. Unset or empty shows `name`. A `label` override replaces the whole
70
+ * header, this included. */
71
+ displayName?:string;
61
72
  /** Invocation id, echoed in `lr-toggle` and `lr-render-error` details. */
62
73
  callId:string;private statusValue;
63
- /** Call status. Values outside `pending | running | success | error | denied` normalize and
64
- * reflect as `pending`. */
74
+ /** Call status. `incomplete` is a call that ended without a result (an interrupted stream, a
75
+ * cancelled run). Values outside `pending | running | success | error | denied | incomplete`
76
+ * normalize and reflect as `pending`. */
65
77
  get status():ToolCallStatus;set status(next:ToolCallStatus);
66
78
  /** Whether the details are shown. Starts collapsed. */
67
79
  expanded:boolean;
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{LyraElement}from"../../../internal/lyra-element.js";import{literalSetConverter}from"../../../internal/converters.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{durationMessageValue}from"../../../internal/duration.js";import{tag}from"../../../internal/prefix.js";import{observeScrollOverflow,SCROLL_OVERFLOW_ATTRIBUTE}from"../../../internal/scroll-overflow.js";import{TOOL_CALL_STATUSES,TOOL_STATUS_LABEL_KEY,toolStatusIcon}from"../tool-status.js";import{projectedRedactionFields,redactToolDetail,TOO_MANY_REDACTION_PATHS}from"../tool-redaction.js";import{styles}from"./tool-call-block.styles.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_envListValueHidden,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_toolCall,LYRA_DEFAULT_toolCallBlockArgumentsLabel,LYRA_DEFAULT_toolCallBlockErrorLabel,LYRA_DEFAULT_toolCallBlockHeaderDenied,LYRA_DEFAULT_toolCallBlockHeaderError,LYRA_DEFAULT_toolCallBlockHeaderPending,LYRA_DEFAULT_toolCallBlockHeaderRunning,LYRA_DEFAULT_toolCallBlockHeaderSuccess,LYRA_DEFAULT_toolCallBlockResultLabel}from"../../../internal/default-strings.generated.js";const TOOL_CALL_BLOCK_STATUS=literalSetConverter(TOOL_CALL_STATUSES,"pending"),HEADER_KEY={pending:"toolCallBlockHeaderPending",running:"toolCallBlockHeaderRunning",success:"toolCallBlockHeaderSuccess",error:"toolCallBlockHeaderError",denied:"toolCallBlockHeaderDenied"};function argsPresent(args){if(args==null)return!1;if(typeof args!="object")return!0;try{const prototype=Object.getPrototypeOf(args);return prototype!==Object.prototype&&prototype!==null?!0:Object.keys(args).length>0}catch{return!0}}class LyraToolCallBlock extends LyraElement{constructor(){super(...arguments),this.name="",this.callId="",this.statusValue="pending",this.expanded=!1,this.redactedFields=[],this.bodyId=nextId("tool-call-block-body"),this.labelId=nextId("tool-call-block-label"),this.argsLabelId=nextId("tool-call-block-args-label"),this.resultLabelId=nextId("tool-call-block-result-label"),this.errorLabelId=nextId("tool-call-block-error-label"),this.projectedPaths=[],this.restoreFocusToHeader=!1,this.resultOverflow=observeScrollOverflow(this,()=>this.renderRoot?.querySelector('[part="result"]'),()=>this.syncResultScrollStop()),this.onHeaderClick=()=>{this.expanded=!this.expanded,this.emit("lr-toggle",{expanded:this.expanded,callId:this.callId})},this.onRenderError=event=>{event.stopPropagation(),this.emit("lr-render-error",{toolName:event.detail.toolName,error:event.detail.error,callId:this.callId})}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,envListValueHidden:LYRA_DEFAULT_envListValueHidden,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,toolCall:LYRA_DEFAULT_toolCall,toolCallBlockArgumentsLabel:LYRA_DEFAULT_toolCallBlockArgumentsLabel,toolCallBlockErrorLabel:LYRA_DEFAULT_toolCallBlockErrorLabel,toolCallBlockHeaderDenied:LYRA_DEFAULT_toolCallBlockHeaderDenied,toolCallBlockHeaderError:LYRA_DEFAULT_toolCallBlockHeaderError,toolCallBlockHeaderPending:LYRA_DEFAULT_toolCallBlockHeaderPending,toolCallBlockHeaderRunning:LYRA_DEFAULT_toolCallBlockHeaderRunning,toolCallBlockHeaderSuccess:LYRA_DEFAULT_toolCallBlockHeaderSuccess,toolCallBlockResultLabel:LYRA_DEFAULT_toolCallBlockResultLabel}}static{this.styles=[LyraElement.styles,styles]}static{this.ownedCollectionProperties=Object.freeze(["redactedFields"])}get status(){return this.statusValue}set status(next){const normalized=TOOL_CALL_BLOCK_STATUS.normalizeReflected(this,"status",next),old=this.statusValue;old!==normalized&&(this.statusValue=normalized,this.requestUpdate("status",old))}willUpdate(changed){if(super.willUpdate(changed),(!this.hasUpdated||changed.has("redactedFields"))&&(this.projectedPaths=projectedRedactionFields(this.redactedFields)??TOO_MANY_REDACTION_PATHS),this.hasUpdated&&changed.get("expanded")===!0&&!this.expanded){const root=this.renderRoot;this.restoreFocusToHeader=!!root?.querySelector('[part="body"]')?.contains(root.activeElement)}}updated(changed){super.updated(changed);const view=this.renderRoot.querySelector(tag("tool-result-view"));view&&this.resultOverflow.observeExtra([view]),this.syncResultScrollStop(),this.restoreFocusToHeader&&(this.restoreFocusToHeader=!1,this.renderRoot.querySelector('[part="header"]')?.focus())}syncResultScrollStop(){const result=this.renderRoot?.querySelector('[part="result"]');result&&(result.hasAttribute(SCROLL_OVERFLOW_ATTRIBUTE)?result.setAttribute("tabindex","0"):result.removeAttribute("tabindex"))}detail(){const detail=redactToolDetail({args:this.args,result:this.result,error:this.error},this.projectedPaths,this.localize("envListValueHidden"),this.detailMemo?.detail);return detail!==this.detailMemo?.detail&&(this.detailMemo={detail,hasArgs:argsPresent(this.args)}),this.detailMemo}get safeDurationMs(){return this.durationMs!=null&&Number.isFinite(this.durationMs)?finiteRange(this.durationMs,0,0):null}durationText(){const ms=this.safeDurationMs;if(ms==null)return null;const duration=durationMessageValue(ms),seconds=duration.key==="durationSeconds",value=getNumberFormat(this.effectiveLocale,{maximumFractionDigits:seconds?1:0}).format(duration.value);return this.localize(seconds?"durationSeconds":"durationMilliseconds",void 0,{value})}emptyText(){return this.status==="pending"?this.localize("statusPending"):this.status==="running"?this.localize("statusRunning"):this.localize("noData")}bodyTemplate(){const memo=this.detail(),{detail,hasArgs}=memo,empty=!hasArgs&&!(typeof detail.sourceError=="string"&&detail.sourceError!=="")&&detail.sourceResult===void 0,labels=[this.localize("toolCallBlockArgumentsLabel"),this.localize("toolCallBlockErrorLabel"),this.localize("toolCallBlockResultLabel"),empty?this.emptyText():""];return html`${guard([memo,this.name,this.onRenderError,...labels],()=>this.sectionsTemplate(memo,labels))}`}sectionsTemplate({detail,hasArgs},[argsLabel,errorLabel,resultLabel,emptyText]){const hasError=typeof detail.sourceError=="string"&&detail.sourceError!=="",hasResult=detail.sourceResult!==void 0;return!hasArgs&&!hasError&&!hasResult?html`<p part="empty">${emptyText}</p>`:html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{LyraElement}from"../../../internal/lyra-element.js";import{literalSetConverter}from"../../../internal/converters.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{durationMessageValue}from"../../../internal/duration.js";import{tag}from"../../../internal/prefix.js";import{observeScrollOverflow,SCROLL_OVERFLOW_ATTRIBUTE}from"../../../internal/scroll-overflow.js";import{TOOL_CALL_STATUSES,TOOL_STATUS_LABEL_KEY,toolStatusIcon}from"../tool-status.js";import{projectedRedactionFields,redactToolDetail,TOO_MANY_REDACTION_PATHS}from"../tool-redaction.js";import{styles}from"./tool-call-block.styles.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_envListValueHidden,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusIncomplete,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_toolCall,LYRA_DEFAULT_toolCallBlockArgumentsLabel,LYRA_DEFAULT_toolCallBlockErrorLabel,LYRA_DEFAULT_toolCallBlockHeaderDenied,LYRA_DEFAULT_toolCallBlockHeaderError,LYRA_DEFAULT_toolCallBlockHeaderIncomplete,LYRA_DEFAULT_toolCallBlockHeaderPending,LYRA_DEFAULT_toolCallBlockHeaderRunning,LYRA_DEFAULT_toolCallBlockHeaderSuccess,LYRA_DEFAULT_toolCallBlockResultLabel}from"../../../internal/default-strings.generated.js";const TOOL_CALL_BLOCK_STATUS=literalSetConverter(TOOL_CALL_STATUSES,"pending"),HEADER_KEY={pending:"toolCallBlockHeaderPending",running:"toolCallBlockHeaderRunning",success:"toolCallBlockHeaderSuccess",error:"toolCallBlockHeaderError",denied:"toolCallBlockHeaderDenied",incomplete:"toolCallBlockHeaderIncomplete"};function argsPresent(args){if(args==null)return!1;if(typeof args!="object")return!0;try{const prototype=Object.getPrototypeOf(args);return prototype!==Object.prototype&&prototype!==null?!0:Object.keys(args).length>0}catch{return!0}}class LyraToolCallBlock extends LyraElement{constructor(){super(...arguments),this.name="",this.callId="",this.statusValue="pending",this.expanded=!1,this.redactedFields=[],this.bodyId=nextId("tool-call-block-body"),this.labelId=nextId("tool-call-block-label"),this.argsLabelId=nextId("tool-call-block-args-label"),this.resultLabelId=nextId("tool-call-block-result-label"),this.errorLabelId=nextId("tool-call-block-error-label"),this.projectedPaths=[],this.restoreFocusToHeader=!1,this.resultOverflow=observeScrollOverflow(this,()=>this.renderRoot?.querySelector('[part="result"]'),()=>this.syncResultScrollStop()),this.onHeaderClick=()=>{this.expanded=!this.expanded,this.emit("lr-toggle",{expanded:this.expanded,callId:this.callId})},this.onRenderError=event=>{event.stopPropagation(),this.emit("lr-render-error",{toolName:event.detail.toolName,error:event.detail.error,callId:this.callId})}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,envListValueHidden:LYRA_DEFAULT_envListValueHidden,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusIncomplete:LYRA_DEFAULT_statusIncomplete,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,toolCall:LYRA_DEFAULT_toolCall,toolCallBlockArgumentsLabel:LYRA_DEFAULT_toolCallBlockArgumentsLabel,toolCallBlockErrorLabel:LYRA_DEFAULT_toolCallBlockErrorLabel,toolCallBlockHeaderDenied:LYRA_DEFAULT_toolCallBlockHeaderDenied,toolCallBlockHeaderError:LYRA_DEFAULT_toolCallBlockHeaderError,toolCallBlockHeaderIncomplete:LYRA_DEFAULT_toolCallBlockHeaderIncomplete,toolCallBlockHeaderPending:LYRA_DEFAULT_toolCallBlockHeaderPending,toolCallBlockHeaderRunning:LYRA_DEFAULT_toolCallBlockHeaderRunning,toolCallBlockHeaderSuccess:LYRA_DEFAULT_toolCallBlockHeaderSuccess,toolCallBlockResultLabel:LYRA_DEFAULT_toolCallBlockResultLabel}}static{this.styles=[LyraElement.styles,styles]}static{this.ownedCollectionProperties=Object.freeze(["redactedFields"])}get status(){return this.statusValue}set status(next){const normalized=TOOL_CALL_BLOCK_STATUS.normalizeReflected(this,"status",next),old=this.statusValue;old!==normalized&&(this.statusValue=normalized,this.requestUpdate("status",old))}willUpdate(changed){if(super.willUpdate(changed),(!this.hasUpdated||changed.has("redactedFields"))&&(this.projectedPaths=projectedRedactionFields(this.redactedFields)??TOO_MANY_REDACTION_PATHS),this.hasUpdated&&changed.get("expanded")===!0&&!this.expanded){const root=this.renderRoot;this.restoreFocusToHeader=!!root?.querySelector('[part="body"]')?.contains(root.activeElement)}}updated(changed){super.updated(changed);const view=this.renderRoot.querySelector(tag("tool-result-view"));view&&this.resultOverflow.observeExtra([view]),this.syncResultScrollStop(),this.restoreFocusToHeader&&(this.restoreFocusToHeader=!1,this.renderRoot.querySelector('[part="header"]')?.focus())}syncResultScrollStop(){const result=this.renderRoot?.querySelector('[part="result"]');result&&(result.hasAttribute(SCROLL_OVERFLOW_ATTRIBUTE)?result.setAttribute("tabindex","0"):result.removeAttribute("tabindex"))}detail(){const detail=redactToolDetail({args:this.args,result:this.result,error:this.error},this.projectedPaths,this.localize("envListValueHidden"),this.detailMemo?.detail);return detail!==this.detailMemo?.detail&&(this.detailMemo={detail,hasArgs:argsPresent(this.args)}),this.detailMemo}get safeDurationMs(){return this.durationMs!=null&&Number.isFinite(this.durationMs)?finiteRange(this.durationMs,0,0):null}durationText(){const ms=this.safeDurationMs;if(ms==null)return null;const duration=durationMessageValue(ms),seconds=duration.key==="durationSeconds",value=getNumberFormat(this.effectiveLocale,{maximumFractionDigits:seconds?1:0}).format(duration.value);return this.localize(seconds?"durationSeconds":"durationMilliseconds",void 0,{value})}emptyText(){return this.status==="pending"?this.localize("statusPending"):this.status==="running"?this.localize("statusRunning"):this.localize("noData")}bodyTemplate(){const memo=this.detail(),{detail,hasArgs}=memo,empty=!hasArgs&&!(typeof detail.sourceError=="string"&&detail.sourceError!=="")&&detail.sourceResult===void 0,labels=[this.localize("toolCallBlockArgumentsLabel"),this.localize("toolCallBlockErrorLabel"),this.localize("toolCallBlockResultLabel"),empty?this.emptyText():""];return html`${guard([memo,this.name,this.onRenderError,...labels],()=>this.sectionsTemplate(memo,labels))}`}sectionsTemplate({detail,hasArgs},[argsLabel,errorLabel,resultLabel,emptyText]){const hasError=typeof detail.sourceError=="string"&&detail.sourceError!=="",hasResult=detail.sourceResult!==void 0;return!hasArgs&&!hasError&&!hasResult?html`<p part="empty">${emptyText}</p>`:html`
2
2
  ${hasArgs?html`<div part="args" role="group" aria-labelledby=${this.argsLabelId}>
3
3
  <div part="args-label" id=${this.argsLabelId}>${argsLabel}</div>
4
4
  <lr-json-viewer .data=${detail.args}></lr-json-viewer>
@@ -16,7 +16,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
16
16
  @lr-render-error=${this.onRenderError}
17
17
  ></lr-tool-result-view>
18
18
  </div>`:nothing}
19
- `}render(){const status=this.status,name=this.name===""?this.localize("toolCall"):this.name,label=this.label??this.localize(HEADER_KEY[status],void 0,{name}),duration=this.durationText();return html`
19
+ `}render(){const status=this.status,name=this.displayName||this.name||this.localize("toolCall"),label=this.label??this.localize(HEADER_KEY[status],void 0,{name}),duration=this.durationText();return html`
20
20
  <div part="base">
21
21
  <button
22
22
  part="header"
@@ -39,4 +39,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
39
39
  ?hidden=${!this.expanded}
40
40
  >${this.expanded?this.bodyTemplate():nothing}</div>
41
41
  </div>
42
- `}}__decorate([property()],LyraToolCallBlock.prototype,"name",void 0),__decorate([property({attribute:"call-id"})],LyraToolCallBlock.prototype,"callId",void 0),__decorate([property({reflect:!0,converter:TOOL_CALL_BLOCK_STATUS})],LyraToolCallBlock.prototype,"status",null),__decorate([property({type:Boolean,reflect:!0})],LyraToolCallBlock.prototype,"expanded",void 0),__decorate([property()],LyraToolCallBlock.prototype,"label",void 0),__decorate([property({type:Number,attribute:"duration-ms"})],LyraToolCallBlock.prototype,"durationMs",void 0),__decorate([property({attribute:!1})],LyraToolCallBlock.prototype,"args",void 0),__decorate([property({attribute:!1})],LyraToolCallBlock.prototype,"result",void 0),__decorate([property()],LyraToolCallBlock.prototype,"error",void 0),__decorate([property({attribute:!1})],LyraToolCallBlock.prototype,"redactedFields",void 0);export{LyraToolCallBlock};
42
+ `}}__decorate([property()],LyraToolCallBlock.prototype,"name",void 0),__decorate([property({attribute:"display-name"})],LyraToolCallBlock.prototype,"displayName",void 0),__decorate([property({attribute:"call-id"})],LyraToolCallBlock.prototype,"callId",void 0),__decorate([property({reflect:!0,converter:TOOL_CALL_BLOCK_STATUS})],LyraToolCallBlock.prototype,"status",null),__decorate([property({type:Boolean,reflect:!0})],LyraToolCallBlock.prototype,"expanded",void 0),__decorate([property()],LyraToolCallBlock.prototype,"label",void 0),__decorate([property({type:Number,attribute:"duration-ms"})],LyraToolCallBlock.prototype,"durationMs",void 0),__decorate([property({attribute:!1})],LyraToolCallBlock.prototype,"args",void 0),__decorate([property({attribute:!1})],LyraToolCallBlock.prototype,"result",void 0),__decorate([property()],LyraToolCallBlock.prototype,"error",void 0),__decorate([property({attribute:!1})],LyraToolCallBlock.prototype,"redactedFields",void 0);export{LyraToolCallBlock};
@@ -1,7 +1,9 @@
1
1
  import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraToolStatus}from'../../../internal/shared-unions.js';
2
2
  /** Same status vocabulary as `<lr-tool-result-dialog>`, so a call's chip
3
- * and its detail dialog always agree on icon/label/tone. */
4
- export type ToolCallStatus=LyraToolStatus;export interface ToolChipSelectDetail{name:string;callId:string;}export interface LyraToolCallChipEventMap{'lr-tool-call-chip-select':CustomEvent<ToolChipSelectDetail>;}
3
+ * and its detail dialog always agree on icon/label/tone. `incomplete` marks
4
+ * a call that ended without a result (an interrupted stream, a cancelled
5
+ * run). */
6
+ export type ToolCallStatus=LyraToolStatus|'incomplete';export interface ToolChipSelectDetail{name:string;callId:string;}export interface LyraToolCallChipEventMap{'lr-tool-call-chip-select':CustomEvent<ToolChipSelectDetail>;}
5
7
  /**
6
8
  * `<lr-tool-call-chip>` — a compact inline pill representing one tool/
7
9
  * function call an agent made mid-conversation, e.g.
@@ -13,7 +15,10 @@ export type ToolCallStatus=LyraToolStatus;export interface ToolChipSelectDetail{
13
15
  * summary is useful, with or without a detail surface behind it.
14
16
  *
15
17
  * The default slot is *not* the chip's visible content — the chip's own
16
- * label is always built from `name`/`summary`/`status`/`duration-ms`. It's
18
+ * label is always built from `name` (or `display-name`)/`summary`/`status`/
19
+ * `duration-ms`. `display-name` is the application's own, already-translated
20
+ * label for the tool: it replaces only the visible and announced name, while
21
+ * `lr-tool-call-chip-select` keeps reporting the raw `name`. It's
17
22
  * reserved for optional read-only preview content (e.g. the tool's raw
18
23
  * arguments or a short formatted summary) shown in a floating tooltip on hover or keyboard focus
19
24
  * (the focused control matches `:focus-visible` and no pointer press preceded it), positioned
@@ -53,7 +58,7 @@ export type ToolCallStatus=LyraToolStatus;export interface ToolChipSelectDetail{
53
58
  * @csspart icon - Wrapper around the status glyph / `icon` slot.
54
59
  * @csspart label - Wrapper around `category`, `name` and `summary`.
55
60
  * @csspart category - The optional grouping label.
56
- * @csspart name - The tool/function name.
61
+ * @csspart name - The tool/function name, or `display-name` when set.
57
62
  * @csspart summary - The short status text.
58
63
  * @csspart meta - Wrapper around `status-text` and `duration`.
59
64
  * @csspart status-text - The visible text twin of the status glyph/color — carries the state in text, not just color.
@@ -64,11 +69,13 @@ export type ToolCallStatus=LyraToolStatus;export interface ToolChipSelectDetail{
64
69
  * @cssprop [--lr-transition-ambient=1.8s ease-in-out] - Pending-icon pulse duration and timing.
65
70
  * @cssprop [--lr-tool-call-chip-accent=var(--lr-color-text-quiet)] - Accent color for the status
66
71
  * glyph and text. Its private default follows `status` (`running` → brand, `success` → success,
67
- * `error` → danger, `denied` → warning); an inherited or direct public override always wins.
72
+ * `error` → danger, `denied` → warning; `pending` and `incomplete` stay neutral); an inherited or
73
+ * direct public override always wins.
68
74
  * @cssprop [--lr-tool-call-chip-bg=var(--lr-color-surface)] - Chip background. Its private default
69
75
  * follows the same `status` rules using each status's `-quiet` tint; a public override wins.
70
76
  * @cssprop [--lr-tool-call-chip-border=var(--lr-color-border)] - Chip border color. Its private
71
- * default becomes transparent for every non-`pending` status; a public override wins.
77
+ * default becomes transparent for every tinted status (all but `pending` and `incomplete`); a
78
+ * public override wins.
72
79
  * @cssprop [--lr-overlay-surface=var(--lr-color-surface-overlay)] - Shared floating-surface fill,
73
80
  * on the anchored detail tooltip.
74
81
  * @cssprop [--lr-overlay-border=var(--lr-color-border-subtle)] - Shared floating-surface edge
@@ -86,11 +93,17 @@ export type ToolCallStatus=LyraToolStatus;export interface ToolChipSelectDetail{
86
93
  export declare class LyraToolCallChip extends LyraElement<LyraToolCallChipEventMap>{static styles:import("lit").CSSResultGroup[];
87
94
  /** The tool/function name, e.g. `web_search`. */
88
95
  name:string;
96
+ /** The tool's display label, e.g. an application-translated `Lecture d’un fichier`. Replaces
97
+ * `name` in the visible chip and its accessible name only; `lr-tool-call-chip-select` still
98
+ * reports `name`. Unset or empty shows `name`. */
99
+ displayName?:string;
89
100
  /** Optional grouping label, e.g. `research`. Removing the attribute clears its displayed text. */
90
101
  category:string;
91
102
  /**
92
103
  * The call's current lifecycle state — drives the glyph, color, and
93
- * `status-text`. Invalid runtime values use the pending presentation.
104
+ * `status-text`. `incomplete` is a call that ended without a result; it
105
+ * keeps the neutral tone with its own static glyph and text. Invalid runtime
106
+ * values use the pending presentation.
94
107
  */
95
108
  status:ToolCallStatus;
96
109
  /** Short human-readable status text, e.g. `Searching web…`. Removing the attribute clears its displayed text. */
@@ -124,4 +137,7 @@ click():void;private get effectiveStatus();
124
137
  * matching this property's own "omitted from the chip entirely when unset" contract, rather
125
138
  * than rendering a literal "NaN ms". A finite negative value clamps to `0` instead of
126
139
  * rendering a nonsensical negative duration. */
127
- private get safeDurationMs();private get accessibleLabel();private localizedDuration;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-tool-call-chip':LyraToolCallChip;}}
140
+ private get safeDurationMs();
141
+ /** The visible tool name: the display label when set, else `name`, else the localized
142
+ * generic label. */
143
+ private get shownName();private get accessibleLabel();private localizedDuration;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-tool-call-chip':LyraToolCallChip;}}
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{isKeyboardFocusEvent}from"../../../internal/focus-modality.js";import{deferredPlace as place}from"../../../internal/anchored-overlay-runtime.js";import{activateNonmodalOverlay}from"../../../internal/nonmodal-overlay-manager.js";import{resolveEffectivePositioningStrategy}from"../../../internal/positioning-strategy.js";import{nextId}from"../../../internal/a11y.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{durationMessageValue}from"../../../internal/duration.js";import{TOOL_STATUS_LABEL_KEY,isToolCallStatus,toolStatusIcon}from"../tool-status.js";import{styles}from"./tool-call-chip.styles.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_toolCall}from"../../../internal/default-strings.generated.js";const STATUS_ICON=toolStatusIcon,statusConverter={fromAttribute(value){return value!==null&&isToolCallStatus(value)?value:"pending"},toAttribute(value){return value}};class LyraToolCallChip extends LyraElement{constructor(){super(...arguments),this.name="",this.category="",this.status="pending",this.summary="",this.icon="",this.callId="",this.hasDetailSlot=!1,this.tooltipOpen=!1,this.tooltipId=nextId("tool-call-chip-tooltip"),this.hovering=!1,this.focused=!1,this.focusDescribed=!1,this.onDetailSlotChange=e=>{this.hasDetailSlot=this.hasPreviewNodes(e.target.assignedNodes({flatten:!0})),this.hasDetailSlot||this.hideTooltip()},this.onMouseEnter=()=>{this.hovering=!0,this.showTooltip()},this.onMouseLeave=()=>{this.hovering=!1,!this.focused&&this.hideTooltip()},this.onFocus=event=>{this.focusDescribed=!0,isKeyboardFocusEvent(event)&&(this.focused=!0,this.showTooltip())},this.onBlur=()=>{this.focused=!1,this.focusDescribed=!1,!this.hovering&&this.hideTooltip()},this.onKeyDown=e=>{e.key==="Escape"&&this.tooltipOpen&&this.tooltipOverlay?.isTopmost()&&(e.stopPropagation(),this.hideTooltip())},this.onClick=()=>{this.emit("lr-tool-call-chip-select",{name:this.name,callId:this.callId})}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,toolCall:LYRA_DEFAULT_toolCall}}static{this.styles=[LyraElement.styles,styles]}hasPreviewNodes(nodes){return nodes.some(node=>{if(node.nodeType===3)return!!node.textContent?.trim();if(node.nodeType!==1)return!1;const slotName=node.getAttribute("slot");return slotName===null||slotName===""})}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasDetailSlot=this.hasPreviewNodes(Array.from(this.childNodes)))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.syncExternalDescription()}syncExternalDescription(){const target=this.isConnected?this.baseEl??null:null;if(!target){this.releaseExternalDescription();return}this.externalDescriptionLease?this.externalDescriptionLease.update(target):this.externalDescriptionLease=acquireResolvedAriaRelationship(this,target,"aria-describedby")}releaseExternalDescription(){this.externalDescriptionLease?.release(),this.externalDescriptionLease=void 0}updated(changed){if(super.updated(changed),this.syncExternalDescription(),changed.has("tooltipOpen")&&(this.cleanupPositioner?.(),this.cleanupPositioner=void 0,this.tooltipOverlay?.deactivate({restoreFocus:!1}),this.tooltipOverlay=void 0,this.tooltipOpen)){const anchor=this.renderRoot.querySelector('[part="base"]'),tooltip=this.renderRoot.querySelector('[part="tooltip"]');anchor&&tooltip&&(this.cleanupPositioner=place(anchor,tooltip,{placement:"top-start",strategy:resolveEffectivePositioningStrategy(this,void 0,"fixed")}),this.tooltipOverlay=activateNonmodalOverlay({host:this,panel:()=>tooltip,onEscape:()=>this.hideTooltip(),restoreFocusTo:null}))}}disconnectedCallback(){super.disconnectedCallback(),this.releaseExternalDescription(),this.cleanupPositioner?.(),this.cleanupPositioner=void 0,this.tooltipOverlay?.deactivate({restoreFocus:!1}),this.tooltipOverlay=void 0,this.tooltipOpen=!1,this.hovering=!1,this.focused=!1,this.focusDescribed=!1}showTooltip(){!this.hasDetailSlot||this.tooltipOpen||(this.tooltipOpen=!0)}hideTooltip(){this.tooltipOpen&&(this.tooltipOpen=!1)}focus(options){this.baseEl?.focus(options)}blur(){this.baseEl?.blur()}click(){this.baseEl?.click()}get effectiveStatus(){return isToolCallStatus(this.status)?this.status:"pending"}get safeDurationMs(){return this.durationMs!=null&&Number.isFinite(this.durationMs)?finiteRange(this.durationMs,0,0):null}get accessibleLabel(){const parts=[this.name||this.localize("toolCall")];this.summary&&parts.push(this.summary),parts.push(this.localize(TOOL_STATUS_LABEL_KEY[this.effectiveStatus]));const durationMs=this.safeDurationMs;return durationMs!=null&&parts.push(this.localizedDuration(durationMs)),parts.join(this.localize("accessibleLabelSeparator"))}localizedDuration(ms){const duration=durationMessageValue(ms);return this.localize(duration.key,void 0,{value:getNumberFormat(this.effectiveLocale,{maximumFractionDigits:duration.key==="durationSeconds"?1:0}).format(duration.value)})}render(){const hasCategory=(this.category??"").length>0,hasSummary=(this.summary??"").length>0,durationMs=this.safeDurationMs,hasDuration=durationMs!=null,status=this.effectiveStatus;return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{isKeyboardFocusEvent}from"../../../internal/focus-modality.js";import{deferredPlace as place}from"../../../internal/anchored-overlay-runtime.js";import{activateNonmodalOverlay}from"../../../internal/nonmodal-overlay-manager.js";import{resolveEffectivePositioningStrategy}from"../../../internal/positioning-strategy.js";import{nextId}from"../../../internal/a11y.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{durationMessageValue}from"../../../internal/duration.js";import{TOOL_STATUS_LABEL_KEY,isToolCallStatus,toolStatusIcon}from"../tool-status.js";import{styles}from"./tool-call-chip.styles.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusIncomplete,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_toolCall}from"../../../internal/default-strings.generated.js";const STATUS_ICON=toolStatusIcon,statusConverter={fromAttribute(value){return value!==null&&isToolCallStatus(value)?value:"pending"},toAttribute(value){return value}};class LyraToolCallChip extends LyraElement{constructor(){super(...arguments),this.name="",this.category="",this.status="pending",this.summary="",this.icon="",this.callId="",this.hasDetailSlot=!1,this.tooltipOpen=!1,this.tooltipId=nextId("tool-call-chip-tooltip"),this.hovering=!1,this.focused=!1,this.focusDescribed=!1,this.onDetailSlotChange=e=>{this.hasDetailSlot=this.hasPreviewNodes(e.target.assignedNodes({flatten:!0})),this.hasDetailSlot||this.hideTooltip()},this.onMouseEnter=()=>{this.hovering=!0,this.showTooltip()},this.onMouseLeave=()=>{this.hovering=!1,!this.focused&&this.hideTooltip()},this.onFocus=event=>{this.focusDescribed=!0,isKeyboardFocusEvent(event)&&(this.focused=!0,this.showTooltip())},this.onBlur=()=>{this.focused=!1,this.focusDescribed=!1,!this.hovering&&this.hideTooltip()},this.onKeyDown=e=>{e.key==="Escape"&&this.tooltipOpen&&this.tooltipOverlay?.isTopmost()&&(e.stopPropagation(),this.hideTooltip())},this.onClick=()=>{this.emit("lr-tool-call-chip-select",{name:this.name,callId:this.callId})}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusIncomplete:LYRA_DEFAULT_statusIncomplete,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,toolCall:LYRA_DEFAULT_toolCall}}static{this.styles=[LyraElement.styles,styles]}hasPreviewNodes(nodes){return nodes.some(node=>{if(node.nodeType===3)return!!node.textContent?.trim();if(node.nodeType!==1)return!1;const slotName=node.getAttribute("slot");return slotName===null||slotName===""})}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasDetailSlot=this.hasPreviewNodes(Array.from(this.childNodes)))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.syncExternalDescription()}syncExternalDescription(){const target=this.isConnected?this.baseEl??null:null;if(!target){this.releaseExternalDescription();return}this.externalDescriptionLease?this.externalDescriptionLease.update(target):this.externalDescriptionLease=acquireResolvedAriaRelationship(this,target,"aria-describedby")}releaseExternalDescription(){this.externalDescriptionLease?.release(),this.externalDescriptionLease=void 0}updated(changed){if(super.updated(changed),this.syncExternalDescription(),changed.has("tooltipOpen")&&(this.cleanupPositioner?.(),this.cleanupPositioner=void 0,this.tooltipOverlay?.deactivate({restoreFocus:!1}),this.tooltipOverlay=void 0,this.tooltipOpen)){const anchor=this.renderRoot.querySelector('[part="base"]'),tooltip=this.renderRoot.querySelector('[part="tooltip"]');anchor&&tooltip&&(this.cleanupPositioner=place(anchor,tooltip,{placement:"top-start",strategy:resolveEffectivePositioningStrategy(this,void 0,"fixed")}),this.tooltipOverlay=activateNonmodalOverlay({host:this,panel:()=>tooltip,onEscape:()=>this.hideTooltip(),restoreFocusTo:null}))}}disconnectedCallback(){super.disconnectedCallback(),this.releaseExternalDescription(),this.cleanupPositioner?.(),this.cleanupPositioner=void 0,this.tooltipOverlay?.deactivate({restoreFocus:!1}),this.tooltipOverlay=void 0,this.tooltipOpen=!1,this.hovering=!1,this.focused=!1,this.focusDescribed=!1}showTooltip(){!this.hasDetailSlot||this.tooltipOpen||(this.tooltipOpen=!0)}hideTooltip(){this.tooltipOpen&&(this.tooltipOpen=!1)}focus(options){this.baseEl?.focus(options)}blur(){this.baseEl?.blur()}click(){this.baseEl?.click()}get effectiveStatus(){return isToolCallStatus(this.status)?this.status:"pending"}get safeDurationMs(){return this.durationMs!=null&&Number.isFinite(this.durationMs)?finiteRange(this.durationMs,0,0):null}get shownName(){return this.displayName||this.name||this.localize("toolCall")}get accessibleLabel(){const parts=[this.shownName];this.summary&&parts.push(this.summary),parts.push(this.localize(TOOL_STATUS_LABEL_KEY[this.effectiveStatus]));const durationMs=this.safeDurationMs;return durationMs!=null&&parts.push(this.localizedDuration(durationMs)),parts.join(this.localize("accessibleLabelSeparator"))}localizedDuration(ms){const duration=durationMessageValue(ms);return this.localize(duration.key,void 0,{value:getNumberFormat(this.effectiveLocale,{maximumFractionDigits:duration.key==="durationSeconds"?1:0}).format(duration.value)})}render(){const hasCategory=(this.category??"").length>0,hasSummary=(this.summary??"").length>0,durationMs=this.safeDurationMs,hasDuration=durationMs!=null,status=this.effectiveStatus;return html`
2
2
  <button
3
3
  part="base"
4
4
  type="button"
@@ -18,7 +18,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
18
18
  </span>
19
19
  <span part="label">
20
20
  <span part="category" ?hidden=${!hasCategory}>${this.category}</span>
21
- <span part="name">${this.name||this.localize("toolCall")}</span>
21
+ <span part="name">${this.shownName}</span>
22
22
  <span part="summary" ?hidden=${!hasSummary}>${this.summary}</span>
23
23
  </span>
24
24
  <span part="meta">
@@ -39,4 +39,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
39
39
  >
40
40
  <slot @slotchange=${this.onDetailSlotChange}></slot>
41
41
  </div>
42
- `}}__decorate([property()],LyraToolCallChip.prototype,"name",void 0),__decorate([property()],LyraToolCallChip.prototype,"category",void 0),__decorate([property({reflect:!0,converter:statusConverter})],LyraToolCallChip.prototype,"status",void 0),__decorate([property()],LyraToolCallChip.prototype,"summary",void 0),__decorate([property({type:Number,attribute:"duration-ms"})],LyraToolCallChip.prototype,"durationMs",void 0),__decorate([property()],LyraToolCallChip.prototype,"icon",void 0),__decorate([property({attribute:"call-id"})],LyraToolCallChip.prototype,"callId",void 0),__decorate([state()],LyraToolCallChip.prototype,"hasDetailSlot",void 0),__decorate([state()],LyraToolCallChip.prototype,"tooltipOpen",void 0),__decorate([state()],LyraToolCallChip.prototype,"focusDescribed",void 0),__decorate([query('[part="base"]')],LyraToolCallChip.prototype,"baseEl",void 0);export{LyraToolCallChip};
42
+ `}}__decorate([property()],LyraToolCallChip.prototype,"name",void 0),__decorate([property({attribute:"display-name"})],LyraToolCallChip.prototype,"displayName",void 0),__decorate([property()],LyraToolCallChip.prototype,"category",void 0),__decorate([property({reflect:!0,converter:statusConverter})],LyraToolCallChip.prototype,"status",void 0),__decorate([property()],LyraToolCallChip.prototype,"summary",void 0),__decorate([property({type:Number,attribute:"duration-ms"})],LyraToolCallChip.prototype,"durationMs",void 0),__decorate([property()],LyraToolCallChip.prototype,"icon",void 0),__decorate([property({attribute:"call-id"})],LyraToolCallChip.prototype,"callId",void 0),__decorate([state()],LyraToolCallChip.prototype,"hasDetailSlot",void 0),__decorate([state()],LyraToolCallChip.prototype,"tooltipOpen",void 0),__decorate([state()],LyraToolCallChip.prototype,"focusDescribed",void 0),__decorate([query('[part="base"]')],LyraToolCallChip.prototype,"baseEl",void 0);export{LyraToolCallChip};
@@ -13,7 +13,9 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
13
13
  @change=${e=>this.onSelectChange(key,e)}
14
14
  @lr-change=${this.stopNestedControlEvent}
15
15
  @lr-show=${this.stopNestedControlEvent}
16
+ @lr-after-show=${this.stopNestedControlEvent}
16
17
  @lr-hide=${this.stopNestedControlEvent}
18
+ @lr-after-hide=${this.stopNestedControlEvent}
17
19
  @lr-option-change=${this.stopNestedControlEvent}
18
20
  >
19
21
  ${prop.enum.map(v=>html`<lr-option value=${v}>${v}</lr-option>`)}
@@ -68,7 +70,9 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
68
70
  @change=${this.stopNestedControlEvent}
69
71
  @lr-change=${e=>this.onBooleanSelectChange(key,e)}
70
72
  @lr-show=${this.stopNestedControlEvent}
73
+ @lr-after-show=${this.stopNestedControlEvent}
71
74
  @lr-hide=${this.stopNestedControlEvent}
75
+ @lr-after-hide=${this.stopNestedControlEvent}
72
76
  @lr-option-change=${this.stopNestedControlEvent}
73
77
  >
74
78
  <lr-option value="">${this.localize("toolParamBooleanUnset")}</lr-option>
@@ -1,6 +1,7 @@
1
1
  import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraToolStatus}from'../../../internal/shared-unions.js';
2
- /** Same status vocabulary as `<lr-tool-call-chip>`. */
3
- export type ToolResultStatus=LyraToolStatus;
2
+ /** Same status vocabulary as `<lr-tool-call-chip>`, including `incomplete` for a call that ended
3
+ * without a result. */
4
+ export type ToolResultStatus=LyraToolStatus|'incomplete';
4
5
  /**
5
6
  * Reason the dialog was dismissed, forwarded as the `lr-close` event
6
7
  * detail -- mirrors `<lr-dialog>`'s own `DialogCloseReason` shape.
@@ -81,6 +82,8 @@ export type ToolResultDialogCloseReason='escape'|'backdrop'|'close-button'|'api'
81
82
  * @cssprop [--lr-tool-result-dialog-error-bg=var(--lr-color-danger-quiet)] - Error status background.
82
83
  * @cssprop [--lr-tool-result-dialog-denied-color=var(--lr-color-warning)] - Denied status foreground.
83
84
  * @cssprop [--lr-tool-result-dialog-denied-bg=var(--lr-color-warning-quiet)] - Denied status background.
85
+ * @cssprop [--lr-tool-result-dialog-incomplete-color=var(--lr-color-text-quiet)] - Incomplete status foreground.
86
+ * @cssprop [--lr-tool-result-dialog-incomplete-bg=transparent] - Incomplete status background.
84
87
  * @status stable
85
88
  * @since 4.0.0
86
89
  */
@@ -103,9 +106,10 @@ accessibleLabel:string|null;
103
106
  toolName:string;
104
107
  /**
105
108
  * The tool call's current lifecycle state — drives the header's status
106
- * badge. An out-of-union value (e.g. a stray `status` attribute, or a
107
- * direct property assignment from an untyped caller) is treated as
108
- * `'pending'` rather than crashing render.
109
+ * badge. `incomplete` is a call that ended without a result. An
110
+ * out-of-union value (e.g. a stray `status` attribute, or a direct property
111
+ * assignment from an untyped caller) is treated as `'pending'` rather than
112
+ * crashing render.
109
113
  */
110
114
  status:ToolResultStatus;
111
115
  /** How long the call took, in milliseconds. Omitted from the header entirely when unset. */
@@ -1,9 +1,9 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,svg,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{nextId}from"../../../internal/a11y.js";import{closeIcon,expandIcon}from"../../../internal/icons.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{durationMessageValue}from"../../../internal/duration.js";import{TOOL_STATUS_LABEL_KEY,isToolCallStatus,toolGlyph,toolStatusIcon}from"../tool-status.js";import{styles}from"./tool-result-dialog.styles.js";import{LYRA_DEFAULT_close,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_map,LYRA_DEFAULT_maximize,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_restore,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_toolCall}from"../../../internal/default-strings.generated.js";function shrinkIcon(){return toolGlyph(svg`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,svg,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{nextId}from"../../../internal/a11y.js";import{closeIcon,expandIcon}from"../../../internal/icons.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{durationMessageValue}from"../../../internal/duration.js";import{TOOL_STATUS_LABEL_KEY,isToolCallStatus,toolGlyph,toolStatusIcon}from"../tool-status.js";import{styles}from"./tool-result-dialog.styles.js";import{LYRA_DEFAULT_close,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_durationSeconds,LYRA_DEFAULT_map,LYRA_DEFAULT_maximize,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_restore,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusIncomplete,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_toolCall}from"../../../internal/default-strings.generated.js";function shrinkIcon(){return toolGlyph(svg`
2
2
  <polyline points="4 14 10 14 10 20"></polyline>
3
3
  <polyline points="20 10 14 10 14 4"></polyline>
4
4
  <line x1="14" y1="10" x2="21" y2="3"></line>
5
5
  <line x1="3" y1="21" x2="10" y2="14"></line>
6
- `)}const statusConverter={fromAttribute(value){return value!==null&&isToolCallStatus(value)?value:"pending"},toAttribute(value){return value}};class LyraToolResultDialog extends LyraElement{constructor(){super(...arguments),this.open=!1,this.lightDismiss=!1,this.accessibleLabel=null,this.toolName="",this.status="pending",this.maximized=!1,this.hasFooterSlot=!1,this.titleId=nextId("tool-result-dialog-title"),this.onFooterSlotChange=()=>{this.hasFooterSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="footer")},this.onBackdropClick=()=>{this.overlay?.dismissBackdrop()},this.onCloseButtonClick=()=>{this.close("close-button")},this.toggleMaximized=()=>{const next=!this.maximized;this.emit("lr-maximize-change",Object.freeze({maximized:next}),{cancelable:!0}).defaultPrevented||(this.maximized=next)}}static{this.defaultStrings={...super.defaultStrings,close:LYRA_DEFAULT_close,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,map:LYRA_DEFAULT_map,maximize:LYRA_DEFAULT_maximize,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,restore:LYRA_DEFAULT_restore,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,toolCall:LYRA_DEFAULT_toolCall}}static{this.styles=[LyraElement.styles,styles]}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasFooterSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="footer")),changed.has("open")&&(this.open?this.activateOverlay():this.deactivateOverlay())}updated(changed){super.updated(changed),changed.has("open")&&this.open&&this.overlay?.focusInitial()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.open&&(this.overlay?.isActive()?this.overlay.resume():this.activateOverlay(),queueMicrotask(()=>this.overlay?.focusInitial()))}disconnectedCallback(){super.disconnectedCallback(),this.overlay?.suspend()}close(reason="api"){this.open&&(this.open=!1,this.emit("lr-close",reason))}show(){this.open||(this.open=!0)}hide(reason="api"){this.close(reason)}activateOverlay(){this.overlay?.isActive()||(this.overlay=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="panel"]')??null,onEscape:()=>this.close("escape"),onBackdrop:()=>{this.lightDismiss&&this.close("backdrop")},lockScroll:!0,suspendWhenUnrendered:!0}))}deactivateOverlay(){this.overlay?.deactivate(),this.overlay=void 0}localizedDuration(ms){const duration=durationMessageValue(ms);return this.localize(duration.key,void 0,{value:getNumberFormat(this.effectiveLocale,{maximumFractionDigits:duration.key==="durationSeconds"?1:0}).format(duration.value)})}get safeDurationMs(){return this.durationMs!=null&&Number.isFinite(this.durationMs)?finiteRange(this.durationMs,0,0):null}render(){const durationMs=this.safeDurationMs,panelLabel=!this.hasAttribute("aria-label")&&this.accessibleLabel?this.accessibleLabel:null;return html`
6
+ `)}const statusConverter={fromAttribute(value){return value!==null&&isToolCallStatus(value)?value:"pending"},toAttribute(value){return value}};class LyraToolResultDialog extends LyraElement{constructor(){super(...arguments),this.open=!1,this.lightDismiss=!1,this.accessibleLabel=null,this.toolName="",this.status="pending",this.maximized=!1,this.hasFooterSlot=!1,this.titleId=nextId("tool-result-dialog-title"),this.onFooterSlotChange=()=>{this.hasFooterSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="footer")},this.onBackdropClick=()=>{this.overlay?.dismissBackdrop()},this.onCloseButtonClick=()=>{this.close("close-button")},this.toggleMaximized=()=>{const next=!this.maximized;this.emit("lr-maximize-change",Object.freeze({maximized:next}),{cancelable:!0}).defaultPrevented||(this.maximized=next)}}static{this.defaultStrings={...super.defaultStrings,close:LYRA_DEFAULT_close,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,map:LYRA_DEFAULT_map,maximize:LYRA_DEFAULT_maximize,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,restore:LYRA_DEFAULT_restore,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusIncomplete:LYRA_DEFAULT_statusIncomplete,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,toolCall:LYRA_DEFAULT_toolCall}}static{this.styles=[LyraElement.styles,styles]}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasFooterSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="footer")),changed.has("open")&&(this.open?this.activateOverlay():this.deactivateOverlay())}updated(changed){super.updated(changed),changed.has("open")&&this.open&&this.overlay?.focusInitial()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.open&&(this.overlay?.isActive()?this.overlay.resume():this.activateOverlay(),queueMicrotask(()=>this.overlay?.focusInitial()))}disconnectedCallback(){super.disconnectedCallback(),this.overlay?.suspend()}close(reason="api"){this.open&&(this.open=!1,this.emit("lr-close",reason))}show(){this.open||(this.open=!0)}hide(reason="api"){this.close(reason)}activateOverlay(){this.overlay?.isActive()||(this.overlay=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="panel"]')??null,onEscape:()=>this.close("escape"),onBackdrop:()=>{this.lightDismiss&&this.close("backdrop")},lockScroll:!0,suspendWhenUnrendered:!0}))}deactivateOverlay(){this.overlay?.deactivate(),this.overlay=void 0}localizedDuration(ms){const duration=durationMessageValue(ms);return this.localize(duration.key,void 0,{value:getNumberFormat(this.effectiveLocale,{maximumFractionDigits:duration.key==="durationSeconds"?1:0}).format(duration.value)})}get safeDurationMs(){return this.durationMs!=null&&Number.isFinite(this.durationMs)?finiteRange(this.durationMs,0,0):null}render(){const durationMs=this.safeDurationMs,panelLabel=!this.hasAttribute("aria-label")&&this.accessibleLabel?this.accessibleLabel:null;return html`
7
7
  <div part="backdrop" @click=${this.onBackdropClick}></div>
8
8
  <div
9
9
  part="panel"
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{--_lr-tool-result-dialog-overlay-color:var(--lr-color-overlay);--_lr-tool-result-dialog-maximized-inset:max(var(--lr-space-l), var(--lr-safe-area-top)) max(var(--lr-space-l), var(--lr-safe-area-inline-end)) max(var(--lr-space-l), var(--lr-safe-area-bottom)) max(var(--lr-space-l), var(--lr-safe-area-inline-start));--_lr-tool-result-dialog-spin:var(--lr-transition-ambient);--_lr-tool-result-dialog-pending-color:var(--lr-color-text-quiet);--_lr-tool-result-dialog-pending-bg:transparent;--_lr-tool-result-dialog-running-color:var(--lr-color-brand);--_lr-tool-result-dialog-running-bg:var(--lr-color-brand-quiet);--_lr-tool-result-dialog-success-color:var(--lr-color-success);--_lr-tool-result-dialog-success-bg:var(--lr-color-success-quiet);--_lr-tool-result-dialog-error-color:var(--lr-color-danger);--_lr-tool-result-dialog-error-bg:var(--lr-color-danger-quiet);--_lr-tool-result-dialog-denied-color:var(--lr-color-warning);--_lr-tool-result-dialog-denied-bg:var(--lr-color-warning-quiet);z-index:var(--lr-overlay-stack-index,var(--lr-layer-modal));justify-content:center;align-items:center;padding-block-start:max(var(--lr-space-l), var(--lr-safe-area-top));padding-block-end:max(var(--lr-space-l), var(--lr-safe-area-bottom));padding-inline-start:max(var(--lr-space-l), var(--lr-safe-area-inline-start));padding-inline-end:max(var(--lr-space-l), var(--lr-safe-area-inline-end));display:none;position:fixed;inset:0}:host([open]){display:flex}[part=backdrop]{background:var(--lr-tool-result-dialog-overlay-color,var(--_lr-tool-result-dialog-overlay-color));position:absolute;inset:0}[part=panel]{inline-size:min(var(--lr-size-48rem), 100%);box-sizing:border-box;background:var(--lr-color-surface-overlay);border:var(--lr-border-width-thin) solid var(--lr-color-border-subtle);border-radius:var(--lr-radius);max-block-size:100%;min-inline-size:0;box-shadow:var(--lr-shadow-xl);transition:inline-size var(--lr-transition-base), block-size var(--lr-transition-base);flex-direction:column;display:flex;position:relative;overflow:hidden}:host([maximized]) [part=panel]{inset:var(--lr-tool-result-dialog-maximized-inset,var(--_lr-tool-result-dialog-maximized-inset));max-block-size:none;inline-size:auto;position:fixed}[part=header]{align-items:center;gap:var(--lr-space-s);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;padding:var(--lr-space-m) var(--lr-space-l);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border-subtle);flex-wrap:wrap;display:flex}[part=title]{align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;flex:auto;min-inline-size:0;max-inline-size:100%;display:flex}[part=tool-name]{min-inline-size:0;max-inline-size:100%;font-weight:var(--lr-font-weight-semibold);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}[part=status]{align-items:center;gap:var(--lr-size-0-25rem);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;padding:var(--lr-size-0-125rem) var(--lr-space-xs);border-radius:var(--lr-radius);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);white-space:normal;overflow-wrap:anywhere;color:var(--lr-tool-result-dialog-pending-color,var(--_lr-tool-result-dialog-pending-color));background:var(--lr-tool-result-dialog-pending-bg,var(--_lr-tool-result-dialog-pending-bg));flex:0 auto;display:inline-flex}[part=status] svg{inline-size:var(--lr-size-1em);block-size:var(--lr-size-1em);flex:none}[part=status] span{overflow-wrap:anywhere;min-inline-size:0}:host([status=running]) [part=status]{color:var(--lr-tool-result-dialog-running-color,var(--_lr-tool-result-dialog-running-color));background:var(--lr-tool-result-dialog-running-bg,var(--_lr-tool-result-dialog-running-bg))}:host([status=success]) [part=status]{color:var(--lr-tool-result-dialog-success-color,var(--_lr-tool-result-dialog-success-color));background:var(--lr-tool-result-dialog-success-bg,var(--_lr-tool-result-dialog-success-bg))}:host([status=error]) [part=status]{color:var(--lr-tool-result-dialog-error-color,var(--_lr-tool-result-dialog-error-color));background:var(--lr-tool-result-dialog-error-bg,var(--_lr-tool-result-dialog-error-bg))}:host([status=denied]) [part=status]{color:var(--lr-tool-result-dialog-denied-color,var(--_lr-tool-result-dialog-denied-color));background:var(--lr-tool-result-dialog-denied-bg,var(--_lr-tool-result-dialog-denied-bg))}:host([status=running]) [part=status] svg{animation:lr-tool-result-dialog-spin var(--lr-tool-result-dialog-spin,var(--_lr-tool-result-dialog-spin)) infinite}[part=duration]{max-inline-size:100%;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);white-space:nowrap}[part=header-actions]{align-items:center;gap:var(--lr-space-xs);flex:none;max-inline-size:100%;margin-inline-start:auto;display:flex}[part=maximize-button],[part=close-button]{font:inherit;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}[part=maximize-button]:hover,[part=close-button]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=maximize-button]:active,[part=close-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=maximize-button]:focus-visible,[part=close-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=body]{min-block-size:0;padding:var(--lr-space-l);flex:auto;overflow:auto}[part=footer]{justify-content:flex-end;align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-m) var(--lr-space-l);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border-subtle);flex-wrap:wrap;display:flex}[part=footer][hidden]{display:none}@keyframes lr-tool-result-dialog-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){[part=panel]{transition:none!important}:host([status=running]) [part=status] svg{animation:none!important}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{--_lr-tool-result-dialog-overlay-color:var(--lr-color-overlay);--_lr-tool-result-dialog-maximized-inset:max(var(--lr-space-l), var(--lr-safe-area-top)) max(var(--lr-space-l), var(--lr-safe-area-inline-end)) max(var(--lr-space-l), var(--lr-safe-area-bottom)) max(var(--lr-space-l), var(--lr-safe-area-inline-start));--_lr-tool-result-dialog-spin:var(--lr-transition-ambient);--_lr-tool-result-dialog-pending-color:var(--lr-color-text-quiet);--_lr-tool-result-dialog-pending-bg:transparent;--_lr-tool-result-dialog-running-color:var(--lr-color-brand);--_lr-tool-result-dialog-running-bg:var(--lr-color-brand-quiet);--_lr-tool-result-dialog-success-color:var(--lr-color-success);--_lr-tool-result-dialog-success-bg:var(--lr-color-success-quiet);--_lr-tool-result-dialog-error-color:var(--lr-color-danger);--_lr-tool-result-dialog-error-bg:var(--lr-color-danger-quiet);--_lr-tool-result-dialog-denied-color:var(--lr-color-warning);--_lr-tool-result-dialog-denied-bg:var(--lr-color-warning-quiet);--_lr-tool-result-dialog-incomplete-color:var(--lr-color-text-quiet);--_lr-tool-result-dialog-incomplete-bg:transparent;z-index:var(--lr-overlay-stack-index,var(--lr-layer-modal));justify-content:center;align-items:center;padding-block-start:max(var(--lr-space-l), var(--lr-safe-area-top));padding-block-end:max(var(--lr-space-l), var(--lr-safe-area-bottom));padding-inline-start:max(var(--lr-space-l), var(--lr-safe-area-inline-start));padding-inline-end:max(var(--lr-space-l), var(--lr-safe-area-inline-end));display:none;position:fixed;inset:0}:host([open]){display:flex}[part=backdrop]{background:var(--lr-tool-result-dialog-overlay-color,var(--_lr-tool-result-dialog-overlay-color));position:absolute;inset:0}[part=panel]{inline-size:min(var(--lr-size-48rem), 100%);box-sizing:border-box;background:var(--lr-color-surface-overlay);border:var(--lr-border-width-thin) solid var(--lr-color-border-subtle);border-radius:var(--lr-radius);max-block-size:100%;min-inline-size:0;box-shadow:var(--lr-shadow-xl);transition:inline-size var(--lr-transition-base), block-size var(--lr-transition-base);flex-direction:column;display:flex;position:relative;overflow:hidden}:host([maximized]) [part=panel]{inset:var(--lr-tool-result-dialog-maximized-inset,var(--_lr-tool-result-dialog-maximized-inset));max-block-size:none;inline-size:auto;position:fixed}[part=header]{align-items:center;gap:var(--lr-space-s);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;padding:var(--lr-space-m) var(--lr-space-l);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border-subtle);flex-wrap:wrap;display:flex}[part=title]{align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;flex:auto;min-inline-size:0;max-inline-size:100%;display:flex}[part=tool-name]{min-inline-size:0;max-inline-size:100%;font-weight:var(--lr-font-weight-semibold);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}[part=status]{align-items:center;gap:var(--lr-size-0-25rem);box-sizing:border-box;min-inline-size:0;max-inline-size:100%;padding:var(--lr-size-0-125rem) var(--lr-space-xs);border-radius:var(--lr-radius);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);white-space:normal;overflow-wrap:anywhere;color:var(--lr-tool-result-dialog-pending-color,var(--_lr-tool-result-dialog-pending-color));background:var(--lr-tool-result-dialog-pending-bg,var(--_lr-tool-result-dialog-pending-bg));flex:0 auto;display:inline-flex}[part=status] svg{inline-size:var(--lr-size-1em);block-size:var(--lr-size-1em);flex:none}[part=status] span{overflow-wrap:anywhere;min-inline-size:0}:host([status=running]) [part=status]{color:var(--lr-tool-result-dialog-running-color,var(--_lr-tool-result-dialog-running-color));background:var(--lr-tool-result-dialog-running-bg,var(--_lr-tool-result-dialog-running-bg))}:host([status=success]) [part=status]{color:var(--lr-tool-result-dialog-success-color,var(--_lr-tool-result-dialog-success-color));background:var(--lr-tool-result-dialog-success-bg,var(--_lr-tool-result-dialog-success-bg))}:host([status=error]) [part=status]{color:var(--lr-tool-result-dialog-error-color,var(--_lr-tool-result-dialog-error-color));background:var(--lr-tool-result-dialog-error-bg,var(--_lr-tool-result-dialog-error-bg))}:host([status=denied]) [part=status]{color:var(--lr-tool-result-dialog-denied-color,var(--_lr-tool-result-dialog-denied-color));background:var(--lr-tool-result-dialog-denied-bg,var(--_lr-tool-result-dialog-denied-bg))}:host([status=incomplete]) [part=status]{color:var(--lr-tool-result-dialog-incomplete-color,var(--_lr-tool-result-dialog-incomplete-color));background:var(--lr-tool-result-dialog-incomplete-bg,var(--_lr-tool-result-dialog-incomplete-bg))}:host([status=running]) [part=status] svg{animation:lr-tool-result-dialog-spin var(--lr-tool-result-dialog-spin,var(--_lr-tool-result-dialog-spin)) infinite}[part=duration]{max-inline-size:100%;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);white-space:nowrap}[part=header-actions]{align-items:center;gap:var(--lr-space-xs);flex:none;max-inline-size:100%;margin-inline-start:auto;display:flex}[part=maximize-button],[part=close-button]{font:inherit;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}[part=maximize-button]:hover,[part=close-button]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=maximize-button]:active,[part=close-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=maximize-button]:focus-visible,[part=close-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=body]{min-block-size:0;padding:var(--lr-space-l);flex:auto;overflow:auto}[part=footer]{justify-content:flex-end;align-items:center;gap:var(--lr-space-s);padding:var(--lr-space-m) var(--lr-space-l);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border-subtle);flex-wrap:wrap;display:flex}[part=footer][hidden]{display:none}@keyframes lr-tool-result-dialog-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){[part=panel]{transition:none!important}:host([status=running]) [part=status] svg{animation:none!important}}`;export{styles};
@@ -1,4 +1,4 @@
1
- import{svg}from"lit";const TOOL_CALL_STATUSES=Object.freeze(["pending","running","success","error","denied"]),TOOL_CALL_STATUS_SET=new Set(TOOL_CALL_STATUSES);function isToolCallStatus(value){return typeof value=="string"&&TOOL_CALL_STATUS_SET.has(value)}const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function toolGlyph(paths){return svg`
1
+ import{svg}from"lit";const TOOL_CALL_STATUSES=Object.freeze(["pending","running","success","error","denied","incomplete"]),TOOL_CALL_STATUS_SET=new Set(TOOL_CALL_STATUSES);function isToolCallStatus(value){return typeof value=="string"&&TOOL_CALL_STATUS_SET.has(value)}const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function toolGlyph(paths){return svg`
2
2
  <svg
3
3
  width="1em"
4
4
  height="1em"
@@ -15,4 +15,4 @@ import{svg}from"lit";const TOOL_CALL_STATUSES=Object.freeze(["pending","running"
15
15
  <circle cx="12" cy="12" r="9"></circle>
16
16
  <line x1="9" y1="9" x2="15" y2="15"></line>
17
17
  <line x1="15" y1="9" x2="9" y2="15"></line>
18
- `)}function deniedIcon(){return toolGlyph(svg`<circle cx="12" cy="12" r="9"></circle><line x1="6" y1="18" x2="18" y2="6"></line>`)}const STATUS_ICON=Object.freeze({pending:pendingIcon,running:runningIcon,success:successIcon,error:errorIcon,denied:deniedIcon});function toolStatusIcon(status){return STATUS_ICON[isToolCallStatus(status)?status:"pending"]()}const TOOL_STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied"};export{TOOL_CALL_STATUSES,TOOL_STATUS_LABEL_KEY,isToolCallStatus,toolGlyph,toolStatusIcon};
18
+ `)}function deniedIcon(){return toolGlyph(svg`<circle cx="12" cy="12" r="9"></circle><line x1="6" y1="18" x2="18" y2="6"></line>`)}function incompleteIcon(){return toolGlyph(svg`<circle cx="12" cy="12" r="9"></circle><line x1="8" y1="12" x2="16" y2="12"></line>`)}const STATUS_ICON=Object.freeze({pending:pendingIcon,running:runningIcon,success:successIcon,error:errorIcon,denied:deniedIcon,incomplete:incompleteIcon});function toolStatusIcon(status){return STATUS_ICON[isToolCallStatus(status)?status:"pending"]()}const TOOL_STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied",incomplete:"statusIncomplete"};export{TOOL_CALL_STATUSES,TOOL_STATUS_LABEL_KEY,isToolCallStatus,toolGlyph,toolStatusIcon};
@@ -68,6 +68,11 @@ export type ToolTimelineApprovalPending=ApprovalAction|null;export interface Lyr
68
68
  * ceiling, and a localized notice exposes truncation instead of silently hiding it. Foreign
69
69
  * runtime statuses normalize once to `pending` before both row and child presentation.
70
70
  *
71
+ * An entry's `displayName` (the application's translated tool label) is shown on its chip and in
72
+ * its details disclosure name; `name` still selects the result renderer, is still the
73
+ * `toolName` in `lr-tool-render-error`, and still names the tool in the approval dialog, where the
74
+ * exact tool being authorized matters more than its friendly label.
75
+ *
71
76
  * Redaction work is deferred until a detail row opens and memoized while its payload/path inputs
72
77
  * remain unchanged. It is bounded to 100 paths, 64 levels, and 10,000 visited nodes; exceeding a
73
78
  * ceiling masks the affected branch rather than exposing data or exhausting the page. Redaction
@@ -138,6 +143,9 @@ export type ToolTimelineApprovalPending=ApprovalAction|null;export interface Lyr
138
143
  * retint either independently.
139
144
  * @cssprop [--lr-tool-timeline-pending-marker-color=var(--lr-color-text-quiet)] - Rail-dot color
140
145
  * for a `status="pending"` entry.
146
+ * @cssprop [--lr-tool-timeline-incomplete-marker-color=var(--lr-color-text-quiet)] - Rail-dot color
147
+ * for a `status="incomplete"` entry (a call that ended without a result), independent of the
148
+ * pending one.
141
149
  * @cssprop [--lr-tool-timeline-pending-approval-border-color=var(--lr-color-warning)] - Color of
142
150
  * the entry body's leading border while `data-pending-approval="true"`.
143
151
  * @cssprop [--lr-tool-timeline-running-marker-color=var(--lr-color-brand)] - Running rail dot.
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{eyeOffIcon}from"../../../internal/icons.js";import{srOnly}from"../../../internal/a11y.js";import{styles}from"./tool-timeline.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{overallSemanticLabel}from"../semantic-owner.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{TOOL_CALL_STATUSES}from"../tool-status.js";import{EMPTY_REDACTION_PATHS,projectedRedactionFields,redactToolDetail}from"../tool-redaction.js";import{LYRA_DEFAULT_confirmApproved,LYRA_DEFAULT_confirmDenied,LYRA_DEFAULT_envListValueHidden,LYRA_DEFAULT_noData,LYRA_DEFAULT_retry,LYRA_DEFAULT_toolTimelineDetailsFor,LYRA_DEFAULT_toolTimelineLimit}from"../../../internal/default-strings.generated.js";const MAX_RENDERED_ENTRIES=500,TOOL_STATUSES=new Set(TOOL_CALL_STATUSES);function descriptorValue(value,property2){return getOwnDataDescriptor(value,property2)}function projectToolTimelineEntry(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),nameDescriptor=descriptorValue(value,"name"),argsDescriptor=descriptorValue(value,"args"),statusDescriptor=descriptorValue(value,"status"),resultDescriptor=descriptorValue(value,"result"),errorDescriptor=descriptorValue(value,"error"),sourceKeyDescriptor=descriptorValue(value,"sourceKey"),iconDescriptor=descriptorValue(value,"icon"),startedAtDescriptor=descriptorValue(value,"startedAt"),endedAtDescriptor=descriptorValue(value,"endedAt"),retryCountDescriptor=descriptorValue(value,"retryCount"),redactedFieldsDescriptor=descriptorValue(value,"redactedFields"),needsApprovalDescriptor=descriptorValue(value,"needsApproval"),approvedDescriptor=descriptorValue(value,"approved");if([idDescriptor,nameDescriptor,argsDescriptor,statusDescriptor,resultDescriptor,errorDescriptor,sourceKeyDescriptor,iconDescriptor,startedAtDescriptor,endedAtDescriptor,retryCountDescriptor,redactedFieldsDescriptor,needsApprovalDescriptor,approvedDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const valueOf=descriptor=>{if(!(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return descriptor.value},id=valueOf(idDescriptor);if(typeof id!="string"||id.trim().length===0)return;const redactedFieldsValue=valueOf(redactedFieldsDescriptor),redactedFields=redactedFieldsValue===void 0?EMPTY_REDACTION_PATHS:projectedRedactionFields(redactedFieldsValue);if(redactedFields===void 0)return;const name=valueOf(nameDescriptor),status=valueOf(statusDescriptor),result=valueOf(resultDescriptor),error=valueOf(errorDescriptor),sourceKey=valueOf(sourceKeyDescriptor),icon=valueOf(iconDescriptor),startedAt=valueOf(startedAtDescriptor),endedAt=valueOf(endedAtDescriptor),retryCount=valueOf(retryCountDescriptor),needsApproval=valueOf(needsApprovalDescriptor),approved=valueOf(approvedDescriptor);return Object.freeze({source:value,id,name:typeof name=="string"?name:"",args:valueOf(argsDescriptor),status:TOOL_STATUSES.has(status)?status:"pending",...result===void 0?{}:{result},...typeof error=="string"?{error}:{},...typeof sourceKey=="string"?{sourceKey}:{},...typeof icon=="string"?{icon}:{},...typeof startedAt=="number"?{startedAt}:{},...typeof endedAt=="number"?{endedAt}:{},...typeof retryCount=="number"?{retryCount}:{},redactedFields,...typeof needsApproval=="boolean"?{needsApproval}:{},...typeof approved=="boolean"?{approved}:{}})}catch{return}}function entrySourceKey(entry){return entry.sourceKey?.trim()?entry.sourceKey:void 0}function entryIdentity(entry){return JSON.stringify([entrySourceKey(entry)??null,entry.id])}function entryCorrelation(entry){const sourceKey=entrySourceKey(entry);return sourceKey===void 0?{invocationId:entry.id}:{invocationId:entry.id,sourceKey}}function defaultFormatTimestamp(date,locale){return getDateTimeFormat(locale,{hour:"numeric",minute:"2-digit"}).format(date)}class LyraToolTimeline extends LyraElement{constructor(){super(...arguments),this.entries=[],this.approvalEditable=!0,this.approvalPending=null,this.openedEntryIds=new Set,this.projectedEntriesCache=[],this.projectionTruncated=!1,this.redactionCache=new WeakMap,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onDialogApprove=event=>{event.stopPropagation();const entry=this.reviewingEntry;if(entry===void 0)return;const key=entryIdentity(entry);if(this.emit("lr-tool-approval-decide",{...entryCorrelation(entry),approved:!0,args:event.detail.args},{cancelable:!0}).defaultPrevented&&this.entryStillNeedsApproval(key)){this.approvalPending="approve",event.preventDefault();return}this.approvalPending=null,this.reviewingEntryKey=void 0},this.onDialogDeny=event=>{event.stopPropagation();const entry=this.reviewingEntry;if(entry===void 0)return;const key=entryIdentity(entry);if(this.emit("lr-tool-approval-decide",{...entryCorrelation(entry),approved:!1},{cancelable:!0}).defaultPrevented&&this.entryStillNeedsApproval(key)){this.approvalPending="deny",event.preventDefault();return}this.approvalPending=null,this.reviewingEntryKey=void 0},this.onDialogClose=event=>{event.stopPropagation(),this.approvalPending=null,this.reviewingEntryKey=void 0}}static{this.defaultStrings={...super.defaultStrings,confirmApproved:LYRA_DEFAULT_confirmApproved,confirmDenied:LYRA_DEFAULT_confirmDenied,envListValueHidden:LYRA_DEFAULT_envListValueHidden,noData:LYRA_DEFAULT_noData,retry:LYRA_DEFAULT_retry,toolTimelineDetailsFor:LYRA_DEFAULT_toolTimelineDetailsFor,toolTimelineLimit:LYRA_DEFAULT_toolTimelineLimit}}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.identityCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles,srOnly]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.projectionTruncated}disconnectedCallback(){this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,this.syncLimitAnnouncementSink()}syncLimitAnnouncementSink(){!this.isConnected||this.limitAnnouncementSink?.element.ownerDocument===this.ownerDocument||(this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}get pendingApproval(){return this.approvalPending}willUpdate(changed){if(super.willUpdate(changed),!changed.has("entries"))return;this.rebuildProjection();const projected=this.projectedEntriesCache,identities=new Set(projected.map(entryIdentity));if(this.reviewingEntryKey!==void 0){const still=projected.find(entry=>entryIdentity(entry)===this.reviewingEntryKey);(!still||!(still.needsApproval&&still.approved===void 0))&&(this.reviewingEntryKey=void 0,this.approvalPending=null)}const opened=new Set([...this.openedEntryIds].filter(key=>identities.has(key)));opened.size!==this.openedEntryIds.size&&(this.openedEntryIds=opened)}updated(changed){super.updated(changed),this.limitAnnouncementInitialized&&this.projectionTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("toolTimelineLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_ENTRIES)})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.projectionTruncated}rebuildProjection(){const entries=Array.isArray(this.entries)?this.entries:[],projected=[],projectedIndex=new Map,reservedKeys=new Set(this.openedEntryIds);this.reviewingEntryKey!==void 0&&reservedKeys.add(this.reviewingEntryKey);const displacedReserved=new Map,seen=new Set;for(const sourceEntry of entries){const entry=projectToolTimelineEntry(sourceEntry);if(!entry)continue;const key=entryIdentity(entry);seen.has(key)||(seen.add(key),projected.length<MAX_RENDERED_ENTRIES?(projectedIndex.set(key,projected.length),projected.push(entry)):reservedKeys.has(key)&&displacedReserved.set(key,entry))}for(const[key,entry]of displacedReserved){if(projectedIndex.has(key))continue;let replacement=projected.length-1;for(;replacement>=0&&reservedKeys.has(entryIdentity(projected[replacement]));)replacement--;if(replacement<0)break;projectedIndex.delete(entryIdentity(projected[replacement])),projected[replacement]=entry,projectedIndex.set(key,replacement)}this.projectedEntriesCache=projected,this.projectionTruncated=seen.size>projected.length}get sortedEntries(){return this.projectedEntriesCache.map((entry,index)=>({entry,index})).sort((a,b)=>{const ak=Number.isFinite(a.entry.startedAt)?a.entry.startedAt:Number.POSITIVE_INFINITY,bk=Number.isFinite(b.entry.startedAt)?b.entry.startedAt:Number.POSITIVE_INFINITY;return ak!==bk?ak-bk:a.index-b.index}).map(({entry})=>entry)}get reviewingEntry(){return this.reviewingEntryKey===void 0?void 0:this.projectedEntriesCache.find(entry=>entryIdentity(entry)===this.reviewingEntryKey)}durationFor(entry){if(entry.startedAt==null||entry.endedAt==null)return;const diff=entry.endedAt-entry.startedAt;return Number.isFinite(diff)?diff:void 0}normalizedDate(ms){if(ms==null||!Number.isFinite(ms))return;const date=new Date(ms);return Number.isNaN(date.getTime())?void 0:date}onChipSelect(entry,event){if(event.stopPropagation(),entry.needsApproval&&entry.approved===void 0){this.reviewingEntryKey=entryIdentity(entry);return}this.emit("lr-tool-activate",entryCorrelation(entry))}entryStillNeedsApproval(key){const entries=Array.isArray(this.entries)?this.entries:[];for(const sourceEntry of entries){const projected=projectToolTimelineEntry(sourceEntry);if(projected!==void 0&&entryIdentity(projected)===key)return projected.needsApproval===!0&&projected.approved===void 0}return!1}finalizePendingApproval(){this.approvalPending!==null&&(this.approvalPending=null,this.reviewingEntryKey=void 0)}revertPendingApproval(){this.approvalPending!==null&&(this.approvalPending=null)}onDetailsToggle(entry,event){event.stopPropagation();const key=entryIdentity(entry),next=new Set(this.openedEntryIds);event.detail.open?next.add(key):next.delete(key),this.openedEntryIds=next}stopOwnedEvent(event){event.stopPropagation()}onRenderError(entry,event){event.stopPropagation(),this.emit("lr-tool-render-error",{...entryCorrelation(entry),...event.detail})}redactedEntry(entry,placeholder){const redacted=redactToolDetail({args:entry.args,result:entry.result,error:entry.error},entry.redactedFields,placeholder,this.redactionCache.get(entry));return this.redactionCache.set(entry,redacted),redacted}openedDetailsTemplate(entry,placeholder){const redacted=this.redactedEntry(entry,placeholder);return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{eyeOffIcon}from"../../../internal/icons.js";import{srOnly}from"../../../internal/a11y.js";import{styles}from"./tool-timeline.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{overallSemanticLabel}from"../semantic-owner.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{TOOL_CALL_STATUSES}from"../tool-status.js";import{EMPTY_REDACTION_PATHS,projectedRedactionFields,redactToolDetail}from"../tool-redaction.js";import{LYRA_DEFAULT_confirmApproved,LYRA_DEFAULT_confirmDenied,LYRA_DEFAULT_envListValueHidden,LYRA_DEFAULT_noData,LYRA_DEFAULT_retry,LYRA_DEFAULT_toolTimelineDetailsFor,LYRA_DEFAULT_toolTimelineLimit}from"../../../internal/default-strings.generated.js";const MAX_RENDERED_ENTRIES=500,TOOL_STATUSES=new Set(TOOL_CALL_STATUSES);function descriptorValue(value,property2){return getOwnDataDescriptor(value,property2)}function projectToolTimelineEntry(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),nameDescriptor=descriptorValue(value,"name"),displayNameDescriptor=descriptorValue(value,"displayName"),argsDescriptor=descriptorValue(value,"args"),statusDescriptor=descriptorValue(value,"status"),resultDescriptor=descriptorValue(value,"result"),errorDescriptor=descriptorValue(value,"error"),sourceKeyDescriptor=descriptorValue(value,"sourceKey"),iconDescriptor=descriptorValue(value,"icon"),startedAtDescriptor=descriptorValue(value,"startedAt"),endedAtDescriptor=descriptorValue(value,"endedAt"),retryCountDescriptor=descriptorValue(value,"retryCount"),redactedFieldsDescriptor=descriptorValue(value,"redactedFields"),needsApprovalDescriptor=descriptorValue(value,"needsApproval"),approvedDescriptor=descriptorValue(value,"approved");if([idDescriptor,nameDescriptor,displayNameDescriptor,argsDescriptor,statusDescriptor,resultDescriptor,errorDescriptor,sourceKeyDescriptor,iconDescriptor,startedAtDescriptor,endedAtDescriptor,retryCountDescriptor,redactedFieldsDescriptor,needsApprovalDescriptor,approvedDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const valueOf=descriptor=>{if(!(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return descriptor.value},id=valueOf(idDescriptor);if(typeof id!="string"||id.trim().length===0)return;const redactedFieldsValue=valueOf(redactedFieldsDescriptor),redactedFields=redactedFieldsValue===void 0?EMPTY_REDACTION_PATHS:projectedRedactionFields(redactedFieldsValue);if(redactedFields===void 0)return;const name=valueOf(nameDescriptor),displayName=valueOf(displayNameDescriptor),status=valueOf(statusDescriptor),result=valueOf(resultDescriptor),error=valueOf(errorDescriptor),sourceKey=valueOf(sourceKeyDescriptor),icon=valueOf(iconDescriptor),startedAt=valueOf(startedAtDescriptor),endedAt=valueOf(endedAtDescriptor),retryCount=valueOf(retryCountDescriptor),needsApproval=valueOf(needsApprovalDescriptor),approved=valueOf(approvedDescriptor);return Object.freeze({source:value,id,name:typeof name=="string"?name:"",...typeof displayName=="string"?{displayName}:{},args:valueOf(argsDescriptor),status:TOOL_STATUSES.has(status)?status:"pending",...result===void 0?{}:{result},...typeof error=="string"?{error}:{},...typeof sourceKey=="string"?{sourceKey}:{},...typeof icon=="string"?{icon}:{},...typeof startedAt=="number"?{startedAt}:{},...typeof endedAt=="number"?{endedAt}:{},...typeof retryCount=="number"?{retryCount}:{},redactedFields,...typeof needsApproval=="boolean"?{needsApproval}:{},...typeof approved=="boolean"?{approved}:{}})}catch{return}}function entrySourceKey(entry){return entry.sourceKey?.trim()?entry.sourceKey:void 0}function entryIdentity(entry){return JSON.stringify([entrySourceKey(entry)??null,entry.id])}function entryCorrelation(entry){const sourceKey=entrySourceKey(entry);return sourceKey===void 0?{invocationId:entry.id}:{invocationId:entry.id,sourceKey}}function defaultFormatTimestamp(date,locale){return getDateTimeFormat(locale,{hour:"numeric",minute:"2-digit"}).format(date)}class LyraToolTimeline extends LyraElement{constructor(){super(...arguments),this.entries=[],this.approvalEditable=!0,this.approvalPending=null,this.openedEntryIds=new Set,this.projectedEntriesCache=[],this.projectionTruncated=!1,this.redactionCache=new WeakMap,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onDialogApprove=event=>{event.stopPropagation();const entry=this.reviewingEntry;if(entry===void 0)return;const key=entryIdentity(entry);if(this.emit("lr-tool-approval-decide",{...entryCorrelation(entry),approved:!0,args:event.detail.args},{cancelable:!0}).defaultPrevented&&this.entryStillNeedsApproval(key)){this.approvalPending="approve",event.preventDefault();return}this.approvalPending=null,this.reviewingEntryKey=void 0},this.onDialogDeny=event=>{event.stopPropagation();const entry=this.reviewingEntry;if(entry===void 0)return;const key=entryIdentity(entry);if(this.emit("lr-tool-approval-decide",{...entryCorrelation(entry),approved:!1},{cancelable:!0}).defaultPrevented&&this.entryStillNeedsApproval(key)){this.approvalPending="deny",event.preventDefault();return}this.approvalPending=null,this.reviewingEntryKey=void 0},this.onDialogClose=event=>{event.stopPropagation(),this.approvalPending=null,this.reviewingEntryKey=void 0}}static{this.defaultStrings={...super.defaultStrings,confirmApproved:LYRA_DEFAULT_confirmApproved,confirmDenied:LYRA_DEFAULT_confirmDenied,envListValueHidden:LYRA_DEFAULT_envListValueHidden,noData:LYRA_DEFAULT_noData,retry:LYRA_DEFAULT_retry,toolTimelineDetailsFor:LYRA_DEFAULT_toolTimelineDetailsFor,toolTimelineLimit:LYRA_DEFAULT_toolTimelineLimit}}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.identityCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles,srOnly]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.projectionTruncated}disconnectedCallback(){this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,this.syncLimitAnnouncementSink()}syncLimitAnnouncementSink(){!this.isConnected||this.limitAnnouncementSink?.element.ownerDocument===this.ownerDocument||(this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}get pendingApproval(){return this.approvalPending}willUpdate(changed){if(super.willUpdate(changed),!changed.has("entries"))return;this.rebuildProjection();const projected=this.projectedEntriesCache,identities=new Set(projected.map(entryIdentity));if(this.reviewingEntryKey!==void 0){const still=projected.find(entry=>entryIdentity(entry)===this.reviewingEntryKey);(!still||!(still.needsApproval&&still.approved===void 0))&&(this.reviewingEntryKey=void 0,this.approvalPending=null)}const opened=new Set([...this.openedEntryIds].filter(key=>identities.has(key)));opened.size!==this.openedEntryIds.size&&(this.openedEntryIds=opened)}updated(changed){super.updated(changed),this.limitAnnouncementInitialized&&this.projectionTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("toolTimelineLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_ENTRIES)})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.projectionTruncated}rebuildProjection(){const entries=Array.isArray(this.entries)?this.entries:[],projected=[],projectedIndex=new Map,reservedKeys=new Set(this.openedEntryIds);this.reviewingEntryKey!==void 0&&reservedKeys.add(this.reviewingEntryKey);const displacedReserved=new Map,seen=new Set;for(const sourceEntry of entries){const entry=projectToolTimelineEntry(sourceEntry);if(!entry)continue;const key=entryIdentity(entry);seen.has(key)||(seen.add(key),projected.length<MAX_RENDERED_ENTRIES?(projectedIndex.set(key,projected.length),projected.push(entry)):reservedKeys.has(key)&&displacedReserved.set(key,entry))}for(const[key,entry]of displacedReserved){if(projectedIndex.has(key))continue;let replacement=projected.length-1;for(;replacement>=0&&reservedKeys.has(entryIdentity(projected[replacement]));)replacement--;if(replacement<0)break;projectedIndex.delete(entryIdentity(projected[replacement])),projected[replacement]=entry,projectedIndex.set(key,replacement)}this.projectedEntriesCache=projected,this.projectionTruncated=seen.size>projected.length}get sortedEntries(){return this.projectedEntriesCache.map((entry,index)=>({entry,index})).sort((a,b)=>{const ak=Number.isFinite(a.entry.startedAt)?a.entry.startedAt:Number.POSITIVE_INFINITY,bk=Number.isFinite(b.entry.startedAt)?b.entry.startedAt:Number.POSITIVE_INFINITY;return ak!==bk?ak-bk:a.index-b.index}).map(({entry})=>entry)}get reviewingEntry(){return this.reviewingEntryKey===void 0?void 0:this.projectedEntriesCache.find(entry=>entryIdentity(entry)===this.reviewingEntryKey)}durationFor(entry){if(entry.startedAt==null||entry.endedAt==null)return;const diff=entry.endedAt-entry.startedAt;return Number.isFinite(diff)?diff:void 0}normalizedDate(ms){if(ms==null||!Number.isFinite(ms))return;const date=new Date(ms);return Number.isNaN(date.getTime())?void 0:date}onChipSelect(entry,event){if(event.stopPropagation(),entry.needsApproval&&entry.approved===void 0){this.reviewingEntryKey=entryIdentity(entry);return}this.emit("lr-tool-activate",entryCorrelation(entry))}entryStillNeedsApproval(key){const entries=Array.isArray(this.entries)?this.entries:[];for(const sourceEntry of entries){const projected=projectToolTimelineEntry(sourceEntry);if(projected!==void 0&&entryIdentity(projected)===key)return projected.needsApproval===!0&&projected.approved===void 0}return!1}finalizePendingApproval(){this.approvalPending!==null&&(this.approvalPending=null,this.reviewingEntryKey=void 0)}revertPendingApproval(){this.approvalPending!==null&&(this.approvalPending=null)}onDetailsToggle(entry,event){event.stopPropagation();const key=entryIdentity(entry),next=new Set(this.openedEntryIds);event.detail.open?next.add(key):next.delete(key),this.openedEntryIds=next}stopOwnedEvent(event){event.stopPropagation()}onRenderError(entry,event){event.stopPropagation(),this.emit("lr-tool-render-error",{...entryCorrelation(entry),...event.detail})}redactedEntry(entry,placeholder){const redacted=redactToolDetail({args:entry.args,result:entry.result,error:entry.error},entry.redactedFields,placeholder,this.redactionCache.get(entry));return this.redactionCache.set(entry,redacted),redacted}openedDetailsTemplate(entry,placeholder){const redacted=this.redactedEntry(entry,placeholder);return html`
2
2
  <lr-tool-result-view
3
3
  part="entry-result"
4
4
  tool-name=${entry.name}
@@ -20,6 +20,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
20
20
  ${started?html`<time part="entry-timestamp" datetime=${started.toISOString()}>${formatter(started)}</time>`:nothing}
21
21
  <lr-tool-call-chip
22
22
  .name=${entry.name}
23
+ .displayName=${entry.displayName}
23
24
  .status=${entry.status}
24
25
  .durationMs=${durationMs}
25
26
  .icon=${entry.icon??""}
@@ -42,7 +43,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
42
43
  </div>
43
44
  <lr-details
44
45
  part="entry-details"
45
- .summary=${this.localize("toolTimelineDetailsFor",void 0,{name:entry.name})}
46
+ .summary=${this.localize("toolTimelineDetailsFor",void 0,{name:entry.displayName||entry.name})}
46
47
  .open=${detailsOpened}
47
48
  @lr-show=${this.stopOwnedEvent}
48
49
  @lr-after-show=${this.stopOwnedEvent}
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{--_lr-tool-timeline-gap:var(--lr-space-l);--_lr-tool-timeline-marker-size:var(--lr-size-0-625rem);--_lr-tool-timeline-denied-marker-color:var(--lr-color-warning);--_lr-tool-timeline-pending-marker-color:var(--lr-color-text-quiet);--_lr-tool-timeline-pending-approval-border-color:var(--lr-color-warning);display:block}[part=base]{gap:var(--lr-tool-timeline-gap,var(--_lr-tool-timeline-gap));flex-direction:column;margin:0;padding:0;list-style:none;display:flex}[part=entry]{grid-template-columns:var(--lr-tool-timeline-marker-size,var(--_lr-tool-timeline-marker-size)) 1fr;column-gap:var(--lr-space-m);display:grid}[part=entry-marker]{flex-direction:column;grid-area:1/1/-1;align-items:center;display:flex}[part=entry-marker]:before{content:"";inline-size:var(--lr-tool-timeline-marker-size,var(--_lr-tool-timeline-marker-size));block-size:var(--lr-tool-timeline-marker-size,var(--_lr-tool-timeline-marker-size));border-radius:var(--lr-radius-pill);background:var(--lr-tool-timeline-pending-marker-color,var(--_lr-tool-timeline-pending-marker-color));flex:none;margin-block-start:var(--lr-size-0-3em)}[part=entry]:not(:last-child) [part=entry-marker]:after{content:"";inline-size:var(--lr-border-width-thin);min-block-size:var(--lr-space-l);background:var(--lr-color-border-subtle);flex:auto;margin-block-start:var(--lr-space-2xs)}[part=entry][data-status=running] [part=entry-marker]:before{background:var(--lr-tool-timeline-running-marker-color,var(--lr-color-brand))}[part=entry][data-status=success] [part=entry-marker]:before{background:var(--lr-tool-timeline-success-marker-color,var(--lr-color-success))}[part=entry][data-status=error] [part=entry-marker]:before{background:var(--lr-tool-timeline-error-marker-color,var(--lr-color-danger))}[part=entry][data-status=denied] [part=entry-marker]:before{background:var(--lr-tool-timeline-denied-marker-color,var(--_lr-tool-timeline-denied-marker-color))}[part=entry-body]{gap:var(--lr-space-2xs);flex-direction:column;grid-column:2;min-inline-size:0;display:flex}[part=entry-header]{align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;display:flex}[part=entry-header]>*{min-inline-size:0}[part=entry][data-pending-approval=true] [part=entry-body]{border-inline-start:var(--lr-border-width-medium) solid var(--lr-tool-timeline-pending-approval-border-color,var(--_lr-tool-timeline-pending-approval-border-color));padding-inline-start:var(--lr-space-s)}[part=entry-timestamp]{font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);font-variant-numeric:tabular-nums;flex:none}lr-tool-call-chip{min-inline-size:0;max-inline-size:100%}[part=entry-retries]{align-items:baseline;gap:var(--lr-size-0-3em);padding:var(--lr-size-0-1rem) var(--lr-space-xs);border-radius:var(--lr-radius-pill);background:var(--lr-color-surface-raised);font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);display:inline-flex}[part=entry-retries-count]{font-variant-numeric:tabular-nums;font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text)}[part=entry-approval-status]{padding:var(--lr-size-0-1rem) var(--lr-space-xs);border-radius:var(--lr-radius-pill);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);text-transform:uppercase;letter-spacing:var(--lr-size-0-03em);flex:none}[part=entry-approval-status][data-decision=approved]{background:var(--lr-tool-timeline-approved-bg,var(--lr-color-success-quiet));color:var(--lr-tool-timeline-approved-color,var(--lr-color-success))}[part=entry-approval-status][data-decision=denied]{background:var(--lr-tool-timeline-denied-bg,var(--lr-color-danger-quiet));color:var(--lr-tool-timeline-denied-color,var(--lr-color-danger))}[part=entry-redacted-indicator]{color:var(--lr-color-text-quiet);flex:none;display:inline-flex}[part=entry-redacted-indicator] svg{inline-size:var(--lr-size-0-875em);block-size:var(--lr-size-0-875em)}[part=entry-details]{font-size:var(--lr-font-size-sm)}[part=entry-error]{color:var(--lr-tool-timeline-error-color,var(--lr-color-danger));overflow-wrap:anywhere;font-size:var(--lr-font-size-sm);white-space:pre-wrap;margin:0}[part=limit]{margin-block:var(--lr-space-s) 0;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm)}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{--_lr-tool-timeline-gap:var(--lr-space-l);--_lr-tool-timeline-marker-size:var(--lr-size-0-625rem);--_lr-tool-timeline-denied-marker-color:var(--lr-color-warning);--_lr-tool-timeline-pending-marker-color:var(--lr-color-text-quiet);--_lr-tool-timeline-incomplete-marker-color:var(--lr-color-text-quiet);--_lr-tool-timeline-pending-approval-border-color:var(--lr-color-warning);display:block}[part=base]{gap:var(--lr-tool-timeline-gap,var(--_lr-tool-timeline-gap));flex-direction:column;margin:0;padding:0;list-style:none;display:flex}[part=entry]{grid-template-columns:var(--lr-tool-timeline-marker-size,var(--_lr-tool-timeline-marker-size)) 1fr;column-gap:var(--lr-space-m);display:grid}[part=entry-marker]{flex-direction:column;grid-area:1/1/-1;align-items:center;display:flex}[part=entry-marker]:before{content:"";inline-size:var(--lr-tool-timeline-marker-size,var(--_lr-tool-timeline-marker-size));block-size:var(--lr-tool-timeline-marker-size,var(--_lr-tool-timeline-marker-size));border-radius:var(--lr-radius-pill);background:var(--lr-tool-timeline-pending-marker-color,var(--_lr-tool-timeline-pending-marker-color));flex:none;margin-block-start:var(--lr-size-0-3em)}[part=entry]:not(:last-child) [part=entry-marker]:after{content:"";inline-size:var(--lr-border-width-thin);min-block-size:var(--lr-space-l);background:var(--lr-color-border-subtle);flex:auto;margin-block-start:var(--lr-space-2xs)}[part=entry][data-status=running] [part=entry-marker]:before{background:var(--lr-tool-timeline-running-marker-color,var(--lr-color-brand))}[part=entry][data-status=success] [part=entry-marker]:before{background:var(--lr-tool-timeline-success-marker-color,var(--lr-color-success))}[part=entry][data-status=error] [part=entry-marker]:before{background:var(--lr-tool-timeline-error-marker-color,var(--lr-color-danger))}[part=entry][data-status=denied] [part=entry-marker]:before{background:var(--lr-tool-timeline-denied-marker-color,var(--_lr-tool-timeline-denied-marker-color))}[part=entry][data-status=incomplete] [part=entry-marker]:before{background:var(--lr-tool-timeline-incomplete-marker-color,var(--_lr-tool-timeline-incomplete-marker-color))}[part=entry-body]{gap:var(--lr-space-2xs);flex-direction:column;grid-column:2;min-inline-size:0;display:flex}[part=entry-header]{align-items:center;gap:var(--lr-space-s);flex-wrap:wrap;display:flex}[part=entry-header]>*{min-inline-size:0}[part=entry][data-pending-approval=true] [part=entry-body]{border-inline-start:var(--lr-border-width-medium) solid var(--lr-tool-timeline-pending-approval-border-color,var(--_lr-tool-timeline-pending-approval-border-color));padding-inline-start:var(--lr-space-s)}[part=entry-timestamp]{font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);font-variant-numeric:tabular-nums;flex:none}lr-tool-call-chip{min-inline-size:0;max-inline-size:100%}[part=entry-retries]{align-items:baseline;gap:var(--lr-size-0-3em);padding:var(--lr-size-0-1rem) var(--lr-space-xs);border-radius:var(--lr-radius-pill);background:var(--lr-color-surface-raised);font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);display:inline-flex}[part=entry-retries-count]{font-variant-numeric:tabular-nums;font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text)}[part=entry-approval-status]{padding:var(--lr-size-0-1rem) var(--lr-space-xs);border-radius:var(--lr-radius-pill);font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);text-transform:uppercase;letter-spacing:var(--lr-size-0-03em);flex:none}[part=entry-approval-status][data-decision=approved]{background:var(--lr-tool-timeline-approved-bg,var(--lr-color-success-quiet));color:var(--lr-tool-timeline-approved-color,var(--lr-color-success))}[part=entry-approval-status][data-decision=denied]{background:var(--lr-tool-timeline-denied-bg,var(--lr-color-danger-quiet));color:var(--lr-tool-timeline-denied-color,var(--lr-color-danger))}[part=entry-redacted-indicator]{color:var(--lr-color-text-quiet);flex:none;display:inline-flex}[part=entry-redacted-indicator] svg{inline-size:var(--lr-size-0-875em);block-size:var(--lr-size-0-875em)}[part=entry-details]{font-size:var(--lr-font-size-sm)}[part=entry-error]{color:var(--lr-tool-timeline-error-color,var(--lr-color-danger));overflow-wrap:anywhere;font-size:var(--lr-font-size-sm);white-space:pre-wrap;margin:0}[part=limit]{margin-block:var(--lr-space-s) 0;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm)}`;export{styles};
@@ -1,7 +1,7 @@
1
1
  import type{LyraToolStatus}from'../../../internal/shared-unions.js';export type LyraSpanKind='agent'|'llm'|'tool'|'retriever'|'embedding'|'other';
2
2
  /** The same tool-lifecycle vocabulary `<lr-tool-call-chip>`'s `ToolCallStatus` and
3
- * `<lr-tool-result-dialog>`'s `ToolResultStatus` resolve to -- a span standing in for a call reads
4
- * identically to the call itself. */
3
+ * `<lr-tool-result-dialog>`'s `ToolResultStatus` build on (those two add only `incomplete`) -- a
4
+ * span standing in for a call reads identically to the call itself. */
5
5
  export type LyraSpanStatus=LyraToolStatus;
6
6
  /** Normalizes foreign provider data before it reaches closed span-kind maps. */
7
7
  export declare function normalizeLyraSpanKind(value:unknown):LyraSpanKind;
@@ -205,7 +205,9 @@ private forcedColorFill;private styleColor;
205
205
  * hard-coded `fallback` so the token can itself default to a `--lr-*` design token (mirrors
206
206
  * `LyraChart.styleNumber()`).
207
207
  */
208
- private styleNumber;private buildConfig;private draw;private drawIfVisible;
208
+ private styleNumber;
209
+ /** Isolates each drawn tooltip line in its own first-strong direction (see chart-bidi.ts). */
210
+ private readonly tooltipIsolationPlugin;private buildConfig;private draw;private drawIfVisible;
209
211
  /**
210
212
  * A sibling `<lr-chart>` registering `chartjs-plugin-annotation` globally leaves this instance
211
213
  * without the plugin's per-chart state (created only in `beforeInit`), so the plugin would throw