grab 0.0.78 → 0.0.80

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.
@@ -948,8 +948,7 @@ function cleanChildren(parent, current, marker, replacement) {
948
948
  }
949
949
 
950
950
  // dist/styles.css
951
- var styles_default = `/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */
952
- @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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial}}}@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-black:#000;--color-white:#fff;--spacing:.25rem;--font-weight-medium:500;--radius-xs:.125rem;--ease-out:cubic-bezier(0,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--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);--color-grab-pink:#b21c8e;--color-grab-purple:#d239c0;--color-label-tag-border:#730079;--color-label-muted:#767676}}@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}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.top-0{top:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-2147483645{z-index:2147483645}.z-2147483646{z-index:2147483646}.z-2147483647{z-index:2147483647}.z-\\[2147483645\\]{z-index:2147483645}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.-mt-px{margin-top:-1px}.-ml-\\[2px\\]{margin-left:-2px}.ml-1{margin-left:calc(var(--spacing)*1)}.box-border{box-sizing:border-box}.flex{display:flex}.grid{display:grid}.hidden{display:none}.size-fit{width:fit-content;height:fit-content}.h-0{height:calc(var(--spacing)*0)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-5\\.5{height:calc(var(--spacing)*5.5)}.h-\\[7px\\]{height:7px}.h-\\[17px\\]{height:17px}.h-\\[18px\\]{height:18px}.h-fit{height:fit-content}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.w-0{width:calc(var(--spacing)*0)}.w-0\\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-\\[7px\\]{width:7px}.w-\\[17px\\]{width:17px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\\[280px\\]{max-width:280px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.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-crosshair{cursor:crosshair}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-\\[3px\\]{gap:3px}.gap-\\[5px\\]{gap:5px}.gap-px{gap:1px}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\\[1\\.5px\\]{border-radius:1.5px}.rounded-\\[1px\\]{border-radius:1px}.rounded-full{border-radius:3.40282e38px}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-b-xs{border-bottom-right-radius:var(--radius-xs);border-bottom-left-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.\\[border-width\\:0\\.5px\\]{border-width:.5px}.\\[border-top-width\\:0\\.5px\\]{border-top-width:.5px}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\\[\\#7e0002\\]{border-color:#7e0002}.border-\\[\\#B3B3B3\\]{border-color:#b3b3b3}.border-grab-purple{border-color:var(--color-grab-purple)}.border-grab-purple\\/40{border-color:#d239c066}@supports (color:color-mix(in lab, red, red)){.border-grab-purple\\/40{border-color:color-mix(in oklab,var(--color-grab-purple)40%,transparent)}}.border-grab-purple\\/50{border-color:#d239c080}@supports (color:color-mix(in lab, red, red)){.border-grab-purple\\/50{border-color:color-mix(in oklab,var(--color-grab-purple)50%,transparent)}}.border-label-tag-border{border-color:var(--color-label-tag-border)}.border-white{border-color:var(--color-white)}.border-t-\\[\\#D9D9D9\\]{border-top-color:#d9d9d9}.bg-\\[\\#F7F7F7\\]{background-color:#f7f7f7}.bg-black{background-color:var(--color-black)}.bg-grab-pink{background-color:var(--color-grab-pink)}.bg-grab-purple{background-color:var(--color-grab-purple)}.bg-grab-purple\\/5{background-color:#d239c00d}@supports (color:color-mix(in lab, red, red)){.bg-grab-purple\\/5{background-color:color-mix(in oklab,var(--color-grab-purple)5%,transparent)}}.bg-grab-purple\\/8{background-color:#d239c014}@supports (color:color-mix(in lab, red, red)){.bg-grab-purple\\/8{background-color:color-mix(in oklab,var(--color-grab-purple)8%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-\\[2px\\]{padding-inline:2px}.px-\\[3px\\]{padding-inline:3px}.py-0{padding-block:calc(var(--spacing)*0)}.py-\\[2px\\]{padding-block:2px}.py-\\[3px\\]{padding-block:3px}.py-\\[5px\\]{padding-block:5px}.py-px{padding-block:1px}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-1\\.5{padding-right:calc(var(--spacing)*1.5)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pl-1\\.5{padding-left:calc(var(--spacing)*1.5)}.align-middle{vertical-align:middle}.font-\\[ui-monospace\\,\\'SFMono-Regular\\'\\,\\'SF_Mono\\'\\,\\'Menlo\\'\\,\\'Consolas\\'\\,\\'Liberation_Mono\\'\\,monospace\\]{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-\\[10px\\]{font-size:10px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.leading-3\\.5{--tw-leading:calc(var(--spacing)*3.5);line-height:calc(var(--spacing)*3.5)}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-\\[14px\\]{--tw-leading:14px;line-height:14px}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-\\[-0\\.04em\\]{--tw-tracking:-.04em;letter-spacing:-.04em}.tracking-\\[-0\\.08em\\]{--tw-tracking:-.08em;letter-spacing:-.08em}.wrap-break-word{overflow-wrap:break-word}.whitespace-normal{white-space:normal}.text-\\[\\#0C0C0C\\]{color:#0c0c0c}.text-\\[\\#47004A\\]{color:#47004a}.text-\\[\\#71717a\\]{color:#71717a}.text-\\[\\#B91C1C\\]{color:#b91c1c}.text-\\[\\#c00002\\]{color:#c00002}.text-black{color:var(--color-black)}.text-black\\/50{color:#00000080}@supports (color:color-mix(in lab, red, red)){.text-black\\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}}.text-label-muted{color:var(--color-label-muted)}.text-label-tag-border{color:var(--color-label-tag-border)}.text-white{color:var(--color-white)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.opacity-\\[0\\.99\\]{opacity:.99}.brightness-125{--tw-brightness:brightness(125%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter-\\[drop-shadow\\(0px_0px_4px_\\#51515180\\)\\]{filter:drop-shadow(0 0 4px #51515180)}.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,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-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[width\\,height\\]{transition-property:width,height;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))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-30{--tw-duration:30ms;transition-duration:30ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-\\[transform\\,width\\,height\\]{will-change:transform,width,height}.contain-layout{--tw-contain-layout:layout;contain:var(--tw-contain-size,)var(--tw-contain-layout,)var(--tw-contain-paint,)var(--tw-contain-style,)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\\[font-synthesis\\:none\\]{font-synthesis:none}@media (hover:hover){.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\\:bg-\\[\\#F5F5F5\\]:hover{background-color:#f5f5f5}.hover\\:bg-\\[\\#FEF2F2\\]:hover{background-color:#fef2f2}.hover\\:opacity-100:hover{opacity:1}}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@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-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-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-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-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-contain-size{syntax:"*";inherits:false}@property --tw-contain-layout{syntax:"*";inherits:false}@property --tw-contain-paint{syntax:"*";inherits:false}@property --tw-contain-style{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}`;
951
+ var styles_default = '/*! tailwindcss v4.1.17 | 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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial}}}@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-black:#000;--color-white:#fff;--spacing:.25rem;--font-weight-medium:500;--radius-xs:.125rem;--ease-out:cubic-bezier(0,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--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);--color-grab-pink:#b21c8e;--color-grab-purple:#d239c0;--color-label-tag-border:#730079;--color-label-muted:#767676}}@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}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.top-0{top:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-2147483645{z-index:2147483645}.z-2147483646{z-index:2147483646}.z-2147483647{z-index:2147483647}.z-\\[2147483645\\]{z-index:2147483645}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.-mt-px{margin-top:-1px}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.-ml-\\[2px\\]{margin-left:-2px}.ml-1{margin-left:calc(var(--spacing)*1)}.box-border{box-sizing:border-box}.flex{display:flex}.grid{display:grid}.hidden{display:none}.size-fit{width:fit-content;height:fit-content}.h-0{height:calc(var(--spacing)*0)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-5\\.5{height:calc(var(--spacing)*5.5)}.h-\\[7px\\]{height:7px}.h-\\[17px\\]{height:17px}.h-\\[18px\\]{height:18px}.h-fit{height:fit-content}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.w-0{width:calc(var(--spacing)*0)}.w-0\\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-\\[7px\\]{width:7px}.w-\\[17px\\]{width:17px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\\[280px\\]{max-width:280px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.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-crosshair{cursor:crosshair}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-\\[3px\\]{gap:3px}.gap-\\[5px\\]{gap:5px}.gap-px{gap:1px}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\\[1\\.5px\\]{border-radius:1.5px}.rounded-\\[1px\\]{border-radius:1px}.rounded-full{border-radius:3.40282e38px}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-b-xs{border-bottom-right-radius:var(--radius-xs);border-bottom-left-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.\\[border-width\\:0\\.5px\\]{border-width:.5px}.\\[border-top-width\\:0\\.5px\\]{border-top-width:.5px}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\\[\\#7e0002\\]{border-color:#7e0002}.border-\\[\\#B3B3B3\\]{border-color:#b3b3b3}.border-grab-purple{border-color:var(--color-grab-purple)}.border-grab-purple\\/40{border-color:#d239c066}@supports (color:color-mix(in lab, red, red)){.border-grab-purple\\/40{border-color:color-mix(in oklab,var(--color-grab-purple)40%,transparent)}}.border-grab-purple\\/50{border-color:#d239c080}@supports (color:color-mix(in lab, red, red)){.border-grab-purple\\/50{border-color:color-mix(in oklab,var(--color-grab-purple)50%,transparent)}}.border-label-tag-border{border-color:var(--color-label-tag-border)}.border-white{border-color:var(--color-white)}.border-t-\\[\\#D9D9D9\\]{border-top-color:#d9d9d9}.bg-\\[\\#F7F7F7\\]{background-color:#f7f7f7}.bg-black{background-color:var(--color-black)}.bg-grab-pink{background-color:var(--color-grab-pink)}.bg-grab-purple{background-color:var(--color-grab-purple)}.bg-grab-purple\\/5{background-color:#d239c00d}@supports (color:color-mix(in lab, red, red)){.bg-grab-purple\\/5{background-color:color-mix(in oklab,var(--color-grab-purple)5%,transparent)}}.bg-grab-purple\\/8{background-color:#d239c014}@supports (color:color-mix(in lab, red, red)){.bg-grab-purple\\/8{background-color:color-mix(in oklab,var(--color-grab-purple)8%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-\\[2px\\]{padding-inline:2px}.px-\\[3px\\]{padding-inline:3px}.py-0{padding-block:calc(var(--spacing)*0)}.py-\\[2px\\]{padding-block:2px}.py-\\[3px\\]{padding-block:3px}.py-\\[5px\\]{padding-block:5px}.py-px{padding-block:1px}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-1\\.5{padding-right:calc(var(--spacing)*1.5)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pl-1\\.5{padding-left:calc(var(--spacing)*1.5)}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-\\[9px\\]{font-size:9px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.leading-3{--tw-leading:calc(var(--spacing)*3);line-height:calc(var(--spacing)*3)}.leading-3\\.5{--tw-leading:calc(var(--spacing)*3.5);line-height:calc(var(--spacing)*3.5)}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.wrap-break-word{overflow-wrap:break-word}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-\\[\\#0C0C0C\\]{color:#0c0c0c}.text-\\[\\#47004A\\]{color:#47004a}.text-\\[\\#71717a\\]{color:#71717a}.text-\\[\\#B91C1C\\]{color:#b91c1c}.text-\\[\\#a1a1aa\\]{color:#a1a1aa}.text-\\[\\#c00002\\]{color:#c00002}.text-black{color:var(--color-black)}.text-black\\/50{color:#00000080}@supports (color:color-mix(in lab, red, red)){.text-black\\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}}.text-label-muted{color:var(--color-label-muted)}.text-label-tag-border{color:var(--color-label-tag-border)}.text-white{color:var(--color-white)}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.opacity-\\[0\\.99\\]{opacity:.99}.brightness-125{--tw-brightness:brightness(125%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter-\\[drop-shadow\\(0px_0px_4px_\\#51515180\\)\\]{filter:drop-shadow(0 0 4px #51515180)}.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,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-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[width\\,height\\]{transition-property:width,height;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))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-30{--tw-duration:30ms;transition-duration:30ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-\\[transform\\,width\\,height\\]{will-change:transform,width,height}.contain-layout{--tw-contain-layout:layout;contain:var(--tw-contain-size,)var(--tw-contain-layout,)var(--tw-contain-paint,)var(--tw-contain-style,)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\\[font-synthesis\\:none\\]{font-synthesis:none}@media (hover:hover){.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\\:bg-\\[\\#F5F5F5\\]:hover{background-color:#f5f5f5}.hover\\:bg-\\[\\#FEF2F2\\]:hover{background-color:#fef2f2}.hover\\:opacity-100:hover{opacity:1}}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@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-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-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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-contain-size{syntax:"*";inherits:false}@property --tw-contain-layout{syntax:"*";inherits:false}@property --tw-contain-paint{syntax:"*";inherits:false}@property --tw-contain-style{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}';
953
952
 
