@copilotkitnext/web-inspector 0.0.28 → 0.0.29

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.
package/dist/index.mjs CHANGED
@@ -3,14 +3,21 @@ import { LitElement, css, html, nothing, unsafeCSS } from "lit";
3
3
  import { styleMap } from "lit/directives/style-map.js";
4
4
 
5
5
  // src/styles/generated.css
6
- var generated_default = '/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-700:oklch(55.5% .163 48.998);--color-green-100:oklch(96.2% .044 156.743);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-700:oklch(49.1% .27 292.581);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-700:oklch(49.6% .265 301.924);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-700:oklch(51.4% .222 16.935);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{font-family:var(--font-sans);color:var(--color-slate-900);background-color:#0000;display:block}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.bottom-1{bottom:calc(var(--spacing)*1)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-50{z-index:50}.m-0{margin:calc(var(--spacing)*0)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-40{height:calc(var(--spacing)*40)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-96{max-height:calc(var(--spacing)*96)}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-40{width:calc(var(--spacing)*40)}.w-56{width:calc(var(--spacing)*56)}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\\[150px\\]{max-width:150px}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.-translate-y-\\[2px\\]{--tw-translate-y:calc(2px*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-nwse-resize{cursor:nwse-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-gray-200{border-color:var(--color-gray-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-rose-200{border-color:var(--color-rose-200)}.border-sky-200{border-color:var(--color-sky-200)}.border-violet-200{border-color:var(--color-violet-200)}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-amber-50{background-color:var(--color-amber-50)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab, red, red)){.bg-gray-50\\/50{background-color:color-mix(in oklab,var(--color-gray-50)50%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-100{background-color:var(--color-green-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-slate-950\\/95{background-color:#020618f2}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\\/95{background-color:color-mix(in oklab,var(--color-slate-950)95%,transparent)}}.bg-violet-50{background-color:var(--color-violet-50)}.bg-white{background-color:var(--color-white)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-2{padding-left:calc(var(--spacing)*2)}.text-center{text-align:center}.text-left{text-align:left}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-700{color:var(--color-amber-700)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-purple-700{color:var(--color-purple-700)}.text-rose-700{color:var(--color-rose-700)}.text-sky-700{color:var(--color-sky-700)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-60{opacity:.6}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-black\\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-white\\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.ring-white\\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:border-gray-300:is(:where(.group):hover *){border-color:var(--color-gray-300)}.group-hover\\:text-gray-700:is(:where(.group):hover *){color:var(--color-gray-700)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-white\\/30:hover{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/30:hover{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\\:bg-blue-50\\/50:hover{background-color:#eff6ff80}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-blue-50\\/50:hover{background-color:color-mix(in oklab,var(--color-blue-50)50%,transparent)}}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\\:bg-slate-900\\/95:hover{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-slate-900\\/95:hover{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.hover\\:text-gray-600:hover{color:var(--color-gray-600)}.hover\\:text-gray-900:hover{color:var(--color-gray-900)}}.focus\\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-gray-300:focus-visible{outline-color:var(--color-gray-300)}.focus-visible\\:outline-gray-400:focus-visible{outline-color:var(--color-gray-400)}.focus-visible\\:outline-rose-500:focus-visible{outline-color:var(--color-rose-500)}@media (min-width:48rem){.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\\[\\&\\>svg\\]\\:\\!h-8>svg{height:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:\\!w-8>svg{width:calc(var(--spacing)*8)!important}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}@property --tw-border-spacing-x{syntax:"<length>";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"<length>";inherits:false;initial-value:0}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes pulse{50%{opacity:.5}}';
6
+ var generated_default = '/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-outline-style:solid}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-green-100:oklch(96.2% .044 156.743);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-700:oklch(49.1% .27 292.581);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-700:oklch(49.6% .265 301.924);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-medium:500;--font-weight-semibold:600;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{font-family:var(--font-sans);color:var(--color-slate-900);background-color:#0000;display:block}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.bottom-1{bottom:calc(var(--spacing)*1)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:calc(var(--spacing)*0)}.mx-4{margin-inline:calc(var(--spacing)*4)}.my-1{margin-block:calc(var(--spacing)*1)}.my-3{margin-block:calc(var(--spacing)*3)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-40{height:calc(var(--spacing)*40)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-96{max-height:calc(var(--spacing)*96)}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-40{width:calc(var(--spacing)*40)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\\[240px\\]{max-width:240px}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[160px\\]{min-width:160px}.min-w-\\[200px\\]{min-width:200px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.-translate-y-\\[2px\\]{--tw-translate-y:calc(2px*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-nwse-resize{cursor:nwse-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-rose-200{border-color:var(--color-rose-200)}.border-sky-200{border-color:var(--color-sky-200)}.border-slate-200{border-color:var(--color-slate-200)}.border-violet-200{border-color:var(--color-violet-200)}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab, red, red)){.bg-gray-50\\/50{background-color:color-mix(in oklab,var(--color-gray-50)50%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-100{background-color:var(--color-green-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-600{background-color:var(--color-rose-600)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-950\\/95{background-color:#020618f2}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\\/95{background-color:color-mix(in oklab,var(--color-slate-950)95%,transparent)}}.bg-violet-50{background-color:var(--color-violet-50)}.bg-white{background-color:var(--color-white)}.bg-white\\/60{background-color:#fff9}@supports (color:color-mix(in lab, red, red)){.bg-white\\/60{background-color:color-mix(in oklab,var(--color-white)60%,transparent)}}.bg-white\\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-emerald-700{color:var(--color-emerald-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-purple-700{color:var(--color-purple-700)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-900{color:var(--color-rose-900)}.text-sky-700{color:var(--color-sky-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-violet-700{color:var(--color-violet-700)}.text-white{color:var(--color-white)}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-80{opacity:.8}.shadow-\\[0_12px_30px_rgba\\(15\\,23\\,42\\,0\\.12\\)\\]{--tw-shadow:0 12px 30px var(--tw-shadow-color,#0f172a1f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-black\\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-transparent{--tw-ring-color:transparent}.ring-white\\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.ring-white\\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\\:border-white\\/30:hover{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/30:hover{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\\:bg-blue-50\\/50:hover{background-color:#eff6ff80}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-blue-50\\/50:hover{background-color:color-mix(in oklab,var(--color-blue-50)50%,transparent)}}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\\:bg-slate-900\\/95:hover{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-slate-900\\/95:hover{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.hover\\:text-gray-600:hover{color:var(--color-gray-600)}.hover\\:text-gray-900:hover{color:var(--color-gray-900)}}.focus\\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-gray-200:focus{--tw-ring-color:var(--color-gray-200)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-gray-300:focus-visible{outline-color:var(--color-gray-300)}.focus-visible\\:outline-gray-400:focus-visible{outline-color:var(--color-gray-400)}.focus-visible\\:outline-rose-500:focus-visible{outline-color:var(--color-rose-500)}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}@media (min-width:48rem){.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\\[\\&\\>svg\\]\\:\\!h-8>svg{height:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:\\!w-8>svg{width:calc(var(--spacing)*8)!important}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes pulse{50%{opacity:.5}}';
7
7
 
