@aceshooting/lyra-ui 12.1.0 → 12.1.2

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 (64) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +2 -2
  5. package/dist/components/agent-tools/stack-trace/stack-trace.class.js +2 -2
  6. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +2 -2
  7. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  8. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
  9. package/dist/components/data/calendar/calendar.class.js +1 -1
  10. package/dist/components/data/data-grid/data-grid.class.d.ts +5 -0
  11. package/dist/components/data/data-grid/data-grid.class.js +1 -1
  12. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +1 -0
  13. package/dist/components/data/flow-canvas/flow-canvas.class.js +4 -4
  14. package/dist/components/data/flow-canvas/flow-model.js +1 -1
  15. package/dist/components/data/pagination/pagination.class.js +1 -1
  16. package/dist/components/data/sparkline/sparkline.class.js +1 -1
  17. package/dist/components/data/stat/stat.class.js +1 -1
  18. package/dist/components/forms/button/button.class.js +2 -2
  19. package/dist/components/forms/checkbox-group/checkbox-group.class.js +2 -2
  20. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  21. package/dist/components/forms/input/input.class.js +1 -1
  22. package/dist/components/forms/input/time-input.class.js +3 -3
  23. package/dist/components/forms/radio/radio.class.d.ts +1 -0
  24. package/dist/components/forms/radio/radio.class.js +1 -1
  25. package/dist/components/layout/segmented/segmented.class.js +1 -1
  26. package/dist/components/layout/tab-group/tab-group.class.js +1 -1
  27. package/dist/components/media/flag/flag.class.js +3 -3
  28. package/dist/components/overlays/dialog/dialog.class.js +1 -1
  29. package/dist/components/retrieval/graph/graph-model.d.ts +7 -2
  30. package/dist/components/retrieval/graph/graph-model.js +1 -1
  31. package/dist/components/retrieval/graph/graph.class.js +1 -1
  32. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +1 -1
  33. package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +3 -3
  34. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +1 -1
  35. package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +2 -2
  36. package/dist/components/retrieval/retrieval-identity.d.ts +3 -0
  37. package/dist/components/retrieval/retrieval-identity.js +1 -1
  38. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +2 -2
  39. package/dist/components/retrieval/source-list/source-list.class.d.ts +2 -2
  40. package/dist/components/retrieval/source-list/source-list.class.js +1 -1
  41. package/dist/components/retrieval/source-picker/source-picker.class.d.ts +2 -0
  42. package/dist/components/retrieval/source-picker/source-picker.class.js +4 -4
  43. package/dist/components/utility/divider/divider.class.js +1 -1
  44. package/dist/components/utility/export-button/export-button.class.js +1 -1
  45. package/dist/components/viewers/document-preview/document-preview.class.d.ts +3 -3
  46. package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +3 -1
  47. package/dist/components/viewers/passive-markup.js +1 -1
  48. package/dist/internal/autoloader-manifest.js +1 -1
  49. package/dist/internal/lyra-element.js +1 -1
  50. package/dist/internal/package-metadata.d.ts +1 -1
  51. package/dist/internal/package-metadata.js +1 -1
  52. package/llms/components/lr-command-palette.md +1 -1
  53. package/llms/components/lr-date-input.md +1 -1
  54. package/llms/components/lr-date-picker.md +1 -1
  55. package/llms/components/lr-document-preview.md +9 -8
  56. package/llms/components/lr-docx-viewer.md +3 -2
  57. package/llms/components/lr-filter-bar.md +2 -2
  58. package/llms/components/lr-geojson-view.md +2 -1
  59. package/llms/components/lr-geojson-viewer.md +2 -1
  60. package/llms/components/lr-map.md +1 -1
  61. package/llms-full.txt +19 -16
  62. package/package.json +1 -1
  63. package/vscode-html-data.json +1 -1
  64. package/web-types.json +6 -6