954
953
  // src/utils/is-keyboard-event-triggered-by-input.ts
955
954
  var FORM_TAGS_AND_ROLES = [
@@ -1078,7 +1077,7 @@ var buildOpenFileUrl = (filePath, lineNumber) => {
1078
1077
  };
1079
1078
 
1080
1079
  // src/constants.ts
1081
- var VERSION = "0.0.78";
1080
+ var VERSION = "0.0.80";
1082
1081
  var VIEWPORT_MARGIN_PX = 8;
1083
1082
  var OFFSCREEN_POSITION = -1e3;
1084
1083
  var SELECTION_LERP_FACTOR = 0.95;
@@ -1089,6 +1088,7 @@ var BLUR_DEACTIVATION_THRESHOLD_MS = 500;
1089
1088
  var INPUT_FOCUS_ACTIVATION_DELAY_MS = 150;
1090
1089
  var DEFAULT_KEY_HOLD_DURATION_MS = 200;
1091
1090
  var DOUBLE_CLICK_THRESHOLD_MS = 250;
1091
+ var RECENT_THRESHOLD_MS = 1e4;
1092
1092
  var DRAG_THRESHOLD_PX = 2;
1093
1093
  var ELEMENT_DETECTION_THROTTLE_MS = 32;
1094
1094
  var BOUNDS_RECALC_INTERVAL_MS = 100;
@@ -3943,32 +3943,55 @@ var IconReturn = (props) => {
3943
3943
  })();
3944
3944
  };
3945
3945
 
3946
+ // src/components/icon-retry.tsx
3947
+ var _tmpl$6 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=none><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4C7.58 4 4.01 7.58 4.01 12C4.01 16.42 7.58 20 12 20C15.73 20 18.84 17.45 19.73 14H17.65C16.83 16.33 14.61 18 12 18C8.69 18 6 15.31 6 12C6 8.69 8.69 6 12 6C13.66 6 15.14 6.69 16.22 7.78L13 11H20V4L17.65 6.35Z"fill=currentColor>`);
3948
+ var IconRetry = (props) => {
3949
+ const size = () => props.size ?? 12;
3950
+ return (() => {
3951
+ var _el$ = _tmpl$6();
3952
+ createRenderEffect((_p$) => {
3953
+ var _v$ = size(), _v$2 = size(), _v$3 = props.class;
3954
+ _v$ !== _p$.e && setAttribute(_el$, "width", _p$.e = _v$);
3955
+ _v$2 !== _p$.t && setAttribute(_el$, "height", _p$.t = _v$2);
3956
+ _v$3 !== _p$.a && setAttribute(_el$, "class", _p$.a = _v$3);
3957
+ return _p$;
3958
+ }, {
3959
+ e: void 0,
3960
+ t: void 0,
3961
+ a: void 0
3962
+ });
3963
+ return _el$;
3964
+ })();
3965
+ };
3966
+
3946
3967
  // src/components/selection-label.tsx