8
- // src/assets/logo-mark.svg
9
- var logo_mark_default = 'data:image/svg+xml,<?xml version="1.0" encoding="utf-8"?>%0A<svg xmlns="http://www.w3.org/2000/svg" width="55" height="60" viewBox="0 0 55 60" fill="none">%0A <g stroke="%23FFFFFF" stroke-width="3.3125" stroke-linejoin="round">%0A <path d="M0 21.9336L16.5449 0C40.8483 5.37332 53 8.05998 53 8.05998L43.123 56L0 21.9336Z" />%0A <line x1="16.5828" y1="0" x2="43.2454" y2="56" />%0A <line x1="0" y1="21.9336" x2="53" y2="8.48421" />%0A </g>%0A</svg>%0A';
8
+ // src/assets/inspector-logo.svg
9
+ var inspector_logo_default = 'data:image/svg+xml,<svg width="136" height="26" viewBox="0 0 136 26" fill="none" xmlns="http://www.w3.org/2000/svg">%0A<path d="M15.5253 11.0828H11.2602C11.2299 10.7299 11.1492 10.4097 11.0181 10.1224C10.8921 9.83503 10.7157 9.588 10.4888 9.38129C10.267 9.16958 9.99725 9.00818 9.67964 8.89733C9.36202 8.78136 9.00155 8.72338 8.59823 8.72338C7.89242 8.72338 7.29501 8.89477 6.80598 9.23756C6.322 9.58045 5.95397 10.072 5.70189 10.7122C5.45486 11.3524 5.33134 12.1213 5.33134 13.0187C5.33134 13.9665 5.45738 14.7606 5.70946 15.4008C5.96657 16.0361 6.33712 16.515 6.82111 16.8376C7.30509 17.1553 7.88739 17.314 8.56798 17.314C8.95618 17.314 9.30404 17.2662 9.61158 17.1704C9.91911 17.0695 10.1863 16.9259 10.4132 16.7393C10.64 16.5528 10.8241 16.3284 10.9653 16.0663C11.1114 15.7991 11.2097 15.4991 11.2602 15.1664L15.5253 15.1967C15.4748 15.852 15.2908 16.52 14.9732 17.2006C14.6556 17.8762 14.2044 18.5013 13.6195 19.076C13.0398 19.6457 12.3214 20.1046 11.4643 20.4524C10.6073 20.8003 9.61158 20.9742 8.47724 20.9742C7.05554 20.9742 5.78004 20.6692 4.65074 20.0592C3.52649 19.4491 2.63667 18.5517 1.98126 17.367C1.33091 16.1823 1.00574 14.7328 1.00574 13.0187C1.00574 11.2946 1.33848 9.84259 2.00396 8.66285C2.66944 7.47811 3.56682 6.58324 4.69611 5.97827C5.82541 5.36825 7.08578 5.06323 8.47724 5.06323C9.45528 5.06323 10.3552 5.19683 11.177 5.46403C11.9987 5.73123 12.7196 6.12194 13.3397 6.63618C13.9599 7.14537 14.4589 7.77302 14.8371 8.51922C15.2152 9.26533 15.4446 10.1198 15.5253 11.0828Z" fill="%23010507"/>%0A<path d="M23.0894 20.9742C21.829 20.9742 20.7501 20.7246 19.8527 20.2256C18.9553 19.7214 18.2672 19.0206 17.7883 18.1232C17.3093 17.2208 17.0698 16.1747 17.0698 14.9849C17.0698 13.7951 17.3093 12.7516 17.7883 11.8542C18.2672 10.9517 18.9553 10.2509 19.8527 9.75184C20.7501 9.24767 21.829 8.99564 23.0894 8.99564C24.3498 8.99564 25.4286 9.24767 26.326 9.75184C27.2234 10.2509 27.9115 10.9517 28.3905 11.8542C28.8695 12.7516 29.1089 13.7951 29.1089 14.9849C29.1089 16.1747 28.8695 17.2208 28.3905 18.1232C27.9115 19.0206 27.2234 19.7214 26.326 20.2256C25.4286 20.7246 24.3498 20.9742 23.0894 20.9742ZM23.1196 17.8888C23.4726 17.8888 23.7776 17.7703 24.0346 17.5334C24.2918 17.2965 24.4909 16.9587 24.6321 16.5201C24.7733 16.0814 24.8438 15.5597 24.8438 14.9547C24.8438 14.3446 24.7733 13.8228 24.6321 13.3893C24.4909 12.9506 24.2918 12.6128 24.0346 12.3759C23.7776 12.139 23.4726 12.0205 23.1196 12.0205C22.7466 12.0205 22.4265 12.139 22.1592 12.3759C21.8921 12.6128 21.6878 12.9506 21.5466 13.3893C21.4056 13.8228 21.3349 14.3446 21.3349 14.9547C21.3349 15.5597 21.4056 16.0814 21.5466 16.5201C21.6878 16.9587 21.8921 17.2965 22.1592 17.5334C22.4265 17.7703 22.7466 17.8888 23.1196 17.8888Z" fill="%23010507"/>%0A<path d="M30.8029 25.1184V9.14681H34.947V11.1735H35.0377C35.189 10.7803 35.4109 10.4199 35.7032 10.0922C35.9957 9.7594 36.3587 9.4947 36.7922 9.2981C37.2257 9.09639 37.7299 8.99564 38.3046 8.99564C39.0709 8.99564 39.7995 9.19979 40.4901 9.60811C41.1858 10.0165 41.7505 10.6593 42.1841 11.5365C42.6227 12.4138 42.842 13.5531 42.842 14.9547C42.842 16.2957 42.6328 17.4073 42.2143 18.2896C41.801 19.1719 41.2464 19.8298 40.5506 20.2633C39.8599 20.697 39.1011 20.9137 38.2744 20.9137C37.7299 20.9137 37.2434 20.8255 36.8149 20.649C36.3914 20.4675 36.0284 20.223 35.7259 19.9155C35.4285 19.6029 35.199 19.25 35.0377 18.8568H34.9772V25.1184H30.8029ZM34.8865 14.9547C34.8865 15.5193 34.9596 16.0083 35.1058 16.4218C35.257 16.8301 35.4688 17.1477 35.7411 17.3746C36.0183 17.5964 36.3486 17.7073 36.7317 17.7073C37.1149 17.7073 37.44 17.5989 37.7072 17.3821C37.9795 17.1603 38.1862 16.8452 38.3273 16.4369C38.4736 16.0234 38.5466 15.5294 38.5466 14.9547C38.5466 14.3799 38.4736 13.8884 38.3273 13.48C38.1862 13.0666 37.9795 12.7516 37.7072 12.5347C37.44 12.3129 37.1149 12.202 36.7317 12.202C36.3486 12.202 36.0183 12.3129 35.7411 12.5347C35.4688 12.7516 35.257 13.0666 35.1058 13.48C34.9596 13.8884 34.8865 14.3799 34.8865 14.9547Z" fill="%23010507"/>%0A<path d="M44.5908 20.7625V9.14678H48.7652V20.7625H44.5908ZM46.6779 7.93683C46.1133 7.93683 45.6294 7.75033 45.2261 7.37726C44.8227 7.00419 44.621 6.55549 44.621 6.03118C44.621 5.50686 44.8227 5.05816 45.2261 4.68509C45.6294 4.31202 46.1133 4.12549 46.6779 4.12549C47.2477 4.12549 47.7316 4.31202 48.1299 4.68509C48.5332 5.05816 48.7349 5.50686 48.7349 6.03118C48.7349 6.55549 48.5332 7.00419 48.1299 7.37726C47.7316 7.75033 47.2477 7.93683 46.6779 7.93683Z" fill="%23010507"/>%0A<path d="M55.0664 5.27496V20.7625H50.892V5.27496H55.0664Z" fill="%23010507"/>%0A<path d="M62.7893 20.9742C61.5289 20.9742 60.4501 20.7246 59.5527 20.2256C58.6553 19.7214 57.9671 19.0206 57.4881 18.1232C57.0093 17.2208 56.7698 16.1747 56.7698 14.9849C56.7698 13.7951 57.0093 12.7516 57.4881 11.8542C57.9671 10.9517 58.6553 10.2509 59.5527 9.75184C60.4501 9.24767 61.5289 8.99564 62.7893 8.99564C64.0497 8.99564 65.1286 9.24767 66.026 9.75184C66.9234 10.2509 67.6115 10.9517 68.0904 11.8542C68.5694 12.7516 68.8089 13.7951 68.8089 14.9849C68.8089 16.1747 68.5694 17.2208 68.0904 18.1232C67.6115 19.0206 66.9234 19.7214 66.026 20.2256C65.1286 20.7246 64.0497 20.9742 62.7893 20.9742ZM62.8195 17.8888C63.1724 17.8888 63.4775 17.7703 63.7346 17.5334C63.9917 17.2965 64.1908 16.9587 64.332 16.5201C64.4731 16.0814 64.5438 15.5597 64.5438 14.9547C64.5438 14.3446 64.4731 13.8228 64.332 13.3893C64.1908 12.9506 63.9917 12.6128 63.7346 12.3759C63.4775 12.139 63.1724 12.0205 62.8195 12.0205C62.4464 12.0205 62.1263 12.139 61.8592 12.3759C61.5919 12.6128 61.3878 12.9506 61.2466 13.3893C61.1054 13.8228 61.0349 14.3446 61.0349 14.9547C61.0349 15.5597 61.1054 16.0814 61.2466 16.5201C61.3878 16.9587 61.5919 17.2965 61.8592 17.5334C62.1263 17.7703 62.4464 17.8888 62.8195 17.8888Z" fill="%23010507"/>%0A<path d="M77.4298 9.1468V12.1717H69.7769V9.1468H77.4298ZM71.2591 6.36392H75.4334V17.0267C75.4334 17.188 75.4612 17.3241 75.5166 17.4351C75.572 17.5409 75.6578 17.6216 75.7738 17.677C75.8897 17.7274 76.0384 17.7527 76.2199 17.7527C76.3459 17.7527 76.4921 17.7375 76.6585 17.7073C76.8299 17.677 76.9559 17.6518 77.0366 17.6317L77.6416 20.5659C77.4551 20.6213 77.1879 20.6894 76.84 20.77C76.4972 20.8507 76.0888 20.9037 75.6149 20.9288C74.657 20.9792 73.8529 20.8809 73.2026 20.6339C72.5522 20.3818 72.0631 19.9861 71.7355 19.4466C71.4078 18.9072 71.249 18.2316 71.2591 17.42V6.36392Z" fill="%23010507"/>%0A<path d="M79.3223 20.7625V5.27496H83.5268V11.5365H83.7385L88.397 5.27496H93.2973L88.0642 12.1717L93.4183 20.7625H88.397L84.9183 14.9546L83.5268 16.7696V20.7625H79.3223Z" fill="%23010507"/>%0A<path d="M95.3334 20.7625V9.14678H99.5077V20.7625H95.3334ZM97.4206 7.93683C96.8559 7.93683 96.3719 7.75033 95.9686 7.37726C95.5653 7.00419 95.3637 6.55549 95.3637 6.03118C95.3637 5.50686 95.5653 5.05816 95.9686 4.68509C96.3719 4.31202 96.8559 4.12549 97.4206 4.12549C97.9902 4.12549 98.4743 4.31202 98.8725 4.68509C99.2758 5.05816 99.4775 5.50686 99.4775 6.03118C99.4775 6.55549 99.2758 7.00419 98.8725 7.37726C98.4743 7.75033 97.9902 7.93683 97.4206 7.93683Z" fill="%23010507"/>%0A<path d="M108.562 9.1468V12.1717H100.909V9.1468H108.562ZM102.391 6.36392H106.565V17.0267C106.565 17.188 106.593 17.3241 106.648 17.4351C106.704 17.5409 106.789 17.6216 106.905 17.677C107.021 17.7274 107.17 17.7527 107.352 17.7527C107.478 17.7527 107.623 17.7375 107.791 17.7073C107.962 17.677 108.087 17.6518 108.168 17.6317L108.774 20.5659C108.587 20.6213 108.319 20.6894 107.971 20.77C107.629 20.8507 107.22 20.9037 106.747 20.9288C105.789 20.9792 104.985 20.8809 104.334 20.6339C103.684 20.3818 103.195 19.9861 102.867 19.4466C102.54 18.9072 102.381 18.2316 102.391 17.42V6.36392Z" fill="%23010507"/>%0A<path d="M119.539 8.67678C121.648 5.91866 123.398 3.19128 124.071 0.988777C124.089 0.928849 124.159 0.90339 124.212 0.937987C126.553 2.48864 130.818 3.50932 134.591 3.53328C134.656 3.53369 134.7 3.59769 134.677 3.65822C133.423 6.84039 131.891 12.5423 131.831 19.0536C131.831 19.1503 131.695 19.185 131.647 19.1009C129.5 15.3438 122.623 10.0644 119.574 8.81838C119.518 8.79519 119.502 8.7255 119.539 8.67678Z" fill="url(%23paint0_linear_8010_10612)"/>%0A<path d="M126.653 6.98969C123.357 8.03321 120.345 8.61334 119.626 8.74516C119.58 8.75356 119.571 8.81686 119.614 8.83473C122.687 10.1121 129.53 15.3761 131.657 19.118C131.661 19.1262 131.671 19.1292 131.68 19.1255C131.688 19.1214 131.693 19.1108 131.69 19.1016L126.653 6.98969Z" fill="url(%23paint1_linear_8010_10612)"/>%0A<path d="M124.221 0.931179C127.043 2.4702 130.303 3.16142 134.629 3.52564C134.656 3.52796 134.665 3.56437 134.641 3.57702C134.088 3.86136 130.918 5.47409 128.565 6.33784C127.934 6.56926 127.3 6.78394 126.676 6.982C126.662 6.98633 126.647 6.97951 126.641 6.96631L124.156 0.989469C124.139 0.949222 124.183 0.910305 124.221 0.931179Z" fill="url(%23paint2_linear_8010_10612)"/>%0A<path d="M124.171 1.02203L131.742 19.082" stroke="%23513C9F" stroke-width="0.183881" stroke-linecap="round"/>%0A<path d="M119.628 8.74279C119.628 8.74279 123.809 7.99233 127.739 6.63677C131.668 5.28124 134.594 3.6214 134.594 3.6214" stroke="%23513C9F" stroke-width="0.183881" stroke-linecap="round"/>%0A<path d="M125.209 3.30383L122.405 12.6358M122.405 12.6358H129.07M122.405 12.6358L111.874 25.0383" stroke="%23ABABAB" stroke-width="0.321797" stroke-linecap="round"/>%0A<path d="M119.181 22.485L117.94 22.6596C118.584 24.3618 119.904 25.1053 121.479 25.1053C125.341 25.1053 124.163 20.7382 126.4 20.7382C128.023 20.7382 127.364 24.2778 130.857 24.2778C132.989 24.2778 133.201 22.1301 132.837 21.2061C132.835 21.2005 132.833 21.1953 132.83 21.1902L132.259 20.3154C132.222 20.2572 132.131 20.2791 132.125 20.3483L132.018 21.4087C132.011 21.4824 132.013 21.5559 132.021 21.6295C132.109 22.3621 132.165 24.14 130.857 24.14C129.477 24.14 129.145 20.6462 126.4 20.6462C123.181 20.6462 123.594 24.9675 121.618 24.9675C120.313 24.9675 119.319 23.4964 119.181 22.485Z" fill="url(%23paint3_linear_8010_10612)"/>%0A<defs>%0A<linearGradient id="paint0_linear_8010_10612" x1="129.301" y1="2.33848" x2="125.623" y2="12.452" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%236430AB"/>%0A<stop offset="1" stop-color="%23AA89D8"/>%0A</linearGradient>%0A<linearGradient id="paint1_linear_8010_10612" x1="126.451" y1="8.03874" x2="121.717" y2="17.1869" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%23005DBB"/>%0A<stop offset="1" stop-color="%233D92E8"/>%0A</linearGradient>%0A<linearGradient id="paint2_linear_8010_10612" x1="128.565" y1="2.33842" x2="127.139" y2="6.79755" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%231B70C4"/>%0A<stop offset="1" stop-color="%2354A4F2"/>%0A</linearGradient>%0A<linearGradient id="paint3_linear_8010_10612" x1="117.94" y1="22.7838" x2="132.981" y2="22.7838" gradientUnits="userSpaceOnUse">%0A<stop stop-color="%234497EA"/>%0A<stop offset="0.254755" stop-color="%231463B2"/>%0A<stop offset="0.498725" stop-color="%230A437D"/>%0A<stop offset="0.666667" stop-color="%232476C8"/>%0A<stop offset="0.972542" stop-color="%230C549A"/>%0A</linearGradient>%0A</defs>%0A</svg>%0A';
10
+
11
+ // src/assets/inspector-logo-icon.svg
12
+ var inspector_logo_icon_default = 'data:image/svg+xml,<?xml version="1.0" encoding="utf-8"?>%0A<svg xmlns="http://www.w3.org/2000/svg" width="55" height="60" viewBox="0 0 55 60" fill="none">%0A <g stroke="%23FFFFFF" stroke-width="3.3125" stroke-linejoin="round">%0A <path d="M0 21.9336L16.5449 0C40.8483 5.37332 53 8.05998 53 8.05998L43.123 56L0 21.9336Z" />%0A <line x1="16.5828" y1="0" x2="43.2454" y2="56" />%0A <line x1="0" y1="21.9336" x2="53" y2="8.48421" />%0A </g>%0A</svg>%0A';
10
13
 
11
14
  // src/index.ts
12
15
  import { unsafeHTML } from "lit/directives/unsafe-html.js";
16
+ import { marked } from "marked";
13
17
  import { icons } from "lucide";
18
+ import {
19
+ CopilotKitCoreRuntimeConnectionStatus
20
+ } from "@copilotkitnext/core";
14
21
 
15
22
  // src/lib/context-helpers.ts