@@ -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}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteRatio,finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{styles}from"./span-waterfall.styles.js";import{MAX_RENDERED_LYRA_SPANS,normalizeLyraSpans}from"../trace-tree/span.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_map,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool,LYRA_DEFAULT_spanProjectionLimit,LYRA_DEFAULT_spanStartedAtOffset,LYRA_DEFAULT_spanWaterfall,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess}from"../../../internal/default-strings.generated.js";const KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied"},STATUS_TONE={success:"success",error:"danger",denied:"warning",running:"accent",pending:"neutral"};function niceStep(span,count){if(span<=0)return 1;const rough=span/Math.max(1,count),magnitude=10**Math.floor(Math.log10(rough)),residual=rough/magnitude;return(residual<1.5?1:residual<3?2:residual<7?5:10)*magnitude}function axisTicks(start,end,count=5){const step=niceStep(end-start,count);if(!Number.isFinite(step)||step<=0)return[start,end];const first=Math.ceil(start/step)*step;if(!Number.isFinite(first))return[start,end];const ticks=[];for(let index=0;index<=count+2;index++){const value=first+index*step;if(!Number.isFinite(value)||value>end+step/2)break;const rounded=Math.round(value/step)*step;Number.isFinite(rounded)&&(ticks.length===0||rounded>ticks[ticks.length-1])&&ticks.push(rounded)}return ticks}class LyraSpanWaterfall extends LyraElement{constructor(){super(...arguments),this.spans=[],this.activeSpanId=null,this.viewStartMs=null,this.viewEndMs=null,this.hideAxis=!1,this.label="",this.focusedId=null,this.sortedActiveSpanId=null,this.sortedCache=[],this.sortedCacheTruncated=!1,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onKeyDown=e=>{const view=this.viewWindow(),rows=this.sortedSpans().filter(span=>this.barGeometry(span,view).visible);if(rows.length===0)return;const currentIndex=rows.findIndex(s=>s.id===this.focusedId),idx=currentIndex>=0?currentIndex:0;switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,idx+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,idx-1)]);break;case"Home":e.preventDefault(),this.focusRow(rows[0]);break;case"End":e.preventDefault(),this.focusRow(rows[rows.length-1]);break;case"Enter":case" ":e.preventDefault(),this.selectRow(rows[idx].id);break;default:return}}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,map:LYRA_DEFAULT_map,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,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,spanProjectionLimit:LYRA_DEFAULT_spanProjectionLimit,spanStartedAtOffset:LYRA_DEFAULT_spanStartedAtOffset,spanWaterfall:LYRA_DEFAULT_spanWaterfall,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess}}static{this.ownedCollectionProperties=Object.freeze(["spans"])}static{this.styles=[LyraElement.styles,styles]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.sortedCacheTruncated}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}))}sortedSpans(){if(this.sortedSource===this.spans&&this.sortedActiveSpanId===this.activeSpanId)return this.sortedCache;this.sortedSource=this.spans,this.sortedActiveSpanId=this.activeSpanId;const projection=normalizeLyraSpans(this.spans,this.activeSpanId);return this.sortedCacheTruncated=projection.truncated,this.sortedCache=projection.spans.map((s,i)=>({s,i})).sort((a,b)=>a.s.startMs-b.s.startMs||a.i-b.i).map(x=>x.s),this.sortedCache}viewWindow(){const extentEnd=this.sortedSpans().reduce((m,s)=>Math.max(m,s.endMs??s.startMs,s.startMs),0),fallbackEnd=Math.max(extentEnd,1),start=this.viewStartMs==null?0:finiteRange(this.viewStartMs,0,0,Number.MAX_SAFE_INTEGER-1),end=this.viewEndMs==null?fallbackEnd:finiteRange(this.viewEndMs,fallbackEnd,0,Number.MAX_SAFE_INTEGER);return{start,end:end>start?end:start+1}}barGeometry(span,view){const endMs=span.endMs??(span.status==="running"?view.end:span.startMs),visible=span.startMs<=view.end&&endMs>=view.start,clampedStart=Math.max(view.start,span.startMs),clampedEnd=Math.min(view.end,Math.max(endMs,span.startMs)),startPct=finiteRatio(clampedStart,view.start,view.end)*100,endPct=finiteRatio(clampedEnd,view.start,view.end)*100;return{startPct,widthPct:Math.max(0,endPct-startPct),visible}}formatDuration(ms){if(ms==null||!Number.isFinite(ms))return"";const milliseconds=Math.max(0,ms);return milliseconds<1e3?getNumberFormat(this.effectiveLocale,{style:"unit",unit:"millisecond",unitDisplay:"short",maximumFractionDigits:0}).format(milliseconds):getNumberFormat(this.effectiveLocale,{style:"unit",unit:"second",unitDisplay:"short",maximumFractionDigits:1}).format(milliseconds/1e3)}focusRow(span){if(!span)return;const previous=this.renderRoot.querySelector('[part="bar"][tabindex="0"]');this.focusedId=span.id,this.announceFocus(span),previous?.setAttribute("tabindex","-1");const next=this.renderedBarById(span.id);next?.setAttribute("tabindex","0"),next?.focus()}announceFocus(span){const parts=[span.name,this.localize(KIND_LABEL_KEY[span.kind]),this.localize(STATUS_LABEL_KEY[span.status]),this.localize("spanStartedAtOffset",void 0,{value:this.formatDuration(span.startMs)||this.localize("durationMilliseconds",void 0,{value:0})})];span.endMs!=null&&parts.push(this.formatDuration(span.endMs-span.startMs)),this.liveRegion?.announce(parts.join(this.localize("accessibleLabelSeparator")),{force:!0})}selectRow(id){this.focusedId=id,this.emit("lr-span-select",{spanId:id})}willUpdate(changed){if(super.willUpdate(changed),(changed.has("spans")||changed.has("activeSpanId"))&&(this.sortedSource=void 0),changed.has("spans")||changed.has("viewStartMs")||changed.has("viewEndMs")||changed.has("activeSpanId")){const view=this.viewWindow(),ids=new Set(this.sortedSpans().filter(span=>this.barGeometry(span,view).visible).map(span=>span.id));(this.focusedId==null||!ids.has(this.focusedId))&&(this.focusedId=this.activeSpanId&&ids.has(this.activeSpanId)?this.activeSpanId:this.sortedSpans()[0]?.id??null),this.focusedId!==null&&!ids.has(this.focusedId)&&(this.focusedId=this.sortedSpans().find(span=>ids.has(span.id))?.id??null),changed.has("activeSpanId")&&this.activeSpanId&&ids.has(this.activeSpanId)&&(this.focusedId=this.activeSpanId)}}renderedBarById(id){const ownerCss=this.ownerDocument.defaultView?.CSS;return typeof ownerCss?.escape=="function"?this.renderRoot.querySelector(`[data-id="${ownerCss.escape(id)}"]`):Array.from(this.renderRoot.querySelectorAll("[data-id]")).find(element=>element.dataset.id===id)??null}updated(changed){if(super.updated(changed),changed.has("activeSpanId")&&this.activeSpanId){const bar=this.renderedBarById(this.activeSpanId);if(bar&&!bar.hidden){const ownerWindow=bar.ownerDocument.defaultView,reducedMotion=!ownerWindow||prefersReducedMotion(ownerWindow);bar.scrollIntoView({block:"nearest",behavior:reducedMotion?"auto":"smooth"})}}this.limitAnnouncementInitialized&&this.sortedCacheTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("spanProjectionLimit",void 0,{count:MAX_RENDERED_LYRA_SPANS})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.sortedCacheTruncated}renderAxis(view){const ticks=axisTicks(view.start,view.end);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}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteRatio,finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{styles}from"./span-waterfall.styles.js";import{MAX_RENDERED_LYRA_SPANS,normalizeLyraSpans}from"../trace-tree/span.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool,LYRA_DEFAULT_spanProjectionLimit,LYRA_DEFAULT_spanStartedAtOffset,LYRA_DEFAULT_spanWaterfall,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess}from"../../../internal/default-strings.generated.js";const KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied"},STATUS_TONE={success:"success",error:"danger",denied:"warning",running:"accent",pending:"neutral"};function niceStep(span,count){if(span<=0)return 1;const rough=span/Math.max(1,count),magnitude=10**Math.floor(Math.log10(rough)),residual=rough/magnitude;return(residual<1.5?1:residual<3?2:residual<7?5:10)*magnitude}function axisTicks(start,end,count=5){const step=niceStep(end-start,count);if(!Number.isFinite(step)||step<=0)return[start,end];const first=Math.ceil(start/step)*step;if(!Number.isFinite(first))return[start,end];const ticks=[];for(let index=0;index<=count+2;index++){const value=first+index*step;if(!Number.isFinite(value)||value>end+step/2)break;const rounded=Math.round(value/step)*step;Number.isFinite(rounded)&&(ticks.length===0||rounded>ticks[ticks.length-1])&&ticks.push(rounded)}return ticks}class LyraSpanWaterfall extends LyraElement{constructor(){super(...arguments),this.spans=[],this.activeSpanId=null,this.viewStartMs=null,this.viewEndMs=null,this.hideAxis=!1,this.label="",this.focusedId=null,this.sortedActiveSpanId=null,this.sortedCache=[],this.sortedCacheTruncated=!1,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onKeyDown=e=>{const view=this.viewWindow(),rows=this.sortedSpans().filter(span=>this.barGeometry(span,view).visible);if(rows.length===0)return;const currentIndex=rows.findIndex(s=>s.id===this.focusedId),idx=currentIndex>=0?currentIndex:0;switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,idx+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,idx-1)]);break;case"Home":e.preventDefault(),this.focusRow(rows[0]);break;case"End":e.preventDefault(),this.focusRow(rows[rows.length-1]);break;case"Enter":case" ":e.preventDefault(),this.selectRow(rows[idx].id);break;default:return}}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,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,spanKindAgent:LYRA_DEFAULT_spanKindAgent,spanKindEmbedding:LYRA_DEFAULT_spanKindEmbedding,spanKindLlm:LYRA_DEFAULT_spanKindLlm,spanKindOther:LYRA_DEFAULT_spanKindOther,spanKindRetriever:LYRA_DEFAULT_spanKindRetriever,spanKindTool:LYRA_DEFAULT_spanKindTool,spanProjectionLimit:LYRA_DEFAULT_spanProjectionLimit,spanStartedAtOffset:LYRA_DEFAULT_spanStartedAtOffset,spanWaterfall:LYRA_DEFAULT_spanWaterfall,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess}}static{this.ownedCollectionProperties=Object.freeze(["spans"])}static{this.styles=[LyraElement.styles,styles]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.sortedCacheTruncated}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}))}sortedSpans(){if(this.sortedSource===this.spans&&this.sortedActiveSpanId===this.activeSpanId)return this.sortedCache;this.sortedSource=this.spans,this.sortedActiveSpanId=this.activeSpanId;const projection=normalizeLyraSpans(this.spans,this.activeSpanId);return this.sortedCacheTruncated=projection.truncated,this.sortedCache=projection.spans.map((s,i)=>({s,i})).sort((a,b)=>a.s.startMs-b.s.startMs||a.i-b.i).map(x=>x.s),this.sortedCache}viewWindow(){const extentEnd=this.sortedSpans().reduce((m,s)=>Math.max(m,s.endMs??s.startMs,s.startMs),0),fallbackEnd=Math.max(extentEnd,1),start=this.viewStartMs==null?0:finiteRange(this.viewStartMs,0,0,Number.MAX_SAFE_INTEGER-1),end=this.viewEndMs==null?fallbackEnd:finiteRange(this.viewEndMs,fallbackEnd,0,Number.MAX_SAFE_INTEGER);return{start,end:end>start?end:start+1}}barGeometry(span,view){const endMs=span.endMs??(span.status==="running"?view.end:span.startMs),visible=span.startMs<=view.end&&endMs>=view.start,clampedStart=Math.max(view.start,span.startMs),clampedEnd=Math.min(view.end,Math.max(endMs,span.startMs)),startPct=finiteRatio(clampedStart,view.start,view.end)*100,endPct=finiteRatio(clampedEnd,view.start,view.end)*100;return{startPct,widthPct:Math.max(0,endPct-startPct),visible}}formatDuration(ms){if(ms==null||!Number.isFinite(ms))return"";const milliseconds=Math.max(0,ms);return milliseconds<1e3?getNumberFormat(this.effectiveLocale,{style:"unit",unit:"millisecond",unitDisplay:"short",maximumFractionDigits:0}).format(milliseconds):getNumberFormat(this.effectiveLocale,{style:"unit",unit:"second",unitDisplay:"short",maximumFractionDigits:1}).format(milliseconds/1e3)}focusRow(span){if(!span)return;const previous=this.renderRoot.querySelector('[part="bar"][tabindex="0"]');this.focusedId=span.id,this.announceFocus(span),previous?.setAttribute("tabindex","-1");const next=this.renderedBarById(span.id);next?.setAttribute("tabindex","0"),next?.focus()}announceFocus(span){const parts=[span.name,this.localize(KIND_LABEL_KEY[span.kind]),this.localize(STATUS_LABEL_KEY[span.status]),this.localize("spanStartedAtOffset",void 0,{value:this.formatDuration(span.startMs)||this.localize("durationMilliseconds",void 0,{value:0})})];span.endMs!=null&&parts.push(this.formatDuration(span.endMs-span.startMs)),this.liveRegion?.announce(parts.join(this.localize("accessibleLabelSeparator")),{force:!0})}selectRow(id){this.focusedId=id,this.emit("lr-span-select",{spanId:id})}willUpdate(changed){if(super.willUpdate(changed),(changed.has("spans")||changed.has("activeSpanId"))&&(this.sortedSource=void 0),changed.has("spans")||changed.has("viewStartMs")||changed.has("viewEndMs")||changed.has("activeSpanId")){const view=this.viewWindow(),ids=new Set(this.sortedSpans().filter(span=>this.barGeometry(span,view).visible).map(span=>span.id));(this.focusedId==null||!ids.has(this.focusedId))&&(this.focusedId=this.activeSpanId&&ids.has(this.activeSpanId)?this.activeSpanId:this.sortedSpans()[0]?.id??null),this.focusedId!==null&&!ids.has(this.focusedId)&&(this.focusedId=this.sortedSpans().find(span=>ids.has(span.id))?.id??null),changed.has("activeSpanId")&&this.activeSpanId&&ids.has(this.activeSpanId)&&(this.focusedId=this.activeSpanId)}}renderedBarById(id){const ownerCss=this.ownerDocument.defaultView?.CSS;return typeof ownerCss?.escape=="function"?this.renderRoot.querySelector(`[data-id="${ownerCss.escape(id)}"]`):Array.from(this.renderRoot.querySelectorAll("[data-id]")).find(element=>element.dataset.id===id)??null}updated(changed){if(super.updated(changed),changed.has("activeSpanId")&&this.activeSpanId){const bar=this.renderedBarById(this.activeSpanId);if(bar&&!bar.hidden){const ownerWindow=bar.ownerDocument.defaultView,reducedMotion=!ownerWindow||prefersReducedMotion(ownerWindow);bar.scrollIntoView({block:"nearest",behavior:reducedMotion?"auto":"smooth"})}}this.limitAnnouncementInitialized&&this.sortedCacheTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("spanProjectionLimit",void 0,{count:MAX_RENDERED_LYRA_SPANS})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.sortedCacheTruncated}renderAxis(view){const ticks=axisTicks(view.start,view.end);return html`
2
2
  <div part="axis" aria-hidden="true">
3
3
  ${ticks.map(t=>{const pct=finiteRatio(t,view.start,view.end)*100;return pct<0||pct>100?nothing:html`<span
4
4
  part="tick"
@@ -35,7 +35,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
35
35
  <div
36
36
  part="base"
37
37
  role="list"
38
- aria-label=${this.label||this.localize("spanWaterfall")}
38
+ aria-label=${hostAriaLabel(this)??(this.label||this.localize("spanWaterfall"))}
39
39
  @keydown=${this.onKeyDown}
40
40
  >
41
41
  ${!this.hideAxis&&rows.length>0?this.renderAxis(view):nothing}
@@ -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{LyraElement}from"../../../internal/lyra-element.js";import{styles}from"./stack-trace.styles.js";import{parseStackTrace,DEFAULT_INTERNAL_PATTERNS}from"./stack-trace-parse.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styleMap}from"lit/directives/style-map.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{LYRA_DEFAULT_copied,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_stackTraceHideFrames,LYRA_DEFAULT_stackTraceLabel,LYRA_DEFAULT_stackTraceLimit,LYRA_DEFAULT_stackTraceShowFrames}from"../../../internal/default-strings.generated.js";const COPY_CONFIRM_MS=1500;function isSelectableFrame(frame){return typeof frame.file=="string"&&frame.file.length>0&&Number.isSafeInteger(frame.line)&&(frame.column===void 0||Number.isSafeInteger(frame.column))}class LyraStackTrace extends LyraElement{constructor(){super(...arguments),this.trace="",this.collapseInternal=!0,this.internalPatterns=[...DEFAULT_INTERNAL_PATTERNS],this.copyable=!0,this.frame="card",this.compact=!1,this.maxHeight="",this.groups=[],this.boundedSource="",this.parseTruncated=!1,this.expandedInternalRuns=new Set,this.copyStatus="rest",this.copyGeneration=0,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onCopy=()=>{this.copyTrace()}}static{this.defaultStrings={...super.defaultStrings,copied:LYRA_DEFAULT_copied,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,stackTraceHideFrames:LYRA_DEFAULT_stackTraceHideFrames,stackTraceLabel:LYRA_DEFAULT_stackTraceLabel,stackTraceLimit:LYRA_DEFAULT_stackTraceLimit,stackTraceShowFrames:LYRA_DEFAULT_stackTraceShowFrames}}static{this.ownedCollectionProperties=Object.freeze(["internalPatterns"])}static{this.styles=[LyraElement.styles,styles]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.parseTruncated}disconnectedCallback(){this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,this.resetCopyFeedback(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.resetCopyFeedback(),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}))}cancelCopyTimer(){const timer=this.copyTimer;this.copyTimer=void 0,timer&&timer.owner.clearTimeout(timer.handle)}resetCopyFeedback(){this.copyGeneration+=1,this.cancelCopyTimer(),this.copyStatus="rest"}willUpdate(changed){if(super.willUpdate(changed),changed.has("trace")||changed.has("internalPatterns")){const result=parseStackTrace(this.trace,{internalPatterns:this.internalPatterns});this.groups=result.groups,this.boundedSource=result.source,this.parseTruncated=result.truncated,this.expandedInternalRuns=new Set}}updated(changed){super.updated(changed),this.limitAnnouncementInitialized&&this.parseTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("stackTraceLimit")),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.parseTruncated}async copyTrace(){const text=this.trace,owner=this.isConnected?this.ownerDocument.defaultView:null,generation=++this.copyGeneration;this.cancelCopyTimer(),this.copyStatus="rest";const outcome=await writeClipboardText(owner,text);if(!(!owner||!this.isCurrentCopy(generation,owner))){if(!outcome.ok){this.showCopyStatus("error",generation,owner),this.emit("lr-error"),this.emit("lr-copy-error",outcome);return}this.showCopyStatus("success",generation,owner),this.emit("lr-copy",outcome)}}isCurrentCopy(generation,owner){return this.isConnected&&generation===this.copyGeneration&&this.ownerDocument.defaultView===owner}showCopyStatus(status,generation,owner){this.copyStatus=status,this.cancelCopyTimer();let handle=0;handle=owner.setTimeout(()=>{this.copyTimer?.owner!==owner||this.copyTimer.handle!==handle||this.copyTimer.generation!==generation||generation!==this.copyGeneration||!this.isConnected||this.ownerDocument.defaultView!==owner||(this.copyTimer=void 0,this.copyStatus="rest")},COPY_CONFIRM_MS),this.copyTimer={owner,handle,generation}}onFrameClick(frame){isSelectableFrame(frame)&&this.emit("lr-frame-select",{file:frame.file,line:frame.line,column:frame.column,raw:frame.raw})}toggleInternalRun(runKey){const next=new Set(this.expandedInternalRuns);next.has(runKey)?next.delete(runKey):next.add(runKey),this.expandedInternalRuns=next}renderFrame(frame){if(!isSelectableFrame(frame))return html`<span part="frame" data-raw dir="ltr">${frame.raw}</span>`;const location=`${frame.file}:${frame.line}${frame.column!==void 0?`:${frame.column}`:""}`;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{LyraElement}from"../../../internal/lyra-element.js";import{styles}from"./stack-trace.styles.js";import{parseStackTrace,DEFAULT_INTERNAL_PATTERNS}from"./stack-trace-parse.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styleMap}from"lit/directives/style-map.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{LYRA_DEFAULT_copied,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_stackTraceHideFrames,LYRA_DEFAULT_stackTraceLabel,LYRA_DEFAULT_stackTraceLimit,LYRA_DEFAULT_stackTraceShowFrames}from"../../../internal/default-strings.generated.js";const COPY_CONFIRM_MS=1500;function isSelectableFrame(frame){return typeof frame.file=="string"&&frame.file.length>0&&Number.isSafeInteger(frame.line)&&(frame.column===void 0||Number.isSafeInteger(frame.column))}class LyraStackTrace extends LyraElement{constructor(){super(...arguments),this.trace="",this.collapseInternal=!0,this.internalPatterns=[...DEFAULT_INTERNAL_PATTERNS],this.copyable=!0,this.frame="card",this.compact=!1,this.maxHeight="",this.groups=[],this.boundedSource="",this.parseTruncated=!1,this.expandedInternalRuns=new Set,this.copyStatus="rest",this.copyGeneration=0,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onCopy=()=>{this.copyTrace()}}static{this.defaultStrings={...super.defaultStrings,copied:LYRA_DEFAULT_copied,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,stackTraceHideFrames:LYRA_DEFAULT_stackTraceHideFrames,stackTraceLabel:LYRA_DEFAULT_stackTraceLabel,stackTraceLimit:LYRA_DEFAULT_stackTraceLimit,stackTraceShowFrames:LYRA_DEFAULT_stackTraceShowFrames}}static{this.ownedCollectionProperties=Object.freeze(["internalPatterns"])}static{this.styles=[LyraElement.styles,styles]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.parseTruncated}disconnectedCallback(){this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,this.resetCopyFeedback(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.resetCopyFeedback(),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}))}cancelCopyTimer(){const timer=this.copyTimer;this.copyTimer=void 0,timer&&timer.owner.clearTimeout(timer.handle)}resetCopyFeedback(){this.copyGeneration+=1,this.cancelCopyTimer(),this.copyStatus="rest"}willUpdate(changed){if(super.willUpdate(changed),changed.has("trace")||changed.has("internalPatterns")){const result=parseStackTrace(this.trace,{internalPatterns:this.internalPatterns});this.groups=result.groups,this.boundedSource=result.source,this.parseTruncated=result.truncated,this.expandedInternalRuns=new Set}}updated(changed){super.updated(changed),this.limitAnnouncementInitialized&&this.parseTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("stackTraceLimit")),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.parseTruncated}async copyTrace(){const text=this.trace,owner=this.isConnected?this.ownerDocument.defaultView:null,generation=++this.copyGeneration;this.cancelCopyTimer(),this.copyStatus="rest";const outcome=await writeClipboardText(owner,text);if(!(!owner||!this.isCurrentCopy(generation,owner))){if(!outcome.ok){this.showCopyStatus("error",generation,owner),this.emit("lr-error"),this.emit("lr-copy-error",outcome);return}this.showCopyStatus("success",generation,owner),this.emit("lr-copy",outcome)}}isCurrentCopy(generation,owner){return this.isConnected&&generation===this.copyGeneration&&this.ownerDocument.defaultView===owner}showCopyStatus(status,generation,owner){this.copyStatus=status,this.cancelCopyTimer();let handle=0;handle=owner.setTimeout(()=>{this.copyTimer?.owner!==owner||this.copyTimer.handle!==handle||this.copyTimer.generation!==generation||generation!==this.copyGeneration||!this.isConnected||this.ownerDocument.defaultView!==owner||(this.copyTimer=void 0,this.copyStatus="rest")},COPY_CONFIRM_MS),this.copyTimer={owner,handle,generation}}onFrameClick(frame){isSelectableFrame(frame)&&this.emit("lr-frame-select",{file:frame.file,line:frame.line,column:frame.column,raw:frame.raw})}toggleInternalRun(runKey){const next=new Set(this.expandedInternalRuns);next.has(runKey)?next.delete(runKey):next.add(runKey),this.expandedInternalRuns=next}renderFrame(frame){if(!isSelectableFrame(frame))return html`<span part="frame" data-raw dir="ltr">${frame.raw}</span>`;const location=`${frame.file}:${frame.line}${frame.column!==void 0?`:${frame.column}`:""}`;return html`
2
2
  <button part="frame" type="button" ?data-internal=${frame.internal} @click=${()=>this.onFrameClick(frame)}>
3
3
  ${frame.functionName?html`<span part="frame-function">${frame.functionName}</span>`:nothing}
4
4
  <span part="frame-location" dir="ltr">${location}</span>
@@ -17,7 +17,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
17
17
  <div
18
18
  part="base"
19
19
  role="group"
20
- aria-label=${this.localize("stackTraceLabel")}
20
+ aria-label=${hostAriaLabel(this)??this.localize("stackTraceLabel")}
21
21
  style=${(()=>{const safeMaxHeight=sanitizeCssLength(this.maxHeight);return safeMaxHeight?styleMap({"--lr-stack-trace-max-height":safeMaxHeight}):nothing})()}
22
22
  >
23
23
  ${this.copyable?html`<button part="copy-button" type="button" data-copy-status=${this.copyStatus} @click=${this.onCopy}>
@@ -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{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{AGENT_STATUS_VARIANTS}from"../../../internal/agent-status-variants.js";import"../../overlays/badge/badge.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./subagent-panel.styles.js";import{LYRA_DEFAULT_agentRunStatusCancelled,LYRA_DEFAULT_agentRunStatusCollecting,LYRA_DEFAULT_agentRunStatusDone,LYRA_DEFAULT_agentRunStatusIdle,LYRA_DEFAULT_agentRunStatusQueued,LYRA_DEFAULT_agentRunStatusWaitingApproval,LYRA_DEFAULT_agentRunStatusWaitingInput,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_subagentPanelCancelRun,LYRA_DEFAULT_subagentPanelEmpty,LYRA_DEFAULT_subagentPanelLabel,LYRA_DEFAULT_subagentPanelLimit,LYRA_DEFAULT_subagentPanelRetry,LYRA_DEFAULT_subagentPanelRetryRun}from"../../../internal/default-strings.generated.js";const ACTIVE=new Set(["queued","running","collecting","waiting-input","waiting-approval"]),MAX_RENDERED_RUNS=500,MAX_VISUAL_INDENT_DEPTH=12;class LyraSubagentPanel extends LyraElement{constructor(){super(...arguments),this.runs=[],this.selectedRunId=null,this.focusedId=null,this.orderedRunsCache={rows:[],truncated:!1},this.previousLimitText="",this.suppressNextLimitAnnouncement=!0,this.onKeyDown=e=>{const{rows}=this.orderedRunsCache;if(rows.length===0)return;const currentIndex=rows.findIndex(r=>r.run.id===this.focusedId);switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,currentIndex+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,currentIndex-1)]);break;case"Home":e.preventDefault(),this.focusRow(rows[0]);break;case"End":e.preventDefault(),this.focusRow(rows[rows.length-1]);break;case"Enter":case" ":{const target=e.target;if(target.getAttribute("role")!=="treeitem")return;const row=rows.find(candidate=>candidate.run.id===target.dataset.runId);if(!row)return;e.preventDefault(),this.emit("lr-run-activate",{runId:row.run.id,run:row.run});break}default:return}},this.onFocusIn=e=>{const runId=e.target?.closest('[role="treeitem"]')?.dataset.runId;runId&&(this.focusedId=runId)},this.renderRun=({run,depth,posInSet,setSize},firstId)=>{const selected=run.id===this.selectedRunId,progress=typeof run.progressRatio=="number"?finiteRange(run.progressRatio,0,0,1):null,runPart=selected?"run run-selected":"run",tabbable=this.focusedId===run.id||this.focusedId==null&&run.id===firstId;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{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{AGENT_STATUS_VARIANTS}from"../../../internal/agent-status-variants.js";import"../../overlays/badge/badge.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./subagent-panel.styles.js";import{LYRA_DEFAULT_agentRunStatusCancelled,LYRA_DEFAULT_agentRunStatusCollecting,LYRA_DEFAULT_agentRunStatusDone,LYRA_DEFAULT_agentRunStatusIdle,LYRA_DEFAULT_agentRunStatusQueued,LYRA_DEFAULT_agentRunStatusWaitingApproval,LYRA_DEFAULT_agentRunStatusWaitingInput,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_subagentPanelCancelRun,LYRA_DEFAULT_subagentPanelEmpty,LYRA_DEFAULT_subagentPanelLabel,LYRA_DEFAULT_subagentPanelLimit,LYRA_DEFAULT_subagentPanelRetry,LYRA_DEFAULT_subagentPanelRetryRun}from"../../../internal/default-strings.generated.js";const ACTIVE=new Set(["queued","running","collecting","waiting-input","waiting-approval"]),MAX_RENDERED_RUNS=500,MAX_VISUAL_INDENT_DEPTH=12;class LyraSubagentPanel extends LyraElement{constructor(){super(...arguments),this.runs=[],this.selectedRunId=null,this.focusedId=null,this.orderedRunsCache={rows:[],truncated:!1},this.previousLimitText="",this.suppressNextLimitAnnouncement=!0,this.onKeyDown=e=>{const{rows}=this.orderedRunsCache;if(rows.length===0)return;const currentIndex=rows.findIndex(r=>r.run.id===this.focusedId);switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,currentIndex+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,currentIndex-1)]);break;case"Home":e.preventDefault(),this.focusRow(rows[0]);break;case"End":e.preventDefault(),this.focusRow(rows[rows.length-1]);break;case"Enter":case" ":{const target=e.target;if(target.getAttribute("role")!=="treeitem")return;const row=rows.find(candidate=>candidate.run.id===target.dataset.runId);if(!row)return;e.preventDefault(),this.emit("lr-run-activate",{runId:row.run.id,run:row.run});break}default:return}},this.onFocusIn=e=>{const runId=e.target?.closest('[role="treeitem"]')?.dataset.runId;runId&&(this.focusedId=runId)},this.renderRun=({run,depth,posInSet,setSize},firstId)=>{const selected=run.id===this.selectedRunId,progress=typeof run.progressRatio=="number"?finiteRange(run.progressRatio,0,0,1):null,runPart=selected?"run run-selected":"run",tabbable=this.focusedId===run.id||this.focusedId==null&&run.id===firstId;return html`
2
2
  <li
3
3
  part=${runPart}
4
4
  data-run-id=${run.id}
@@ -46,7 +46,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
46
46
  </span>
47
47
  </div>
48
48
  </li>
49
- `}}static{this.defaultStrings={...super.defaultStrings,agentRunStatusCancelled:LYRA_DEFAULT_agentRunStatusCancelled,agentRunStatusCollecting:LYRA_DEFAULT_agentRunStatusCollecting,agentRunStatusDone:LYRA_DEFAULT_agentRunStatusDone,agentRunStatusIdle:LYRA_DEFAULT_agentRunStatusIdle,agentRunStatusQueued:LYRA_DEFAULT_agentRunStatusQueued,agentRunStatusWaitingApproval:LYRA_DEFAULT_agentRunStatusWaitingApproval,agentRunStatusWaitingInput:LYRA_DEFAULT_agentRunStatusWaitingInput,statusError:LYRA_DEFAULT_statusError,statusRunning:LYRA_DEFAULT_statusRunning,subagentPanelCancelRun:LYRA_DEFAULT_subagentPanelCancelRun,subagentPanelEmpty:LYRA_DEFAULT_subagentPanelEmpty,subagentPanelLabel:LYRA_DEFAULT_subagentPanelLabel,subagentPanelLimit:LYRA_DEFAULT_subagentPanelLimit,subagentPanelRetry:LYRA_DEFAULT_subagentPanelRetry,subagentPanelRetryRun:LYRA_DEFAULT_subagentPanelRetryRun}}static{this.ownedCollectionProperties=Object.freeze(["runs"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-run-activate","lr-cancel","lr-run-retry"])}syncAnnouncementSink(){this.isConnected&&this.announcementSink?.element.ownerDocument!==this.ownerDocument&&(this.announcementSink?.release(),this.announcementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&(this.suppressNextLimitAnnouncement=!0,this.requestUpdate())}disconnectedCallback(){super.disconnectedCallback(),this.announcementSink?.release(),this.announcementSink=void 0,this.suppressNextLimitAnnouncement=!0}statusLabel(status){switch(status){case"idle":return this.localize("agentRunStatusIdle");case"queued":return this.localize("agentRunStatusQueued");case"running":return this.localize("statusRunning");case"collecting":return this.localize("agentRunStatusCollecting");case"waiting-input":return this.localize("agentRunStatusWaitingInput");case"waiting-approval":return this.localize("agentRunStatusWaitingApproval");case"done":return this.localize("agentRunStatusDone");case"error":return this.localize("statusError");case"cancelled":return this.localize("agentRunStatusCancelled");default:return status}}ordered(){const normalized=[],byId=new Map;let truncated=!1;for(const run of this.runs)if(!(run.id.trim().length===0||byId.has(run.id))){if(normalized.length>=MAX_RENDERED_RUNS){truncated=!0;break}normalized.push(run),byId.set(run.id,run)}const byParent=new Map,roots=[],hasCyclicParentChain=run=>{const visited2=new Set([run.id]);let parentId=run.parentId;for(;parentId;){if(visited2.has(parentId))return!0;visited2.add(parentId),parentId=byId.get(parentId)?.parentId}return!1};for(const run of normalized){const parent=run.parentId&&byId.has(run.parentId)&&!hasCyclicParentChain(run)?run.parentId:"";byParent.set(parent,[...byParent.get(parent)??[],run]),parent||roots.push(run)}const rows=[],stack=[...roots].reverse().map((run,reverseIndex)=>({run,depth:0,posInSet:roots.length-reverseIndex,setSize:roots.length})),visited=new Set;for(;stack.length>0&&rows.length<MAX_RENDERED_RUNS;){const row=stack.pop();if(!row||visited.has(row.run.id))continue;visited.add(row.run.id),rows.push(row);const children=byParent.get(row.run.id)??[];for(let index=children.length-1;index>=0;index--){const child=children[index];child&&stack.push({run:child,depth:row.depth+1,posInSet:index+1,setSize:children.length})}}return{rows,truncated}}willUpdate(changed){if(super.willUpdate(changed),changed.has("runs")){this.orderedRunsCache=this.ordered();const rows=this.orderedRunsCache.rows,ids=new Set(rows.map(row=>row.run.id));(this.focusedId==null||!ids.has(this.focusedId))&&(this.focusedId=rows[0]?.run.id??null)}}updated(_changed){super.updated(_changed);const limitText=this.renderRoot.querySelector('[part="limit"]')?.textContent?.trim()??"";!this.suppressNextLimitAnnouncement&&limitText&&limitText!==this.previousLimitText&&this.announcementSink?.announce(limitText),this.previousLimitText=limitText,this.suppressNextLimitAnnouncement=!1}runElement(runId){const ownerCss=this.ownerDocument.defaultView?.CSS;if(typeof ownerCss?.escape=="function")try{const candidate=this.renderRoot.querySelector(`[data-run-id="${ownerCss.escape(runId)}"]`);if(candidate?.getAttribute("data-run-id")===runId)return candidate}catch{}return Array.from(this.renderRoot.querySelectorAll("[data-run-id]")).find(candidate=>candidate.getAttribute("data-run-id")===runId)??null}focusRow(row){row&&(this.focusedId=row.run.id,this.updateComplete.then(()=>{this.runElement(row.run.id)?.focus()}))}render(){const label=this.label==null?this.localize("subagentPanelLabel"):this.label,ordered=this.orderedRunsCache,firstId=ordered.rows[0]?.run.id;return html`
49
+ `}}static{this.defaultStrings={...super.defaultStrings,agentRunStatusCancelled:LYRA_DEFAULT_agentRunStatusCancelled,agentRunStatusCollecting:LYRA_DEFAULT_agentRunStatusCollecting,agentRunStatusDone:LYRA_DEFAULT_agentRunStatusDone,agentRunStatusIdle:LYRA_DEFAULT_agentRunStatusIdle,agentRunStatusQueued:LYRA_DEFAULT_agentRunStatusQueued,agentRunStatusWaitingApproval:LYRA_DEFAULT_agentRunStatusWaitingApproval,agentRunStatusWaitingInput:LYRA_DEFAULT_agentRunStatusWaitingInput,statusError:LYRA_DEFAULT_statusError,statusRunning:LYRA_DEFAULT_statusRunning,subagentPanelCancelRun:LYRA_DEFAULT_subagentPanelCancelRun,subagentPanelEmpty:LYRA_DEFAULT_subagentPanelEmpty,subagentPanelLabel:LYRA_DEFAULT_subagentPanelLabel,subagentPanelLimit:LYRA_DEFAULT_subagentPanelLimit,subagentPanelRetry:LYRA_DEFAULT_subagentPanelRetry,subagentPanelRetryRun:LYRA_DEFAULT_subagentPanelRetryRun}}static{this.ownedCollectionProperties=Object.freeze(["runs"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-run-activate","lr-cancel","lr-run-retry"])}syncAnnouncementSink(){this.isConnected&&this.announcementSink?.element.ownerDocument!==this.ownerDocument&&(this.announcementSink?.release(),this.announcementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&(this.suppressNextLimitAnnouncement=!0,this.requestUpdate())}disconnectedCallback(){super.disconnectedCallback(),this.announcementSink?.release(),this.announcementSink=void 0,this.suppressNextLimitAnnouncement=!0}statusLabel(status){switch(status){case"idle":return this.localize("agentRunStatusIdle");case"queued":return this.localize("agentRunStatusQueued");case"running":return this.localize("statusRunning");case"collecting":return this.localize("agentRunStatusCollecting");case"waiting-input":return this.localize("agentRunStatusWaitingInput");case"waiting-approval":return this.localize("agentRunStatusWaitingApproval");case"done":return this.localize("agentRunStatusDone");case"error":return this.localize("statusError");case"cancelled":return this.localize("agentRunStatusCancelled");default:return status}}ordered(){const normalized=[],byId=new Map;let truncated=!1;for(const run of this.runs)if(!(run.id.trim().length===0||byId.has(run.id))){if(normalized.length>=MAX_RENDERED_RUNS){truncated=!0;break}normalized.push(run),byId.set(run.id,run)}const byParent=new Map,roots=[],hasCyclicParentChain=run=>{const visited2=new Set([run.id]);let parentId=run.parentId;for(;parentId;){if(visited2.has(parentId))return!0;visited2.add(parentId),parentId=byId.get(parentId)?.parentId}return!1};for(const run of normalized){const parent=run.parentId&&byId.has(run.parentId)&&!hasCyclicParentChain(run)?run.parentId:"";byParent.set(parent,[...byParent.get(parent)??[],run]),parent||roots.push(run)}const rows=[],stack=[...roots].reverse().map((run,reverseIndex)=>({run,depth:0,posInSet:roots.length-reverseIndex,setSize:roots.length})),visited=new Set;for(;stack.length>0&&rows.length<MAX_RENDERED_RUNS;){const row=stack.pop();if(!row||visited.has(row.run.id))continue;visited.add(row.run.id),rows.push(row);const children=byParent.get(row.run.id)??[];for(let index=children.length-1;index>=0;index--){const child=children[index];child&&stack.push({run:child,depth:row.depth+1,posInSet:index+1,setSize:children.length})}}return{rows,truncated}}willUpdate(changed){if(super.willUpdate(changed),changed.has("runs")){this.orderedRunsCache=this.ordered();const rows=this.orderedRunsCache.rows,ids=new Set(rows.map(row=>row.run.id));(this.focusedId==null||!ids.has(this.focusedId))&&(this.focusedId=rows[0]?.run.id??null)}}updated(_changed){super.updated(_changed);const limitText=this.renderRoot.querySelector('[part="limit"]')?.textContent?.trim()??"";!this.suppressNextLimitAnnouncement&&limitText&&limitText!==this.previousLimitText&&this.announcementSink?.announce(limitText),this.previousLimitText=limitText,this.suppressNextLimitAnnouncement=!1}runElement(runId){const ownerCss=this.ownerDocument.defaultView?.CSS;if(typeof ownerCss?.escape=="function")try{const candidate=this.renderRoot.querySelector(`[data-run-id="${ownerCss.escape(runId)}"]`);if(candidate?.getAttribute("data-run-id")===runId)return candidate}catch{}return Array.from(this.renderRoot.querySelectorAll("[data-run-id]")).find(candidate=>candidate.getAttribute("data-run-id")===runId)??null}focusRow(row){row&&(this.focusedId=row.run.id,this.updateComplete.then(()=>{this.runElement(row.run.id)?.focus()}))}render(){const label=hostAriaLabel(this)??(this.label==null?this.localize("subagentPanelLabel"):this.label),ordered=this.orderedRunsCache,firstId=ordered.rows[0]?.run.id;return html`
50
50
  <div part="base">
51
51
  ${this.runs.length?html`<ul
52
52
  part="list"
@@ -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,svg,nothing}from"lit";import{repeat}from"lit/directives/repeat.js";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{activeElementIn}from"../../../internal/active-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{chevronIcon}from"../../../internal/icons.js";import{styles}from"./task-list.styles.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_item,LYRA_DEFAULT_items,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_taskListCompletedOfTotal,LYRA_DEFAULT_taskListLabel,LYRA_DEFAULT_taskListStepCompletedAnnounce,LYRA_DEFAULT_taskListStepFailedAnnounce,LYRA_DEFAULT_taskListStepStartedAnnounce,LYRA_DEFAULT_treeNodeMoved}from"../../../internal/default-strings.generated.js";function normalizeTaskStatus(value){return value==="running"||value==="success"||value==="error"?value:"pending"}const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function icon(paths){return 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{repeat}from"lit/directives/repeat.js";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{activeElementIn}from"../../../internal/active-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{chevronIcon}from"../../../internal/icons.js";import{styles}from"./task-list.styles.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_item,LYRA_DEFAULT_items,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_taskListCompletedOfTotal,LYRA_DEFAULT_taskListLabel,LYRA_DEFAULT_taskListStepCompletedAnnounce,LYRA_DEFAULT_taskListStepFailedAnnounce,LYRA_DEFAULT_taskListStepStartedAnnounce,LYRA_DEFAULT_treeNodeMoved}from"../../../internal/default-strings.generated.js";function normalizeTaskStatus(value){return value==="running"||value==="success"||value==="error"?value:"pending"}const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function icon(paths){return svg`
2
2
  <svg
3
3
  width="1em"
4
4
  height="1em"
@@ -34,7 +34,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
34
34
  ${canReorder?repeat(item.children,child=>child.id,child=>this.renderItem(child,1,item.id,canReorder)):item.children.map(child=>this.renderItem(child,1,item.id,canReorder))}
35
35
  </div>`:nothing}
36
36
  </div>
37
- `}render(){const label=this.label==null?this.localize("taskListLabel"):this.label,ariaLabel=label,total=this.items.length,completed=this.items.filter(item=>normalizeTaskStatus(item.status)==="success").length,canReorder=this.canReorderItems(),number=getNumberFormat(this.effectiveLocale),summary=this.localize("taskListCompletedOfTotal",void 0,{completed:number.format(completed),total:number.format(total)}),headingLevel=resolveHeadingLevel(this.headingLevel),header=this.collapsible?html`
37
+ `}render(){const label=this.label==null?this.localize("taskListLabel"):this.label,ariaLabel=hostAriaLabel(this)??label,total=this.items.length,completed=this.items.filter(item=>normalizeTaskStatus(item.status)==="success").length,canReorder=this.canReorderItems(),number=getNumberFormat(this.effectiveLocale),summary=this.localize("taskListCompletedOfTotal",void 0,{completed:number.format(completed),total:number.format(total)}),headingLevel=resolveHeadingLevel(this.headingLevel),header=this.collapsible?html`
38
38
  <button
39
39
  part="header"
40
40
  type="button"
@@ -7,7 +7,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
7
7
  <path d="M19 10v2a7 7 0 0 1-14 0v-2"></path>
8
8
  <line x1="12" y1="19" x2="12" y2="23"></line>
9
9
  <line x1="8" y1="23" x2="16" y2="23"></line>
10
- `)}function pulseGlyph(){return icon(svg`<circle cx="12" cy="12" r="6"></circle>`)}class LyraPushToTalk extends LyraElement{constructor(){super(...arguments),this._mode="hold",this.timesliceMs=0,this.mimeType="",this.deviceId="",this.levelEvents=!1,this.maxDurationMs=0,this.showTimer=!0,this.disabled=!1,this.elapsedMs=0,this.captureSupported=!1,this._state="idle",this._stream=null,this.chunks=[],this.recordingStartedAt=0,this.cancelRequested=!1,this.recorderStopRequested=!1,this.recorderFailed=!1,this.holdGestureGeneration=0,this.onPointerDown=e=>{if(!(this.mode!=="hold"||this.disabled)){e.preventDefault();try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}this.holdGesture||(this.holdGesture={generation:++this.holdGestureGeneration,source:"pointer",pointerId:e.pointerId},this.start())}},this.onPointerUp=event=>{this.holdGesture?.source!=="pointer"||this.holdGesture.pointerId!==event.pointerId||this.releaseHoldGesture()},this.onPointerCancel=event=>{this.holdGesture?.source!=="pointer"||this.holdGesture.pointerId!==event.pointerId||this.releaseHoldGesture()},this.onKeyDown=e=>{if(!this.disabled){if(e.key==="Escape"){e.preventDefault(),this.cancel();return}e.key!=="Enter"&&e.key!==" "||this.mode==="hold"&&(e.repeat||(e.preventDefault(),!this.holdGesture&&(this.holdGesture={generation:++this.holdGestureGeneration,source:"keyboard",key:e.key},this.start())))}},this.onKeyUp=e=>{e.key!=="Enter"&&e.key!==" "||this.holdGesture?.source!=="keyboard"||this.holdGesture.key!==e.key||this.releaseHoldGesture()},this.onBlur=()=>{this.releaseHoldGesture()},this.onClick=()=>{this.mode!=="toggle"||this.disabled||(this._state==="recording"?this.stop():this.start())}}static{this.defaultStrings={...super.defaultStrings,pushToTalkCancelled:LYRA_DEFAULT_pushToTalkCancelled,pushToTalkDenied:LYRA_DEFAULT_pushToTalkDenied,pushToTalkError:LYRA_DEFAULT_pushToTalkError,pushToTalkHold:LYRA_DEFAULT_pushToTalkHold,pushToTalkRequesting:LYRA_DEFAULT_pushToTalkRequesting,pushToTalkStart:LYRA_DEFAULT_pushToTalkStart,pushToTalkStarted:LYRA_DEFAULT_pushToTalkStarted,pushToTalkStop:LYRA_DEFAULT_pushToTalkStop,pushToTalkStopped:LYRA_DEFAULT_pushToTalkStopped,pushToTalkUnsupported:LYRA_DEFAULT_pushToTalkUnsupported}}static{this.styles=[LyraElement.styles,styles]}get mode(){return this._mode}set mode(next){const normalized=PUSH_TO_TALK_MODE.normalize(next),old=this._mode;old!==normalized&&(this._mode=normalized,this.requestUpdate("mode",old))}get state(){return this._state}get stream(){return this._stream}get ownerWindow(){return this.ownerDocument?.defaultView??null}syncCaptureSupport(){this.captureSupported=isPushToTalkSupported(this.ownerWindow)}connectedCallback(){super.connectedCallback(),this.requestUpdate("mode",void 0),this.hasAttribute("data-state")||this.setAttribute("data-state",this._state)}disconnectedCallback(){this.releaseHoldGesture(),(this._state==="recording"||this._state==="requesting")&&this.cancel(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.syncCaptureSupport()}willUpdate(changed){super.willUpdate(changed),this.hasUpdated?this.syncCaptureSupport():this.seedFirstRenderState(()=>this.syncCaptureSupport()),changed.has("mode")&&this.holdGesture&&this.releaseHoldGesture(),changed.has("disabled")&&this.disabled&&(this.releaseHoldGesture(),(this._state==="recording"||this._state==="requesting")&&this.cancel());const owner=this.captureWindow;this._state!=="recording"||!owner||(changed.has("showTimer")&&this.syncElapsedTimer(owner),changed.has("maxDurationMs")&&this.syncMaxDurationTimer(owner),changed.has("levelEvents")&&this.syncLevelMeter(owner))}focus(options){this.trigger?.focus(options)}blur(){this.trigger?.blur()}click(){this.disabled||!isPushToTalkSupported(this.ownerWindow)||(this.mode==="toggle"?this.trigger?.click():this._state==="recording"?this.stop():this.start())}resolveMimeType(owner){if(this.mimeType)return this.mimeType;for(const candidate of CANDIDATE_MIME_TYPES)if(owner.MediaRecorder.isTypeSupported?.(candidate))return candidate;return""}setState(next){if(this._state===next)return;const old=this._state;this._state=next,this.setAttribute("data-state",next),this.requestUpdate("state",old),this.emit("lr-record-state-change",{state:next})}announce(text){const region=this.liveRegion;region&&(region.mode="polite",region.announce(text,{force:!0}))}async start(){if(this.disabled||this._state==="recording"||this._state==="requesting")return!1;const owner=this.ownerWindow;if(!isPushToTalkSupported(owner))return!1;this.captureWindow=owner,this.cancelRequested=!1,this.setState("requesting");try{const additionalConstraints={...this.audioConstraints??{}};delete additionalConstraints.deviceId;const constraints={audio:{...additionalConstraints,...this.deviceId?{deviceId:{exact:this.deviceId}}:{}}},stream=await owner.navigator.mediaDevices.getUserMedia(constraints);if(this.disabled||!this.isConnected||this.cancelRequested||this.captureWindow!==owner||this.ownerWindow!==owner){for(const track of stream.getTracks())track.stop();return this.cancelRequested=!1,this.captureWindow===owner&&(this.captureWindow=void 0),this.setState("idle"),this.emit("lr-record-cancel",null),this.announce(this.localize("pushToTalkCancelled")),!1}this._stream=stream;const mimeType=this.resolveMimeType(owner),recorder=new owner.MediaRecorder(stream,mimeType?{mimeType}:void 0);this.recorder=recorder,this.recorderStopRequested=!1,this.recorderFailed=!1,this.chunks=[];const timeslice=this.timesliceMs>0?finiteDuration(this.timesliceMs,MAX_TIMEOUT_MS,1,MAX_TIMEOUT_MS):void 0,emitChunksForTake=timeslice!==void 0;return recorder.ondataavailable=e=>{this.recorder!==recorder||this.captureWindow!==owner||!e.data||e.data.size===0||(this.chunks.push(e.data),emitChunksForTake&&this.emit("lr-record-chunk",{blob:e.data}))},recorder.onstop=()=>this.finalizeStop(recorder,owner),recorder.onerror=event=>this.failRecorder(recorder,owner,event.error??new Error("MediaRecorder failed")),recorder.start(timeslice),this.recordingStartedAt=owner.performance.now(),this.elapsedMs=0,this.setState("recording"),this.emit("lr-record-start",{stream}),this.announce(this.localize("pushToTalkStarted")),this.syncLevelMeter(owner),this.syncMaxDurationTimer(owner,!0),this.syncElapsedTimer(owner,!0),!0}catch(err){if(this.teardownStream(),this.cancelRequested||this.disabled||!this.isConnected||this.ownerWindow!==owner)return this.cancelRequested=!1,this.setState("idle"),this.emit("lr-record-cancel",null),this.isConnected&&this.announce(this.localize("pushToTalkCancelled")),!1;const denied=typeof err=="object"&&err!==null&&"name"in err&&err.name==="NotAllowedError";return this.setState(denied?"denied":"error"),this.emit("lr-record-error",{error:err}),this.announce(this.localize(denied?"pushToTalkDenied":"pushToTalkError")),!1}}stop(){this.requestRecorderStop(!1)}cancel(){if(this._state==="requesting"){this.cancelRequested=!0;return}this._state==="recording"&&this.requestRecorderStop(!0)}requestRecorderStop(cancelled){if(this._state!=="recording"||(cancelled&&(this.cancelRequested=!0),this.recorderStopRequested))return;this.recorderStopRequested=!0,this.stopRuntimeLoops();const recorder=this.recorder;recorder&&recorder.state!=="inactive"&&recorder.stop()}finalizeStop(recorder,owner){if(this.recorder!==recorder||this.captureWindow!==owner||this.recorderFailed)return;const cancelled=this.cancelRequested,durationMs=Math.round(owner.performance.now()-this.recordingStartedAt),mimeType=recorder.mimeType||this.resolveMimeType(owner)||"audio/webm",blob=new owner.Blob(this.chunks,{type:mimeType});this.teardownStream(),this.setState("idle"),cancelled?(this.emit("lr-record-cancel",null),this.announce(this.localize("pushToTalkCancelled"))):(this.emit("lr-record-stop",{blob,durationMs}),this.announce(this.localize("pushToTalkStopped"))),this.cancelRequested=!1}failRecorder(recorder,owner,error){this.recorder!==recorder||this.captureWindow!==owner||this.recorderFailed||(this.recorderFailed=!0,this.cancelRequested=!1,this.teardownStream(),this.setState("error"),this.emit("lr-record-error",{error}),this.announce(this.localize("pushToTalkError")))}teardownStream(){for(const track of this._stream?.getTracks()??[])track.stop();this._stream=null,this.recorder&&(this.recorder.ondataavailable=null,this.recorder.onstop=null,this.recorder.onerror=null),this.recorder=void 0,this.recorderStopRequested=!1,this.chunks=[],this.stopRuntimeLoops(),this.captureWindow=void 0}stopRuntimeLoops(){this.tickTimer&&this.tickTimer.owner.clearInterval(this.tickTimer.handle),this.tickTimer=void 0,this.maxDurationTimer&&this.maxDurationTimer.owner.clearTimeout(this.maxDurationTimer.handle),this.maxDurationTimer=void 0,this.stopLevelMeter()}syncElapsedTimer(owner,initial=!1){if(this.tickTimer&&this.tickTimer.owner.clearInterval(this.tickTimer.handle),this.tickTimer=void 0,!this.showTimer||this._state!=="recording"||this.captureWindow!==owner)return;initial||(this.elapsedMs=owner.performance.now()-this.recordingStartedAt);const timer={owner,handle:0};timer.handle=owner.setInterval(()=>{this.tickTimer!==timer||this.captureWindow!==owner||this._state!=="recording"||(this.elapsedMs=owner.performance.now()-this.recordingStartedAt)},1e3),this.tickTimer=timer}syncMaxDurationTimer(owner,initial=!1){if(this.maxDurationTimer&&this.maxDurationTimer.owner.clearTimeout(this.maxDurationTimer.handle),this.maxDurationTimer=void 0,this.maxDurationMs<=0||this._state!=="recording"||this.captureWindow!==owner)return;const duration=finiteDuration(this.maxDurationMs,MAX_TIMEOUT_MS,1,MAX_TIMEOUT_MS),elapsed=initial?0:Math.max(0,owner.performance.now()-this.recordingStartedAt),timer={owner,handle:0};timer.handle=owner.setTimeout(()=>{this.maxDurationTimer!==timer||this.captureWindow!==owner||(this.maxDurationTimer=void 0,this.stop())},Math.max(0,duration-elapsed)),this.maxDurationTimer=timer}syncLevelMeter(owner){if(!this.levelEvents||this._state!=="recording"||this.captureWindow!==owner||!this._stream){this.stopLevelMeter();return}this.audioCtx||this.startLevelMeter(this._stream,owner)}startLevelMeter(stream,owner){const AudioCtxCtor=owner.AudioContext??owner.webkitAudioContext;if(!AudioCtxCtor)return;const audioCtx=new AudioCtxCtor;this.audioCtx=audioCtx;const source=audioCtx.createMediaStreamSource(stream);this.analyser=audioCtx.createAnalyser(),this.analyser.fftSize=256,source.connect(this.analyser),this.levelData=new owner.Uint8Array(this.analyser.frequencyBinCount),this.sampleLevel(owner)}sampleLevel(owner){if(!this.analyser||!this.levelData||this._state!=="recording"||this.captureWindow!==owner)return;this.analyser.getByteTimeDomainData(this.levelData);let sumSquares=0;for(const v of this.levelData){const norm=(v-128)/128;sumSquares+=norm*norm}const rms=Math.sqrt(sumSquares/this.levelData.length);this.emit("lr-level",{level:Math.min(1,rms)});const request={owner,handle:0};request.handle=owner.requestAnimationFrame(()=>{this.levelFrame===request&&(this.levelFrame=void 0,!(!this.isConnected||this.ownerWindow!==owner)&&this.sampleLevel(owner))}),this.levelFrame=request}stopLevelMeter(){this.levelFrame&&this.levelFrame.owner.cancelAnimationFrame(this.levelFrame.handle),this.levelFrame=void 0,this.analyser=void 0,this.levelData=void 0,this.audioCtx&&(this.audioCtx.close().catch(()=>{}),this.audioCtx=void 0)}formatElapsed(ms){const totalSeconds=Math.floor(ms/1e3),minutes=Math.floor(totalSeconds/60),seconds=totalSeconds%60,locale=this.effectiveLocale,minuteText=getNumberFormat(locale,{useGrouping:!1}).format(minutes),secondText=getNumberFormat(locale,{minimumIntegerDigits:2,useGrouping:!1}).format(seconds);return`${minuteText}:${secondText}`}releaseHoldGesture(){this.holdGesture&&(this.holdGesture=void 0,this.holdGestureGeneration+=1,this._state==="requesting"?this.cancel():this.stop())}get triggerLabel(){const override=this.getAttribute("aria-label");return override||(this.mode==="hold"?this.localize("pushToTalkHold"):this._state==="recording"?this.localize("pushToTalkStop"):this.localize("pushToTalkStart"))}get statusText(){if(!this.captureSupported)return this.localize("pushToTalkUnsupported");switch(this._state){case"requesting":return this.localize("pushToTalkRequesting");case"denied":return this.localize("pushToTalkDenied");case"error":return this.localize("pushToTalkError");default:return""}}render(){const supported=this.captureSupported,recording=this._state==="recording",status=this.statusText;return html`
10
+ `)}function pulseGlyph(){return icon(svg`<circle cx="12" cy="12" r="6"></circle>`)}class LyraPushToTalk extends LyraElement{constructor(){super(...arguments),this._mode="hold",this.timesliceMs=0,this.mimeType="",this.deviceId="",this.levelEvents=!1,this.maxDurationMs=0,this.showTimer=!0,this.disabled=!1,this.elapsedMs=0,this.captureSupported=!1,this._state="idle",this._stream=null,this.chunks=[],this.recordingStartedAt=0,this.cancelRequested=!1,this.recorderStopRequested=!1,this.recorderFailed=!1,this.holdGestureGeneration=0,this.onPointerDown=e=>{if(!(this.mode!=="hold"||this.disabled)){e.preventDefault();try{e.currentTarget.setPointerCapture(e.pointerId)}catch{}this.holdGesture||(this.holdGesture={generation:++this.holdGestureGeneration,source:"pointer",pointerId:e.pointerId},this.start())}},this.onPointerUp=event=>{this.holdGesture?.source!=="pointer"||this.holdGesture.pointerId!==event.pointerId||this.releaseHoldGesture()},this.onPointerCancel=event=>{this.holdGesture?.source!=="pointer"||this.holdGesture.pointerId!==event.pointerId||this.releaseHoldGesture()},this.onKeyDown=e=>{if(!this.disabled){if(e.key==="Escape"){e.preventDefault(),this.cancel();return}e.key!=="Enter"&&e.key!==" "||this.mode==="hold"&&(e.repeat||(e.preventDefault(),!this.holdGesture&&(this.holdGesture={generation:++this.holdGestureGeneration,source:"keyboard",key:e.key},this.start())))}},this.onKeyUp=e=>{e.key!=="Enter"&&e.key!==" "||this.holdGesture?.source!=="keyboard"||this.holdGesture.key!==e.key||this.releaseHoldGesture()},this.onBlur=()=>{this.releaseHoldGesture()},this.onClick=()=>{this.mode!=="toggle"||this.disabled||(this._state==="recording"?this.stop():this.start())}}static{this.defaultStrings={...super.defaultStrings,pushToTalkCancelled:LYRA_DEFAULT_pushToTalkCancelled,pushToTalkDenied:LYRA_DEFAULT_pushToTalkDenied,pushToTalkError:LYRA_DEFAULT_pushToTalkError,pushToTalkHold:LYRA_DEFAULT_pushToTalkHold,pushToTalkRequesting:LYRA_DEFAULT_pushToTalkRequesting,pushToTalkStart:LYRA_DEFAULT_pushToTalkStart,pushToTalkStarted:LYRA_DEFAULT_pushToTalkStarted,pushToTalkStop:LYRA_DEFAULT_pushToTalkStop,pushToTalkStopped:LYRA_DEFAULT_pushToTalkStopped,pushToTalkUnsupported:LYRA_DEFAULT_pushToTalkUnsupported}}static{this.styles=[LyraElement.styles,styles]}get mode(){return this._mode}set mode(next){const normalized=PUSH_TO_TALK_MODE.normalize(next),old=this._mode;old!==normalized&&(this._mode=normalized,this.requestUpdate("mode",old))}get state(){return this._state}get stream(){return this._stream}get ownerWindow(){return this.ownerDocument?.defaultView??null}syncCaptureSupport(){this.captureSupported=isPushToTalkSupported(this.ownerWindow)}connectedCallback(){super.connectedCallback(),this.requestUpdate("mode",void 0),this.hasAttribute("data-state")||this.setAttribute("data-state",this._state)}disconnectedCallback(){this.releaseHoldGesture(),(this._state==="recording"||this._state==="requesting")&&this.cancel(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.syncCaptureSupport()}willUpdate(changed){super.willUpdate(changed),this.hasUpdated?this.syncCaptureSupport():this.seedFirstRenderState(()=>this.syncCaptureSupport()),changed.has("mode")&&this.holdGesture&&this.releaseHoldGesture(),changed.has("disabled")&&this.disabled&&(this.releaseHoldGesture(),(this._state==="recording"||this._state==="requesting")&&this.cancel());const owner=this.captureWindow;this._state!=="recording"||!owner||(changed.has("showTimer")&&this.syncElapsedTimer(owner),changed.has("maxDurationMs")&&this.syncMaxDurationTimer(owner),changed.has("levelEvents")&&this.syncLevelMeter(owner))}focus(options){this.trigger?.focus(options)}blur(){this.trigger?.blur()}click(){this.disabled||!isPushToTalkSupported(this.ownerWindow)||(this.mode==="toggle"?this.trigger?.click():this._state==="recording"?this.stop():this.start())}resolveMimeType(owner){if(this.mimeType)return this.mimeType;for(const candidate of CANDIDATE_MIME_TYPES)if(owner.MediaRecorder.isTypeSupported?.(candidate))return candidate;return""}setState(next){if(this._state===next)return;const old=this._state;this._state=next,this.setAttribute("data-state",next),this.requestUpdate("state",old),this.emit("lr-record-state-change",{state:next})}announce(text){const region=this.liveRegion;region&&(region.mode="polite",region.announce(text,{force:!0}))}async start(){if(this.disabled||this._state==="recording"||this._state==="requesting")return!1;const owner=this.ownerWindow;if(!isPushToTalkSupported(owner))return!1;this.captureWindow=owner,this.cancelRequested=!1,this.setState("requesting");try{const additionalConstraints={...this.audioConstraints??{}};delete additionalConstraints.deviceId;const constraints={audio:{...additionalConstraints,...this.deviceId?{deviceId:{exact:this.deviceId}}:{}}},stream=await owner.navigator.mediaDevices.getUserMedia(constraints);if(this.disabled||!this.isConnected||this.cancelRequested||this.captureWindow!==owner||this.ownerWindow!==owner){for(const track of stream.getTracks())track.stop();return this.cancelRequested=!1,this.captureWindow===owner&&(this.captureWindow=void 0),this.setState("idle"),this.emit("lr-record-cancel",null),this.announce(this.localize("pushToTalkCancelled")),!1}this._stream=stream;const mimeType=this.resolveMimeType(owner),recorder=new owner.MediaRecorder(stream,mimeType?{mimeType}:void 0);this.recorder=recorder,this.recorderStopRequested=!1,this.recorderFailed=!1,this.chunks=[];const timeslice=this.timesliceMs>0?finiteDuration(this.timesliceMs,MAX_TIMEOUT_MS,1,MAX_TIMEOUT_MS):void 0,emitChunksForTake=timeslice!==void 0;return recorder.ondataavailable=e=>{this.recorder!==recorder||this.captureWindow!==owner||!e.data||e.data.size===0||(this.chunks.push(e.data),emitChunksForTake&&this.emit("lr-record-chunk",{blob:e.data}))},recorder.onstop=()=>this.finalizeStop(recorder,owner),recorder.onerror=event=>this.failRecorder(recorder,owner,event.error??new Error("MediaRecorder failed")),recorder.start(timeslice),this.recordingStartedAt=owner.performance.now(),this.elapsedMs=0,this.setState("recording"),this.emit("lr-record-start",{stream}),this.announce(this.localize("pushToTalkStarted")),this.syncLevelMeter(owner),this.syncMaxDurationTimer(owner,!0),this.syncElapsedTimer(owner,!0),!0}catch(err){if(this.teardownStream(),this.cancelRequested||this.disabled||!this.isConnected||this.ownerWindow!==owner)return this.cancelRequested=!1,this.setState("idle"),this.emit("lr-record-cancel",null),this.isConnected&&this.announce(this.localize("pushToTalkCancelled")),!1;const denied=typeof err=="object"&&err!==null&&"name"in err&&err.name==="NotAllowedError";return this.setState(denied?"denied":"error"),this.emit("lr-record-error",{error:err}),this.announce(this.localize(denied?"pushToTalkDenied":"pushToTalkError")),!1}}stop(){this.requestRecorderStop(!1)}cancel(){if(this._state==="requesting"){this.cancelRequested=!0;return}this._state==="recording"&&this.requestRecorderStop(!0)}requestRecorderStop(cancelled){if(this._state!=="recording"||(cancelled&&(this.cancelRequested=!0),this.recorderStopRequested))return;this.recorderStopRequested=!0,this.stopRuntimeLoops();const recorder=this.recorder;recorder&&recorder.state!=="inactive"&&recorder.stop()}finalizeStop(recorder,owner){if(this.recorder!==recorder||this.captureWindow!==owner||this.recorderFailed)return;const cancelled=this.cancelRequested,durationMs=Math.round(owner.performance.now()-this.recordingStartedAt),mimeType=recorder.mimeType||this.resolveMimeType(owner)||"audio/webm",blob=new owner.Blob(this.chunks,{type:mimeType});this.teardownStream(),this.setState("idle"),cancelled?(this.emit("lr-record-cancel",null),this.announce(this.localize("pushToTalkCancelled"))):(this.emit("lr-record-stop",{blob,durationMs}),this.announce(this.localize("pushToTalkStopped"))),this.cancelRequested=!1}failRecorder(recorder,owner,error){this.recorder!==recorder||this.captureWindow!==owner||this.recorderFailed||this.cancelRequested||(this.recorderFailed=!0,this.cancelRequested=!1,this.teardownStream(),this.setState("error"),this.emit("lr-record-error",{error}),this.announce(this.localize("pushToTalkError")))}teardownStream(){for(const track of this._stream?.getTracks()??[])track.stop();this._stream=null,this.recorder&&(this.recorder.ondataavailable=null,this.recorder.onstop=null,this.recorder.onerror=null),this.recorder=void 0,this.recorderStopRequested=!1,this.chunks=[],this.stopRuntimeLoops(),this.captureWindow=void 0}stopRuntimeLoops(){this.tickTimer&&this.tickTimer.owner.clearInterval(this.tickTimer.handle),this.tickTimer=void 0,this.maxDurationTimer&&this.maxDurationTimer.owner.clearTimeout(this.maxDurationTimer.handle),this.maxDurationTimer=void 0,this.stopLevelMeter()}syncElapsedTimer(owner,initial=!1){if(this.tickTimer&&this.tickTimer.owner.clearInterval(this.tickTimer.handle),this.tickTimer=void 0,!this.showTimer||this._state!=="recording"||this.captureWindow!==owner)return;initial||(this.elapsedMs=owner.performance.now()-this.recordingStartedAt);const timer={owner,handle:0};timer.handle=owner.setInterval(()=>{this.tickTimer!==timer||this.captureWindow!==owner||this._state!=="recording"||(this.elapsedMs=owner.performance.now()-this.recordingStartedAt)},1e3),this.tickTimer=timer}syncMaxDurationTimer(owner,initial=!1){if(this.maxDurationTimer&&this.maxDurationTimer.owner.clearTimeout(this.maxDurationTimer.handle),this.maxDurationTimer=void 0,this.maxDurationMs<=0||this._state!=="recording"||this.captureWindow!==owner)return;const duration=finiteDuration(this.maxDurationMs,MAX_TIMEOUT_MS,1,MAX_TIMEOUT_MS),elapsed=initial?0:Math.max(0,owner.performance.now()-this.recordingStartedAt),timer={owner,handle:0};timer.handle=owner.setTimeout(()=>{this.maxDurationTimer!==timer||this.captureWindow!==owner||(this.maxDurationTimer=void 0,this.stop())},Math.max(0,duration-elapsed)),this.maxDurationTimer=timer}syncLevelMeter(owner){if(!this.levelEvents||this._state!=="recording"||this.captureWindow!==owner||!this._stream){this.stopLevelMeter();return}this.audioCtx||this.startLevelMeter(this._stream,owner)}startLevelMeter(stream,owner){const AudioCtxCtor=owner.AudioContext??owner.webkitAudioContext;if(!AudioCtxCtor)return;const audioCtx=new AudioCtxCtor;this.audioCtx=audioCtx;const source=audioCtx.createMediaStreamSource(stream);this.analyser=audioCtx.createAnalyser(),this.analyser.fftSize=256,source.connect(this.analyser),this.levelData=new owner.Uint8Array(this.analyser.frequencyBinCount),this.sampleLevel(owner)}sampleLevel(owner){if(!this.analyser||!this.levelData||this._state!=="recording"||this.captureWindow!==owner)return;this.analyser.getByteTimeDomainData(this.levelData);let sumSquares=0;for(const v of this.levelData){const norm=(v-128)/128;sumSquares+=norm*norm}const rms=Math.sqrt(sumSquares/this.levelData.length);this.emit("lr-level",{level:Math.min(1,rms)});const request={owner,handle:0};request.handle=owner.requestAnimationFrame(()=>{this.levelFrame===request&&(this.levelFrame=void 0,!(!this.isConnected||this.ownerWindow!==owner)&&this.sampleLevel(owner))}),this.levelFrame=request}stopLevelMeter(){this.levelFrame&&this.levelFrame.owner.cancelAnimationFrame(this.levelFrame.handle),this.levelFrame=void 0,this.analyser=void 0,this.levelData=void 0,this.audioCtx&&(this.audioCtx.close().catch(()=>{}),this.audioCtx=void 0)}formatElapsed(ms){const totalSeconds=Math.floor(ms/1e3),minutes=Math.floor(totalSeconds/60),seconds=totalSeconds%60,locale=this.effectiveLocale,minuteText=getNumberFormat(locale,{useGrouping:!1}).format(minutes),secondText=getNumberFormat(locale,{minimumIntegerDigits:2,useGrouping:!1}).format(seconds);return`${minuteText}:${secondText}`}releaseHoldGesture(){this.holdGesture&&(this.holdGesture=void 0,this.holdGestureGeneration+=1,this._state==="requesting"?this.cancel():this.stop())}get triggerLabel(){const override=this.getAttribute("aria-label");return override||(this.mode==="hold"?this.localize("pushToTalkHold"):this._state==="recording"?this.localize("pushToTalkStop"):this.localize("pushToTalkStart"))}get statusText(){if(!this.captureSupported)return this.localize("pushToTalkUnsupported");switch(this._state){case"requesting":return this.localize("pushToTalkRequesting");case"denied":return this.localize("pushToTalkDenied");case"error":return this.localize("pushToTalkError");default:return""}}render(){const supported=this.captureSupported,recording=this._state==="recording",status=this.statusText;return html`
11
11
  <button
12
12
  part="trigger"
13
13
  type="button"
@@ -1,2 +1,2 @@
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}from"lit";import{property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{formatISO,monthMatrix,parseISO,resolveFirstDayOfWeek,weekdayLabels}from"../../forms/date-picker/calendar-core.js";import{sanitizeCssColor}from"../../../internal/safe-css.js";import{styles}from"./calendar.styles.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{LYRA_DEFAULT_calendarEmpty,LYRA_DEFAULT_calendarLabel,LYRA_DEFAULT_calendarNextMonth,LYRA_DEFAULT_calendarPreviousMonth}from"../../../internal/default-strings.generated.js";const monthStart=date=>new Date(date.getFullYear(),date.getMonth(),1);class LyraCalendar extends LyraElement{constructor(){super(...arguments),this.events=[],this.value="",this.viewDate=formatISO(new Date).slice(0,7)+"-01",this._view="month",this.firstDayOfWeek="auto",this.accessibleLabel="",this.focusedDate=""}static{this.defaultStrings={...super.defaultStrings,calendarEmpty:LYRA_DEFAULT_calendarEmpty,calendarLabel:LYRA_DEFAULT_calendarLabel,calendarNextMonth:LYRA_DEFAULT_calendarNextMonth,calendarPreviousMonth:LYRA_DEFAULT_calendarPreviousMonth}}static{this.ownedCollectionProperties=Object.freeze(["events"])}static{this.identityCollectionProperties=Object.freeze(["events"])}static{this.styles=[LyraElement.styles,styles]}get view(){return this._view}set view(value){const normalized=value==="agenda"?"agenda":"month",previous=this._view;if(previous===normalized){value!==normalized&&this.requestUpdate("view",previous);return}this._view=normalized,this.requestUpdate("view",previous)}get viewStart(){const parsed=new Date(`${this.viewDate}T00:00:00`);return Number.isNaN(parsed.valueOf())?monthStart(new Date):monthStart(parsed)}get normalizedFirstDayOfWeek(){return resolveFirstDayOfWeek(this.firstDayOfWeek,this.effectiveLocale)}changeMonth(delta){const next=new Date(this.viewStart.getFullYear(),this.viewStart.getMonth()+delta,1);this.viewDate=formatISO(next),this.emit("lr-view-change",{viewDate:this.viewDate})}selectDate(date){this.value=date,this.focusedDate=date,this.emit("lr-date-select",{date})}bucketEventsByDate(){const buckets=new Map;for(const event of this.events){const bucket=buckets.get(event.date);bucket?bucket.push(event):buckets.set(event.date,[event])}return buckets}weeks(){const start=this.viewStart;return monthMatrix(start.getFullYear(),start.getMonth(),this.normalizedFirstDayOfWeek)}gridBounds(weeks){return[weeks[0][0],weeks[weeks.length-1][6]]}onDayKeyDown(event,date){let delta=0;if(event.key==="ArrowLeft")delta=this.effectiveDirection==="rtl"?1:-1;else if(event.key==="ArrowRight")delta=this.effectiveDirection==="rtl"?-1:1;else if(event.key==="ArrowUp")delta=-7;else if(event.key==="ArrowDown")delta=7;else if(event.key==="Enter"||event.key===" "){event.preventDefault(),this.selectDate(formatISO(date));return}else return;event.preventDefault();const next=new Date(date);next.setDate(next.getDate()+delta);const[gridFirst,gridLast]=this.gridBounds(this.weeks());(next<gridFirst||next>gridLast)&&(this.viewDate=formatISO(monthStart(next)),this.emit("lr-view-change",{viewDate:this.viewDate})),this.focusedDate=formatISO(next),queueMicrotask(()=>this.renderRoot.querySelector(`[data-date="${this.focusedDate}"]`)?.focus())}weekdays(){return weekdayLabels(this.normalizedFirstDayOfWeek,"short",this.effectiveLocale)}updated(changed){super.updated(changed),this.getAttribute("view")!==this._view&&this.setAttribute("view",this._view)}render(){const start=this.viewStart,weeks=this.weeks(),monthTitle=getDateTimeFormat(this.effectiveLocale,{month:"long",year:"numeric"}).format(start),today=formatISO(new Date),label=this.accessibleLabel||this.localize("calendarLabel"),dayLabelFmt=getDateTimeFormat(this.effectiveLocale,{dateStyle:"full"}),agendaDateFmt=getDateTimeFormat(this.effectiveLocale,{dateStyle:"medium"}),dayNumberFmt=getNumberFormat(this.effectiveLocale),agenda=this.events.filter(event=>event.date.startsWith(formatISO(start).slice(0,7))).sort((a,b)=>a.date<b.date?-1:a.date>b.date?1:0),eventsByDate=this.view==="month"?this.bucketEventsByDate():void 0,[gridFirst,gridLast]=this.gridBounds(weeks),rawAnchor=this.focusedDate||this.value||today,rawAnchorDate=parseISO(rawAnchor),anchor=rawAnchorDate&&rawAnchorDate>=gridFirst&&rawAnchorDate<=gridLast?rawAnchor:formatISO(start);return html`<section aria-label=${label}><header part="header navigation"><button part="nav previous-button" type="button" aria-label=${this.localize("calendarPreviousMonth")} @click=${()=>this.changeMonth(-1)}><span part="nav-glyph" aria-hidden="true">‹</span></button><span part="title">${monthTitle}</span><button part="nav next-button" type="button" aria-label=${this.localize("calendarNextMonth")} @click=${()=>this.changeMonth(1)}><span part="nav-glyph" aria-hidden="true">›</span></button></header>
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}from"lit";import{property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{formatISO,monthMatrix,parseISO,resolveFirstDayOfWeek,weekdayLabels}from"../../forms/date-picker/calendar-core.js";import{sanitizeCssColor}from"../../../internal/safe-css.js";import{styles}from"./calendar.styles.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{LYRA_DEFAULT_calendarEmpty,LYRA_DEFAULT_calendarLabel,LYRA_DEFAULT_calendarNextMonth,LYRA_DEFAULT_calendarPreviousMonth}from"../../../internal/default-strings.generated.js";const monthStart=date=>new Date(date.getFullYear(),date.getMonth(),1);class LyraCalendar extends LyraElement{constructor(){super(...arguments),this.events=[],this.value="",this.viewDate=formatISO(new Date).slice(0,7)+"-01",this._view="month",this.firstDayOfWeek="auto",this.accessibleLabel="",this.focusedDate=""}static{this.defaultStrings={...super.defaultStrings,calendarEmpty:LYRA_DEFAULT_calendarEmpty,calendarLabel:LYRA_DEFAULT_calendarLabel,calendarNextMonth:LYRA_DEFAULT_calendarNextMonth,calendarPreviousMonth:LYRA_DEFAULT_calendarPreviousMonth}}static{this.ownedCollectionProperties=Object.freeze(["events"])}static{this.identityCollectionProperties=Object.freeze(["events"])}static{this.styles=[LyraElement.styles,styles]}get view(){return this._view}set view(value){const normalized=value==="agenda"?"agenda":"month",previous=this._view;if(previous===normalized){value!==normalized&&this.requestUpdate("view",previous);return}this._view=normalized,this.requestUpdate("view",previous)}get viewStart(){const parsed=parseISO(this.viewDate);return monthStart(parsed||new Date)}get normalizedFirstDayOfWeek(){return resolveFirstDayOfWeek(this.firstDayOfWeek,this.effectiveLocale)}changeMonth(delta){const next=new Date(this.viewStart.getFullYear(),this.viewStart.getMonth()+delta,1);this.viewDate=formatISO(next),this.emit("lr-view-change",{viewDate:this.viewDate})}selectDate(date){this.value=date,this.focusedDate=date,this.emit("lr-date-select",{date})}bucketEventsByDate(){const buckets=new Map;for(const event of this.events){const bucket=buckets.get(event.date);bucket?bucket.push(event):buckets.set(event.date,[event])}return buckets}weeks(){const start=this.viewStart;return monthMatrix(start.getFullYear(),start.getMonth(),this.normalizedFirstDayOfWeek)}gridBounds(weeks){return[weeks[0][0],weeks[weeks.length-1][6]]}onDayKeyDown(event,date){let delta=0;if(event.key==="ArrowLeft")delta=this.effectiveDirection==="rtl"?1:-1;else if(event.key==="ArrowRight")delta=this.effectiveDirection==="rtl"?-1:1;else if(event.key==="ArrowUp")delta=-7;else if(event.key==="ArrowDown")delta=7;else if(event.key==="Enter"||event.key===" "){event.preventDefault(),this.selectDate(formatISO(date));return}else return;event.preventDefault();const next=new Date(date);next.setDate(next.getDate()+delta);const[gridFirst,gridLast]=this.gridBounds(this.weeks());(next<gridFirst||next>gridLast)&&(this.viewDate=formatISO(monthStart(next)),this.emit("lr-view-change",{viewDate:this.viewDate})),this.focusedDate=formatISO(next),queueMicrotask(()=>this.renderRoot.querySelector(`[data-date="${this.focusedDate}"]`)?.focus())}weekdays(){return weekdayLabels(this.normalizedFirstDayOfWeek,"short",this.effectiveLocale)}updated(changed){super.updated(changed),this.getAttribute("view")!==this._view&&this.setAttribute("view",this._view)}render(){const start=this.viewStart,weeks=this.weeks(),monthTitle=getDateTimeFormat(this.effectiveLocale,{month:"long",year:"numeric"}).format(start),today=formatISO(new Date),label=hostAriaLabel(this)??this.localize("calendarLabel"),dayLabelFmt=getDateTimeFormat(this.effectiveLocale,{dateStyle:"full"}),agendaDateFmt=getDateTimeFormat(this.effectiveLocale,{dateStyle:"medium"}),dayNumberFmt=getNumberFormat(this.effectiveLocale),agenda=this.events.filter(event=>event.date.startsWith(formatISO(start).slice(0,7))).sort((a,b)=>a.date<b.date?-1:a.date>b.date?1:0),eventsByDate=this.view==="month"?this.bucketEventsByDate():void 0,[gridFirst,gridLast]=this.gridBounds(weeks),rawAnchor=this.focusedDate||this.value||today,rawAnchorDate=parseISO(rawAnchor),anchor=rawAnchorDate&&rawAnchorDate>=gridFirst&&rawAnchorDate<=gridLast?rawAnchor:formatISO(start);return html`<section aria-label=${label}><header part="header navigation"><button part="nav previous-button" type="button" aria-label=${this.localize("calendarPreviousMonth")} @click=${()=>this.changeMonth(-1)}><span part="nav-glyph" aria-hidden="true">‹</span></button><span part="title">${monthTitle}</span><button part="nav next-button" type="button" aria-label=${this.localize("calendarNextMonth")} @click=${()=>this.changeMonth(1)}><span part="nav-glyph" aria-hidden="true">›</span></button></header>
2
2
  ${this.view==="agenda"?html`<div part="agenda">${agenda.length?agenda.map(event=>{const date=parseISO(event.date);return html`<button part="agenda-event" type="button" @click=${()=>this.emit("lr-event-select",{event})}><strong>${date?agendaDateFmt.format(date):event.date}</strong> ${event.title}</button>`}):html`<p>${this.localize("calendarEmpty")}</p>`}</div>`:html`<div part="weekdays">${this.weekdays().map(day=>html`<span part="weekday">${day}</span>`)}</div><div part="grid" role="grid" aria-label=${monthTitle}>${weeks.map(week=>html`<div part="week" role="row">${week.map(date=>{const dateIso=formatISO(date),dayEvents=eventsByDate?.get(dateIso)??[];return html`<div part="day" role="gridcell" data-date=${dateIso} data-outside=${date.getMonth()!==start.getMonth()?"true":"false"} data-today=${dateIso===today?"true":"false"} data-selected=${dateIso===this.value?"true":"false"} aria-selected=${dateIso===this.value?"true":"false"} aria-label=${dayLabelFmt.format(date)} tabindex=${dateIso===anchor?"0":"-1"} @click=${event=>{(event.target===event.currentTarget||event.target.getAttribute("part")==="date")&&this.selectDate(dateIso)}} @keydown=${event=>{event.target===event.currentTarget&&this.onDayKeyDown(event,date)}}><span part="date">${dayNumberFmt.format(date.getDate())}</span>${dayEvents.map(item=>{const bg=item.color?sanitizeCssColor(item.color):void 0;return html`<button part="event" type="button" style=${styleMap(bg?{backgroundColor:bg}:{})} @click=${event=>{event.stopPropagation(),this.emit("lr-event-select",{event:item})}}>${item.title}</button>`})}</div>`})}</div>`)}</div>`}</section>`}}__decorate([property({attribute:!1})],LyraCalendar.prototype,"events",void 0),__decorate([property()],LyraCalendar.prototype,"value",void 0),__decorate([property({attribute:"view-date"})],LyraCalendar.prototype,"viewDate",void 0),__decorate([property({reflect:!0})],LyraCalendar.prototype,"view",null),__decorate([property({attribute:"first-day-of-week"})],LyraCalendar.prototype,"firstDayOfWeek",void 0),__decorate([property({attribute:"aria-label"})],LyraCalendar.prototype,"accessibleLabel",void 0),__decorate([state()],LyraCalendar.prototype,"focusedDate",void 0);export{LyraCalendar};
@@ -382,6 +382,11 @@ export declare class LyraDataGrid<Row = Record<string, unknown>> extends LyraEle
382
382
  private get pageRows();
383
383
  private get currentPageSelectableRows();
384
384
  private groupKey;
385
+ /** Primitive group values can use their serialized value; object-valued groups need identity
386
+ * because distinct records commonly stringify to the same `[object Object]` text. */
387
+ private readonly groupObjectIds;
388
+ private nextGroupObjectId;
389
+ private groupValueKey;
385
390
  private topLevelGroupBuckets;
386
391
  private groupItems;
387
392
  private get displayItems();