3947
- var _tmpl$6 = /* @__PURE__ */ template(`<div style="background-image:linear-gradient(in oklab 180deg, oklab(88.7% 0.086 -0.058) 0%, oklab(83.2% 0.132 -0.089) 100%)"><span>`);
3948
- var _tmpl$22 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center w-fit h-4 rounded-[1px] gap-1 px-[3px] [border-width:0.5px] border-solid border-[#B3B3B3] py-0 bg-[#F7F7F7]"><span class="text-[#0C0C0C] text-[11.5px] leading-3.5 shrink-0 tracking-[-0.08em] font-[ui-monospace,'SFMono-Regular','SF_Mono','Menlo','Consolas','Liberation_Mono',monospace] w-fit h-fit">`);
3949
- var _tmpl$32 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center w-fit h-4 rounded-[1px] gap-1 px-[3px] [border-width:0.5px] border-solid border-white py-0"><span class="text-[#0C0C0C] text-[11.5px] leading-3.5 shrink-0 tracking-[-0.08em] font-[ui-monospace,'SFMono-Regular','SF_Mono','Menlo','Consolas','Liberation_Mono',monospace] w-fit h-fit">&gt;`);
3968
+ var _tmpl$7 = /* @__PURE__ */ template(`<div style="background-image:linear-gradient(in oklab 180deg, oklab(88.7% 0.086 -0.058) 0%, oklab(83.2% 0.132 -0.089) 100%)"><span>`);
3969
+ var _tmpl$22 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center w-fit h-4 rounded-[1px] gap-1 px-[3px] [border-width:0.5px] border-solid border-[#B3B3B3] py-0 bg-[#F7F7F7]"><span class="text-[#0C0C0C] text-[11.5px] leading-3.5 shrink-0 font-medium w-fit h-fit">`);
3970
+ var _tmpl$32 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center w-fit h-4 rounded-[1px] gap-1 px-[3px] [border-width:0.5px] border-solid border-white py-0"><span class="text-[#0C0C0C] text-[11.5px] leading-3.5 shrink-0 font-medium w-fit h-fit">&gt;`);
3950
3971
  var _tmpl$42 = /* @__PURE__ */ template(`<div class="absolute w-0 h-0"style="border-left:8px solid transparent;border-right:8px solid transparent">`);
3951
- var _tmpl$52 = /* @__PURE__ */ template(`<div role=button><div class="text-black text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit">`);
3972
+ var _tmpl$52 = /* @__PURE__ */ template(`<div role=button><div class="text-black text-[12px] leading-4 shrink-0 font-sans font-medium w-fit h-fit">`);
3952
3973
  var _tmpl$62 = /* @__PURE__ */ template(`<div class="[font-synthesis:none] contain-layout shrink-0 flex flex-col items-start px-2 py-[5px] w-auto h-fit self-stretch [border-top-width:0.5px] border-t-solid border-t-[#D9D9D9] antialiased rounded-t-none rounded-b-xs -mt-px"style="background-image:linear-gradient(in oklab 180deg, oklab(100% 0 0) 0%, oklab(96.1% 0 0) 5.92%)">`);
3953
- var _tmpl$7 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit"><button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">No</span></button><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#7e0002] cursor-pointer transition-all hover:bg-[#FEF2F2] h-[17px]"><span class="text-[#B91C1C] text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">Yes`);
3954
- var _tmpl$8 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-end gap-1 w-fit h-fit"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-full h-fit"><span class="text-black text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit">Discard prompt?`);
3955
- var _tmpl$9 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit"><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">Ok`);
3956
- var _tmpl$0 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-end gap-1 w-fit h-fit max-w-[280px]"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-full h-fit"><span class="text-[#B91C1C] text-[12px] leading-4 tracking-[-0.04em] font-sans font-medium">`);
3957
- var _tmpl$1 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">Undo`);
3958
- var _tmpl$10 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">Ok`);
3959
- var _tmpl$11 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit">`);
3960
- var _tmpl$12 = /* @__PURE__ */ template(`<div class="[font-synthesis:none] contain-layout shrink-0 flex flex-col justify-center items-end rounded-xs bg-white antialiased w-fit h-fit"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1.5 pb-1 px-1.5 w-full h-fit"><span class="text-black text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit tabular-nums">`);
3961
- var _tmpl$13 = /* @__PURE__ */ template(`<button data-react-grab-ignore-events class="contain-layout shrink-0 flex flex-col items-start rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] p-1 size-fit cursor-pointer ml-1 transition-none hover:scale-105"><div data-react-grab-ignore-events class="shrink-0 w-[7px] h-[7px] rounded-[1px] bg-black pointer-events-none">`);
3962
- var _tmpl$14 = /* @__PURE__ */ template(`<div class="shrink-0 flex justify-between items-end w-full min-h-4"><textarea data-react-grab-ignore-events class="text-black text-[12px] leading-4 tracking-[-0.04em] font-medium bg-transparent border-none outline-none resize-none flex-1 p-0 m-0 opacity-50 wrap-break-word overflow-y-auto"placeholder="type to edit"rows=1 disabled style=field-sizing:content;min-height:16px;max-height:95px;scrollbar-width:none>`);
3963
- var _tmpl$15 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit max-w-[280px]"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-auto h-fit"><div class="contain-layout flex items-center px-0 py-px w-auto h-fit rounded-[1.5px] gap-[3px]"><span class="text-[12px] leading-4 tracking-[-0.04em] font-sans font-medium w-auto h-fit whitespace-normal text-[#71717a] animate-pulse tabular-nums">`);
3964
- var _tmpl$16 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-px w-fit h-fit">`);
3965
- var _tmpl$17 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-1 w-fit h-fit"><span class="text-label-muted text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit">Press</span><div class="contain-layout shrink-0 flex flex-col items-start px-[3px] py-[3px] rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] size-fit"></div><span class="text-label-muted text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit">or</span><div class="contain-layout shrink-0 flex items-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] size-fit"><span class="text-black text-[10px] leading-[14px] tracking-[-0.04em] font-sans font-medium">double-click</span></div><span class="text-label-muted text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit">to edit`);
3966
- var _tmpl$18 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit"><div></div><div class="grid transition-[grid-template-rows] duration-30 ease-out self-stretch"><div>`);
3967
- var _tmpl$19 = /* @__PURE__ */ template(`<button>`);
3968
- var _tmpl$20 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex flex-col items-start px-[3px] py-[3px] rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] size-fit cursor-pointer transition-all hover:scale-105">`);
3969
- var _tmpl$21 = /* @__PURE__ */ template(`<div class="shrink-0 flex justify-between items-end w-full min-h-4"><textarea data-react-grab-ignore-events class="text-black text-[12px] leading-4 tracking-[-0.04em] font-medium bg-transparent border-none outline-none resize-none flex-1 p-0 m-0 wrap-break-word overflow-y-auto"rows=1 style=field-sizing:content;min-height:16px;max-height:95px;scrollbar-width:none></textarea><div class="flex items-center gap-0.5 ml-1 w-[17px] h-[17px] justify-end">`);
3970
- var _tmpl$222 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit max-w-[280px]"><div>`);
3971
- var _tmpl$23 = /* @__PURE__ */ template(`<div data-react-grab-ignore-events class="fixed font-sans antialiased transition-opacity duration-300 ease-out filter-[drop-shadow(0px_0px_4px_#51515180)] select-none"style=z-index:2147483647><div class="[font-synthesis:none] contain-layout flex items-center gap-[5px] rounded-xs bg-white antialiased w-fit h-fit p-0">`);
3974
+ var _tmpl$72 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit"><button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">No</span></button><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#7e0002] cursor-pointer transition-all hover:bg-[#FEF2F2] h-[17px]"><span class="text-[#B91C1C] text-[11px] leading-3.5 font-sans font-medium">Yes`);
3975
+ var _tmpl$8 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-end gap-1 w-fit h-fit"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-full h-fit"><span class="text-black text-[12px] leading-4 shrink-0 font-sans font-medium w-fit h-fit">Discard prompt?`);
3976
+ var _tmpl$9 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit"><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">Retry</span></button><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">Ok`);
3977
+ var _tmpl$0 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-end gap-1 w-fit h-fit max-w-[280px]"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-full h-fit"><span class="text-[#B91C1C] text-[12px] leading-4 font-sans font-medium">`);
3978
+ var _tmpl$1 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#7e0002] cursor-pointer transition-all hover:bg-[#FEF2F2] h-[17px]"><span class="text-[#B91C1C] text-[11px] leading-3.5 font-sans font-medium">Undo`);
3979
+ var _tmpl$10 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">Reply`);
3980
+ var _tmpl$11 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">Ok`);
3981
+ var _tmpl$12 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit">`);
3982
+ var _tmpl$13 = /* @__PURE__ */ template(`<div class="[font-synthesis:none] contain-layout shrink-0 flex flex-col justify-center items-end rounded-xs bg-white antialiased w-fit h-fit"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1.5 pb-1 px-1.5 w-full h-fit"><span class="text-black text-[12px] leading-4 shrink-0 font-sans font-medium w-fit h-fit tabular-nums">`);
3983
+ var _tmpl$14 = /* @__PURE__ */ template(`<button data-react-grab-ignore-events class="contain-layout shrink-0 flex flex-col items-start rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] p-1 size-fit cursor-pointer ml-1 transition-none hover:scale-105"><div data-react-grab-ignore-events class="shrink-0 w-[7px] h-[7px] rounded-[1px] bg-black pointer-events-none">`);
3984
+ var _tmpl$15 = /* @__PURE__ */ template(`<div class="shrink-0 flex justify-between items-end w-full min-h-4"><textarea data-react-grab-ignore-events class="text-black text-[12px] leading-4 font-medium bg-transparent border-none outline-none resize-none flex-1 p-0 m-0 opacity-50 wrap-break-word overflow-y-auto"placeholder="type to edit"rows=1 disabled style=field-sizing:content;min-height:16px;max-height:95px;scrollbar-width:none>`);
3985
+ var _tmpl$16 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit max-w-[280px]"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-auto h-fit"><div class="contain-layout flex items-center px-0 py-px w-auto h-fit rounded-[1.5px] gap-[3px]"><span class="text-[12px] leading-4 font-sans font-medium w-auto h-fit whitespace-normal text-[#71717a] animate-pulse tabular-nums">`);
3986
+ var _tmpl$17 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-px w-fit h-fit">`);
3987
+ var _tmpl$18 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-1 w-fit h-fit"><span class="text-label-muted text-[12px] leading-4 shrink-0 font-sans font-medium w-fit h-fit">Double click to edit</span><div class="contain-layout shrink-0 flex flex-col items-start px-[3px] py-[3px] rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] size-fit">`);
3988
+ var _tmpl$19 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit"><div></div><div class="grid transition-[grid-template-rows] duration-30 ease-out self-stretch"><div>`);
3989
+ var _tmpl$20 = /* @__PURE__ */ template(`<div class="shrink-0 flex items-center gap-0.5 w-full mb-0.5 overflow-hidden"><span class="text-[#a1a1aa] text-[9px] leading-3 shrink-0">\u21B3</span><span class="text-[#a1a1aa] text-[9px] leading-3 italic truncate whitespace-nowrap">`);
3990
+ var _tmpl$21 = /* @__PURE__ */ template(`<button>`);
3991
+ var _tmpl$222 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex flex-col items-start px-[3px] py-[3px] rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] size-fit cursor-pointer transition-all hover:scale-105">`);
3992
+ var _tmpl$23 = /* @__PURE__ */ template(`<div class="shrink-0 flex justify-between items-end w-full min-h-4"><textarea data-react-grab-ignore-events class="text-black text-[12px] leading-4 font-medium bg-transparent border-none outline-none resize-none flex-1 p-0 m-0 wrap-break-word overflow-y-auto"rows=1 style=field-sizing:content;min-height:16px;max-height:95px;scrollbar-width:none></textarea><div class="flex items-center gap-0.5 ml-1 w-[17px] h-[17px] justify-end">`);
3993
+ var _tmpl$24 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit max-w-[280px]"><div>`);
3994
+ var _tmpl$25 = /* @__PURE__ */ template(`<div data-react-grab-ignore-events class="fixed font-sans antialiased transition-opacity duration-300 ease-out filter-[drop-shadow(0px_0px_4px_#51515180)] select-none"style=z-index:2147483647><div class="[font-synthesis:none] contain-layout flex items-center gap-[5px] rounded-xs bg-white antialiased w-fit h-fit p-0">`);
3972
3995
  var ARROW_HEIGHT = 8;
3973
3996
  var LABEL_GAP = 4;
3974
3997
  var IDLE_TIMEOUT_MS = 400;
@@ -3983,7 +4006,7 @@ var TagBadge = (props) => {
3983
4006
  props.onHoverChange?.(false);
3984
4007
  };
3985
4008
  return (() => {
3986
- var _el$ = _tmpl$6(), _el$2 = _el$.firstChild;
4009
+ var _el$ = _tmpl$7(), _el$2 = _el$.firstChild;
3987
4010
  addEventListener(_el$, "click", props.onClick);
3988
4011
  _el$.addEventListener("mouseleave", handleMouseLeave);
3989
4012
  _el$.addEventListener("mouseenter", handleMouseEnter);
@@ -4002,7 +4025,7 @@ var TagBadge = (props) => {
4002
4025
  }
4003
4026
  }), null);