16
23
  function updateSizeFromElement(state, element, fallback) {
@@ -77,35 +84,46 @@ function clamp(value, min, max) {
77
84
  }
78
85
 
79
86
  // src/lib/persistence.ts
80
- function loadInspectorState(cookieName) {
81
- if (typeof document === "undefined") {
82
- return null;
83
- }
84
- const prefix = `${cookieName}=`;
85
- const entry = document.cookie.split("; ").find((cookie) => cookie.startsWith(prefix));
86
- if (!entry) {
87
+ function loadInspectorState(storageKey) {
88
+ if (typeof window === "undefined") {
87
89
  return null;
88
90
  }
89
- const raw = entry.substring(prefix.length);
90
- if (!raw) {
91
- return null;
91
+ const raw = window.localStorage.getItem(storageKey);
92
+ if (raw) {
93
+ try {
94
+ const parsed = JSON.parse(raw);
95
+ if (parsed && typeof parsed === "object") {
96
+ return parsed;
97
+ }
98
+ } catch {
99
+ }
92
100
  }
93
- try {
94
- const parsed = JSON.parse(decodeURIComponent(raw));
95
- if (parsed && typeof parsed === "object") {
96
- return parsed;
101
+ if (typeof document !== "undefined") {
102
+ const prefix = `${storageKey}=`;
103
+ const entry = document.cookie.split("; ").find((cookie) => cookie.startsWith(prefix));
104
+ if (entry) {
105
+ const legacyRaw = entry.substring(prefix.length);
106
+ try {
107
+ const parsed = JSON.parse(decodeURIComponent(legacyRaw));
108
+ if (parsed && typeof parsed === "object") {
109
+ return parsed;
110
+ }
111
+ } catch {
112
+ return null;
113
+ }
97
114
  }
98
- } catch (error) {
99
- return null;
100
115
  }
101
116
  return null;
102
117
  }
103
- function saveInspectorState(cookieName, state, maxAgeSeconds) {
104
- if (typeof document === "undefined") {
118
+ function saveInspectorState(storageKey, state) {
119
+ if (typeof window === "undefined") {
105
120
  return;
106
121
  }
107
- const encoded = encodeURIComponent(JSON.stringify(state));
108
- document.cookie = `${cookieName}=${encoded}; path=/; max-age=${maxAgeSeconds}; SameSite=Lax`;
122
+ try {
123
+ window.localStorage.setItem(storageKey, JSON.stringify(state));
124
+ } catch (error) {
125
+ console.warn("Failed to persist inspector state", error);
126
+ }
109
127
  }
110
128
  function isValidAnchor(value) {
111
129
  if (!value || typeof value !== "object") {
@@ -136,25 +154,46 @@ function isValidDockMode(value) {
136
154
  }
137
155
 
138
156
  // src/index.ts
139
- var WEB_INSPECTOR_TAG = "web-inspector";
157
+ var WEB_INSPECTOR_TAG = "cpk-web-inspector";
140
158
  var EDGE_MARGIN = 16;
141
159
  var DRAG_THRESHOLD = 6;
142
160
  var MIN_WINDOW_WIDTH = 600;
143
161
  var MIN_WINDOW_WIDTH_DOCKED_LEFT = 420;
144
162
  var MIN_WINDOW_HEIGHT = 200;
145
- var COOKIE_NAME = "copilotkit_inspector_state";
146
- var COOKIE_MAX_AGE_SECONDS = 60 * 60 * 24 * 30;
163
+ var INSPECTOR_STORAGE_KEY = "cpk:inspector:state";
164
+ var ANNOUNCEMENT_STORAGE_KEY = "cpk:inspector:announcements";
165
+ var ANNOUNCEMENT_URL = "https://cdn.copilotkit.ai/announcements.json";
147
166
  var DEFAULT_BUTTON_SIZE = { width: 48, height: 48 };
148
167
  var DEFAULT_WINDOW_SIZE = { width: 840, height: 560 };
149
168
  var DOCKED_LEFT_WIDTH = 500;
150
169
  var MAX_AGENT_EVENTS = 200;
151
170
  var MAX_TOTAL_EVENTS = 500;
171
+ var AGENT_EVENT_TYPES = [
172
+ "RUN_STARTED",
173
+ "RUN_FINISHED",
174
+ "RUN_ERROR",
175
+ "TEXT_MESSAGE_START",
176
+ "TEXT_MESSAGE_CONTENT",
177
+ "TEXT_MESSAGE_END",
178
+ "TOOL_CALL_START",
179
+ "TOOL_CALL_ARGS",
180
+ "TOOL_CALL_END",
181
+ "TOOL_CALL_RESULT",
182
+ "STATE_SNAPSHOT",
183
+ "STATE_DELTA",
184
+ "MESSAGES_SNAPSHOT",
185
+ "RAW_EVENT",
186
+ "CUSTOM_EVENT"
187
+ ];
152
188
  var WebInspectorElement = class extends LitElement {
153
189
  constructor() {
154
190
  super(...arguments);
155
191
  this._core = null;
156
192
  this.coreSubscriber = null;
157
193
  this.coreUnsubscribe = null;
194
+ this.runtimeStatus = null;
195
+ this.coreProperties = {};
196
+ this.lastCoreError = null;
158
197
  this.agentSubscriptions = /* @__PURE__ */ new Map();
159
198
  this.agentEvents = /* @__PURE__ */ new Map();
160
199
  this.agentMessages = /* @__PURE__ */ new Map();
@@ -176,6 +215,21 @@ var WebInspectorElement = class extends LitElement {
176
215
  this.previousBodyMargins = null;
177
216
  this.transitionTimeoutId = null;
178
217
  this.pendingSelectedContext = null;
218
+ this.autoAttachCore = true;
219
+ this.attemptedAutoAttach = false;
220
+ this.cachedTools = [];
221
+ this.toolSignature = "";
222
+ this.eventFilterText = "";
223
+ this.eventTypeFilter = "all";
224
+ this.announcementMarkdown = null;
225
+ this.announcementHtml = null;
226
+ this.announcementTimestamp = null;
227
+ this.announcementPreviewText = null;
228
+ this.hasUnseenAnnouncement = false;
229
+ this.announcementLoaded = false;
230
+ this.announcementLoadError = null;
231
+ this.announcementPromise = null;
232
+ this.showAnnouncementPreview = true;
179
233
  this.contextState = {
180
234
  button: {
181
235
  position: { x: EDGE_MARGIN, y: EDGE_MARGIN },
@@ -200,9 +254,9 @@ var WebInspectorElement = class extends LitElement {
200
254
  this.isResizing = false;
201
255
  this.menuItems = [
202
256
  { key: "ag-ui-events", label: "AG-UI Events", icon: "Zap" },
203
- { key: "agents", label: "Agents", icon: "Bot" },
257
+ { key: "agents", label: "Agent", icon: "Bot" },
204
258
  { key: "frontend-tools", label: "Frontend Tools", icon: "Hammer" },
205
- { key: "agent-context", label: "Agent Context", icon: "FileText" }
259
+ { key: "agent-context", label: "Context", icon: "FileText" }
206
260
  ];
207
261
  this.handlePointerDown = (event) => {
208
262
  if (this.dockMode !== "floating" && this.isOpen) {
@@ -211,6 +265,10 @@ var WebInspectorElement = class extends LitElement {
211
265
  const target = event.currentTarget;
212
266
  const contextAttr = target?.dataset.dragContext;
213
267
  const context = contextAttr === "window" ? "window" : "button";
268
+ const eventTarget = event.target;
269
+ if (context === "window" && eventTarget?.closest("button")) {
270
+ return;
271
+ }
214
272
  this.pointerContext = context;
215
273
  this.measureContext(context);
216
274
  event.preventDefault();
@@ -395,6 +453,19 @@ var WebInspectorElement = class extends LitElement {
395
453
  this.copiedEvents = /* @__PURE__ */ new Set();
396
454
  this.expandedTools = /* @__PURE__ */ new Set();
397
455
  this.expandedContextItems = /* @__PURE__ */ new Set();
456
+ this.copiedContextItems = /* @__PURE__ */ new Set();
457
+ this.handleClearEvents = () => {
458
+ if (this.selectedContext === "all-agents") {
459
+ this.agentEvents.clear();
460
+ this.flattenedEvents = [];
461
+ } else {
462
+ this.agentEvents.delete(this.selectedContext);
463
+ this.flattenedEvents = this.flattenedEvents.filter((event) => event.agentId !== this.selectedContext);
464
+ }
465
+ this.expandedRows.clear();
466
+ this.copiedEvents.clear();
467
+ this.requestUpdate();
468
+ };
398
469
  this.handleGlobalPointerDown = (event) => {
399
470
  if (!this.contextMenuOpen) {
400
471
  return;
@@ -407,10 +478,14 @@ var WebInspectorElement = class extends LitElement {
407
478
  this.requestUpdate();
408
479
  }
409
480
  };
481
+ this.handleDismissAnnouncement = () => {
482
+ this.markAnnouncementSeen();
483
+ };
410
484
  }
411
485
  static {
412
486
  this.properties = {
413
- core: { attribute: false }
487
+ core: { attribute: false },
488
+ autoAttachCore: { type: Boolean, attribute: "auto-attach-core" }
414
489
  };
415
490
  }
416
491
  get core() {
@@ -429,19 +504,34 @@ var WebInspectorElement = class extends LitElement {
429
504
  }
430
505
  }
431
506
  attachToCore(core) {
507
+ this.runtimeStatus = core.runtimeConnectionStatus;
508
+ this.coreProperties = core.properties;
509
+ this.lastCoreError = null;
432
510
  this.coreSubscriber = {
511
+ onRuntimeConnectionStatusChanged: ({ status }) => {
512
+ this.runtimeStatus = status;
513
+ this.requestUpdate();
514
+ },
515
+ onPropertiesChanged: ({ properties }) => {
516
+ this.coreProperties = properties;
517
+ this.requestUpdate();
518
+ },
519
+ onError: ({ code, error }) => {
520
+ this.lastCoreError = { code, message: error.message };
521
+ this.requestUpdate();
522
+ },
433
523
  onAgentsChanged: ({ agents }) => {
434
524
  this.processAgentsChanged(agents);
435
525
  },
436
526
  onContextChanged: ({ context }) => {
437
- this.contextStore = { ...context };
527
+ this.contextStore = this.normalizeContextStore(context);
438
528
  this.requestUpdate();
439
529
  }
440
530
  };
441
531
  this.coreUnsubscribe = core.subscribe(this.coreSubscriber).unsubscribe;
442
532
  this.processAgentsChanged(core.agents);
443
533
  if (core.context) {
444
- this.contextStore = { ...core.context };
534
+ this.contextStore = this.normalizeContextStore(core.context);
445
535
  }
446
536
  }
447
537
  detachFromCore() {
@@ -450,6 +540,11 @@ var WebInspectorElement = class extends LitElement {
450
540
  this.coreUnsubscribe = null;
451
541
  }
452
542
  this.coreSubscriber = null;
543
+ this.runtimeStatus = null;
544
+ this.lastCoreError = null;
545
+ this.coreProperties = {};
546
+ this.cachedTools = [];
547
+ this.toolSignature = "";
453
548
  this.teardownAgentSubscriptions();
454
549
  }
455
550
  teardownAgentSubscriptions() {
@@ -481,8 +576,53 @@ var WebInspectorElement = class extends LitElement {
481
576
  }
482
577
  }
483
578
  this.updateContextOptions(seenAgentIds);
579
+ this.refreshToolsSnapshot();
484
580
  this.requestUpdate();
485
581
  }
582
+ refreshToolsSnapshot() {
583
+ if (!this._core) {
584
+ if (this.cachedTools.length > 0) {
585
+ this.cachedTools = [];
586
+ this.toolSignature = "";
587
+ this.requestUpdate();
588
+ }
589
+ return;
590
+ }
591
+ const tools = this.extractToolsFromAgents();
592
+ const signature = JSON.stringify(
593
+ tools.map((tool) => ({
594
+ agentId: tool.agentId,
595
+ name: tool.name,
596
+ type: tool.type,
597
+ hasDescription: Boolean(tool.description),
598
+ hasParameters: Boolean(tool.parameters)
599
+ }))
600
+ );
601
+ if (signature !== this.toolSignature) {
602
+ this.toolSignature = signature;
603
+ this.cachedTools = tools;
604
+ this.requestUpdate();
605
+ }
606
+ }
607
+ tryAutoAttachCore() {
608
+ if (this.attemptedAutoAttach || this._core || !this.autoAttachCore || typeof window === "undefined") {
609
+ return;
610
+ }
611
+ this.attemptedAutoAttach = true;
612
+ const globalWindow = window;
613
+ const globalCandidates = [
614
+ // Common app-level globals used during development
615
+ globalWindow.__COPILOTKIT_CORE__,
616
+ globalWindow.copilotkit?.core,
617
+ globalWindow.copilotkitCore
618
+ ];
619
+ const foundCore = globalCandidates.find(
620
+ (candidate) => !!candidate && typeof candidate === "object"
621
+ );
622
+ if (foundCore) {
623
+ this.core = foundCore;
624
+ }
625
+ }
486
626
  subscribeToAgent(agent) {
487
627
  if (!agent.agentId) {
488
628
  return;
@@ -559,25 +699,27 @@ var WebInspectorElement = class extends LitElement {
559
699
  }
560
700
  recordAgentEvent(agentId, type, payload) {
561
701
  const eventId = `${agentId}:${++this.eventCounter}`;
702
+ const normalizedPayload = this.normalizeEventPayload(type, payload);
562
703
  const event = {
563
704
  id: eventId,
564
705
  agentId,
565
706
  type,
566
707
  timestamp: Date.now(),
567
- payload
708
+ payload: normalizedPayload
568
709
  };
569
710
  const currentAgentEvents = this.agentEvents.get(agentId) ?? [];
570
711
  const nextAgentEvents = [event, ...currentAgentEvents].slice(0, MAX_AGENT_EVENTS);
571
712
  this.agentEvents.set(agentId, nextAgentEvents);
572
713
  this.flattenedEvents = [event, ...this.flattenedEvents].slice(0, MAX_TOTAL_EVENTS);
714
+ this.refreshToolsSnapshot();
573
715
  this.requestUpdate();
574
716
  }
575
717
  syncAgentMessages(agent) {
576
718
  if (!agent?.agentId) {
577
719
  return;
578
720
  }
579
- const messages = agent.messages;
580
- if (Array.isArray(messages)) {
721
+ const messages = this.normalizeAgentMessages(agent.messages);
722
+ if (messages) {
581
723
  this.agentMessages.set(agent.agentId, messages);
582
724
  } else {
583
725
  this.agentMessages.delete(agent.agentId);
@@ -592,7 +734,7 @@ var WebInspectorElement = class extends LitElement {
592
734
  if (state === void 0 || state === null) {
593
735
  this.agentStates.delete(agent.agentId);
594
736
  } else {
595
- this.agentStates.set(agent.agentId, state);
737
+ this.agentStates.set(agent.agentId, this.sanitizeForLogging(state));
596
738
  }
597
739
  this.requestUpdate();
598
740
  }
@@ -639,13 +781,30 @@ var WebInspectorElement = class extends LitElement {
639
781
  }
640
782
  return this.agentEvents.get(this.selectedContext) ?? [];
641
783
  }
784
+ filterEvents(events) {
785
+ const query = this.eventFilterText.trim().toLowerCase();
786
+ return events.filter((event) => {
787
+ if (this.eventTypeFilter !== "all" && event.type !== this.eventTypeFilter) {
788
+ return false;
789
+ }
790
+ if (!query) {
791
+ return true;
792
+ }
793
+ const payloadText = this.stringifyPayload(event.payload, false).toLowerCase();
794
+ return event.type.toLowerCase().includes(query) || event.agentId.toLowerCase().includes(query) || payloadText.includes(query);
795
+ });
796
+ }
642
797
  getLatestStateForAgent(agentId) {
643
798
  if (this.agentStates.has(agentId)) {
644
- return this.agentStates.get(agentId);
799
+ const value = this.agentStates.get(agentId);
800
+ return value === void 0 ? null : value;
645
801
  }
646
802
  const events = this.agentEvents.get(agentId) ?? [];
647
803
  const stateEvent = events.find((e) => e.type === "STATE_SNAPSHOT");
648
- return stateEvent?.payload ?? null;
804
+ if (!stateEvent) {
805
+ return null;
806
+ }
807
+ return stateEvent.payload;
649
808
  }
650
809
  getLatestMessagesForAgent(agentId) {
651
810
  const messages = this.agentMessages.get(agentId);
@@ -674,17 +833,8 @@ var WebInspectorElement = class extends LitElement {
674
833
  getAgentStats(agentId) {
675
834
  const events = this.agentEvents.get(agentId) ?? [];
676
835
  const messages = this.agentMessages.get(agentId);
677
- const toolCallCount = Array.isArray(messages) ? messages.reduce((count, rawMessage) => {
678
- if (!rawMessage || typeof rawMessage !== "object") {
679
- return count;
680
- }
681
- const toolCalls = rawMessage.toolCalls;
682
- if (!Array.isArray(toolCalls)) {
683
- return count;
684
- }
685
- return count + toolCalls.length;
686
- }, 0) : events.filter((e) => e.type === "TOOL_CALL_END").length;
687
- const messageCount = Array.isArray(messages) ? messages.length : 0;
836
+ const toolCallCount = messages ? messages.reduce((count, message) => count + (message.toolCalls?.length ?? 0), 0) : events.filter((e) => e.type === "TOOL_CALL_END").length;
837
+ const messageCount = messages?.length ?? 0;
688
838
  return {
689
839
  totalEvents: events.length,
690
840
  lastActivity: events[0]?.timestamp ?? null,
@@ -700,10 +850,9 @@ var WebInspectorElement = class extends LitElement {
700
850
  return html`
701
851
  <div class="mt-2 space-y-2">
702
852
  ${toolCalls.map((call, index) => {
703
- const toolCall = call;
704
- const functionName = typeof toolCall?.function?.name === "string" ? toolCall.function.name : "Unknown function";
705
- const callId = typeof toolCall?.id === "string" ? toolCall.id : `tool-call-${index + 1}`;
706
- const argsString = this.formatToolCallArguments(toolCall?.function?.arguments);
853
+ const functionName = call.function?.name ?? call.toolName ?? "Unknown function";
854
+ const callId = typeof call?.id === "string" ? call.id : `tool-call-${index + 1}`;
855
+ const argsString = this.formatToolCallArguments(call.function?.arguments);
707
856
  return html`
708
857
  <div class="rounded-md border border-gray-200 bg-gray-50 p-3 text-xs text-gray-700">
709
858
  <div class="flex flex-wrap items-center justify-between gap-1 font-medium text-gray-900">
@@ -725,14 +874,14 @@ var WebInspectorElement = class extends LitElement {
725
874
  try {
726
875
  const parsed = JSON.parse(args);
727
876
  return JSON.stringify(parsed, null, 2);
728
- } catch (error) {
877
+ } catch {
729
878
  return args;
730
879
  }
731
880
  }
732
881
  if (typeof args === "object") {
733
882
  try {
734
883
  return JSON.stringify(args, null, 2);
735
- } catch (error) {
884
+ } catch {
736
885
  return String(args);
737
886
  }
738
887
  }
@@ -886,6 +1035,152 @@ var WebInspectorElement = class extends LitElement {
886
1035
  z-index: 50;
887
1036
  background: transparent;
888
1037
  }
1038
+
1039
+ .tooltip-target {
1040
+ position: relative;
1041
+ }
1042
+
1043
+ .tooltip-target::after {
1044
+ content: attr(data-tooltip);
1045
+ position: absolute;
1046
+ top: calc(100% + 6px);
1047
+ left: 50%;
1048
+ transform: translateX(-50%) translateY(-4px);
1049
+ white-space: nowrap;
1050
+ background: rgba(17, 24, 39, 0.95);
1051
+ color: white;
1052
+ padding: 4px 8px;
1053
+ border-radius: 6px;
1054
+ font-size: 10px;
1055
+ line-height: 1.2;
1056
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15);
1057
+ opacity: 0;
1058
+ pointer-events: none;
1059
+ transition: opacity 120ms ease, transform 120ms ease;
1060
+ z-index: 4000;
1061
+ }
1062
+
1063
+ .tooltip-target:hover::after {
1064
+ opacity: 1;
1065
+ transform: translateX(-50%) translateY(0);
1066
+ }
1067
+
1068
+ .announcement-preview {
1069
+ position: absolute;
1070
+ top: 50%;
1071
+ transform: translateY(-50%);
1072
+ min-width: 300px;
1073
+ max-width: 300px;
1074
+ background: white;
1075
+ color: #111827;
1076
+ font-size: 13px;
1077
+ line-height: 1.4;
1078
+ border-radius: 12px;
1079
+ box-shadow: 0 12px 28px rgba(15, 23, 42, 0.22);
1080
+ padding: 10px 12px;
1081
+ display: inline-flex;
1082
+ align-items: flex-start;
1083
+ gap: 8px;
1084
+ z-index: 4500;
1085
+ animation: fade-slide-in 160ms ease;
1086
+ border: 1px solid rgba(148, 163, 184, 0.35);
1087
+ white-space: normal;
1088
+ word-break: break-word;
1089
+ text-align: left;
1090
+ }
1091
+
1092
+ .announcement-preview[data-side="left"] {
1093
+ right: 100%;
1094
+ margin-right: 10px;
1095
+ }
1096
+
1097
+ .announcement-preview[data-side="right"] {
1098
+ left: 100%;
1099
+ margin-left: 10px;
1100
+ }
1101
+
1102
+ .announcement-preview__arrow {
1103
+ position: absolute;
1104
+ width: 10px;
1105
+ height: 10px;
1106
+ background: white;
1107
+ border: 1px solid rgba(148, 163, 184, 0.35);
1108
+ transform: rotate(45deg);
1109
+ top: 50%;
1110
+ margin-top: -5px;
1111
+ z-index: -1;
1112
+ }
1113
+
1114
+ .announcement-preview[data-side="left"] .announcement-preview__arrow {
1115
+ right: -5px;
1116
+ box-shadow: 6px -6px 10px rgba(15, 23, 42, 0.12);
1117
+ }
1118
+
1119
+ .announcement-preview[data-side="right"] .announcement-preview__arrow {
1120
+ left: -5px;
1121
+ box-shadow: -6px 6px 10px rgba(15, 23, 42, 0.12);
1122
+ }
1123
+
1124
+ .announcement-dismiss {
1125
+ color: #6b7280;
1126
+ font-size: 12px;
1127
+ padding: 2px 8px;
1128
+ border-radius: 8px;
1129
+ border: 1px solid rgba(148, 163, 184, 0.5);
1130
+ background: rgba(248, 250, 252, 0.9);
1131
+ transition: background 120ms ease, color 120ms ease;
1132
+ }
1133
+
1134
+ .announcement-dismiss:hover {
1135
+ background: rgba(241, 245, 249, 1);
1136
+ color: #111827;
1137
+ }
1138
+
1139
+ .announcement-content {
1140
+ color: #111827;
1141
+ font-size: 14px;
1142
+ line-height: 1.6;
1143
+ }
1144
+
1145
+ .announcement-content h1,
1146
+ .announcement-content h2,
1147
+ .announcement-content h3 {
1148
+ font-weight: 700;
1149
+ margin: 0.4rem 0 0.2rem;
1150
+ }
1151
+
1152
+ .announcement-content h1 {
1153
+ font-size: 1.1rem;
1154
+ }
1155
+
1156
+ .announcement-content h2 {
1157
+ font-size: 1rem;
1158
+ }
1159
+
1160
+ .announcement-content h3 {
1161
+ font-size: 0.95rem;
1162
+ }
1163
+
1164
+ .announcement-content p {
1165
+ margin: 0.25rem 0;
1166
+ }
1167
+
1168
+ .announcement-content ul {
1169
+ list-style: disc;
1170
+ padding-left: 1.25rem;
1171
+ margin: 0.3rem 0;
1172
+ }
1173
+
1174
+ .announcement-content ol {
1175
+ list-style: decimal;
1176
+ padding-left: 1.25rem;
1177
+ margin: 0.3rem 0;
1178
+ }
1179
+
1180
+ .announcement-content a {
1181
+ color: #0f766e;
1182
+ text-decoration: underline;
1183
+ }
889
1184
  `
890
1185
  ];
891
1186
  }
@@ -894,7 +1189,9 @@ var WebInspectorElement = class extends LitElement {
894
1189
  if (typeof window !== "undefined") {
895
1190
  window.addEventListener("resize", this.handleResize);
896
1191
  window.addEventListener("pointerdown", this.handleGlobalPointerDown);
897
- this.hydrateStateFromCookieEarly();
1192
+ this.hydrateStateFromStorageEarly();
1193
+ this.tryAutoAttachCore();
1194
+ this.ensureAnnouncementLoading();
898
1195
  }
899
1196
  }
900
1197
  disconnectedCallback() {
@@ -910,13 +1207,16 @@ var WebInspectorElement = class extends LitElement {
910
1207
  if (typeof window === "undefined") {
911
1208
  return;
912
1209
  }
1210
+ if (!this._core) {
1211
+ this.tryAutoAttachCore();
1212
+ }
913
1213
  this.measureContext("button");
914
1214
  this.measureContext("window");
915
1215
  this.contextState.button.anchor = { horizontal: "right", vertical: "top" };
916
1216
  this.contextState.button.anchorOffset = { x: EDGE_MARGIN, y: EDGE_MARGIN };
917
1217
  this.contextState.window.anchor = { horizontal: "right", vertical: "top" };
918
1218
  this.contextState.window.anchorOffset = { x: EDGE_MARGIN, y: EDGE_MARGIN };
919
- this.hydrateStateFromCookie();
1219
+ this.hydrateStateFromStorage();
920
1220
  if (this.isOpen && this.dockMode !== "floating") {
921
1221
  this.applyDockStyles(true);
922
1222
  }
@@ -928,6 +1228,7 @@ var WebInspectorElement = class extends LitElement {
928
1228
  this.centerContext("window");
929
1229
  }
930
1230
  }
1231
+ this.ensureAnnouncementLoading();
931
1232
  this.updateHostTransform(this.isOpen ? "window" : "button");
932
1233
  }
933
1234
  render() {
@@ -937,6 +1238,7 @@ var WebInspectorElement = class extends LitElement {
937
1238
  const buttonClasses = [
938
1239
  "console-button",
939
1240
  "group",
1241
+ "relative",
940
1242
  "pointer-events-auto",
941
1243
  "inline-flex",
942
1244
  "h-12",
@@ -978,7 +1280,8 @@ var WebInspectorElement = class extends LitElement {
978
1280
  @pointercancel=${this.handlePointerCancel}
979
1281
  @click=${this.handleButtonClick}
980
1282
  >
981
- <img src=${logo_mark_default} alt="" class="h-7 w-7" loading="lazy" />
1283
+ ${this.renderAnnouncementPreview()}
1284
+ <img src=${inspector_logo_icon_default} alt="Inspector logo" class="h-5 w-auto" loading="lazy" />
982
1285
  </button>
983
1286
  `;
984
1287
  }
@@ -986,15 +1289,21 @@ var WebInspectorElement = class extends LitElement {
986
1289
  const windowState = this.contextState.window;
987
1290
  const isDocked = this.dockMode !== "floating";
988
1291
  const isTransitioning = this.hasAttribute("data-transitioning");
989
- const isCollapsed = this.dockMode === "docked-left";
990
1292
  const windowStyles = isDocked ? this.getDockedWindowStyles() : {
991
1293
  width: `${Math.round(windowState.size.width)}px`,
992
1294
  height: `${Math.round(windowState.size.height)}px`,
993
1295
  minWidth: `${MIN_WINDOW_WIDTH}px`,
994
1296
  minHeight: `${MIN_WINDOW_HEIGHT}px`
995
1297
  };
996
- const contextDropdown = this.renderContextDropdown();
997
- const hasContextDropdown = contextDropdown !== nothing;
1298
+ const hasContextDropdown = this.contextOptions.length > 0;
1299
+ const contextDropdown = hasContextDropdown ? this.renderContextDropdown() : nothing;
1300
+ const coreStatus = this.getCoreStatusSummary();
1301
+ const agentSelector = hasContextDropdown ? contextDropdown : html`
1302
+ <div class="flex items-center gap-2 rounded-md border border-dashed border-gray-200 px-2 py-1 text-xs text-gray-400">
1303
+ <span>${this.renderIcon("Bot")}</span>
1304
+ <span class="truncate">No agents available</span>
1305
+ </div>
1306
+ `;
998
1307
  return html`
999
1308
  <section
1000
1309
  class="inspector-window pointer-events-auto relative flex flex-col overflow-hidden rounded-xl border border-gray-200 bg-white text-gray-900 shadow-lg"
@@ -1013,134 +1322,81 @@ var WebInspectorElement = class extends LitElement {
1013
1322
  @pointercancel=${this.handleResizePointerCancel}
1014
1323
  ></div>
1015
1324
  ` : nothing}
1016
- <div class="flex flex-1 overflow-hidden bg-white text-gray-800">
1017
- <nav
1018
- class="flex ${isCollapsed ? "w-16" : "w-56"} shrink-0 flex-col justify-between border-r border-gray-200 bg-gray-50/50 px-3 pb-3 pt-3 text-xs transition-all duration-300"
1019
- aria-label="Inspector sections"
1325
+ <div class="flex flex-1 flex-col overflow-hidden bg-white text-gray-800">
1326
+ <div
1327
+ class="drag-handle relative z-30 flex flex-col border-b border-gray-200 bg-white/95 backdrop-blur-sm ${isDocked ? "" : this.isDragging && this.pointerContext === "window" ? "cursor-grabbing" : "cursor-grab"}"
1328
+ data-drag-context="window"
1329
+ @pointerdown=${isDocked ? void 0 : this.handlePointerDown}
1330
+ @pointermove=${isDocked ? void 0 : this.handlePointerMove}
1331
+ @pointerup=${isDocked ? void 0 : this.handlePointerUp}
1332
+ @pointercancel=${isDocked ? void 0 : this.handlePointerCancel}
1020
1333
  >
1021
- <div class="flex flex-col gap-4 overflow-y-auto">
1022
- <div
1023
- class="flex items-center ${isCollapsed ? "justify-center" : "gap-2 pl-1"} touch-none select-none ${this.isDragging && this.pointerContext === "window" ? "cursor-grabbing" : "cursor-grab"}"
1024
- data-drag-context="window"
1025
- @pointerdown=${this.handlePointerDown}
1026
- @pointermove=${this.handlePointerMove}
1027
- @pointerup=${this.handlePointerUp}
1028
- @pointercancel=${this.handlePointerCancel}
1029
- title="${isCollapsed ? "Acme Inc - Enterprise" : ""}"
1030
- >
1031
- <span
1032
- class="flex h-8 w-8 items-center justify-center rounded-lg bg-gray-900 text-white pointer-events-none"
1033
- >
1034
- ${this.renderIcon("Building2")}
1035
- </span>
1036
- ${!isCollapsed ? html`
1037
- <div class="flex flex-1 flex-col leading-tight pointer-events-none">
1038
- <span class="text-sm font-semibold text-gray-900">Acme Inc</span>
1039
- <span class="text-[10px] text-gray-500">Enterprise</span>
1040
- </div>
1041
- ` : nothing}
1334
+ <div class="flex flex-wrap items-center gap-3 px-4 py-3">
1335
+ <div class="flex items-center min-w-0">
1336
+ <img src=${inspector_logo_default} alt="Inspector logo" class="h-6 w-auto" loading="lazy" />
1042
1337
  </div>
1043
-
1044
- <div class="flex flex-col gap-2 pt-2">
1045
- ${!isCollapsed ? html`<div class="px-1 text-[10px] font-semibold uppercase tracking-wider text-gray-400">Platform</div>` : nothing}
1046
- <div class="flex flex-col gap-0.5">
1047
- ${this.menuItems.map(({ key, label, icon }) => {
1338
+ <div class="ml-auto flex min-w-0 items-center gap-2">
1339
+ <div class="min-w-[160px] max-w-xs">
1340
+ ${agentSelector}
1341
+ </div>
1342
+ <div class="flex items-center gap-1">
1343
+ ${this.renderDockControls()}
1344
+ <button
1345
+ class="flex h-8 w-8 items-center justify-center rounded-md text-gray-400 transition hover:bg-gray-100 hover:text-gray-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400"
1346
+ type="button"
1347
+ aria-label="Close Web Inspector"
1348
+ @pointerdown=${this.handleClosePointerDown}
1349
+ @click=${this.handleCloseClick}
1350
+ >
1351
+ ${this.renderIcon("X")}
1352
+ </button>
1353
+ </div>
1354
+ </div>
1355
+ </div>
1356
+ <div class="flex flex-wrap items-center gap-2 border-t border-gray-100 px-3 py-2 text-xs">
1357
+ ${this.menuItems.map(({ key, label, icon }) => {
1048
1358
  const isSelected = this.selectedMenu === key;
1049
- const buttonClasses = [
1050
- "group flex w-full items-center",
1051
- isCollapsed ? "justify-center p-2" : "gap-2 px-2 py-1.5",
1052
- "rounded-md text-left text-xs transition focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-300",
1053
- isSelected ? "bg-gray-900 text-white" : "text-gray-600 hover:bg-gray-100 hover:text-gray-900"
1359
+ const tabClasses = [
1360
+ "inline-flex items-center gap-2 rounded-md px-3 py-2 transition focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-300",
1361
+ isSelected ? "bg-gray-900 text-white shadow-sm" : "text-gray-600 hover:bg-gray-100 hover:text-gray-900"
1054
1362
  ].join(" ");
1055
- const badgeClasses = isSelected ? "bg-gray-800 text-white" : "bg-white border border-gray-200 text-gray-500 group-hover:border-gray-300 group-hover:text-gray-700";
1056
1363
  return html`
1057
- <button
1058
- type="button"
1059
- class=${buttonClasses}
1060
- aria-pressed=${isSelected}
1061
- title="${isCollapsed ? label : ""}"
1062
- @click=${() => this.handleMenuSelect(key)}
1063
- >
1064
- <span
1065
- class="flex h-6 w-6 items-center justify-center rounded ${isCollapsed && isSelected ? "text-white" : isCollapsed ? "text-gray-600" : badgeClasses}"
1066
- aria-hidden="true"
1067
- >
1068
- ${this.renderIcon(icon)}
1069
- </span>
1070
- ${!isCollapsed ? html`
1071
- <span class="flex-1">${label}</span>
1072
- <span class="text-gray-400 opacity-60">${this.renderIcon("ChevronRight")}</span>
1073
- ` : nothing}
1074
- </button>
1075
- `;
1364
+ <button
1365
+ type="button"
1366
+ class=${tabClasses}
1367
+ aria-pressed=${isSelected}
1368
+ @click=${() => this.handleMenuSelect(key)}
1369
+ >
1370
+ <span class="text-gray-400 ${isSelected ? "text-white" : ""}">
1371
+ ${this.renderIcon(icon)}
1372
+ </span>
1373
+ <span>${label}</span>
1374
+ </button>
1375
+ `;
1076
1376
  })}
1077
- </div>
1078
- </div>
1079
1377
  </div>
1080
-
1081
- <div
1082
- class="relative flex items-center ${isCollapsed ? "justify-center p-1" : ""} rounded-lg border border-gray-200 bg-white ${isCollapsed ? "" : "px-2 py-2"} text-left text-xs text-gray-700 cursor-pointer hover:bg-gray-50 transition"
1083
- title="${isCollapsed ? "John Snow - john@snow.com" : ""}"
1084
- >
1085
- <span
1086
- class="${isCollapsed ? "w-8 h-8 shrink-0" : "w-6 h-6"} flex items-center justify-center overflow-hidden rounded bg-gray-100 text-[10px] font-semibold text-gray-700"
1087
- >
1088
- JS
1089
- </span>
1090
- ${!isCollapsed ? html`
1091
- <div class="pl-2 flex flex-1 flex-col leading-tight">
1092
- <span class="font-medium text-gray-900">John Snow</span>
1093
- <span class="text-[10px] text-gray-500">john@snow.com</span>
1094
- </div>
1095
- <span class="text-gray-300">${this.renderIcon("ChevronRight")}</span>
1096
- ` : nothing}
1097
- </div>
1098
- </nav>
1099
- <div class="relative flex flex-1 flex-col overflow-hidden">
1100
- <div
1101
- class="drag-handle flex items-center justify-between border-b border-gray-200 px-4 py-3 touch-none select-none ${isDocked ? "" : this.isDragging && this.pointerContext === "window" ? "cursor-grabbing" : "cursor-grab"}"
1102
- data-drag-context="window"
1103
- @pointerdown=${isDocked ? void 0 : this.handlePointerDown}
1104
- @pointermove=${isDocked ? void 0 : this.handlePointerMove}
1105
- @pointerup=${isDocked ? void 0 : this.handlePointerUp}
1106
- @pointercancel=${isDocked ? void 0 : this.handlePointerCancel}
1107
- >
1108
- <div class="flex min-w-0 flex-1 items-center gap-2 text-xs text-gray-500">
1109
- <div class="flex min-w-0 flex-1 items-center text-xs text-gray-600">
1110
- <span class="flex shrink-0 items-center gap-1">
1111
- <span>🪁</span>
1112
- <span class="font-medium whitespace-nowrap">CopilotKit Inspector</span>
1113
- </span>
1114
- <span class="mx-3 h-3 w-px shrink-0 bg-gray-200"></span>
1115
- <span class="shrink-0 text-gray-400">
1116
- ${this.renderIcon(this.getSelectedMenu().icon)}
1117
- </span>
1118
- <span class="ml-2 truncate">${this.getSelectedMenu().label}</span>
1119
- ${hasContextDropdown ? html`
1120
- <span class="mx-3 h-3 w-px shrink-0 bg-gray-200"></span>
1121
- <div class="min-w-0">${contextDropdown}</div>
1122
- ` : nothing}
1123
- </div>
1378
+ </div>
1379
+ <div class="flex flex-1 flex-col overflow-hidden">
1380
+ <div class="flex-1 overflow-auto">
1381
+ ${this.renderAnnouncementPanel()}
1382
+ ${this.renderCoreWarningBanner()}
1383
+ ${this.renderMainContent()}
1384
+ <slot></slot>
1124
1385
  </div>
1125
- <div class="flex items-center gap-1">
1126
- ${this.renderDockControls()}
1127
- <button
1128
- class="flex h-6 w-6 items-center justify-center rounded text-gray-400 transition hover:bg-gray-100 hover:text-gray-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400"
1129
- type="button"
1130
- aria-label="Close Web Inspector"
1131
- @pointerdown=${this.handleClosePointerDown}
1132
- @click=${this.handleCloseClick}
1386
+ <div class="border-t border-gray-200 bg-gray-50 px-4 py-2">
1387
+ <div
1388
+ class="flex items-center gap-2 rounded-md px-3 py-2 text-xs ${coreStatus.tone} w-full overflow-hidden my-1"
1389
+ title=${coreStatus.description}
1133
1390
  >
1134
- ${this.renderIcon("X")}
1135
- </button>
1391
+ <span class="flex h-6 w-6 items-center justify-center rounded bg-white/60">
1392
+ ${this.renderIcon("Activity")}
1393
+ </span>
1394
+ <span class="font-medium">${coreStatus.label}</span>
1395
+ <span class="truncate text-[11px] opacity-80">${coreStatus.description}</span>
1396
+ </div>
1136
1397
  </div>
1137
1398
  </div>
1138
- <div class="flex-1 overflow-auto">
1139
- ${this.renderMainContent()}
1140
- <slot></slot>
1141
- </div>
1142
1399
  </div>
1143
- </div>
1144
1400
  <div
1145
1401
  class="resize-handle pointer-events-auto absolute bottom-1 right-1 flex h-5 w-5 cursor-nwse-resize items-center justify-center text-gray-400 transition hover:text-gray-600"
1146
1402
  role="presentation"
@@ -1165,11 +1421,11 @@ var WebInspectorElement = class extends LitElement {
1165
1421
  </section>
1166
1422
  `;
1167
1423
  }
1168
- hydrateStateFromCookieEarly() {
1424
+ hydrateStateFromStorageEarly() {
1169
1425
  if (typeof document === "undefined" || typeof window === "undefined") {
1170
1426
  return;
1171
1427
  }
1172
- const persisted = loadInspectorState(COOKIE_NAME);
1428
+ const persisted = loadInspectorState(INSPECTOR_STORAGE_KEY);
1173
1429
  if (!persisted) {
1174
1430
  return;
1175
1431
  }
@@ -1190,11 +1446,11 @@ var WebInspectorElement = class extends LitElement {
1190
1446
  this.pendingSelectedContext = persisted.selectedContext;
1191
1447
  }
1192
1448
  }
1193
- hydrateStateFromCookie() {
1449
+ hydrateStateFromStorage() {
1194
1450
  if (typeof document === "undefined" || typeof window === "undefined") {
1195
1451
  return;
1196
1452
  }
1197
- const persisted = loadInspectorState(COOKIE_NAME);
1453
+ const persisted = loadInspectorState(INSPECTOR_STORAGE_KEY);
1198
1454
  if (!persisted) {
1199
1455
  return;
1200
1456
  }
@@ -1309,7 +1565,7 @@ var WebInspectorElement = class extends LitElement {
1309
1565
  selectedMenu: this.selectedMenu,
1310
1566
  selectedContext: this.selectedContext
1311
1567
  };
1312
- saveInspectorState(COOKIE_NAME, state, COOKIE_MAX_AGE_SECONDS);
1568
+ saveInspectorState(INSPECTOR_STORAGE_KEY, state);
1313
1569
  this.pendingSelectedContext = state.selectedContext ?? null;
1314
1570
  }
1315
1571
  clampWindowSize(size) {
@@ -1329,7 +1585,6 @@ var WebInspectorElement = class extends LitElement {
1329
1585
  }
1330
1586
  this.startHostTransition();
1331
1587
  this.removeDockStyles();
1332
- const previousMode = this.dockMode;
1333
1588
  this.dockMode = mode;
1334
1589
  if (mode !== "floating") {
1335
1590
  if (mode === "docked-left") {
@@ -1463,6 +1718,8 @@ var WebInspectorElement = class extends LitElement {
1463
1718
  if (this.isOpen) {
1464
1719
  return;
1465
1720
  }
1721
+ this.showAnnouncementPreview = false;
1722
+ this.ensureAnnouncementLoading();
1466
1723
  this.isOpen = true;
1467
1724
  this.persistState();
1468
1725
  if (this.dockMode !== "floating") {
@@ -1521,7 +1778,7 @@ var WebInspectorElement = class extends LitElement {
1521
1778
  if (this.dockMode === "floating") {
1522
1779
  return html`
1523
1780
  <button
1524
- class="flex h-6 w-6 items-center justify-center rounded text-gray-400 transition hover:bg-gray-100 hover:text-gray-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400"
1781
+ class="flex h-8 w-8 items-center justify-center rounded-md text-gray-400 transition hover:bg-gray-100 hover:text-gray-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400"
1525
1782
  type="button"
1526
1783
  aria-label="Dock to left"
1527
1784
  title="Dock Left"
@@ -1533,7 +1790,7 @@ var WebInspectorElement = class extends LitElement {
1533
1790
  } else {
1534
1791
  return html`
1535
1792
  <button
1536
- class="flex h-6 w-6 items-center justify-center rounded text-gray-400 transition hover:bg-gray-100 hover:text-gray-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400"
1793
+ class="flex h-8 w-8 items-center justify-center rounded-md text-gray-400 transition hover:bg-gray-100 hover:text-gray-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-400"
1537
1794
  type="button"
1538
1795
  aria-label="Float window"
1539
1796
  title="Float"
@@ -1570,10 +1827,197 @@ var WebInspectorElement = class extends LitElement {
1570
1827
  serializeAttributes(attributes) {
1571
1828
  return Object.entries(attributes).filter(([key, value]) => key !== "key" && value !== void 0 && value !== null && value !== "").map(([key, value]) => `${key}="${String(value).replace(/"/g, "&quot;")}"`).join(" ");
1572
1829
  }
1830
+ sanitizeForLogging(value, depth = 0, seen = /* @__PURE__ */ new WeakSet()) {
1831
+ if (value === void 0) {
1832
+ return "[undefined]";
1833
+ }
1834
+ if (value === null || typeof value === "number" || typeof value === "boolean") {
1835
+ return value;
1836
+ }
1837
+ if (typeof value === "string") {
1838
+ return value;
1839
+ }
1840
+ if (typeof value === "bigint" || typeof value === "symbol" || typeof value === "function") {
1841
+ return String(value);
1842
+ }
1843
+ if (value instanceof Date) {
1844
+ return value.toISOString();
1845
+ }
1846
+ if (Array.isArray(value)) {
1847
+ if (depth >= 4) {
1848
+ return "[Truncated depth]";
1849
+ }
1850
+ return value.map((item) => this.sanitizeForLogging(item, depth + 1, seen));
1851
+ }
1852
+ if (typeof value === "object") {
1853
+ if (seen.has(value)) {
1854
+ return "[Circular]";
1855
+ }
1856
+ seen.add(value);
1857
+ if (depth >= 4) {
1858
+ return "[Truncated depth]";
1859
+ }
1860
+ const result = {};
1861
+ for (const [key, entry] of Object.entries(value)) {
1862
+ result[key] = this.sanitizeForLogging(entry, depth + 1, seen);
1863
+ }
1864
+ return result;
1865
+ }
1866
+ return String(value);
1867
+ }
1868
+ normalizeEventPayload(_type, payload) {
1869
+ if (payload && typeof payload === "object" && "event" in payload) {
1870
+ const { event, ...rest } = payload;
1871
+ const cleaned = Object.keys(rest).length === 0 ? event : { event, ...rest };
1872
+ return this.sanitizeForLogging(cleaned);
1873
+ }
1874
+ return this.sanitizeForLogging(payload);
1875
+ }
1876
+ normalizeMessageContent(content) {
1877
+ if (typeof content === "string") {
1878
+ return content;
1879
+ }
1880
+ if (content && typeof content === "object" && "text" in content) {
1881
+ const maybeText = content.text;
1882
+ if (typeof maybeText === "string") {
1883
+ return maybeText;
1884
+ }
1885
+ }
1886
+ if (content === null || content === void 0) {
1887
+ return "";
1888
+ }
1889
+ if (typeof content === "object") {
1890
+ try {
1891
+ return JSON.stringify(this.sanitizeForLogging(content));
1892
+ } catch {
1893
+ return "";
1894
+ }
1895
+ }
1896
+ return String(content);
1897
+ }
1898
+ normalizeToolCalls(raw) {
1899
+ if (!Array.isArray(raw)) {
1900
+ return [];
1901
+ }
1902
+ return raw.map((entry) => {
1903
+ if (!entry || typeof entry !== "object") {
1904
+ return null;
1905
+ }
1906
+ const call = entry;
1907
+ const fn = call.function;
1908
+ const functionName = typeof fn?.name === "string" ? fn.name : typeof call.toolName === "string" ? call.toolName : void 0;
1909
+ const args = fn && "arguments" in fn ? fn.arguments : call.arguments;
1910
+ const normalized = {
1911
+ id: typeof call.id === "string" ? call.id : void 0,
1912
+ toolName: typeof call.toolName === "string" ? call.toolName : functionName,
1913
+ status: typeof call.status === "string" ? call.status : void 0
1914
+ };
1915
+ if (functionName) {
1916
+ normalized.function = {
1917
+ name: functionName,
1918
+ arguments: this.sanitizeForLogging(args)
1919
+ };
1920
+ }
1921
+ return normalized;
1922
+ }).filter((call) => Boolean(call));
1923
+ }
1924
+ normalizeAgentMessage(message) {
1925
+ if (!message || typeof message !== "object") {
1926
+ return null;
1927
+ }
1928
+ const raw = message;
1929
+ const role = typeof raw.role === "string" ? raw.role : "unknown";
1930
+ const contentText = this.normalizeMessageContent(raw.content);
1931
+ const toolCalls = this.normalizeToolCalls(raw.toolCalls);
1932
+ return {
1933
+ id: typeof raw.id === "string" ? raw.id : void 0,
1934
+ role,
1935
+ contentText,
1936
+ contentRaw: raw.content !== void 0 ? this.sanitizeForLogging(raw.content) : void 0,
1937
+ toolCalls
1938
+ };
1939
+ }
1940
+ normalizeAgentMessages(messages) {
1941
+ if (!Array.isArray(messages)) {
1942
+ return null;
1943
+ }
1944
+ const normalized = messages.map((message) => this.normalizeAgentMessage(message)).filter((msg) => msg !== null);
1945
+ return normalized;
1946
+ }
1947
+ normalizeContextStore(context) {
1948
+ if (!context || typeof context !== "object") {
1949
+ return {};
1950
+ }
1951
+ const normalized = {};
1952
+ for (const [key, entry] of Object.entries(context)) {
1953
+ if (entry && typeof entry === "object" && "value" in entry) {
1954
+ const candidate = entry;
1955
+ const description = typeof candidate.description === "string" && candidate.description.trim().length > 0 ? candidate.description : void 0;
1956
+ normalized[key] = { description, value: candidate.value };
1957
+ } else {
1958
+ normalized[key] = { value: entry };
1959
+ }
1960
+ }
1961
+ return normalized;
1962
+ }
1573
1963
  getSelectedMenu() {
1574
1964
  const found = this.menuItems.find((item) => item.key === this.selectedMenu);
1575
1965
  return found ?? this.menuItems[0];
1576
1966
  }
1967
+ renderCoreWarningBanner() {
1968
+ if (this._core) {
1969
+ return nothing;
1970
+ }
1971
+ return html`
1972
+ <div class="mx-4 my-3 flex items-start gap-2 rounded-md border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-800">
1973
+ <span class="mt-0.5 shrink-0 text-amber-600">${this.renderIcon("AlertTriangle")}</span>
1974
+ <div class="space-y-1">
1975
+ <div class="font-semibold text-amber-900">CopilotKit core not attached</div>
1976
+ <p class="text-[11px] leading-snug text-amber-800">
1977
+ Pass a live <code>CopilotKitCore</code> instance to <code>&lt;cpk-web-inspector&gt;</code> or expose it on
1978
+ <code>window.__COPILOTKIT_CORE__</code> for auto-attach.
1979
+ </p>
1980
+ </div>
1981
+ </div>
1982
+ `;
1983
+ }
1984
+ getCoreStatusSummary() {
1985
+ if (!this._core) {
1986
+ return {
1987
+ label: "Core not attached",
1988
+ tone: "border border-amber-200 bg-amber-50 text-amber-800",
1989
+ description: "Pass a CopilotKitCore instance to <cpk-web-inspector> or enable auto-attach."
1990
+ };
1991
+ }
1992
+ const status = this.runtimeStatus ?? CopilotKitCoreRuntimeConnectionStatus.Disconnected;
1993
+ const lastErrorMessage = this.lastCoreError?.message;
1994
+ if (status === CopilotKitCoreRuntimeConnectionStatus.Error) {
1995
+ return {
1996
+ label: "Runtime error",
1997
+ tone: "border border-rose-200 bg-rose-50 text-rose-700",
1998
+ description: lastErrorMessage ?? "CopilotKit runtime reported an error."
1999
+ };
2000
+ }
2001
+ if (status === CopilotKitCoreRuntimeConnectionStatus.Connecting) {
2002
+ return {
2003
+ label: "Connecting",
2004
+ tone: "border border-amber-200 bg-amber-50 text-amber-800",
2005
+ description: "Waiting for CopilotKit runtime to finish connecting."
2006
+ };
2007
+ }
2008
+ if (status === CopilotKitCoreRuntimeConnectionStatus.Connected) {
2009
+ return {
2010
+ label: "Connected",
2011
+ tone: "border border-emerald-200 bg-emerald-50 text-emerald-700",
2012
+ description: "Live runtime connection established."
2013
+ };
2014
+ }
2015
+ return {
2016
+ label: "Disconnected",
2017
+ tone: "border border-gray-200 bg-gray-50 text-gray-700",
2018
+ description: lastErrorMessage ?? "Waiting for CopilotKit runtime to connect."
2019
+ };
2020
+ }
1577
2021
  renderMainContent() {
1578
2022
  if (this.selectedMenu === "ag-ui-events") {
1579
2023
  return this.renderEventsTable();
@@ -1587,15 +2031,12 @@ var WebInspectorElement = class extends LitElement {
1587
2031
  if (this.selectedMenu === "agent-context") {
1588
2032
  return this.renderContextView();
1589
2033
  }
1590
- return html`
1591
- <div class="flex flex-col gap-3 p-4">
1592
- <div class="h-24 rounded-lg bg-gray-50"></div>
1593
- <div class="h-20 rounded-lg bg-gray-50"></div>
1594
- </div>
1595
- `;
2034
+ return nothing;
1596
2035
  }
1597
2036
  renderEventsTable() {
1598
2037
  const events = this.getEventsForSelectedContext();
2038
+ const filteredEvents = this.filterEvents(events);
2039
+ const selectedLabel = this.selectedContext === "all-agents" ? "all agents" : `agent ${this.selectedContext}`;
1599
2040
  if (events.length === 0) {
1600
2041
  return html`
1601
2042
  <div class="flex h-full items-center justify-center px-4 py-8 text-center">
@@ -1609,27 +2050,111 @@ var WebInspectorElement = class extends LitElement {
1609
2050
  </div>
1610
2051
  `;
1611
2052
  }
2053
+ if (filteredEvents.length === 0) {
2054
+ return html`
2055
+ <div class="flex h-full items-center justify-center px-4 py-8 text-center">
2056
+ <div class="max-w-md space-y-3">
2057
+ <div class="flex justify-center text-gray-300 [&>svg]:!h-8 [&>svg]:!w-8">
2058
+ ${this.renderIcon("Filter")}
2059
+ </div>
2060
+ <p class="text-sm text-gray-600">No events match the current filters.</p>
2061
+ <div>
2062
+ <button
2063
+ type="button"
2064
+ class="inline-flex items-center gap-1 rounded-md bg-gray-900 px-3 py-1.5 text-[11px] font-medium text-white transition hover:bg-gray-800"
2065
+ @click=${this.resetEventFilters}
2066
+ >
2067
+ ${this.renderIcon("RefreshCw")}
2068
+ <span>Reset filters</span>
2069
+ </button>
2070
+ </div>
2071
+ </div>
2072
+ </div>
2073
+ `;
2074
+ }
1612
2075
  return html`
1613
- <div class="relative h-full overflow-auto">
1614
- <table class="w-full border-separate border-spacing-0 text-xs">
1615
- <thead class="sticky top-0 z-10">
1616
- <tr class="bg-white">
1617
- <th class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900">
1618
- Agent
1619
- </th>
1620
- <th class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900">
1621
- Time
1622
- </th>
1623
- <th class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900">
1624
- Event Type
1625
- </th>
1626
- <th class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900">
1627
- AG-UI Event
1628
- </th>
1629
- </tr>
1630
- </thead>
1631
- <tbody>
1632
- ${events.map((event, index) => {
2076
+ <div class="flex h-full flex-col">
2077
+ <div class="flex flex-col gap-1.5 border-b border-gray-200 bg-white px-4 py-2.5">
2078
+ <div class="flex flex-wrap items-center gap-2">
2079
+ <div class="relative min-w-[200px] flex-1">
2080
+ <input
2081
+ type="search"
2082
+ class="w-full rounded-md border border-gray-200 px-3 py-1.5 text-[11px] text-gray-700 shadow-sm outline-none ring-1 ring-transparent transition focus:border-gray-300 focus:ring-gray-200"
2083
+ placeholder="Search agent, type, payload"
2084
+ .value=${this.eventFilterText}
2085
+ @input=${this.handleEventFilterInput}
2086
+ />
2087
+ </div>
2088
+ <select
2089
+ class="w-40 rounded-md border border-gray-200 bg-white px-2 py-1.5 text-[11px] text-gray-700 shadow-sm outline-none transition focus:border-gray-300 focus:ring-2 focus:ring-gray-200"
2090
+ .value=${this.eventTypeFilter}
2091
+ @change=${this.handleEventTypeChange}
2092
+ >
2093
+ <option value="all">All event types</option>
2094
+ ${AGENT_EVENT_TYPES.map(
2095
+ (type) => html`<option value=${type}>${type.toLowerCase().replace(/_/g, " ")}</option>`
2096
+ )}
2097
+ </select>
2098
+ <div class="flex items-center gap-1 text-[11px]">
2099
+ <button
2100
+ type="button"
2101
+ class="tooltip-target flex h-8 w-8 items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50"
2102
+ title="Reset filters"
2103
+ data-tooltip="Reset filters"
2104
+ aria-label="Reset filters"
2105
+ @click=${this.resetEventFilters}
2106
+ ?disabled=${!this.eventFilterText && this.eventTypeFilter === "all"}
2107
+ >
2108
+ ${this.renderIcon("RotateCw")}
2109
+ </button>
2110
+ <button
2111
+ type="button"
2112
+ class="tooltip-target flex h-8 w-8 items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50"
2113
+ title="Export JSON"
2114
+ data-tooltip="Export JSON"
2115
+ aria-label="Export JSON"
2116
+ @click=${() => this.exportEvents(filteredEvents)}
2117
+ ?disabled=${filteredEvents.length === 0}
2118
+ >
2119
+ ${this.renderIcon("Download")}
2120
+ </button>
2121
+ <button
2122
+ type="button"
2123
+ class="tooltip-target flex h-8 w-8 items-center justify-center rounded-md border border-gray-200 bg-white text-gray-600 transition hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50"
2124
+ title="Clear events"
2125
+ data-tooltip="Clear events"
2126
+ aria-label="Clear events"
2127
+ @click=${this.handleClearEvents}
2128
+ ?disabled=${events.length === 0}
2129
+ >
2130
+ ${this.renderIcon("Trash2")}
2131
+ </button>
2132
+ </div>
2133
+ </div>
2134
+ <div class="text-[11px] text-gray-500">
2135
+ Showing ${filteredEvents.length} of ${events.length}${this.selectedContext === "all-agents" ? "" : ` for ${selectedLabel}`}
2136
+ </div>
2137
+ </div>
2138
+ <div class="relative h-full w-full overflow-y-auto overflow-x-hidden">
2139
+ <table class="w-full table-fixed border-collapse text-xs box-border">
2140
+ <thead class="sticky top-0 z-10">
2141
+ <tr class="bg-white">
2142
+ <th class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900">
2143
+ Agent
2144
+ </th>
2145
+ <th class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900">
2146
+ Time
2147
+ </th>
2148
+ <th class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900">
2149
+ Event Type
2150
+ </th>
2151
+ <th class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900">
2152
+ AG-UI Event
2153
+ </th>
2154
+ </tr>
2155
+ </thead>
2156
+ <tbody>
2157
+ ${filteredEvents.map((event, index) => {
1633
2158
  const rowBg = index % 2 === 0 ? "bg-white" : "bg-gray-50/50";
1634
2159
  const badgeClasses = this.getEventBadgeClasses(event.type);
1635
2160
  const extractedEvent = this.extractEventFromPayload(event.payload);
@@ -1637,45 +2162,79 @@ var WebInspectorElement = class extends LitElement {
1637
2162
  const prettyEvent = this.stringifyPayload(extractedEvent, true) || inlineEvent;
1638
2163
  const isExpanded = this.expandedRows.has(event.id);
1639
2164
  return html`
1640
- <tr
1641
- class="${rowBg} cursor-pointer transition hover:bg-blue-50/50"
1642
- @click=${() => this.toggleRowExpansion(event.id)}
1643
- >
1644
- <td class="border-l border-r border-b border-gray-200 px-3 py-2">
1645
- <span class="font-mono text-[11px] text-gray-600">${event.agentId}</span>
1646
- </td>
1647
- <td class="border-r border-b border-gray-200 px-3 py-2 font-mono text-[11px] text-gray-600">
1648
- <span title=${new Date(event.timestamp).toLocaleString()}>
1649
- ${new Date(event.timestamp).toLocaleTimeString()}
1650
- </span>
1651
- </td>
1652
- <td class="border-r border-b border-gray-200 px-3 py-2">
1653
- <span class=${badgeClasses}>${event.type}</span>
1654
- </td>
1655
- <td class="border-r border-b border-gray-200 px-3 py-2 font-mono text-[10px] text-gray-600 ${isExpanded ? "" : "truncate max-w-xs"}">
1656
- ${isExpanded ? html`
1657
- <div class="group relative">
1658
- <pre class="m-0 whitespace-pre-wrap text-[10px] font-mono text-gray-600">${prettyEvent}</pre>
1659
- <button
1660
- class="absolute right-0 top-0 cursor-pointer rounded px-2 py-1 text-[10px] opacity-0 transition group-hover:opacity-100 ${this.copiedEvents.has(event.id) ? "bg-green-100 text-green-700" : "bg-gray-100 text-gray-600 hover:bg-gray-200 hover:text-gray-900"}"
1661
- @click=${(e) => {
2165
+ <tr
2166
+ class="${rowBg} cursor-pointer transition hover:bg-blue-50/50"
2167
+ @click=${() => this.toggleRowExpansion(event.id)}
2168
+ >
2169
+ <td class="border-l border-r border-b border-gray-200 px-3 py-2">
2170
+ <span class="font-mono text-[11px] text-gray-600">${event.agentId}</span>
2171
+ </td>
2172
+ <td class="border-r border-b border-gray-200 px-3 py-2 font-mono text-[11px] text-gray-600">
2173
+ <span title=${new Date(event.timestamp).toLocaleString()}>
2174
+ ${new Date(event.timestamp).toLocaleTimeString()}
2175
+ </span>
2176
+ </td>
2177
+ <td class="border-r border-b border-gray-200 px-3 py-2">
2178
+ <span class=${badgeClasses}>${event.type}</span>
2179
+ </td>
2180
+ <td class="border-r border-b border-gray-200 px-3 py-2 font-mono text-[10px] text-gray-600 ${isExpanded ? "" : "truncate max-w-xs"}">
2181
+ ${isExpanded ? html`
2182
+ <div class="group relative">
2183
+ <pre class="m-0 whitespace-pre-wrap break-words text-[10px] font-mono text-gray-600">${prettyEvent}</pre>
2184
+ <button
2185
+ class="absolute right-0 top-0 cursor-pointer rounded px-2 py-1 text-[10px] opacity-0 transition group-hover:opacity-100 ${this.copiedEvents.has(event.id) ? "bg-green-100 text-green-700" : "bg-gray-100 text-gray-600 hover:bg-gray-200 hover:text-gray-900"}"
2186
+ @click=${(e) => {
1662
2187
  e.stopPropagation();
1663
2188
  this.copyToClipboard(prettyEvent, event.id);
1664
2189
  }}
1665
- >
1666
- ${this.copiedEvents.has(event.id) ? html`<span>✓ Copied</span>` : html`<span>Copy</span>`}
1667
- </button>
1668
- </div>
1669
- ` : inlineEvent}
1670
- </td>
1671
- </tr>
1672
- `;
2190
+ >
2191
+ ${this.copiedEvents.has(event.id) ? html`<span>✓ Copied</span>` : html`<span>Copy</span>`}
2192
+ </button>
2193
+ </div>
2194
+ ` : inlineEvent}
2195
+ </td>
2196
+ </tr>
2197
+ `;
1673
2198
  })}
1674
- </tbody>
1675
- </table>
2199
+ </tbody>
2200
+ </table>
2201
+ </div>
1676
2202
  </div>
1677
2203
  `;
1678
2204
  }
2205
+ handleEventFilterInput(event) {
2206
+ const target = event.target;
2207
+ this.eventFilterText = target?.value ?? "";
2208
+ this.requestUpdate();
2209
+ }
2210
+ handleEventTypeChange(event) {
2211
+ const target = event.target;
2212
+ const value = target?.value;
2213
+ if (!value) {
2214
+ return;
2215
+ }
2216
+ this.eventTypeFilter = value;
2217
+ this.requestUpdate();
2218
+ }
2219
+ resetEventFilters() {
2220
+ this.eventFilterText = "";
2221
+ this.eventTypeFilter = "all";
2222
+ this.requestUpdate();
2223
+ }
2224
+ exportEvents(events) {
2225
+ try {
2226
+ const payload = JSON.stringify(events, null, 2);
2227
+ const blob = new Blob([payload], { type: "application/json" });
2228
+ const url = URL.createObjectURL(blob);
2229
+ const anchor = document.createElement("a");
2230
+ anchor.href = url;
2231
+ anchor.download = `copilotkit-events-${Date.now()}.json`;
2232
+ anchor.click();
2233
+ URL.revokeObjectURL(url);
2234
+ } catch (error) {
2235
+ console.error("Failed to export events", error);
2236
+ }
2237
+ }
1679
2238
  renderAgentsView() {
1680
2239
  if (this.selectedContext === "all-agents") {
1681
2240
  return html`
@@ -1769,7 +2328,7 @@ var WebInspectorElement = class extends LitElement {
1769
2328
  <h4 class="text-sm font-semibold text-gray-900">Current Messages</h4>
1770
2329
  </div>
1771
2330
  <div class="overflow-auto">
1772
- ${messages && Array.isArray(messages) && messages.length > 0 ? html`
2331
+ ${messages && messages.length > 0 ? html`
1773
2332
  <table class="w-full text-xs">
1774
2333
  <thead class="bg-gray-50">
1775
2334
  <tr>
@@ -1778,16 +2337,17 @@ var WebInspectorElement = class extends LitElement {
1778
2337
  </tr>
1779
2338
  </thead>
1780
2339
  <tbody class="divide-y divide-gray-200">
1781
- ${messages.map((msg, idx) => {
1782
- const role = msg?.role ?? "unknown";
2340
+ ${messages.map((msg) => {
2341
+ const role = msg.role || "unknown";
1783
2342
  const roleColors = {
1784
2343
  user: "bg-blue-100 text-blue-800",
1785
2344
  assistant: "bg-green-100 text-green-800",
1786
2345
  system: "bg-gray-100 text-gray-800",
2346
+ tool: "bg-amber-100 text-amber-800",
1787
2347
  unknown: "bg-gray-100 text-gray-600"
1788
2348
  };
1789
- const rawContent = typeof msg?.content === "string" ? msg.content : msg?.content != null ? JSON.stringify(msg.content) : "";
1790
- const toolCalls = Array.isArray(msg?.toolCalls) ? msg.toolCalls : [];
2349
+ const rawContent = msg.contentText ?? "";
2350
+ const toolCalls = msg.toolCalls ?? [];
1791
2351
  const hasContent = rawContent.trim().length > 0;
1792
2352
  const contentFallback = toolCalls.length > 0 ? "Invoked tool call" : "\u2014";
1793
2353
  return html`
@@ -1820,19 +2380,13 @@ var WebInspectorElement = class extends LitElement {
1820
2380
  `;
1821
2381
  }
1822
2382
  renderContextDropdown() {
1823
- if (this.selectedMenu === "agent-context") {
1824
- return nothing;
1825
- }
1826
- if (this.selectedMenu !== "ag-ui-events" && this.selectedMenu !== "agents" && this.selectedMenu !== "frontend-tools") {
1827
- return nothing;
1828
- }
1829
2383
  const filteredOptions = this.selectedMenu === "agents" ? this.contextOptions.filter((opt) => opt.key !== "all-agents") : this.contextOptions;
1830
2384
  const selectedLabel = filteredOptions.find((opt) => opt.key === this.selectedContext)?.label ?? "";
1831
2385
  return html`
1832
- <div class="relative min-w-0 flex-1" data-context-dropdown-root="true">
2386
+ <div class="relative z-40 min-w-0 flex-1" data-context-dropdown-root="true">
1833
2387
  <button
1834
2388
  type="button"
1835
- class="flex w-full min-w-0 max-w-[150px] items-center gap-1.5 rounded-md px-2 py-0.5 text-xs font-medium text-gray-600 transition hover:bg-gray-100 hover:text-gray-900"
2389
+ class="relative z-40 flex w-full min-w-0 max-w-[240px] items-center gap-1.5 rounded-md border border-gray-200 px-2 py-1 text-xs font-medium text-gray-700 transition hover:border-gray-300 hover:bg-gray-50"
1836
2390
  @pointerdown=${this.handleContextDropdownToggle}
1837
2391
  >
1838
2392
  <span class="truncate flex-1 text-left">${selectedLabel}</span>
@@ -1903,7 +2457,8 @@ var WebInspectorElement = class extends LitElement {
1903
2457
  </div>
1904
2458
  `;
1905
2459
  }
1906
- const allTools = this.extractToolsFromAgents();
2460
+ this.refreshToolsSnapshot();
2461
+ const allTools = this.cachedTools;
1907
2462
  if (allTools.length === 0) {
1908
2463
  return html`
1909
2464
  <div class="flex h-full items-center justify-center px-4 py-8 text-center">
@@ -1917,7 +2472,7 @@ var WebInspectorElement = class extends LitElement {
1917
2472
  </div>
1918
2473
  `;
1919
2474
  }
1920
- const filteredTools = this.selectedContext === "all-agents" ? allTools : allTools.filter((tool) => tool.agentId === this.selectedContext);
2475
+ const filteredTools = this.selectedContext === "all-agents" ? allTools : allTools.filter((tool) => !tool.agentId || tool.agentId === this.selectedContext);
1921
2476
  return html`
1922
2477
  <div class="flex h-full flex-col overflow-hidden">
1923
2478
  <div class="overflow-auto p-4">
@@ -1933,6 +2488,15 @@ var WebInspectorElement = class extends LitElement {
1933
2488
  return [];
1934
2489
  }
1935
2490
  const tools = [];
2491
+ for (const coreTool of this._core.tools ?? []) {
2492
+ tools.push({
2493
+ agentId: coreTool.agentId ?? "",
2494
+ name: coreTool.name,
2495
+ description: coreTool.description,
2496
+ parameters: coreTool.parameters,
2497
+ type: "handler"
2498
+ });
2499
+ }
1936
2500
  for (const [agentId, agent] of Object.entries(this._core.agents)) {
1937
2501
  if (!agent) continue;
1938
2502
  const handlers = agent.toolHandlers;
@@ -1943,8 +2507,8 @@ var WebInspectorElement = class extends LitElement {
1943
2507
  tools.push({
1944
2508
  agentId,
1945
2509
  name: toolName,
1946
- description: handlerObj.description || handlerObj.tool?.description,
1947
- parameters: handlerObj.parameters || handlerObj.tool?.parameters,
2510
+ description: typeof handlerObj.description === "string" && handlerObj.description || handlerObj.tool?.description,
2511
+ parameters: handlerObj.parameters ?? handlerObj.tool?.parameters,
1948
2512
  type: "handler"
1949
2513
  });
1950
2514
  }
@@ -1959,8 +2523,8 @@ var WebInspectorElement = class extends LitElement {
1959
2523
  tools.push({
1960
2524
  agentId,
1961
2525
  name: toolName,
1962
- description: rendererObj.description || rendererObj.tool?.description,
1963
- parameters: rendererObj.parameters || rendererObj.tool?.parameters,
2526
+ description: typeof rendererObj.description === "string" && rendererObj.description || rendererObj.tool?.description,
2527
+ parameters: rendererObj.parameters ?? rendererObj.tool?.parameters,
1964
2528
  type: "renderer"
1965
2529
  });
1966
2530
  }
@@ -2064,14 +2628,19 @@ var WebInspectorElement = class extends LitElement {
2064
2628
  return result;
2065
2629
  }
2066
2630
  const zodDef = parameters._def;
2067
- if (zodDef) {
2631
+ if (zodDef && typeof zodDef === "object") {
2068
2632
  if (zodDef.typeName === "ZodObject") {
2069
- const shape = zodDef.shape?.() || zodDef.shape;
2633
+ const rawShape = zodDef.shape;
2634
+ const shape = typeof rawShape === "function" ? rawShape() : rawShape;
2635
+ if (!shape || typeof shape !== "object") {
2636
+ return result;
2637
+ }
2070
2638
  const requiredKeys = /* @__PURE__ */ new Set();
2071
2639
  if (zodDef.unknownKeys === "strict" || !zodDef.catchall) {
2072
2640
  Object.keys(shape || {}).forEach((key) => {
2073
- const fieldDef = shape[key]?._def;
2074
- if (fieldDef && !this.isZodOptional(shape[key])) {
2641
+ const candidate = shape[key];
2642
+ const fieldDef = candidate?._def;
2643
+ if (fieldDef && !this.isZodOptional(candidate)) {
2075
2644
  requiredKeys.add(key);
2076
2645
  }
2077
2646
  });
@@ -2090,24 +2659,27 @@ var WebInspectorElement = class extends LitElement {
2090
2659
  }
2091
2660
  } else if (parameters.type === "object" && parameters.properties) {
2092
2661
  const props = parameters.properties;
2093
- const required = new Set(parameters.required || []);
2094
- for (const [key, value] of Object.entries(props)) {
2662
+ const required = new Set(
2663
+ Array.isArray(parameters.required) ? parameters.required : []
2664
+ );
2665
+ for (const [key, value] of Object.entries(props ?? {})) {
2095
2666
  const prop = value;
2096
2667
  result.properties.push({
2097
2668
  name: key,
2098
2669
  type: prop.type,
2099
- description: prop.description,
2670
+ description: typeof prop.description === "string" ? prop.description : void 0,
2100
2671
  required: required.has(key),
2101
2672
  defaultValue: prop.default,
2102
- enum: prop.enum
2673
+ enum: Array.isArray(prop.enum) ? prop.enum : void 0
2103
2674
  });
2104
2675
  }
2105
2676
  }
2106
2677
  return result;
2107
2678
  }
2108
2679
  isZodOptional(zodSchema) {
2109
- if (!zodSchema?._def) return false;
2110
- const def = zodSchema._def;
2680
+ const schema = zodSchema;
2681
+ if (!schema?._def) return false;
2682
+ const def = schema._def;
2111
2683
  if (def.typeName === "ZodOptional" || def.typeName === "ZodNullable") {
2112
2684
  return true;
2113
2685
  }
@@ -2118,18 +2690,20 @@ var WebInspectorElement = class extends LitElement {
2118
2690
  }
2119
2691
  extractZodFieldInfo(zodSchema) {
2120
2692
  const info = {};
2121
- if (!zodSchema?._def) return info;
2122
- let currentSchema = zodSchema;
2693
+ const schema = zodSchema;
2694
+ if (!schema?._def) return info;
2695
+ let currentSchema = schema;
2123
2696
  let def = currentSchema._def;
2124
2697
  while (def.typeName === "ZodOptional" || def.typeName === "ZodNullable" || def.typeName === "ZodDefault") {
2125
2698
  if (def.typeName === "ZodDefault" && def.defaultValue !== void 0) {
2126
2699
  info.defaultValue = typeof def.defaultValue === "function" ? def.defaultValue() : def.defaultValue;
2127
2700
  }
2128
- currentSchema = def.innerType;
2701
+ currentSchema = def.innerType ?? currentSchema;
2129
2702
  if (!currentSchema?._def) break;
2130
2703
  def = currentSchema._def;
2131
2704
  }
2132
- info.description = def.description;
2705
+ info.description = typeof def.description === "string" ? def.description : void 0;
2706
+ const typeName = typeof def.typeName === "string" ? def.typeName : void 0;
2133
2707
  const typeMap = {
2134
2708
  ZodString: "string",
2135
2709
  ZodNumber: "number",
@@ -2142,10 +2716,10 @@ var WebInspectorElement = class extends LitElement {
2142
2716
  ZodAny: "any",
2143
2717
  ZodUnknown: "unknown"
2144
2718
  };
2145
- info.type = typeMap[def.typeName] || def.typeName?.replace("Zod", "").toLowerCase();
2146
- if (def.typeName === "ZodEnum" && Array.isArray(def.values)) {
2719
+ info.type = typeName ? typeMap[typeName] || typeName.replace("Zod", "").toLowerCase() : void 0;
2720
+ if (typeName === "ZodEnum" && Array.isArray(def.values)) {
2147
2721
  info.enum = def.values;
2148
- } else if (def.typeName === "ZodLiteral" && def.value !== void 0) {
2722
+ } else if (typeName === "ZodLiteral" && def.value !== void 0) {
2149
2723
  info.enum = [def.value];
2150
2724
  }
2151
2725
  return info;
@@ -2187,6 +2761,7 @@ var WebInspectorElement = class extends LitElement {
2187
2761
  const isExpanded = this.expandedContextItems.has(id);
2188
2762
  const valuePreview = this.getContextValuePreview(context.value);
2189
2763
  const hasValue = context.value !== void 0 && context.value !== null;
2764
+ const title = context.description?.trim() || id;
2190
2765
  return html`
2191
2766
  <div class="rounded-lg border border-gray-200 bg-white overflow-hidden">
2192
2767
  <button
@@ -2196,9 +2771,9 @@ var WebInspectorElement = class extends LitElement {
2196
2771
  >
2197
2772
  <div class="flex items-start justify-between gap-3">
2198
2773
  <div class="flex-1 min-w-0">
2199
- ${context.description ? html`<p class="text-sm font-medium text-gray-900 mb-1">${context.description}</p>` : html`<p class="text-sm font-medium text-gray-500 italic mb-1">No description</p>`}
2774
+ <p class="text-sm font-medium text-gray-900 mb-1">${title}</p>
2200
2775
  <div class="flex items-center gap-2 text-xs text-gray-500">
2201
- <span class="font-mono">${id.substring(0, 8)}...</span>
2776
+ <span class="font-mono truncate inline-block align-middle" style="max-width: 180px;">${id}</span>
2202
2777
  ${hasValue ? html`
2203
2778
  <span class="text-gray-300">•</span>
2204
2779
  <span class="truncate">${valuePreview}</span>
@@ -2218,7 +2793,19 @@ var WebInspectorElement = class extends LitElement {
2218
2793
  <code class="block rounded bg-white border border-gray-200 px-2 py-1 text-[10px] font-mono text-gray-600">${id}</code>
2219
2794
  </div>
2220
2795
  ${hasValue ? html`
2221
- <h5 class="mb-2 text-xs font-semibold text-gray-700">Value</h5>
2796
+ <div class="mb-2 flex items-center justify-between gap-2">
2797
+ <h5 class="text-xs font-semibold text-gray-700">Value</h5>
2798
+ <button
2799
+ class="flex items-center gap-1 rounded-md border border-gray-200 bg-white px-2 py-1 text-[10px] font-medium text-gray-700 transition hover:bg-gray-50"
2800
+ type="button"
2801
+ @click=${(e) => {
2802
+ e.stopPropagation();
2803
+ void this.copyContextValue(context.value, id);
2804
+ }}
2805
+ >
2806
+ ${this.copiedContextItems.has(id) ? "Copied" : "Copy JSON"}
2807
+ </button>
2808
+ </div>
2222
2809
  <div class="rounded-md border border-gray-200 bg-white p-3">
2223
2810
  <pre class="overflow-auto text-xs text-gray-800 max-h-96"><code>${this.formatContextValue(context.value)}</code></pre>
2224
2811
  </div>
@@ -2266,10 +2853,28 @@ var WebInspectorElement = class extends LitElement {
2266
2853
  }
2267
2854
  try {
2268
2855
  return JSON.stringify(value, null, 2);
2269
- } catch (error) {
2856
+ } catch {
2270
2857
  return String(value);
2271
2858
  }
2272
2859
  }
2860
+ async copyContextValue(value, contextId) {
2861
+ if (typeof navigator === "undefined" || !navigator.clipboard?.writeText) {
2862
+ console.warn("Clipboard API is not available in this environment.");
2863
+ return;
2864
+ }
2865
+ const serialized = this.formatContextValue(value);
2866
+ try {
2867
+ await navigator.clipboard.writeText(serialized);
2868
+ this.copiedContextItems.add(contextId);
2869
+ this.requestUpdate();
2870
+ setTimeout(() => {
2871
+ this.copiedContextItems.delete(contextId);
2872
+ this.requestUpdate();
2873
+ }, 1500);
2874
+ } catch (error) {
2875
+ console.error("Failed to copy context value:", error);
2876
+ }
2877
+ }
2273
2878
  toggleContextExpansion(contextId) {
2274
2879
  if (this.expandedContextItems.has(contextId)) {
2275
2880
  this.expandedContextItems.delete(contextId);
@@ -2290,6 +2895,169 @@ var WebInspectorElement = class extends LitElement {
2290
2895
  }
2291
2896
  this.requestUpdate();
2292
2897
  }
2898
+ renderAnnouncementPanel() {
2899
+ if (!this.isOpen) {
2900
+ return nothing;
2901
+ }
2902
+ this.ensureAnnouncementLoading();
2903
+ if (!this.hasUnseenAnnouncement) {
2904
+ return nothing;
2905
+ }
2906
+ if (!this.announcementLoaded && !this.announcementMarkdown) {
2907
+ return html`<div class="mx-4 my-3 rounded-xl border border-slate-200 bg-white px-4 py-3 text-sm text-slate-800 shadow-[0_12px_30px_rgba(15,23,42,0.12)]">
2908
+ <div class="flex items-center gap-2 font-semibold">
2909
+ <span class="inline-flex h-6 w-6 items-center justify-center rounded-md bg-slate-900 text-white shadow-sm">
2910
+ ${this.renderIcon("Megaphone")}
2911
+ </span>
2912
+ <span>Loading latest announcement…</span>
2913
+ </div>
2914
+ </div>`;
2915
+ }
2916
+ if (this.announcementLoadError) {
2917
+ return html`<div class="mx-4 my-3 rounded-xl border border-rose-200 bg-rose-50 px-4 py-3 text-sm text-rose-900 shadow-[0_12px_30px_rgba(15,23,42,0.12)]">
2918
+ <div class="flex items-center gap-2 font-semibold">
2919
+ <span class="inline-flex h-6 w-6 items-center justify-center rounded-md bg-rose-600 text-white shadow-sm">
2920
+ ${this.renderIcon("Megaphone")}
2921
+ </span>
2922
+ <span>Announcement unavailable</span>
2923
+ </div>
2924
+ <p class="mt-2 text-xs text-rose-800">We couldn’t load the latest notice. Please try opening the inspector again.</p>
2925
+ </div>`;
2926
+ }
2927
+ if (!this.announcementMarkdown) {
2928
+ return nothing;
2929
+ }
2930
+ const content = this.announcementHtml ? unsafeHTML(this.announcementHtml) : html`<pre class="whitespace-pre-wrap text-sm text-gray-900">${this.announcementMarkdown}</pre>`;
2931
+ return html`<div class="mx-4 my-3 rounded-xl border border-slate-200 bg-white px-4 py-4 shadow-[0_12px_30px_rgba(15,23,42,0.12)]">
2932
+ <div class="mb-3 flex items-center gap-2 text-sm font-semibold text-slate-900">
2933
+ <span class="inline-flex h-7 w-7 items-center justify-center rounded-md bg-slate-900 text-white shadow-sm">
2934
+ ${this.renderIcon("Megaphone")}
2935
+ </span>
2936
+ <span>Announcement</span>
2937
+ <button class="announcement-dismiss ml-auto" type="button" @click=${this.handleDismissAnnouncement} aria-label="Dismiss announcement">
2938
+ Dismiss
2939
+ </button>
2940
+ </div>
2941
+ <div class="announcement-content text-sm leading-relaxed text-gray-900">${content}</div>
2942
+ </div>`;
2943
+ }
2944
+ ensureAnnouncementLoading() {
2945
+ if (this.announcementPromise || typeof window === "undefined" || typeof fetch === "undefined") {
2946
+ return;
2947
+ }
2948
+ this.announcementPromise = this.fetchAnnouncement();
2949
+ }
2950
+ renderAnnouncementPreview() {
2951
+ if (!this.hasUnseenAnnouncement || !this.showAnnouncementPreview || !this.announcementPreviewText) {
2952
+ return nothing;
2953
+ }
2954
+ const side = this.contextState.button.anchor.horizontal === "left" ? "right" : "left";
2955
+ return html`<div
2956
+ class="announcement-preview"
2957
+ data-side=${side}
2958
+ role="note"
2959
+ @click=${() => this.handleAnnouncementPreviewClick()}
2960
+ >
2961
+ <span>${this.announcementPreviewText}</span>
2962
+ <span class="announcement-preview__arrow"></span>
2963
+ </div>`;
2964
+ }
2965
+ handleAnnouncementPreviewClick() {
2966
+ this.showAnnouncementPreview = false;
2967
+ this.openInspector();
2968
+ }
2969
+ async fetchAnnouncement() {
2970
+ try {
2971
+ const response = await fetch(ANNOUNCEMENT_URL, { cache: "no-cache" });
2972
+ if (!response.ok) {
2973
+ throw new Error(`Failed to load announcement (${response.status})`);
2974
+ }
2975
+ const data = await response.json();
2976
+ const timestamp = typeof data?.timestamp === "string" ? data.timestamp : null;
2977
+ const previewText = typeof data?.previewText === "string" ? data.previewText : null;
2978
+ const markdown = typeof data?.announcement === "string" ? data.announcement : null;
2979
+ if (!timestamp || !markdown) {
2980
+ throw new Error("Malformed announcement payload");
2981
+ }
2982
+ const storedTimestamp = this.loadStoredAnnouncementTimestamp();
2983
+ this.announcementTimestamp = timestamp;
2984
+ this.announcementPreviewText = previewText ?? "";
2985
+ this.announcementMarkdown = markdown;
2986
+ this.hasUnseenAnnouncement = (!storedTimestamp || storedTimestamp !== timestamp) && !!this.announcementPreviewText;
2987
+ this.showAnnouncementPreview = this.hasUnseenAnnouncement;
2988
+ this.announcementHtml = await this.convertMarkdownToHtml(markdown);
2989
+ this.announcementLoaded = true;
2990
+ this.requestUpdate();
2991
+ } catch (error) {
2992
+ this.announcementLoadError = error;
2993
+ this.announcementLoaded = true;
2994
+ this.requestUpdate();
2995
+ }
2996
+ }
2997
+ async convertMarkdownToHtml(markdown) {
2998
+ const renderer = new marked.Renderer();
2999
+ renderer.link = (href, title, text) => {
3000
+ const safeHref = this.escapeHtmlAttr(this.appendRefParam(href ?? ""));
3001
+ const titleAttr = title ? ` title="${this.escapeHtmlAttr(title)}"` : "";
3002
+ return `<a href="${safeHref}" target="_blank" rel="noopener"${titleAttr}>${text}</a>`;
3003
+ };
3004
+ return marked.parse(markdown, { renderer });
3005
+ }
3006
+ appendRefParam(href) {
3007
+ try {
3008
+ const url = new URL(href, typeof window !== "undefined" ? window.location.href : "https://copilotkit.ai");
3009
+ if (!url.searchParams.has("ref")) {
3010
+ url.searchParams.append("ref", "cpk-inspector");
3011
+ }
3012
+ return url.toString();
3013
+ } catch {
3014
+ return href;
3015
+ }
3016
+ }
3017
+ escapeHtmlAttr(value) {
3018
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\"/g, "&quot;").replace(/'/g, "&#39;");
3019
+ }
3020
+ loadStoredAnnouncementTimestamp() {
3021
+ if (typeof window === "undefined" || !window.localStorage) {
3022
+ return null;
3023
+ }
3024
+ try {
3025
+ const raw = window.localStorage.getItem(ANNOUNCEMENT_STORAGE_KEY);
3026
+ if (!raw) {
3027
+ return null;
3028
+ }
3029
+ const parsed = JSON.parse(raw);
3030
+ if (parsed && typeof parsed.timestamp === "string") {
3031
+ return parsed.timestamp;
3032
+ }
3033
+ return null;
3034
+ } catch {
3035
+ }
3036
+ return null;
3037
+ }
3038
+ persistAnnouncementTimestamp(timestamp) {
3039
+ if (typeof window === "undefined" || !window.localStorage) {
3040
+ return;
3041
+ }
3042
+ try {
3043
+ const payload = JSON.stringify({ timestamp });
3044
+ window.localStorage.setItem(ANNOUNCEMENT_STORAGE_KEY, payload);
3045
+ } catch {
3046
+ }
3047
+ }
3048
+ markAnnouncementSeen() {
3049
+ this.hasUnseenAnnouncement = false;
3050
+ this.showAnnouncementPreview = false;
3051
+ if (!this.announcementTimestamp) {
3052
+ if (this.announcementPromise && !this.announcementLoaded) {
3053
+ void this.announcementPromise.then(() => this.markAnnouncementSeen()).catch(() => void 0);
3054
+ }
3055
+ this.requestUpdate();
3056
+ return;
3057
+ }
3058
+ this.persistAnnouncementTimestamp(this.announcementTimestamp);
3059
+ this.requestUpdate();
3060
+ }
2293
3061
  };
2294
3062
  function defineWebInspector() {
2295
3063
  if (!customElements.get(WEB_INSPECTOR_TAG)) {