4004
4027
  createRenderEffect((_p$) => {
4005
- var _v$ = cn("contain-layout flex items-center px-[3px] py-0 h-4 rounded-[1px] gap-0.5 [border-width:0.5px] border-solid border-label-tag-border", props.shrink && "shrink-0 w-fit", props.isClickable && "cursor-pointer"), _v$2 = cn("text-[#47004A] text-[11.5px] leading-3.5 shrink-0 w-fit h-fit", props.showMono ? "tracking-[-0.08em] font-[ui-monospace,'SFMono-Regular','SF_Mono','Menlo','Consolas','Liberation_Mono',monospace]" : "tracking-[-0.04em] font-medium");
4028
+ var _v$ = cn("contain-layout flex items-center px-[3px] py-0 h-4 rounded-[1px] gap-0.5 [border-width:0.5px] border-solid border-label-tag-border", props.shrink && "shrink-0 w-fit", props.isClickable && "cursor-pointer"), _v$2 = cn("text-[#47004A] text-[11.5px] leading-3.5 shrink-0 w-fit h-fit font-medium");
4006
4029
  _v$ !== _p$.e && className(_el$, _p$.e = _v$);
4007
4030
  _v$2 !== _p$.t && className(_el$2, _p$.t = _v$2);
4008
4031
  return _p$;
@@ -4082,7 +4105,7 @@ var DismissConfirmation = (props) => {
4082
4105
  var _el$0 = _tmpl$8(); _el$0.firstChild;
4083
4106
  insert(_el$0, createComponent(BottomSection, {
4084
4107
  get children() {
4085
- var _el$10 = _tmpl$7(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling; _el$12.firstChild;
4108
+ var _el$10 = _tmpl$72(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling; _el$12.firstChild;
4086
4109
  addEventListener(_el$11, "click", props.onCancel);
4087
4110
  addEventListener(_el$12, "click", props.onConfirm);
4088
4111
  insert(_el$12, createComponent(IconReturn, {
@@ -4098,7 +4121,11 @@ var DismissConfirmation = (props) => {
4098
4121
  var MAX_ERROR_LENGTH = 50;
4099
4122
  var ErrorConfirmation = (props) => {
4100
4123
  const handleKeyDown = (event) => {
4101
- if (event.code === "Enter" || event.code === "Escape") {
4124
+ if (event.code === "Enter") {
4125
+ event.preventDefault();
4126
+ event.stopPropagation();
4127
+ props.onRetry?.();
4128
+ } else if (event.code === "Escape") {
4102
4129
  event.preventDefault();
4103
4130
  event.stopPropagation();
4104
4131
  props.onAcknowledge?.();
@@ -4124,12 +4151,13 @@ var ErrorConfirmation = (props) => {
4124
4151
  insert(_el$16, truncatedError);
4125
4152
  insert(_el$14, createComponent(BottomSection, {
4126
4153
  get children() {
4127
- var _el$17 = _tmpl$9(), _el$18 = _el$17.firstChild; _el$18.firstChild;
4128
- addEventListener(_el$18, "click", props.onAcknowledge);
4129
- insert(_el$18, createComponent(IconReturn, {
4154
+ var _el$17 = _tmpl$9(), _el$18 = _el$17.firstChild; _el$18.firstChild; var _el$20 = _el$18.nextSibling;
4155
+ addEventListener(_el$18, "click", props.onRetry);
4156
+ insert(_el$18, createComponent(IconRetry, {
4130
4157
  size: 10,
4131
4158
  "class": "text-black/50"
4132
4159
  }), null);
4160
+ addEventListener(_el$20, "click", props.onAcknowledge);
4133
4161
  return _el$17;
4134
4162
  }
4135
4163
  }), null);
@@ -4156,46 +4184,56 @@ var CompletedConfirmation = (props) => {
4156
4184
  });
4157
4185
  });
4158
4186
  return (() => {
4159
- var _el$20 = _tmpl$12(), _el$21 = _el$20.firstChild, _el$22 = _el$21.firstChild;
4160
- insert(_el$22, () => props.statusText);
4161
- insert(_el$20, createComponent(Show, {
4187
+ var _el$21 = _tmpl$13(), _el$22 = _el$21.firstChild, _el$23 = _el$22.firstChild;
4188
+ insert(_el$23, () => props.statusText);
4189
+ insert(_el$21, createComponent(Show, {
4162
4190
  get when() {
4163
- return props.onDismiss || props.onUndo;
4191
+ return props.onDismiss || props.onUndo || props.onReply;
4164
4192
  },
4165
4193
  get children() {
4166
4194
  return createComponent(BottomSection, {
4167
4195
  get children() {
4168
- var _el$23 = _tmpl$11();
4169
- insert(_el$23, createComponent(Show, {
4196
+ var _el$24 = _tmpl$12();
4197
+ insert(_el$24, createComponent(Show, {
4170
4198
  get when() {
4171
- return props.onUndo;
4199
+ return memo(() => !!props.supportsUndo)() && props.onUndo;
4172
4200
  },
4173
4201
  get children() {
4174
- var _el$24 = _tmpl$1();
4175
- _el$24.$$click = () => props.onUndo?.();
4176
- return _el$24;
4202
+ var _el$25 = _tmpl$1();
4203
+ _el$25.$$click = () => props.onUndo?.();
4204
+ return _el$25;
4177
4205
  }
4178
4206
  }), null);
4179
- insert(_el$23, createComponent(Show, {
4207
+ insert(_el$24, createComponent(Show, {
4208
+ get when() {
4209
+ return memo(() => !!props.supportsFollowUp)() && props.onReply;
4210
+ },
4211
+ get children() {
4212
+ var _el$26 = _tmpl$10();
4213
+ _el$26.$$click = () => props.onReply?.();
4214
+ return _el$26;
4215
+ }
4216
+ }), null);
4217
+ insert(_el$24, createComponent(Show, {
4180
4218
  get when() {
4181
4219
  return props.onDismiss;
4182
4220
  },
4183
4221
  get children() {
4184
- var _el$25 = _tmpl$10(); _el$25.firstChild;
4185
- _el$25.$$click = () => props.onDismiss?.();
4186
- insert(_el$25, createComponent(IconReturn, {
4222
+ var _el$27 = _tmpl$11(); _el$27.firstChild;
4223
+ _el$27.$$click = () => props.onDismiss?.();
4224
+ insert(_el$27, createComponent(IconReturn, {
4187
4225
  size: 10,
4188
4226
  "class": "text-black/50"
4189
4227
  }), null);
4190
- return _el$25;
4228
+ return _el$27;
4191
4229
  }
4192
4230
  }), null);
4193
- return _el$23;
4231
+ return _el$24;
4194
4232
  }
4195
4233
  });
4196
4234
  }
4197
4235
  }), null);
4198
- return _el$20;
4236
+ return _el$21;
4199
4237
  })();
4200
4238
  };
4201
4239
  var SelectionLabel = (props) => {
@@ -4399,21 +4437,21 @@ var SelectionLabel = (props) => {
4399
4437
  return memo(() => props.visible !== false)() && (props.selectionBounds || shouldShowWithoutBounds());
4400
4438
  },
4401
4439
  get children() {
4402
- var _el$27 = _tmpl$23(), _el$28 = _el$27.firstChild;
4403
- _el$27.$$click = stopPropagation;
4404
- _el$27.$$mousedown = stopPropagation;
4405
- _el$27.$$pointerdown = handleContainerPointerDown;
4440
+ var _el$29 = _tmpl$25(), _el$30 = _el$29.firstChild;
4441
+ _el$29.$$click = stopPropagation;
4442
+ _el$29.$$mousedown = stopPropagation;
4443
+ _el$29.$$pointerdown = handleContainerPointerDown;
4406
4444
  var _ref$ = containerRef;
4407
- typeof _ref$ === "function" ? use(_ref$, _el$27) : containerRef = _el$27;
4408
- insert(_el$27, createComponent(Arrow, {
4445
+ typeof _ref$ === "function" ? use(_ref$, _el$29) : containerRef = _el$29;
4446
+ insert(_el$29, createComponent(Arrow, {
4409
4447
  get position() {
4410
4448
  return arrowPosition();
4411
4449
  },
4412
4450
  get leftPx() {
4413
4451
  return computedPosition().arrowLeft;
4414
4452
  }
4415
- }), _el$28);
4416
- insert(_el$27, createComponent(Show, {
4453
+ }), _el$30);
4454
+ insert(_el$29, createComponent(Show, {
4417
4455
  get when() {
4418
4456
  return memo(() => !!(props.status === "copied" || props.status === "fading"))() && !props.error;
4419
4457
  },
@@ -4422,60 +4460,69 @@ var SelectionLabel = (props) => {
4422
4460
  get statusText() {
4423
4461
  return memo(() => !!props.hasAgent)() ? props.statusText ?? "Completed" : "Copied";
4424
4462
  },
4463
+ get supportsUndo() {
4464
+ return props.supportsUndo;
4465
+ },
4466
+ get supportsFollowUp() {
4467
+ return props.supportsFollowUp;
4468
+ },
4425
4469
  get onDismiss() {
4426
4470
  return props.onDismiss;
4427
4471
  },
4428
4472
  get onUndo() {
4429
4473
  return props.onUndo;
4474
+ },
4475
+ get onReply() {
4476
+ return props.onReply;
4430
4477
  }
4431
4478
  });
4432
4479
  }
4433
- }), _el$28);
4434
- insert(_el$28, createComponent(Show, {
4480
+ }), _el$30);
4481
+ insert(_el$30, createComponent(Show, {
4435
4482
  get when() {
4436
4483
  return props.status === "copying";
4437
4484
  },
4438
4485
  get children() {
4439
- var _el$29 = _tmpl$15(), _el$30 = _el$29.firstChild, _el$31 = _el$30.firstChild, _el$32 = _el$31.firstChild;
4440
- insert(_el$32, () => props.statusText ?? "Grabbing\u2026");
4441
- insert(_el$29, createComponent(BottomSection, {
4486
+ var _el$31 = _tmpl$16(), _el$32 = _el$31.firstChild, _el$33 = _el$32.firstChild, _el$34 = _el$33.firstChild;
4487
+ insert(_el$34, () => props.statusText ?? "Grabbing\u2026");
4488
+ insert(_el$31, createComponent(BottomSection, {
4442
4489
  get children() {
4443
- var _el$33 = _tmpl$14(), _el$34 = _el$33.firstChild;
4490
+ var _el$35 = _tmpl$15(), _el$36 = _el$35.firstChild;
4444
4491
  var _ref$2 = inputRef;
4445
- typeof _ref$2 === "function" ? use(_ref$2, _el$34) : inputRef = _el$34;
4446
- insert(_el$33, createComponent(Show, {
4492
+ typeof _ref$2 === "function" ? use(_ref$2, _el$36) : inputRef = _el$36;
4493
+ insert(_el$35, createComponent(Show, {
4447
4494
  get when() {
4448
4495
  return props.onAbort;
4449
4496
  },
4450
4497
  get children() {
4451
- var _el$35 = _tmpl$13();
4452
- _el$35.$$click = (event) => {
4498
+ var _el$37 = _tmpl$14();
4499
+ _el$37.$$click = (event) => {
4453
4500
  event.stopPropagation();
4454
4501
  props.onAbort?.();
4455
4502
  };
4456
- _el$35.$$pointerup = (event) => {
4503
+ _el$37.$$pointerup = (event) => {
4457
4504
  event.stopPropagation();
4458
4505
  props.onAbort?.();
4459
4506
  };
4460
- _el$35.$$mousedown = (event) => event.stopPropagation();
4461
- _el$35.$$pointerdown = (event) => event.stopPropagation();
4462
- return _el$35;
4507
+ _el$37.$$mousedown = (event) => event.stopPropagation();
4508
+ _el$37.$$pointerdown = (event) => event.stopPropagation();
4509
+ return _el$37;
4463
4510
  }
4464
4511
  }), null);
4465
- createRenderEffect(() => _el$34.value = props.inputValue ?? "");
4466
- return _el$33;
4512
+ createRenderEffect(() => _el$36.value = props.inputValue ?? "");
4513
+ return _el$35;
4467
4514
  }
4468
4515
  }), null);
4469
- return _el$29;
4516
+ return _el$31;
4470
4517
  }
4471
4518
  }), null);
4472
- insert(_el$28, createComponent(Show, {
4519
+ insert(_el$30, createComponent(Show, {
4473
4520
  get when() {
4474
4521
  return memo(() => !!isNotProcessing())() && !props.isInputExpanded;
4475
4522
  },
4476
4523
  get children() {
4477
- var _el$36 = _tmpl$18(), _el$37 = _el$36.firstChild, _el$39 = _el$37.nextSibling, _el$40 = _el$39.firstChild;
4478
- insert(_el$37, createComponent(ClickToCopyPill, {
4524
+ var _el$38 = _tmpl$19(), _el$39 = _el$38.firstChild, _el$41 = _el$39.nextSibling, _el$42 = _el$41.firstChild;
4525
+ insert(_el$39, createComponent(ClickToCopyPill, {
4479
4526
  onClick: handleSubmit,
4480
4527
  shrink: true,
4481
4528
  get hasParent() {
@@ -4485,19 +4532,19 @@ var SelectionLabel = (props) => {
4485
4532
  return props.hasAgent;
4486
4533
  }
4487
4534
  }), null);
4488
- insert(_el$37, createComponent(Show, {
4535
+ insert(_el$39, createComponent(Show, {
4489
4536
  get when() {
4490
4537
  return props.componentName;
4491
4538
  },
4492
4539
  get children() {
4493
- var _el$38 = _tmpl$16();
4494
- insert(_el$38, createComponent(ParentBadge, {
4540
+ var _el$40 = _tmpl$17();
4541
+ insert(_el$40, createComponent(ParentBadge, {
4495
4542
  get name() {
4496
4543
  return props.componentName;
4497
4544
  }
4498
4545
  }), null);
4499
- insert(_el$38, createComponent(ChevronSeparator, {}), null);
4500
- insert(_el$38, createComponent(TagBadge, {
4546
+ insert(_el$40, createComponent(ChevronSeparator, {}), null);
4547
+ insert(_el$40, createComponent(TagBadge, {
4501
4548
  get tagName() {
4502
4549
  return tagDisplay();
4503
4550
  },
@@ -4506,13 +4553,12 @@ var SelectionLabel = (props) => {
4506
4553
  },
4507
4554
  onClick: handleTagClick,
4508
4555
  onHoverChange: handleTagHoverChange,
4509
- showMono: true,
4510
4556
  shrink: true
4511
4557
  }), null);
4512
- return _el$38;
4558
+ return _el$40;
4513
4559
  }
4514
4560
  }), null);
4515
- insert(_el$37, createComponent(Show, {
4561
+ insert(_el$39, createComponent(Show, {
4516
4562
  get when() {
4517
4563
  return !props.componentName;
4518
4564
  },
@@ -4526,42 +4572,41 @@ var SelectionLabel = (props) => {
4526
4572
  },
4527
4573
  onClick: handleTagClick,
4528
4574
  onHoverChange: handleTagHoverChange,
4529
- showMono: true,
4530
4575
  shrink: true
4531
4576
  });
4532
4577
  }
4533
4578
  }), null);
4534
- insert(_el$40, createComponent(BottomSection, {
4579
+ insert(_el$42, createComponent(BottomSection, {
4535
4580
  get children() {
4536
- var _el$41 = _tmpl$17(), _el$42 = _el$41.firstChild, _el$43 = _el$42.nextSibling;
4537
- insert(_el$43, createComponent(IconReturn, {
4581
+ var _el$43 = _tmpl$18(), _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling;
4582
+ insert(_el$45, createComponent(IconReturn, {
4538
4583
  size: 10,
4539
4584
  "class": "opacity-[0.99] text-black"
4540
4585
  }));
4541
- return _el$41;
4586
+ return _el$43;
4542
4587
  }
4543
4588
  }));
4544
4589
  createRenderEffect((_p$) => {
4545
4590
  var _v$3 = cn("contain-layout shrink-0 flex items-center gap-1 pt-1 w-fit h-fit pl-1.5", props.componentName ? "pr-1.5" : "pr-1"), _v$4 = isIdle() ? "1fr" : "0fr", _v$5 = cn("overflow-hidden min-h-0", !isIdle() && "w-0");
4546
- _v$3 !== _p$.e && className(_el$37, _p$.e = _v$3);
4547
- _v$4 !== _p$.t && setStyleProperty(_el$39, "grid-template-rows", _p$.t = _v$4);
4548
- _v$5 !== _p$.a && className(_el$40, _p$.a = _v$5);
4591
+ _v$3 !== _p$.e && className(_el$39, _p$.e = _v$3);
4592
+ _v$4 !== _p$.t && setStyleProperty(_el$41, "grid-template-rows", _p$.t = _v$4);
4593
+ _v$5 !== _p$.a && className(_el$42, _p$.a = _v$5);
4549
4594
  return _p$;
4550
4595
  }, {
4551
4596
  e: void 0,
4552
4597
  t: void 0,
4553
4598
  a: void 0
4554
4599
  });
4555
- return _el$36;
4600
+ return _el$38;
4556
4601
  }
4557
4602
  }), null);
4558
- insert(_el$28, createComponent(Show, {
4603
+ insert(_el$30, createComponent(Show, {
4559
4604
  get when() {
4560
4605
  return memo(() => !!(isNotProcessing() && props.isInputExpanded))() && !props.isPendingDismiss;
4561
4606
  },
4562
4607
  get children() {
4563
- var _el$44 = _tmpl$222(), _el$45 = _el$44.firstChild;
4564
- insert(_el$45, createComponent(ClickToCopyPill, {
4608
+ var _el$46 = _tmpl$24(), _el$47 = _el$46.firstChild;
4609
+ insert(_el$47, createComponent(ClickToCopyPill, {
4565
4610
  onClick: handleSubmit,
4566
4611
  dimmed: true,
4567
4612
  shrink: true,
@@ -4572,19 +4617,19 @@ var SelectionLabel = (props) => {
4572
4617
  return props.hasAgent;
4573
4618
  }
4574
4619
  }), null);
4575
- insert(_el$45, createComponent(Show, {
4620
+ insert(_el$47, createComponent(Show, {
4576
4621
  get when() {
4577
4622
  return props.componentName;
4578
4623
  },
4579
4624
  get children() {
4580
- var _el$46 = _tmpl$16();
4581
- insert(_el$46, createComponent(ParentBadge, {
4625
+ var _el$48 = _tmpl$17();
4626
+ insert(_el$48, createComponent(ParentBadge, {
4582
4627
  get name() {
4583
4628
  return props.componentName;
4584
4629
  }
4585
4630
  }), null);
4586
- insert(_el$46, createComponent(ChevronSeparator, {}), null);
4587
- insert(_el$46, createComponent(TagBadge, {
4631
+ insert(_el$48, createComponent(ChevronSeparator, {}), null);
4632
+ insert(_el$48, createComponent(TagBadge, {
4588
4633
  get tagName() {
4589
4634
  return tagDisplay();
4590
4635
  },
@@ -4593,14 +4638,13 @@ var SelectionLabel = (props) => {
4593
4638
  },
4594
4639
  onClick: handleTagClick,
4595
4640
  onHoverChange: handleTagHoverChange,
4596
- showMono: true,
4597
4641
  shrink: true,
4598
4642
  forceShowIcon: true
4599
4643
  }), null);
4600
- return _el$46;
4644
+ return _el$48;
4601
4645
  }
4602
4646
  }), null);
4603
- insert(_el$45, createComponent(Show, {
4647
+ insert(_el$47, createComponent(Show, {
4604
4648
  get when() {
4605
4649
  return !props.componentName;
4606
4650
  },
@@ -4614,68 +4658,78 @@ var SelectionLabel = (props) => {
4614
4658
  },
4615
4659
  onClick: handleTagClick,
4616
4660
  onHoverChange: handleTagHoverChange,
4617
- showMono: true,
4618
4661
  shrink: true,
4619
4662
  forceShowIcon: true
4620
4663
  });
4621
4664
  }
4622
4665
  }), null);
4623
- insert(_el$44, createComponent(BottomSection, {
4666
+ insert(_el$46, createComponent(BottomSection, {
4624
4667
  get children() {
4625
- var _el$47 = _tmpl$21(), _el$48 = _el$47.firstChild, _el$49 = _el$48.nextSibling;
4626
- _el$48.$$keydown = handleKeyDown;
4627
- _el$48.$$input = handleInput;
4628
- var _ref$3 = inputRef;
4629
- typeof _ref$3 === "function" ? use(_ref$3, _el$48) : inputRef = _el$48;
4630
- insert(_el$49, createComponent(Show, {
4631
- get when() {
4632
- return memo(() => !!(props.hasAgent && speechRecognition.isSupported()))() && !props.inputValue;
4633
- },
4634
- get children() {
4635
- var _el$50 = _tmpl$19();
4636
- addEventListener(_el$50, "click", speechRecognition.toggle);
4637
- insert(_el$50, createComponent(IconMic, {
4638
- size: 11,
4639
- get ["class"]() {
4640
- return speechRecognition.isListening() ? "animate-pulse" : "";
4641
- }
4642
- }));
4643
- createRenderEffect((_p$) => {
4644
- var _v$6 = cn("contain-layout shrink-0 flex items-center justify-center px-[2px] py-[2px] rounded-xs [border-width:0.5px] border-solid size-fit cursor-pointer transition-all hover:scale-105", speechRecognition.isListening() ? "bg-grab-purple border-grab-purple text-white" : "bg-white border-[#B3B3B3] text-black"), _v$7 = speechRecognition.isListening() ? "Stop listening" : "Start voice input";
4645
- _v$6 !== _p$.e && className(_el$50, _p$.e = _v$6);
4646
- _v$7 !== _p$.t && setAttribute(_el$50, "title", _p$.t = _v$7);
4647
- return _p$;
4648
- }, {
4649
- e: void 0,
4650
- t: void 0
4651
- });
4652
- return _el$50;
4653
- }
4654
- }), null);
4655
- insert(_el$49, createComponent(Show, {
4668
+ return [createComponent(Show, {
4656
4669
  get when() {
4657
- return props.inputValue;
4670
+ return props.replyToPrompt;
4658
4671
  },
4659
4672
  get children() {
4660
- var _el$51 = _tmpl$20();
4661
- _el$51.$$click = handleSubmit;
4662
- insert(_el$51, createComponent(IconReturn, {
4663
- size: 10,
4664
- "class": "opacity-[0.99] text-black"
4665
- }));
4666
- return _el$51;
4673
+ var _el$49 = _tmpl$20(), _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
4674
+ insert(_el$51, () => props.replyToPrompt);
4675
+ return _el$49;
4667
4676
  }
4668
- }), null);
4669
- createRenderEffect(() => setAttribute(_el$48, "placeholder", speechRecognition.isListening() ? "listening..." : "type prompt"));
4670
- createRenderEffect(() => _el$48.value = props.inputValue ?? "");
4671
- return _el$47;
4677
+ }), (() => {
4678
+ var _el$52 = _tmpl$23(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
4679
+ _el$53.$$keydown = handleKeyDown;
4680
+ _el$53.$$input = handleInput;
4681
+ var _ref$3 = inputRef;
4682
+ typeof _ref$3 === "function" ? use(_ref$3, _el$53) : inputRef = _el$53;
4683
+ insert(_el$54, createComponent(Show, {
4684
+ get when() {
4685
+ return memo(() => !!(props.hasAgent && speechRecognition.isSupported()))() && !props.inputValue;
4686
+ },
4687
+ get children() {
4688
+ var _el$55 = _tmpl$21();
4689
+ addEventListener(_el$55, "click", speechRecognition.toggle);
4690
+ insert(_el$55, createComponent(IconMic, {
4691
+ size: 11,
4692
+ get ["class"]() {
4693
+ return speechRecognition.isListening() ? "animate-pulse" : "";
4694
+ }
4695
+ }));
4696
+ createRenderEffect((_p$) => {
4697
+ var _v$6 = cn("contain-layout shrink-0 flex items-center justify-center px-[2px] py-[2px] rounded-xs [border-width:0.5px] border-solid size-fit cursor-pointer transition-all hover:scale-105", speechRecognition.isListening() ? "bg-grab-purple border-grab-purple text-white" : "bg-white border-[#B3B3B3] text-black"), _v$7 = speechRecognition.isListening() ? "Stop listening" : "Start voice input";
4698
+ _v$6 !== _p$.e && className(_el$55, _p$.e = _v$6);
4699
+ _v$7 !== _p$.t && setAttribute(_el$55, "title", _p$.t = _v$7);
4700
+ return _p$;
4701
+ }, {
4702
+ e: void 0,
4703
+ t: void 0
4704
+ });
4705
+ return _el$55;
4706
+ }
4707
+ }), null);
4708
+ insert(_el$54, createComponent(Show, {
4709
+ get when() {
4710
+ return props.inputValue;
4711
+ },
4712
+ get children() {
4713
+ var _el$56 = _tmpl$222();
4714
+ _el$56.$$click = handleSubmit;
4715
+ insert(_el$56, createComponent(IconReturn, {
4716
+ size: 10,
4717
+ "class": "opacity-[0.99] text-black"
4718
+ }));
4719
+ return _el$56;
4720
+ }
4721
+ }), null);
4722
+ createRenderEffect(() => setAttribute(_el$53, "placeholder", speechRecognition.isListening() ? "listening..." : "type prompt"));
4723
+ createRenderEffect(() => _el$53.value = props.inputValue ?? "");
4724
+ return _el$52;
4725
+ })()];
4672
4726
  }
4673
4727
  }), null);
4674
- createRenderEffect(() => className(_el$45, cn("contain-layout shrink-0 flex items-center gap-1 pt-1 w-fit h-fit pl-1.5", props.componentName ? "pr-1.5" : "pr-1")));
4675
- return _el$44;
4728
+ createRenderEffect(() => className(_el$47, cn("contain-layout shrink-0 flex items-center gap-1 pt-1 w-fit h-fit pl-1.5", props.componentName ? "pr-1.5" : "pr-1")));
4729
+ return _el$46;
4676
4730
  }
4677
4731
  }), null);
4678
- insert(_el$28, createComponent(Show, {
4732
+ insert(_el$30, createComponent(Show, {
4679
4733
  get when() {
4680
4734
  return props.isPendingDismiss;
4681
4735
  },
@@ -4690,7 +4744,7 @@ var SelectionLabel = (props) => {
4690
4744
  });
4691
4745
  }
4692
4746
  }), null);
4693
- insert(_el$28, createComponent(Show, {
4747
+ insert(_el$30, createComponent(Show, {
4694
4748
  get when() {
4695
4749
  return props.error;
4696
4750
  },
@@ -4701,17 +4755,20 @@ var SelectionLabel = (props) => {
4701
4755
  },
4702
4756
  get onAcknowledge() {
4703
4757
  return props.onAcknowledgeError;
4758
+ },
4759
+ get onRetry() {
4760
+ return props.onRetry;
4704
4761
  }
4705
4762
  });
4706
4763
  }
4707
4764
  }), null);
4708
4765
  createRenderEffect((_p$) => {
4709
4766
  var _v$8 = `${computedPosition().top}px`, _v$9 = `${computedPosition().left}px`, _v$0 = props.isInputExpanded || props.status === "copied" && props.onDismiss || props.status === "copying" && props.onAbort ? "auto" : "none", _v$1 = props.status === "fading" ? 0 : 1, _v$10 = (props.status === "copied" || props.status === "fading") && !props.error ? "none" : void 0;
4710
- _v$8 !== _p$.e && setStyleProperty(_el$27, "top", _p$.e = _v$8);
4711
- _v$9 !== _p$.t && setStyleProperty(_el$27, "left", _p$.t = _v$9);
4712
- _v$0 !== _p$.a && setStyleProperty(_el$27, "pointer-events", _p$.a = _v$0);
4713
- _v$1 !== _p$.o && setStyleProperty(_el$27, "opacity", _p$.o = _v$1);
4714
- _v$10 !== _p$.i && setStyleProperty(_el$28, "display", _p$.i = _v$10);
4767
+ _v$8 !== _p$.e && setStyleProperty(_el$29, "top", _p$.e = _v$8);
4768
+ _v$9 !== _p$.t && setStyleProperty(_el$29, "left", _p$.t = _v$9);
4769
+ _v$0 !== _p$.a && setStyleProperty(_el$29, "pointer-events", _p$.a = _v$0);
4770
+ _v$1 !== _p$.o && setStyleProperty(_el$29, "opacity", _p$.o = _v$1);
4771
+ _v$10 !== _p$.i && setStyleProperty(_el$30, "display", _p$.i = _v$10);
4715
4772
  return _p$;
4716
4773
  }, {
4717
4774
  e: void 0,
@@ -4720,14 +4777,14 @@ var SelectionLabel = (props) => {
4720
4777
  o: void 0,
4721
4778
  i: void 0
4722
4779
  });
4723
- return _el$27;
4780
+ return _el$29;
4724
4781
  }
4725
4782
  });
4726
4783
  };
4727
4784
  delegateEvents(["click", "pointerdown", "mousedown", "pointerup", "input", "keydown"]);
4728
4785
 
4729
4786
  // src/components/selection-cursor.tsx
4730
- var _tmpl$24 = /* @__PURE__ */ template(`<div class="fixed z-2147483647"><button data-react-grab-selection-cursor>`);
4787
+ var _tmpl$26 = /* @__PURE__ */ template(`<div class="fixed z-2147483647"><button data-react-grab-selection-cursor>`);
4731
4788
  var SelectionCursor = (props) => {
4732
4789
  const [isHovered, setIsHovered] = createSignal(false);
4733
4790
  const [debouncedVisible, setDebouncedVisible] = createSignal(false);
@@ -4764,7 +4821,7 @@ var SelectionCursor = (props) => {
4764
4821
  });
4765
4822
  }
4766
4823
  }), (() => {
4767
- var _el$ = _tmpl$24(), _el$2 = _el$.firstChild;
4824
+ var _el$ = _tmpl$26(), _el$2 = _el$.firstChild;
4768
4825
  _el$.addEventListener("mouseleave", () => setIsHovered(false));
4769
4826
  _el$.addEventListener("mouseenter", () => setIsHovered(true));
4770
4827
  _el$2.$$click = handleClick;
@@ -4916,6 +4973,12 @@ var ReactGrabRenderer = (props) => {
4916
4973
  get inputValue() {
4917
4974
  return session().context.prompt;
4918
4975
  },
4976
+ get supportsUndo() {
4977
+ return props.supportsUndo;
4978
+ },
4979
+ get supportsFollowUp() {
4980
+ return props.supportsFollowUp;
4981
+ },
4919
4982
  onAbort: () => props.onAbortSession?.(session().id),
4920
4983
  get onDismiss() {
4921
4984
  return session().isStreaming ? void 0 : () => props.onDismissSession?.(session().id);
@@ -4923,10 +4986,14 @@ var ReactGrabRenderer = (props) => {
4923
4986
  get onUndo() {
4924
4987
  return session().isStreaming ? void 0 : () => props.onUndoSession?.(session().id);
4925
4988
  },
4989
+ get onReply() {
4990
+ return session().isStreaming ? void 0 : () => props.onReplySession?.(session().id);
4991
+ },
4926
4992
  get error() {
4927
4993
  return session().error;
4928
4994
  },
4929
- onAcknowledgeError: () => props.onAcknowledgeSessionError?.(session().id)
4995
+ onAcknowledgeError: () => props.onAcknowledgeSessionError?.(session().id),
4996
+ onRetry: () => props.onRetrySession?.(session().id)
4930
4997
  })]
4931
4998
  }), createComponent(Show, {
4932
4999
  get when() {
@@ -4955,6 +5022,9 @@ var ReactGrabRenderer = (props) => {
4955
5022
  get inputValue() {
4956
5023
  return props.inputValue;
4957
5024
  },
5025
+ get replyToPrompt() {
5026
+ return props.replyToPrompt;
5027
+ },
4958
5028
  get hasAgent() {
4959
5029
  return props.hasAgent;
4960
5030
  },
@@ -6359,7 +6429,10 @@ var isTargetKeyCombination = (event, options) => {
6359
6429
  const modifiersMatch = hasModifier ? (metaKey ? event.metaKey : true) && (ctrlKey ? event.ctrlKey : true) && (shiftKey ? event.shiftKey : true) && (altKey ? event.altKey : true) : event.metaKey || event.ctrlKey;
6360
6430
  return keyMatches && modifiersMatch;
6361
6431
  }
6362
- return (event.metaKey || event.ctrlKey) && isCLikeKey(event.key, event.code);
6432
+ const hasOnlyMetaOrCtrl = (event.metaKey || event.ctrlKey) && !event.shiftKey && !event.altKey;
6433
+ return Boolean(
6434
+ event.key && hasOnlyMetaOrCtrl && isCLikeKey(event.key, event.code)
6435
+ );
6363
6436
  };
6364
6437
 
6365
6438
  // src/utils/is-event-from-overlay.ts
@@ -6418,17 +6491,21 @@ var deepMergeTheme = mergeThemeWithBase;
6418
6491
  // src/utils/agent-session.ts
6419
6492
  var STORAGE_KEY = "react-grab:agent-sessions";
6420
6493
  var generateSessionId = () => `session-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
6421
- var createSession = (context, position, selectionBounds, tagName, componentName) => ({
6422
- id: generateSessionId(),
6423
- context,
6424
- lastStatus: "",
6425
- isStreaming: true,
6426
- createdAt: Date.now(),
6427
- position,
6428
- selectionBounds,
6429
- tagName,
6430
- componentName
6431
- });
6494
+ var createSession = (context, position, selectionBounds, tagName, componentName) => {
6495
+ const now = Date.now();
6496
+ return {
6497
+ id: generateSessionId(),
6498
+ context,
6499
+ lastStatus: "",
6500
+ isStreaming: true,
6501
+ createdAt: now,
6502
+ lastUpdatedAt: now,
6503
+ position,
6504
+ selectionBounds,
6505
+ tagName,
6506
+ componentName
6507
+ };
6508
+ };
6432
6509
  var getStorage = (storage) => {
6433
6510
  if (!storage) return null;
6434
6511
  return storage;
@@ -6486,7 +6563,7 @@ var clearSessionById = (sessionId, storage) => {
6486
6563
  saveSessions(sessions, storage);
6487
6564
  };
6488
6565
  var updateSession = (session, updates, storage) => {
6489
- const updatedSession = { ...session, ...updates };
6566
+ const updatedSession = { ...session, ...updates, lastUpdatedAt: Date.now() };
6490
6567
  saveSessionById(updatedSession, storage);
6491
6568
  return updatedSession;
6492
6569
  };
@@ -6618,10 +6695,17 @@ var createAgentManager = (initialAgentOptions) => {
6618
6695
  if (existingSessions.size === 0) {
6619
6696
  return;
6620
6697
  }
6621
- const streamingSessions = Array.from(existingSessions.values()).filter(
6622
- (session) => session.isStreaming
6698
+ const now = Date.now();
6699
+ const resumableSessions = Array.from(existingSessions.values()).filter(
6700
+ (session) => {
6701
+ if (session.isStreaming) return true;
6702
+ const lastUpdatedAt = session.lastUpdatedAt ?? session.createdAt;
6703
+ const age = now - lastUpdatedAt;
6704
+ const isRecent = age < RECENT_THRESHOLD_MS;
6705
+ return isRecent && Boolean(session.error);
6706
+ }
6623
6707
  );
6624
- if (streamingSessions.length === 0) {
6708
+ if (resumableSessions.length === 0) {
6625
6709
  clearSessions(storage);
6626
6710
  return;
6627
6711
  }
@@ -6629,18 +6713,20 @@ var createAgentManager = (initialAgentOptions) => {
6629
6713
  clearSessions(storage);
6630
6714
  return;
6631
6715
  }
6632
- const streamingSessionsMap = new Map(
6633
- streamingSessions.map((session) => [session.id, session])
6716
+ const resumableSessionsMap = new Map(
6717
+ resumableSessions.map((session) => [session.id, session])
6634
6718
  );
6635
- setSessions(streamingSessionsMap);
6636
- saveSessions(streamingSessionsMap, storage);
6637
- for (const existingSession of streamingSessions) {
6719
+ setSessions(resumableSessionsMap);
6720
+ saveSessions(resumableSessionsMap, storage);
6721
+ for (const existingSession of resumableSessions) {
6638
6722
  const reacquiredElement = tryReacquireElement(existingSession);
6639
6723
  if (reacquiredElement) {
6640
6724
  sessionElements.set(existingSession.id, reacquiredElement);
6641
6725
  }
6642
6726
  const sessionWithResumeStatus = {
6643
6727
  ...existingSession,
6728
+ isStreaming: true,
6729
+ error: void 0,
6644
6730
  lastStatus: existingSession.lastStatus || "Resuming...",
6645
6731
  position: existingSession.position ?? {
6646
6732
  x: window.innerWidth / 2,
@@ -6662,36 +6748,55 @@ var createAgentManager = (initialAgentOptions) => {
6662
6748
  }
6663
6749
  };
6664
6750
  const startSession = async (params) => {
6665
- const { element, prompt, position, selectionBounds } = params;
6751
+ const { element, prompt, position, selectionBounds, sessionId } = params;
6666
6752
  const storage = agentOptions?.storage;
6667
6753
  if (!agentOptions?.provider) {
6668
6754
  return;
6669
6755
  }
6670
- const elements = [element];
6671
- const content = await generateSnippet(elements, { maxLines: Infinity });
6756
+ const existingSession = sessionId ? sessions().get(sessionId) : void 0;
6757
+ const isFollowUp = Boolean(sessionId);
6758
+ const content = existingSession ? existingSession.context.content : await generateSnippet([element], { maxLines: Infinity });
6672
6759
  const context = {
6673
6760
  content,
6674
6761
  prompt,
6675
- options: agentOptions?.getOptions?.()
6762
+ options: agentOptions?.getOptions?.(),
6763
+ sessionId: isFollowUp ? sessionId : void 0
6676
6764
  };
6677
- const tagName = (element.tagName || "").toLowerCase() || void 0;
6678
- const componentName = await getNearestComponentName(element) || void 0;
6679
- const session = createSession(
6680
- context,
6681
- position,
6682
- selectionBounds,
6683
- tagName,
6684
- componentName
6685
- );
6686
- session.lastStatus = "Thinking\u2026";
6687
- sessionElements.set(session.id, element);
6765
+ let session;
6766
+ if (existingSession) {
6767
+ session = updateSession(
6768
+ existingSession,
6769
+ {
6770
+ context,
6771
+ isStreaming: true,
6772
+ lastStatus: "Thinking\u2026"
6773
+ },
6774
+ storage
6775
+ );
6776
+ } else {
6777
+ const tagName = (element.tagName || "").toLowerCase() || void 0;
6778
+ const componentName = await getNearestComponentName(element) || void 0;
6779
+ session = createSession(
6780
+ context,
6781
+ position,
6782
+ selectionBounds,
6783
+ tagName,
6784
+ componentName
6785
+ );
6786
+ session.lastStatus = "Thinking\u2026";
6787
+ sessionElements.set(session.id, element);
6788
+ }
6688
6789
  setSessions((prev) => new Map(prev).set(session.id, session));
6689
6790
  saveSessionById(session, storage);
6690
6791
  agentOptions.onStart?.(session, element);
6691
6792
  const abortController = new AbortController();
6692
6793
  abortControllers.set(session.id, abortController);
6794
+ const contextWithSessionId = {
6795
+ ...context,
6796
+ sessionId: sessionId ?? session.id
6797
+ };
6693
6798
  const streamIterator = agentOptions.provider.send(
6694
- context,
6799
+ contextWithSessionId,
6695
6800
  abortController.signal
6696
6801
  );
6697
6802
  void executeSessionStream(session, streamIterator);
@@ -6735,6 +6840,38 @@ var createAgentManager = (initialAgentOptions) => {
6735
6840
  dismissSession(sessionId);
6736
6841
  return prompt;
6737
6842
  };
6843
+ const retrySession = (sessionId) => {
6844
+ const currentSessions = sessions();
6845
+ const session = currentSessions.get(sessionId);
6846
+ if (!session || !agentOptions?.provider) return;
6847
+ const storage = agentOptions.storage;
6848
+ const element = sessionElements.get(sessionId);
6849
+ const retriedSession = updateSession(
6850
+ session,
6851
+ {
6852
+ error: void 0,
6853
+ isStreaming: true,
6854
+ lastStatus: "Retrying\u2026"
6855
+ },
6856
+ storage
6857
+ );
6858
+ setSessions((prev) => new Map(prev).set(sessionId, retriedSession));
6859
+ saveSessionById(retriedSession, storage);
6860
+ if (element) {
6861
+ agentOptions.onStart?.(retriedSession, element);
6862
+ }
6863
+ const abortController = new AbortController();
6864
+ abortControllers.set(sessionId, abortController);
6865
+ const contextWithSessionId = {
6866
+ ...retriedSession.context,
6867
+ sessionId
6868
+ };
6869
+ const streamIterator = agentOptions.provider.send(
6870
+ contextWithSessionId,
6871
+ abortController.signal
6872
+ );
6873
+ void executeSessionStream(retriedSession, streamIterator);
6874
+ };
6738
6875
  const updateSessionBoundsOnViewportChange = () => {
6739
6876
  const currentSessions = sessions();
6740
6877
  if (currentSessions.size === 0) return;
@@ -6779,6 +6916,7 @@ var createAgentManager = (initialAgentOptions) => {
6779
6916
  dismissSession,
6780
6917
  undoSession,
6781
6918
  acknowledgeSessionError,
6919
+ retrySession,
6782
6920
  updateSessionBoundsOnViewportChange,
6783
6921
  getSessionElement,
6784
6922
  setOptions,
@@ -6787,8 +6925,8 @@ var createAgentManager = (initialAgentOptions) => {
6787
6925
  };
6788
6926
 
6789
6927
  // src/core.tsx
6790
- var _tmpl$25 = /* @__PURE__ */ template(`<span class="tabular-nums align-middle">`);
6791
- var _tmpl$26 = /* @__PURE__ */ template(`<span class="font-mono tabular-nums align-middle">&lt;<!>>`);
6928
+ var _tmpl$27 = /* @__PURE__ */ template(`<span class="tabular-nums align-middle">`);
6929
+ var _tmpl$28 = /* @__PURE__ */ template(`<span class="font-mono tabular-nums align-middle">&lt;<!>>`);
6792
6930
  var _tmpl$33 = /* @__PURE__ */ template(`<span class="tabular-nums ml-1 align-middle"> in `);
6793
6931
  var onIdle = (callback) => {
6794
6932
  if ("scheduler" in globalThis) {
@@ -6885,7 +7023,7 @@ var init = (rawOptions) => {
6885
7023
  hasInited = true;
6886
7024
  const logIntro = () => {
6887
7025
  try {
6888
- const version = "0.0.78";
7026
+ const version = "0.0.80";
6889
7027
  const logoDataUri = `data:image/svg+xml;base64,${btoa(LOGO_SVG)}`;
6890
7028
  console.log(`%cReact Grab${version ? ` v${version}` : ""}%c
6891
7029
  https://react-grab.com`, `background: #330039; color: #ffffff; border: 1px solid #d75fcb; padding: 4px 4px 4px 24px; border-radius: 4px; background-image: url("${logoDataUri}"); background-size: 16px 16px; background-repeat: no-repeat; background-position: 4px center; display: inline-block; margin-bottom: 4px;`, "");
@@ -6940,6 +7078,10 @@ https://react-grab.com`, `background: #330039; color: #ffffff; border: 1px solid
6940
7078
  const [frozenElement, setFrozenElement] = createSignal(null);
6941
7079
  const [hasAgentProvider, setHasAgentProvider] = createSignal(Boolean(options.agent?.provider));
6942
7080
  const [isAgentConnected, setIsAgentConnected] = createSignal(false);
7081
+ const [supportsUndo, setSupportsUndo] = createSignal(Boolean(options.agent?.provider?.undo));
7082
+ const [supportsFollowUp, setSupportsFollowUp] = createSignal(Boolean(options.agent?.provider?.supportsFollowUp));
7083
+ const [replySessionId, setReplySessionId] = createSignal(null);
7084
+ const [replyToPrompt, setReplyToPrompt] = createSignal(null);
6943
7085
  const [isPendingDismiss, setIsPendingDismiss] = createSignal(false);
6944
7086
  const elementInputCache = /* @__PURE__ */ new WeakMap();
6945
7087
  const [nativeSelectionCursorX, setNativeSelectionCursorX] = createSignal(OFFSCREEN_POSITION);
@@ -7266,7 +7408,7 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7266
7408
  const copying = isCopying();
7267
7409
  if (!element) {
7268
7410
  return (() => {
7269
- var _el$ = _tmpl$25();
7411
+ var _el$ = _tmpl$27();
7270
7412
  insert(_el$, copying ? "Processing\u2026" : "1 element");
7271
7413
  return _el$;
7272
7414
  })();
@@ -7275,7 +7417,7 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7275
7417
  const componentName = labelComponentName();
7276
7418
  if (tagName && componentName) {
7277
7419
  return [(() => {
7278
- var _el$2 = _tmpl$26(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling; _el$5.nextSibling;
7420
+ var _el$2 = _tmpl$28(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling; _el$5.nextSibling;
7279
7421
  insert(_el$2, tagName, _el$5);
7280
7422
  return _el$2;
7281
7423
  })(), (() => {
@@ -7286,13 +7428,13 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7286
7428
  }
7287
7429
  if (tagName) {
7288
7430
  return (() => {
7289
- var _el$8 = _tmpl$26(), _el$9 = _el$8.firstChild, _el$1 = _el$9.nextSibling; _el$1.nextSibling;
7431
+ var _el$8 = _tmpl$28(), _el$9 = _el$8.firstChild, _el$1 = _el$9.nextSibling; _el$1.nextSibling;
7290
7432
  insert(_el$8, tagName, _el$1);
7291
7433
  return _el$8;
7292
7434
  })();
7293
7435
  }
7294
7436
  return (() => {
7295
- var _el$10 = _tmpl$25();
7437
+ var _el$10 = _tmpl$27();
7296
7438
  insert(_el$10, copying ? "Processing\u2026" : "1 element");
7297
7439
  return _el$10;
7298
7440
  })();
@@ -7562,11 +7704,12 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7562
7704
  const labelPositionX = mouseX();
7563
7705
  const currentX = bounds.x + bounds.width / 2;
7564
7706
  const currentY = bounds.y + bounds.height / 2;
7565
- setMouseX(currentX);
7566
- setMouseY(currentY);
7567
7707
  if (hasAgentProvider() && prompt) {
7568
7708
  elementInputCache.delete(element);
7569
7709
  deactivateRenderer();
7710
+ const currentReplySessionId = replySessionId();
7711
+ setReplySessionId(null);
7712
+ setReplyToPrompt(null);
7570
7713
  void agentManager.startSession({
7571
7714
  element,
7572
7715
  prompt,
@@ -7574,10 +7717,13 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7574
7717
  x: labelPositionX,
7575
7718
  y: currentY
7576
7719
  },
7577
- selectionBounds: bounds
7720
+ selectionBounds: bounds,
7721
+ sessionId: currentReplySessionId ?? void 0
7578
7722
  });
7579
7723
  return;
7580
7724
  }
7725
+ setMouseX(currentX);
7726
+ setMouseY(currentY);
7581
7727
  setIsInputMode(false);
7582
7728
  setInputText("");
7583
7729
  if (prompt) {
@@ -7605,10 +7751,12 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7605
7751
  elementInputCache.set(element, currentInput);
7606
7752
  }
7607
7753
  setIsPendingDismiss(false);
7754
+ setReplySessionId(null);
7608
7755
  deactivateRenderer();
7609
7756
  };
7610
7757
  const handleConfirmDismiss = () => {
7611
7758
  setIsPendingDismiss(false);
7759
+ setReplySessionId(null);
7612
7760
  deactivateRenderer();
7613
7761
  };
7614
7762
  const handleCancelDismiss = () => {
@@ -8370,6 +8518,9 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8370
8518
  get isInputExpanded() {
8371
8519
  return isInputExpanded();
8372
8520
  },
8521
+ get replyToPrompt() {
8522
+ return replyToPrompt() ?? void 0;
8523
+ },
8373
8524
  get hasAgent() {
8374
8525
  return hasAgentProvider();
8375
8526
  },
@@ -8379,15 +8530,48 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8379
8530
  get agentSessions() {
8380
8531
  return agentManager.sessions();
8381
8532
  },
8533
+ get supportsUndo() {
8534
+ return supportsUndo();
8535
+ },
8536
+ get supportsFollowUp() {
8537
+ return supportsFollowUp();
8538
+ },
8382
8539
  onAbortSession: (sessionId) => agentManager.abortSession(sessionId),
8383
8540
  onDismissSession: (sessionId) => agentManager.dismissSession(sessionId),
8384
8541
  onUndoSession: (sessionId) => agentManager.undoSession(sessionId),
8542
+ onReplySession: (sessionId) => {
8543
+ const session = agentManager.sessions().get(sessionId);
8544
+ const element = agentManager.getSessionElement(sessionId);
8545
+ if (session && element) {
8546
+ const positionX = session.position.x;
8547
+ const rect = element.getBoundingClientRect();
8548
+ const centerY = rect.top + rect.height / 2;
8549
+ const previousPrompt = session.context.prompt;
8550
+ agentManager.dismissSession(sessionId);
8551
+ setMouseX(positionX);
8552
+ setMouseY(centerY);
8553
+ setFrozenElement(element);
8554
+ setInputText("");
8555
+ setIsInputExpanded(true);
8556
+ setIsInputMode(true);
8557
+ setIsToggleMode(true);
8558
+ setIsToggleFrozen(true);
8559
+ setReplySessionId(session.context.sessionId ?? sessionId);
8560
+ setReplyToPrompt(previousPrompt);
8561
+ if (!isActivated()) {
8562
+ activateRenderer();
8563
+ }
8564
+ }
8565
+ },
8385
8566
  onAcknowledgeSessionError: (sessionId) => {
8386
8567
  const prompt = agentManager.acknowledgeSessionError(sessionId);
8387
8568
  if (prompt) {
8388
8569
  setInputText(prompt);
8389
8570
  }
8390
8571
  },
8572
+ onRetrySession: (sessionId) => {
8573
+ agentManager.retrySession(sessionId);
8574
+ },
8391
8575
  onInputChange: handleInputChange,
8392
8576
  onInputSubmit: () => void handleInputSubmit(),
8393
8577
  onInputCancel: handleInputCancel,
@@ -8496,6 +8680,8 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8496
8680
  };
8497
8681
  agentManager.setOptions(mergedOptions);
8498
8682
  setHasAgentProvider(Boolean(mergedOptions.provider));
8683
+ setSupportsUndo(Boolean(mergedOptions.provider?.undo));
8684
+ setSupportsFollowUp(Boolean(mergedOptions.provider?.supportsFollowUp));
8499
8685
  if (mergedOptions.provider?.checkConnection) {
8500
8686
  void mergedOptions.provider.checkConnection().then((connected) => {
8501
8687
  setIsAgentConnected(connected);