react-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.
@@ -950,8 +950,7 @@ function cleanChildren(parent, current, marker, replacement) {
950
950
  }
951
951
 
952
952
  // dist/styles.css
953
- var styles_default = `/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */
954
- @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}}`;
953
+ 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}}';
955
954
 
956
955
  // src/utils/is-keyboard-event-triggered-by-input.ts
957
956
  var FORM_TAGS_AND_ROLES = [
@@ -1080,7 +1079,7 @@ var buildOpenFileUrl = (filePath, lineNumber) => {
1080
1079
  };
1081
1080
 
1082
1081
  // src/constants.ts
1083
- var VERSION = "0.0.78";
1082
+ var VERSION = "0.0.80";
1084
1083
  var VIEWPORT_MARGIN_PX = 8;
1085
1084
  var OFFSCREEN_POSITION = -1e3;
1086
1085
  var SELECTION_LERP_FACTOR = 0.95;
@@ -1091,6 +1090,7 @@ var BLUR_DEACTIVATION_THRESHOLD_MS = 500;
1091
1090
  var INPUT_FOCUS_ACTIVATION_DELAY_MS = 150;
1092
1091
  var DEFAULT_KEY_HOLD_DURATION_MS = 200;
1093
1092
  var DOUBLE_CLICK_THRESHOLD_MS = 250;
1093
+ var RECENT_THRESHOLD_MS = 1e4;
1094
1094
  var DRAG_THRESHOLD_PX = 2;
1095
1095
  var ELEMENT_DETECTION_THROTTLE_MS = 32;
1096
1096
  var BOUNDS_RECALC_INTERVAL_MS = 100;
@@ -3945,32 +3945,55 @@ var IconReturn = (props) => {
3945
3945
  })();
3946
3946
  };
3947
3947
 
3948
+ // src/components/icon-retry.tsx
3949
+ 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>`);
3950
+ var IconRetry = (props) => {
3951
+ const size = () => props.size ?? 12;
3952
+ return (() => {
3953
+ var _el$ = _tmpl$6();
3954
+ createRenderEffect((_p$) => {
3955
+ var _v$ = size(), _v$2 = size(), _v$3 = props.class;
3956
+ _v$ !== _p$.e && setAttribute(_el$, "width", _p$.e = _v$);
3957
+ _v$2 !== _p$.t && setAttribute(_el$, "height", _p$.t = _v$2);
3958
+ _v$3 !== _p$.a && setAttribute(_el$, "class", _p$.a = _v$3);
3959
+ return _p$;
3960
+ }, {
3961
+ e: void 0,
3962
+ t: void 0,
3963
+ a: void 0
3964
+ });
3965
+ return _el$;
3966
+ })();
3967
+ };
3968
+
3948
3969
  // src/components/selection-label.tsx
3949
- 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>`);
3950
- 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">`);
3951
- 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;`);
3970
+ 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>`);
3971
+ 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">`);
3972
+ 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;`);
3952
3973
  var _tmpl$42 = /* @__PURE__ */ template(`<div class="absolute w-0 h-0"style="border-left:8px solid transparent;border-right:8px solid transparent">`);
3953
- 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">`);
3974
+ 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">`);
3954
3975
  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%)">`);
3955
- 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`);
3956
- 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?`);
3957
- 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`);
3958
- 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">`);
3959
- 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`);
3960
- 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`);
3961
- var _tmpl$11 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit">`);
3962
- 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">`);
3963
- 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">`);
3964
- 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>`);
3965
- 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">`);
3966
- var _tmpl$16 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-px w-fit h-fit">`);
3967
- 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`);
3968
- 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>`);
3969
- var _tmpl$19 = /* @__PURE__ */ template(`<button>`);
3970
- 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">`);
3971
- 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">`);
3972
- 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>`);
3973
- 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">`);
3976
+ 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`);
3977
+ 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?`);
3978
+ 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`);
3979
+ 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">`);
3980
+ 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`);
3981
+ 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`);
3982
+ 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`);
3983
+ var _tmpl$12 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit">`);
3984
+ 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">`);
3985
+ 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">`);
3986
+ 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>`);
3987
+ 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">`);
3988
+ var _tmpl$17 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-px w-fit h-fit">`);
3989
+ 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">`);
3990
+ 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>`);
3991
+ 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">`);
3992
+ var _tmpl$21 = /* @__PURE__ */ template(`<button>`);
3993
+ 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">`);
3994
+ 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">`);
3995
+ 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>`);
3996
+ 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">`);
3974
3997
  var ARROW_HEIGHT = 8;
3975
3998
  var LABEL_GAP = 4;
3976
3999
  var IDLE_TIMEOUT_MS = 400;
@@ -3985,7 +4008,7 @@ var TagBadge = (props) => {
3985
4008
  props.onHoverChange?.(false);
3986
4009
  };
3987
4010
  return (() => {
3988
- var _el$ = _tmpl$6(), _el$2 = _el$.firstChild;
4011
+ var _el$ = _tmpl$7(), _el$2 = _el$.firstChild;
3989
4012
  addEventListener(_el$, "click", props.onClick);
3990
4013
  _el$.addEventListener("mouseleave", handleMouseLeave);
3991
4014
  _el$.addEventListener("mouseenter", handleMouseEnter);
@@ -4004,7 +4027,7 @@ var TagBadge = (props) => {
4004
4027
  }
4005
4028
  }), null);
4006
4029
  createRenderEffect((_p$) => {
4007
- 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");
4030
+ 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");
4008
4031
  _v$ !== _p$.e && className(_el$, _p$.e = _v$);
4009
4032
  _v$2 !== _p$.t && className(_el$2, _p$.t = _v$2);
4010
4033
  return _p$;
@@ -4084,7 +4107,7 @@ var DismissConfirmation = (props) => {
4084
4107
  var _el$0 = _tmpl$8(); _el$0.firstChild;
4085
4108
  insert(_el$0, createComponent(BottomSection, {
4086
4109
  get children() {
4087
- var _el$10 = _tmpl$7(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling; _el$12.firstChild;
4110
+ var _el$10 = _tmpl$72(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling; _el$12.firstChild;
4088
4111
  addEventListener(_el$11, "click", props.onCancel);
4089
4112
  addEventListener(_el$12, "click", props.onConfirm);
4090
4113
  insert(_el$12, createComponent(IconReturn, {
@@ -4100,7 +4123,11 @@ var DismissConfirmation = (props) => {
4100
4123
  var MAX_ERROR_LENGTH = 50;
4101
4124
  var ErrorConfirmation = (props) => {
4102
4125
  const handleKeyDown = (event) => {
4103
- if (event.code === "Enter" || event.code === "Escape") {
4126
+ if (event.code === "Enter") {
4127
+ event.preventDefault();
4128
+ event.stopPropagation();
4129
+ props.onRetry?.();
4130
+ } else if (event.code === "Escape") {
4104
4131
  event.preventDefault();
4105
4132
  event.stopPropagation();
4106
4133
  props.onAcknowledge?.();
@@ -4126,12 +4153,13 @@ var ErrorConfirmation = (props) => {
4126
4153
  insert(_el$16, truncatedError);
4127
4154
  insert(_el$14, createComponent(BottomSection, {
4128
4155
  get children() {
4129
- var _el$17 = _tmpl$9(), _el$18 = _el$17.firstChild; _el$18.firstChild;
4130
- addEventListener(_el$18, "click", props.onAcknowledge);
4131
- insert(_el$18, createComponent(IconReturn, {
4156
+ var _el$17 = _tmpl$9(), _el$18 = _el$17.firstChild; _el$18.firstChild; var _el$20 = _el$18.nextSibling;
4157
+ addEventListener(_el$18, "click", props.onRetry);
4158
+ insert(_el$18, createComponent(IconRetry, {
4132
4159
  size: 10,
4133
4160
  "class": "text-black/50"
4134
4161
  }), null);
4162
+ addEventListener(_el$20, "click", props.onAcknowledge);
4135
4163
  return _el$17;
4136
4164
  }
4137
4165
  }), null);
@@ -4158,46 +4186,56 @@ var CompletedConfirmation = (props) => {
4158
4186
  });
4159
4187
  });
4160
4188
  return (() => {
4161
- var _el$20 = _tmpl$12(), _el$21 = _el$20.firstChild, _el$22 = _el$21.firstChild;
4162
- insert(_el$22, () => props.statusText);
4163
- insert(_el$20, createComponent(Show, {
4189
+ var _el$21 = _tmpl$13(), _el$22 = _el$21.firstChild, _el$23 = _el$22.firstChild;
4190
+ insert(_el$23, () => props.statusText);
4191
+ insert(_el$21, createComponent(Show, {
4164
4192
  get when() {
4165
- return props.onDismiss || props.onUndo;
4193
+ return props.onDismiss || props.onUndo || props.onReply;
4166
4194
  },
4167
4195
  get children() {
4168
4196
  return createComponent(BottomSection, {
4169
4197
  get children() {
4170
- var _el$23 = _tmpl$11();
4171
- insert(_el$23, createComponent(Show, {
4198
+ var _el$24 = _tmpl$12();
4199
+ insert(_el$24, createComponent(Show, {
4172
4200
  get when() {
4173
- return props.onUndo;
4201
+ return memo(() => !!props.supportsUndo)() && props.onUndo;
4174
4202
  },
4175
4203
  get children() {
4176
- var _el$24 = _tmpl$1();
4177
- _el$24.$$click = () => props.onUndo?.();
4178
- return _el$24;
4204
+ var _el$25 = _tmpl$1();
4205
+ _el$25.$$click = () => props.onUndo?.();
4206
+ return _el$25;
4179
4207
  }
4180
4208
  }), null);
4181
- insert(_el$23, createComponent(Show, {
4209
+ insert(_el$24, createComponent(Show, {
4210
+ get when() {
4211
+ return memo(() => !!props.supportsFollowUp)() && props.onReply;
4212
+ },
4213
+ get children() {
4214
+ var _el$26 = _tmpl$10();
4215
+ _el$26.$$click = () => props.onReply?.();
4216
+ return _el$26;
4217
+ }
4218
+ }), null);
4219
+ insert(_el$24, createComponent(Show, {
4182
4220
  get when() {
4183
4221
  return props.onDismiss;
4184
4222
  },
4185
4223
  get children() {
4186
- var _el$25 = _tmpl$10(); _el$25.firstChild;
4187
- _el$25.$$click = () => props.onDismiss?.();
4188
- insert(_el$25, createComponent(IconReturn, {
4224
+ var _el$27 = _tmpl$11(); _el$27.firstChild;
4225
+ _el$27.$$click = () => props.onDismiss?.();
4226
+ insert(_el$27, createComponent(IconReturn, {
4189
4227
  size: 10,
4190
4228
  "class": "text-black/50"
4191
4229
  }), null);
4192
- return _el$25;
4230
+ return _el$27;
4193
4231
  }
4194
4232
  }), null);
4195
- return _el$23;
4233
+ return _el$24;
4196
4234
  }
4197
4235
  });
4198
4236
  }
4199
4237
  }), null);
4200
- return _el$20;
4238
+ return _el$21;
4201
4239
  })();
4202
4240
  };
4203
4241
  var SelectionLabel = (props) => {
@@ -4401,21 +4439,21 @@ var SelectionLabel = (props) => {
4401
4439
  return memo(() => props.visible !== false)() && (props.selectionBounds || shouldShowWithoutBounds());
4402
4440
  },
4403
4441
  get children() {
4404
- var _el$27 = _tmpl$23(), _el$28 = _el$27.firstChild;
4405
- _el$27.$$click = stopPropagation;
4406
- _el$27.$$mousedown = stopPropagation;
4407
- _el$27.$$pointerdown = handleContainerPointerDown;
4442
+ var _el$29 = _tmpl$25(), _el$30 = _el$29.firstChild;
4443
+ _el$29.$$click = stopPropagation;
4444
+ _el$29.$$mousedown = stopPropagation;
4445
+ _el$29.$$pointerdown = handleContainerPointerDown;
4408
4446
  var _ref$ = containerRef;
4409
- typeof _ref$ === "function" ? use(_ref$, _el$27) : containerRef = _el$27;
4410
- insert(_el$27, createComponent(Arrow, {
4447
+ typeof _ref$ === "function" ? use(_ref$, _el$29) : containerRef = _el$29;
4448
+ insert(_el$29, createComponent(Arrow, {
4411
4449
  get position() {
4412
4450
  return arrowPosition();
4413
4451
  },
4414
4452
  get leftPx() {
4415
4453
  return computedPosition().arrowLeft;
4416
4454
  }
4417
- }), _el$28);
4418
- insert(_el$27, createComponent(Show, {
4455
+ }), _el$30);
4456
+ insert(_el$29, createComponent(Show, {
4419
4457
  get when() {
4420
4458
  return memo(() => !!(props.status === "copied" || props.status === "fading"))() && !props.error;
4421
4459
  },
@@ -4424,60 +4462,69 @@ var SelectionLabel = (props) => {
4424
4462
  get statusText() {
4425
4463
  return memo(() => !!props.hasAgent)() ? props.statusText ?? "Completed" : "Copied";
4426
4464
  },
4465
+ get supportsUndo() {
4466
+ return props.supportsUndo;
4467
+ },
4468
+ get supportsFollowUp() {
4469
+ return props.supportsFollowUp;
4470
+ },
4427
4471
  get onDismiss() {
4428
4472
  return props.onDismiss;
4429
4473
  },
4430
4474
  get onUndo() {
4431
4475
  return props.onUndo;
4476
+ },
4477
+ get onReply() {
4478
+ return props.onReply;
4432
4479
  }
4433
4480
  });
4434
4481
  }
4435
- }), _el$28);
4436
- insert(_el$28, createComponent(Show, {
4482
+ }), _el$30);
4483
+ insert(_el$30, createComponent(Show, {
4437
4484
  get when() {
4438
4485
  return props.status === "copying";
4439
4486
  },
4440
4487
  get children() {
4441
- var _el$29 = _tmpl$15(), _el$30 = _el$29.firstChild, _el$31 = _el$30.firstChild, _el$32 = _el$31.firstChild;
4442
- insert(_el$32, () => props.statusText ?? "Grabbing\u2026");
4443
- insert(_el$29, createComponent(BottomSection, {
4488
+ var _el$31 = _tmpl$16(), _el$32 = _el$31.firstChild, _el$33 = _el$32.firstChild, _el$34 = _el$33.firstChild;
4489
+ insert(_el$34, () => props.statusText ?? "Grabbing\u2026");
4490
+ insert(_el$31, createComponent(BottomSection, {
4444
4491
  get children() {
4445
- var _el$33 = _tmpl$14(), _el$34 = _el$33.firstChild;
4492
+ var _el$35 = _tmpl$15(), _el$36 = _el$35.firstChild;
4446
4493
  var _ref$2 = inputRef;
4447
- typeof _ref$2 === "function" ? use(_ref$2, _el$34) : inputRef = _el$34;
4448
- insert(_el$33, createComponent(Show, {
4494
+ typeof _ref$2 === "function" ? use(_ref$2, _el$36) : inputRef = _el$36;
4495
+ insert(_el$35, createComponent(Show, {
4449
4496
  get when() {
4450
4497
  return props.onAbort;
4451
4498
  },
4452
4499
  get children() {
4453
- var _el$35 = _tmpl$13();
4454
- _el$35.$$click = (event) => {
4500
+ var _el$37 = _tmpl$14();
4501
+ _el$37.$$click = (event) => {
4455
4502
  event.stopPropagation();
4456
4503
  props.onAbort?.();
4457
4504
  };
4458
- _el$35.$$pointerup = (event) => {
4505
+ _el$37.$$pointerup = (event) => {
4459
4506
  event.stopPropagation();
4460
4507
  props.onAbort?.();
4461
4508
  };
4462
- _el$35.$$mousedown = (event) => event.stopPropagation();
4463
- _el$35.$$pointerdown = (event) => event.stopPropagation();
4464
- return _el$35;
4509
+ _el$37.$$mousedown = (event) => event.stopPropagation();
4510
+ _el$37.$$pointerdown = (event) => event.stopPropagation();
4511
+ return _el$37;
4465
4512
  }
4466
4513
  }), null);
4467
- createRenderEffect(() => _el$34.value = props.inputValue ?? "");
4468
- return _el$33;
4514
+ createRenderEffect(() => _el$36.value = props.inputValue ?? "");
4515
+ return _el$35;
4469
4516
  }
4470
4517
  }), null);
4471
- return _el$29;
4518
+ return _el$31;
4472
4519
  }
4473
4520
  }), null);
4474
- insert(_el$28, createComponent(Show, {
4521
+ insert(_el$30, createComponent(Show, {
4475
4522
  get when() {
4476
4523
  return memo(() => !!isNotProcessing())() && !props.isInputExpanded;
4477
4524
  },
4478
4525
  get children() {
4479
- var _el$36 = _tmpl$18(), _el$37 = _el$36.firstChild, _el$39 = _el$37.nextSibling, _el$40 = _el$39.firstChild;
4480
- insert(_el$37, createComponent(ClickToCopyPill, {
4526
+ var _el$38 = _tmpl$19(), _el$39 = _el$38.firstChild, _el$41 = _el$39.nextSibling, _el$42 = _el$41.firstChild;
4527
+ insert(_el$39, createComponent(ClickToCopyPill, {
4481
4528
  onClick: handleSubmit,
4482
4529
  shrink: true,
4483
4530
  get hasParent() {
@@ -4487,19 +4534,19 @@ var SelectionLabel = (props) => {
4487
4534
  return props.hasAgent;
4488
4535
  }
4489
4536
  }), null);
4490
- insert(_el$37, createComponent(Show, {
4537
+ insert(_el$39, createComponent(Show, {
4491
4538
  get when() {
4492
4539
  return props.componentName;
4493
4540
  },
4494
4541
  get children() {
4495
- var _el$38 = _tmpl$16();
4496
- insert(_el$38, createComponent(ParentBadge, {
4542
+ var _el$40 = _tmpl$17();
4543
+ insert(_el$40, createComponent(ParentBadge, {
4497
4544
  get name() {
4498
4545
  return props.componentName;
4499
4546
  }
4500
4547
  }), null);
4501
- insert(_el$38, createComponent(ChevronSeparator, {}), null);
4502
- insert(_el$38, createComponent(TagBadge, {
4548
+ insert(_el$40, createComponent(ChevronSeparator, {}), null);
4549
+ insert(_el$40, createComponent(TagBadge, {
4503
4550
  get tagName() {
4504
4551
  return tagDisplay();
4505
4552
  },
@@ -4508,13 +4555,12 @@ var SelectionLabel = (props) => {
4508
4555
  },
4509
4556
  onClick: handleTagClick,
4510
4557
  onHoverChange: handleTagHoverChange,
4511
- showMono: true,
4512
4558
  shrink: true
4513
4559
  }), null);
4514
- return _el$38;
4560
+ return _el$40;
4515
4561
  }
4516
4562
  }), null);
4517
- insert(_el$37, createComponent(Show, {
4563
+ insert(_el$39, createComponent(Show, {
4518
4564
  get when() {
4519
4565
  return !props.componentName;
4520
4566
  },
@@ -4528,42 +4574,41 @@ var SelectionLabel = (props) => {
4528
4574
  },
4529
4575
  onClick: handleTagClick,
4530
4576
  onHoverChange: handleTagHoverChange,
4531
- showMono: true,
4532
4577
  shrink: true
4533
4578
  });
4534
4579
  }
4535
4580
  }), null);
4536
- insert(_el$40, createComponent(BottomSection, {
4581
+ insert(_el$42, createComponent(BottomSection, {
4537
4582
  get children() {
4538
- var _el$41 = _tmpl$17(), _el$42 = _el$41.firstChild, _el$43 = _el$42.nextSibling;
4539
- insert(_el$43, createComponent(IconReturn, {
4583
+ var _el$43 = _tmpl$18(), _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling;
4584
+ insert(_el$45, createComponent(IconReturn, {
4540
4585
  size: 10,
4541
4586
  "class": "opacity-[0.99] text-black"
4542
4587
  }));
4543
- return _el$41;
4588
+ return _el$43;
4544
4589
  }
4545
4590
  }));
4546
4591
  createRenderEffect((_p$) => {
4547
4592
  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");
4548
- _v$3 !== _p$.e && className(_el$37, _p$.e = _v$3);
4549
- _v$4 !== _p$.t && setStyleProperty(_el$39, "grid-template-rows", _p$.t = _v$4);
4550
- _v$5 !== _p$.a && className(_el$40, _p$.a = _v$5);
4593
+ _v$3 !== _p$.e && className(_el$39, _p$.e = _v$3);
4594
+ _v$4 !== _p$.t && setStyleProperty(_el$41, "grid-template-rows", _p$.t = _v$4);
4595
+ _v$5 !== _p$.a && className(_el$42, _p$.a = _v$5);
4551
4596
  return _p$;
4552
4597
  }, {
4553
4598
  e: void 0,
4554
4599
  t: void 0,
4555
4600
  a: void 0
4556
4601
  });
4557
- return _el$36;
4602
+ return _el$38;
4558
4603
  }
4559
4604
  }), null);
4560
- insert(_el$28, createComponent(Show, {
4605
+ insert(_el$30, createComponent(Show, {
4561
4606
  get when() {
4562
4607
  return memo(() => !!(isNotProcessing() && props.isInputExpanded))() && !props.isPendingDismiss;
4563
4608
  },
4564
4609
  get children() {
4565
- var _el$44 = _tmpl$222(), _el$45 = _el$44.firstChild;
4566
- insert(_el$45, createComponent(ClickToCopyPill, {
4610
+ var _el$46 = _tmpl$24(), _el$47 = _el$46.firstChild;
4611
+ insert(_el$47, createComponent(ClickToCopyPill, {
4567
4612
  onClick: handleSubmit,
4568
4613
  dimmed: true,
4569
4614
  shrink: true,
@@ -4574,19 +4619,19 @@ var SelectionLabel = (props) => {
4574
4619
  return props.hasAgent;
4575
4620
  }
4576
4621
  }), null);
4577
- insert(_el$45, createComponent(Show, {
4622
+ insert(_el$47, createComponent(Show, {
4578
4623
  get when() {
4579
4624
  return props.componentName;
4580
4625
  },
4581
4626
  get children() {
4582
- var _el$46 = _tmpl$16();
4583
- insert(_el$46, createComponent(ParentBadge, {
4627
+ var _el$48 = _tmpl$17();
4628
+ insert(_el$48, createComponent(ParentBadge, {
4584
4629
  get name() {
4585
4630
  return props.componentName;
4586
4631
  }
4587
4632
  }), null);
4588
- insert(_el$46, createComponent(ChevronSeparator, {}), null);
4589
- insert(_el$46, createComponent(TagBadge, {
4633
+ insert(_el$48, createComponent(ChevronSeparator, {}), null);
4634
+ insert(_el$48, createComponent(TagBadge, {
4590
4635
  get tagName() {
4591
4636
  return tagDisplay();
4592
4637
  },
@@ -4595,14 +4640,13 @@ var SelectionLabel = (props) => {
4595
4640
  },
4596
4641
  onClick: handleTagClick,
4597
4642
  onHoverChange: handleTagHoverChange,
4598
- showMono: true,
4599
4643
  shrink: true,
4600
4644
  forceShowIcon: true
4601
4645
  }), null);
4602
- return _el$46;
4646
+ return _el$48;
4603
4647
  }
4604
4648
  }), null);
4605
- insert(_el$45, createComponent(Show, {
4649
+ insert(_el$47, createComponent(Show, {
4606
4650
  get when() {
4607
4651
  return !props.componentName;
4608
4652
  },
@@ -4616,68 +4660,78 @@ var SelectionLabel = (props) => {
4616
4660
  },
4617
4661
  onClick: handleTagClick,
4618
4662
  onHoverChange: handleTagHoverChange,
4619
- showMono: true,
4620
4663
  shrink: true,
4621
4664
  forceShowIcon: true
4622
4665
  });
4623
4666
  }
4624
4667
  }), null);
4625
- insert(_el$44, createComponent(BottomSection, {
4668
+ insert(_el$46, createComponent(BottomSection, {
4626
4669
  get children() {
4627
- var _el$47 = _tmpl$21(), _el$48 = _el$47.firstChild, _el$49 = _el$48.nextSibling;
4628
- _el$48.$$keydown = handleKeyDown;
4629
- _el$48.$$input = handleInput;
4630
- var _ref$3 = inputRef;
4631
- typeof _ref$3 === "function" ? use(_ref$3, _el$48) : inputRef = _el$48;
4632
- insert(_el$49, createComponent(Show, {
4633
- get when() {
4634
- return memo(() => !!(props.hasAgent && speechRecognition.isSupported()))() && !props.inputValue;
4635
- },
4636
- get children() {
4637
- var _el$50 = _tmpl$19();
4638
- addEventListener(_el$50, "click", speechRecognition.toggle);
4639
- insert(_el$50, createComponent(IconMic, {
4640
- size: 11,
4641
- get ["class"]() {
4642
- return speechRecognition.isListening() ? "animate-pulse" : "";
4643
- }
4644
- }));
4645
- createRenderEffect((_p$) => {
4646
- 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";
4647
- _v$6 !== _p$.e && className(_el$50, _p$.e = _v$6);
4648
- _v$7 !== _p$.t && setAttribute(_el$50, "title", _p$.t = _v$7);
4649
- return _p$;
4650
- }, {
4651
- e: void 0,
4652
- t: void 0
4653
- });
4654
- return _el$50;
4655
- }
4656
- }), null);
4657
- insert(_el$49, createComponent(Show, {
4670
+ return [createComponent(Show, {
4658
4671
  get when() {
4659
- return props.inputValue;
4672
+ return props.replyToPrompt;
4660
4673
  },
4661
4674
  get children() {
4662
- var _el$51 = _tmpl$20();
4663
- _el$51.$$click = handleSubmit;
4664
- insert(_el$51, createComponent(IconReturn, {
4665
- size: 10,
4666
- "class": "opacity-[0.99] text-black"
4667
- }));
4668
- return _el$51;
4675
+ var _el$49 = _tmpl$20(), _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
4676
+ insert(_el$51, () => props.replyToPrompt);
4677
+ return _el$49;
4669
4678
  }
4670
- }), null);
4671
- createRenderEffect(() => setAttribute(_el$48, "placeholder", speechRecognition.isListening() ? "listening..." : "type prompt"));
4672
- createRenderEffect(() => _el$48.value = props.inputValue ?? "");
4673
- return _el$47;
4679
+ }), (() => {
4680
+ var _el$52 = _tmpl$23(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
4681
+ _el$53.$$keydown = handleKeyDown;
4682
+ _el$53.$$input = handleInput;
4683
+ var _ref$3 = inputRef;
4684
+ typeof _ref$3 === "function" ? use(_ref$3, _el$53) : inputRef = _el$53;
4685
+ insert(_el$54, createComponent(Show, {
4686
+ get when() {
4687
+ return memo(() => !!(props.hasAgent && speechRecognition.isSupported()))() && !props.inputValue;
4688
+ },
4689
+ get children() {
4690
+ var _el$55 = _tmpl$21();
4691
+ addEventListener(_el$55, "click", speechRecognition.toggle);
4692
+ insert(_el$55, createComponent(IconMic, {
4693
+ size: 11,
4694
+ get ["class"]() {
4695
+ return speechRecognition.isListening() ? "animate-pulse" : "";
4696
+ }
4697
+ }));
4698
+ createRenderEffect((_p$) => {
4699
+ 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";
4700
+ _v$6 !== _p$.e && className(_el$55, _p$.e = _v$6);
4701
+ _v$7 !== _p$.t && setAttribute(_el$55, "title", _p$.t = _v$7);
4702
+ return _p$;
4703
+ }, {
4704
+ e: void 0,
4705
+ t: void 0
4706
+ });
4707
+ return _el$55;
4708
+ }
4709
+ }), null);
4710
+ insert(_el$54, createComponent(Show, {
4711
+ get when() {
4712
+ return props.inputValue;
4713
+ },
4714
+ get children() {
4715
+ var _el$56 = _tmpl$222();
4716
+ _el$56.$$click = handleSubmit;
4717
+ insert(_el$56, createComponent(IconReturn, {
4718
+ size: 10,
4719
+ "class": "opacity-[0.99] text-black"
4720
+ }));
4721
+ return _el$56;
4722
+ }
4723
+ }), null);
4724
+ createRenderEffect(() => setAttribute(_el$53, "placeholder", speechRecognition.isListening() ? "listening..." : "type prompt"));
4725
+ createRenderEffect(() => _el$53.value = props.inputValue ?? "");
4726
+ return _el$52;
4727
+ })()];
4674
4728
  }
4675
4729
  }), null);
4676
- 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")));
4677
- return _el$44;
4730
+ 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")));
4731
+ return _el$46;
4678
4732
  }
4679
4733
  }), null);
4680
- insert(_el$28, createComponent(Show, {
4734
+ insert(_el$30, createComponent(Show, {
4681
4735
  get when() {
4682
4736
  return props.isPendingDismiss;
4683
4737
  },
@@ -4692,7 +4746,7 @@ var SelectionLabel = (props) => {
4692
4746
  });
4693
4747
  }
4694
4748
  }), null);
4695
- insert(_el$28, createComponent(Show, {
4749
+ insert(_el$30, createComponent(Show, {
4696
4750
  get when() {
4697
4751
  return props.error;
4698
4752
  },
@@ -4703,17 +4757,20 @@ var SelectionLabel = (props) => {
4703
4757
  },
4704
4758
  get onAcknowledge() {
4705
4759
  return props.onAcknowledgeError;
4760
+ },
4761
+ get onRetry() {
4762
+ return props.onRetry;
4706
4763
  }
4707
4764
  });
4708
4765
  }
4709
4766
  }), null);
4710
4767
  createRenderEffect((_p$) => {
4711
4768
  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;
4712
- _v$8 !== _p$.e && setStyleProperty(_el$27, "top", _p$.e = _v$8);
4713
- _v$9 !== _p$.t && setStyleProperty(_el$27, "left", _p$.t = _v$9);
4714
- _v$0 !== _p$.a && setStyleProperty(_el$27, "pointer-events", _p$.a = _v$0);
4715
- _v$1 !== _p$.o && setStyleProperty(_el$27, "opacity", _p$.o = _v$1);
4716
- _v$10 !== _p$.i && setStyleProperty(_el$28, "display", _p$.i = _v$10);
4769
+ _v$8 !== _p$.e && setStyleProperty(_el$29, "top", _p$.e = _v$8);
4770
+ _v$9 !== _p$.t && setStyleProperty(_el$29, "left", _p$.t = _v$9);
4771
+ _v$0 !== _p$.a && setStyleProperty(_el$29, "pointer-events", _p$.a = _v$0);
4772
+ _v$1 !== _p$.o && setStyleProperty(_el$29, "opacity", _p$.o = _v$1);
4773
+ _v$10 !== _p$.i && setStyleProperty(_el$30, "display", _p$.i = _v$10);
4717
4774
  return _p$;
4718
4775
  }, {
4719
4776
  e: void 0,
@@ -4722,14 +4779,14 @@ var SelectionLabel = (props) => {
4722
4779
  o: void 0,
4723
4780
  i: void 0
4724
4781
  });
4725
- return _el$27;
4782
+ return _el$29;
4726
4783
  }
4727
4784
  });
4728
4785
  };
4729
4786
  delegateEvents(["click", "pointerdown", "mousedown", "pointerup", "input", "keydown"]);
4730
4787
 
4731
4788
  // src/components/selection-cursor.tsx
4732
- var _tmpl$24 = /* @__PURE__ */ template(`<div class="fixed z-2147483647"><button data-react-grab-selection-cursor>`);
4789
+ var _tmpl$26 = /* @__PURE__ */ template(`<div class="fixed z-2147483647"><button data-react-grab-selection-cursor>`);
4733
4790
  var SelectionCursor = (props) => {
4734
4791
  const [isHovered, setIsHovered] = createSignal(false);
4735
4792
  const [debouncedVisible, setDebouncedVisible] = createSignal(false);
@@ -4766,7 +4823,7 @@ var SelectionCursor = (props) => {
4766
4823
  });
4767
4824
  }
4768
4825
  }), (() => {
4769
- var _el$ = _tmpl$24(), _el$2 = _el$.firstChild;
4826
+ var _el$ = _tmpl$26(), _el$2 = _el$.firstChild;
4770
4827
  _el$.addEventListener("mouseleave", () => setIsHovered(false));
4771
4828
  _el$.addEventListener("mouseenter", () => setIsHovered(true));
4772
4829
  _el$2.$$click = handleClick;
@@ -4918,6 +4975,12 @@ var ReactGrabRenderer = (props) => {
4918
4975
  get inputValue() {
4919
4976
  return session().context.prompt;
4920
4977
  },
4978
+ get supportsUndo() {
4979
+ return props.supportsUndo;
4980
+ },
4981
+ get supportsFollowUp() {
4982
+ return props.supportsFollowUp;
4983
+ },
4921
4984
  onAbort: () => props.onAbortSession?.(session().id),
4922
4985
  get onDismiss() {
4923
4986
  return session().isStreaming ? void 0 : () => props.onDismissSession?.(session().id);
@@ -4925,10 +4988,14 @@ var ReactGrabRenderer = (props) => {
4925
4988
  get onUndo() {
4926
4989
  return session().isStreaming ? void 0 : () => props.onUndoSession?.(session().id);
4927
4990
  },
4991
+ get onReply() {
4992
+ return session().isStreaming ? void 0 : () => props.onReplySession?.(session().id);
4993
+ },
4928
4994
  get error() {
4929
4995
  return session().error;
4930
4996
  },
4931
- onAcknowledgeError: () => props.onAcknowledgeSessionError?.(session().id)
4997
+ onAcknowledgeError: () => props.onAcknowledgeSessionError?.(session().id),
4998
+ onRetry: () => props.onRetrySession?.(session().id)
4932
4999
  })]
4933
5000
  }), createComponent(Show, {
4934
5001
  get when() {
@@ -4957,6 +5024,9 @@ var ReactGrabRenderer = (props) => {
4957
5024
  get inputValue() {
4958
5025
  return props.inputValue;
4959
5026
  },
5027
+ get replyToPrompt() {
5028
+ return props.replyToPrompt;
5029
+ },
4960
5030
  get hasAgent() {
4961
5031
  return props.hasAgent;
4962
5032
  },
@@ -6361,7 +6431,10 @@ var isTargetKeyCombination = (event, options) => {
6361
6431
  const modifiersMatch = hasModifier ? (metaKey ? event.metaKey : true) && (ctrlKey ? event.ctrlKey : true) && (shiftKey ? event.shiftKey : true) && (altKey ? event.altKey : true) : event.metaKey || event.ctrlKey;
6362
6432
  return keyMatches && modifiersMatch;
6363
6433
  }
6364
- return (event.metaKey || event.ctrlKey) && isCLikeKey(event.key, event.code);
6434
+ const hasOnlyMetaOrCtrl = (event.metaKey || event.ctrlKey) && !event.shiftKey && !event.altKey;
6435
+ return Boolean(
6436
+ event.key && hasOnlyMetaOrCtrl && isCLikeKey(event.key, event.code)
6437
+ );
6365
6438
  };
6366
6439
 
6367
6440
  // src/utils/is-event-from-overlay.ts
@@ -6420,17 +6493,21 @@ var deepMergeTheme = mergeThemeWithBase;
6420
6493
  // src/utils/agent-session.ts
6421
6494
  var STORAGE_KEY = "react-grab:agent-sessions";
6422
6495
  var generateSessionId = () => `session-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
6423
- var createSession = (context, position, selectionBounds, tagName, componentName) => ({
6424
- id: generateSessionId(),
6425
- context,
6426
- lastStatus: "",
6427
- isStreaming: true,
6428
- createdAt: Date.now(),
6429
- position,
6430
- selectionBounds,
6431
- tagName,
6432
- componentName
6433
- });
6496
+ var createSession = (context, position, selectionBounds, tagName, componentName) => {
6497
+ const now = Date.now();
6498
+ return {
6499
+ id: generateSessionId(),
6500
+ context,
6501
+ lastStatus: "",
6502
+ isStreaming: true,
6503
+ createdAt: now,
6504
+ lastUpdatedAt: now,
6505
+ position,
6506
+ selectionBounds,
6507
+ tagName,
6508
+ componentName
6509
+ };
6510
+ };
6434
6511
  var getStorage = (storage) => {
6435
6512
  if (!storage) return null;
6436
6513
  return storage;
@@ -6488,7 +6565,7 @@ var clearSessionById = (sessionId, storage) => {
6488
6565
  saveSessions(sessions, storage);
6489
6566
  };
6490
6567
  var updateSession = (session, updates, storage) => {
6491
- const updatedSession = { ...session, ...updates };
6568
+ const updatedSession = { ...session, ...updates, lastUpdatedAt: Date.now() };
6492
6569
  saveSessionById(updatedSession, storage);
6493
6570
  return updatedSession;
6494
6571
  };
@@ -6620,10 +6697,17 @@ var createAgentManager = (initialAgentOptions) => {
6620
6697
  if (existingSessions.size === 0) {
6621
6698
  return;
6622
6699
  }
6623
- const streamingSessions = Array.from(existingSessions.values()).filter(
6624
- (session) => session.isStreaming
6700
+ const now = Date.now();
6701
+ const resumableSessions = Array.from(existingSessions.values()).filter(
6702
+ (session) => {
6703
+ if (session.isStreaming) return true;
6704
+ const lastUpdatedAt = session.lastUpdatedAt ?? session.createdAt;
6705
+ const age = now - lastUpdatedAt;
6706
+ const isRecent = age < RECENT_THRESHOLD_MS;
6707
+ return isRecent && Boolean(session.error);
6708
+ }
6625
6709
  );
6626
- if (streamingSessions.length === 0) {
6710
+ if (resumableSessions.length === 0) {
6627
6711
  clearSessions(storage);
6628
6712
  return;
6629
6713
  }
@@ -6631,18 +6715,20 @@ var createAgentManager = (initialAgentOptions) => {
6631
6715
  clearSessions(storage);
6632
6716
  return;
6633
6717
  }
6634
- const streamingSessionsMap = new Map(
6635
- streamingSessions.map((session) => [session.id, session])
6718
+ const resumableSessionsMap = new Map(
6719
+ resumableSessions.map((session) => [session.id, session])
6636
6720
  );
6637
- setSessions(streamingSessionsMap);
6638
- saveSessions(streamingSessionsMap, storage);
6639
- for (const existingSession of streamingSessions) {
6721
+ setSessions(resumableSessionsMap);
6722
+ saveSessions(resumableSessionsMap, storage);
6723
+ for (const existingSession of resumableSessions) {
6640
6724
  const reacquiredElement = tryReacquireElement(existingSession);
6641
6725
  if (reacquiredElement) {
6642
6726
  sessionElements.set(existingSession.id, reacquiredElement);
6643
6727
  }
6644
6728
  const sessionWithResumeStatus = {
6645
6729
  ...existingSession,
6730
+ isStreaming: true,
6731
+ error: void 0,
6646
6732
  lastStatus: existingSession.lastStatus || "Resuming...",
6647
6733
  position: existingSession.position ?? {
6648
6734
  x: window.innerWidth / 2,
@@ -6664,36 +6750,55 @@ var createAgentManager = (initialAgentOptions) => {
6664
6750
  }
6665
6751
  };
6666
6752
  const startSession = async (params) => {
6667
- const { element, prompt, position, selectionBounds } = params;
6753
+ const { element, prompt, position, selectionBounds, sessionId } = params;
6668
6754
  const storage = agentOptions?.storage;
6669
6755
  if (!agentOptions?.provider) {
6670
6756
  return;
6671
6757
  }
6672
- const elements = [element];
6673
- const content = await generateSnippet(elements, { maxLines: Infinity });
6758
+ const existingSession = sessionId ? sessions().get(sessionId) : void 0;
6759
+ const isFollowUp = Boolean(sessionId);
6760
+ const content = existingSession ? existingSession.context.content : await generateSnippet([element], { maxLines: Infinity });
6674
6761
  const context = {
6675
6762
  content,
6676
6763
  prompt,
6677
- options: agentOptions?.getOptions?.()
6764
+ options: agentOptions?.getOptions?.(),
6765
+ sessionId: isFollowUp ? sessionId : void 0
6678
6766
  };
6679
- const tagName = (element.tagName || "").toLowerCase() || void 0;
6680
- const componentName = await getNearestComponentName(element) || void 0;
6681
- const session = createSession(
6682
- context,
6683
- position,
6684
- selectionBounds,
6685
- tagName,
6686
- componentName
6687
- );
6688
- session.lastStatus = "Thinking\u2026";
6689
- sessionElements.set(session.id, element);
6767
+ let session;
6768
+ if (existingSession) {
6769
+ session = updateSession(
6770
+ existingSession,
6771
+ {
6772
+ context,
6773
+ isStreaming: true,
6774
+ lastStatus: "Thinking\u2026"
6775
+ },
6776
+ storage
6777
+ );
6778
+ } else {
6779
+ const tagName = (element.tagName || "").toLowerCase() || void 0;
6780
+ const componentName = await getNearestComponentName(element) || void 0;
6781
+ session = createSession(
6782
+ context,
6783
+ position,
6784
+ selectionBounds,
6785
+ tagName,
6786
+ componentName
6787
+ );
6788
+ session.lastStatus = "Thinking\u2026";
6789
+ sessionElements.set(session.id, element);
6790
+ }
6690
6791
  setSessions((prev) => new Map(prev).set(session.id, session));
6691
6792
  saveSessionById(session, storage);
6692
6793
  agentOptions.onStart?.(session, element);
6693
6794
  const abortController = new AbortController();
6694
6795
  abortControllers.set(session.id, abortController);
6796
+ const contextWithSessionId = {
6797
+ ...context,
6798
+ sessionId: sessionId ?? session.id
6799
+ };
6695
6800
  const streamIterator = agentOptions.provider.send(
6696
- context,
6801
+ contextWithSessionId,
6697
6802
  abortController.signal
6698
6803
  );
6699
6804
  void executeSessionStream(session, streamIterator);
@@ -6737,6 +6842,38 @@ var createAgentManager = (initialAgentOptions) => {
6737
6842
  dismissSession(sessionId);
6738
6843
  return prompt;
6739
6844
  };
6845
+ const retrySession = (sessionId) => {
6846
+ const currentSessions = sessions();
6847
+ const session = currentSessions.get(sessionId);
6848
+ if (!session || !agentOptions?.provider) return;
6849
+ const storage = agentOptions.storage;
6850
+ const element = sessionElements.get(sessionId);
6851
+ const retriedSession = updateSession(
6852
+ session,
6853
+ {
6854
+ error: void 0,
6855
+ isStreaming: true,
6856
+ lastStatus: "Retrying\u2026"
6857
+ },
6858
+ storage
6859
+ );
6860
+ setSessions((prev) => new Map(prev).set(sessionId, retriedSession));
6861
+ saveSessionById(retriedSession, storage);
6862
+ if (element) {
6863
+ agentOptions.onStart?.(retriedSession, element);
6864
+ }
6865
+ const abortController = new AbortController();
6866
+ abortControllers.set(sessionId, abortController);
6867
+ const contextWithSessionId = {
6868
+ ...retriedSession.context,
6869
+ sessionId
6870
+ };
6871
+ const streamIterator = agentOptions.provider.send(
6872
+ contextWithSessionId,
6873
+ abortController.signal
6874
+ );
6875
+ void executeSessionStream(retriedSession, streamIterator);
6876
+ };
6740
6877
  const updateSessionBoundsOnViewportChange = () => {
6741
6878
  const currentSessions = sessions();
6742
6879
  if (currentSessions.size === 0) return;
@@ -6781,6 +6918,7 @@ var createAgentManager = (initialAgentOptions) => {
6781
6918
  dismissSession,
6782
6919
  undoSession,
6783
6920
  acknowledgeSessionError,
6921
+ retrySession,
6784
6922
  updateSessionBoundsOnViewportChange,
6785
6923
  getSessionElement,
6786
6924
  setOptions,
@@ -6789,8 +6927,8 @@ var createAgentManager = (initialAgentOptions) => {
6789
6927
  };
6790
6928
 
6791
6929
  // src/core.tsx
6792
- var _tmpl$25 = /* @__PURE__ */ template(`<span class="tabular-nums align-middle">`);
6793
- var _tmpl$26 = /* @__PURE__ */ template(`<span class="font-mono tabular-nums align-middle">&lt;<!>>`);
6930
+ var _tmpl$27 = /* @__PURE__ */ template(`<span class="tabular-nums align-middle">`);
6931
+ var _tmpl$28 = /* @__PURE__ */ template(`<span class="font-mono tabular-nums align-middle">&lt;<!>>`);
6794
6932
  var _tmpl$33 = /* @__PURE__ */ template(`<span class="tabular-nums ml-1 align-middle"> in `);
6795
6933
  var onIdle = (callback) => {
6796
6934
  if ("scheduler" in globalThis) {
@@ -6887,7 +7025,7 @@ var init = (rawOptions) => {
6887
7025
  hasInited = true;
6888
7026
  const logIntro = () => {
6889
7027
  try {
6890
- const version = "0.0.78";
7028
+ const version = "0.0.80";
6891
7029
  const logoDataUri = `data:image/svg+xml;base64,${btoa(LOGO_SVG)}`;
6892
7030
  console.log(`%cReact Grab${version ? ` v${version}` : ""}%c
6893
7031
  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;`, "");
@@ -6942,6 +7080,10 @@ https://react-grab.com`, `background: #330039; color: #ffffff; border: 1px solid
6942
7080
  const [frozenElement, setFrozenElement] = createSignal(null);
6943
7081
  const [hasAgentProvider, setHasAgentProvider] = createSignal(Boolean(options.agent?.provider));
6944
7082
  const [isAgentConnected, setIsAgentConnected] = createSignal(false);
7083
+ const [supportsUndo, setSupportsUndo] = createSignal(Boolean(options.agent?.provider?.undo));
7084
+ const [supportsFollowUp, setSupportsFollowUp] = createSignal(Boolean(options.agent?.provider?.supportsFollowUp));
7085
+ const [replySessionId, setReplySessionId] = createSignal(null);
7086
+ const [replyToPrompt, setReplyToPrompt] = createSignal(null);
6945
7087
  const [isPendingDismiss, setIsPendingDismiss] = createSignal(false);
6946
7088
  const elementInputCache = /* @__PURE__ */ new WeakMap();
6947
7089
  const [nativeSelectionCursorX, setNativeSelectionCursorX] = createSignal(OFFSCREEN_POSITION);
@@ -7268,7 +7410,7 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7268
7410
  const copying = isCopying();
7269
7411
  if (!element) {
7270
7412
  return (() => {
7271
- var _el$ = _tmpl$25();
7413
+ var _el$ = _tmpl$27();
7272
7414
  insert(_el$, copying ? "Processing\u2026" : "1 element");
7273
7415
  return _el$;
7274
7416
  })();
@@ -7277,7 +7419,7 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7277
7419
  const componentName = labelComponentName();
7278
7420
  if (tagName && componentName) {
7279
7421
  return [(() => {
7280
- var _el$2 = _tmpl$26(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling; _el$5.nextSibling;
7422
+ var _el$2 = _tmpl$28(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling; _el$5.nextSibling;
7281
7423
  insert(_el$2, tagName, _el$5);
7282
7424
  return _el$2;
7283
7425
  })(), (() => {
@@ -7288,13 +7430,13 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7288
7430
  }
7289
7431
  if (tagName) {
7290
7432
  return (() => {
7291
- var _el$8 = _tmpl$26(), _el$9 = _el$8.firstChild, _el$1 = _el$9.nextSibling; _el$1.nextSibling;
7433
+ var _el$8 = _tmpl$28(), _el$9 = _el$8.firstChild, _el$1 = _el$9.nextSibling; _el$1.nextSibling;
7292
7434
  insert(_el$8, tagName, _el$1);
7293
7435
  return _el$8;
7294
7436
  })();
7295
7437
  }
7296
7438
  return (() => {
7297
- var _el$10 = _tmpl$25();
7439
+ var _el$10 = _tmpl$27();
7298
7440
  insert(_el$10, copying ? "Processing\u2026" : "1 element");
7299
7441
  return _el$10;
7300
7442
  })();
@@ -7564,11 +7706,12 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7564
7706
  const labelPositionX = mouseX();
7565
7707
  const currentX = bounds.x + bounds.width / 2;
7566
7708
  const currentY = bounds.y + bounds.height / 2;
7567
- setMouseX(currentX);
7568
- setMouseY(currentY);
7569
7709
  if (hasAgentProvider() && prompt) {
7570
7710
  elementInputCache.delete(element);
7571
7711
  deactivateRenderer();
7712
+ const currentReplySessionId = replySessionId();
7713
+ setReplySessionId(null);
7714
+ setReplyToPrompt(null);
7572
7715
  void agentManager.startSession({
7573
7716
  element,
7574
7717
  prompt,
@@ -7576,10 +7719,13 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7576
7719
  x: labelPositionX,
7577
7720
  y: currentY
7578
7721
  },
7579
- selectionBounds: bounds
7722
+ selectionBounds: bounds,
7723
+ sessionId: currentReplySessionId ?? void 0
7580
7724
  });
7581
7725
  return;
7582
7726
  }
7727
+ setMouseX(currentX);
7728
+ setMouseY(currentY);
7583
7729
  setIsInputMode(false);
7584
7730
  setInputText("");
7585
7731
  if (prompt) {
@@ -7607,10 +7753,12 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7607
7753
  elementInputCache.set(element, currentInput);
7608
7754
  }
7609
7755
  setIsPendingDismiss(false);
7756
+ setReplySessionId(null);
7610
7757
  deactivateRenderer();
7611
7758
  };
7612
7759
  const handleConfirmDismiss = () => {
7613
7760
  setIsPendingDismiss(false);
7761
+ setReplySessionId(null);
7614
7762
  deactivateRenderer();
7615
7763
  };
7616
7764
  const handleCancelDismiss = () => {
@@ -8372,6 +8520,9 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8372
8520
  get isInputExpanded() {
8373
8521
  return isInputExpanded();
8374
8522
  },
8523
+ get replyToPrompt() {
8524
+ return replyToPrompt() ?? void 0;
8525
+ },
8375
8526
  get hasAgent() {
8376
8527
  return hasAgentProvider();
8377
8528
  },
@@ -8381,15 +8532,48 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8381
8532
  get agentSessions() {
8382
8533
  return agentManager.sessions();
8383
8534
  },
8535
+ get supportsUndo() {
8536
+ return supportsUndo();
8537
+ },
8538
+ get supportsFollowUp() {
8539
+ return supportsFollowUp();
8540
+ },
8384
8541
  onAbortSession: (sessionId) => agentManager.abortSession(sessionId),
8385
8542
  onDismissSession: (sessionId) => agentManager.dismissSession(sessionId),
8386
8543
  onUndoSession: (sessionId) => agentManager.undoSession(sessionId),
8544
+ onReplySession: (sessionId) => {
8545
+ const session = agentManager.sessions().get(sessionId);
8546
+ const element = agentManager.getSessionElement(sessionId);
8547
+ if (session && element) {
8548
+ const positionX = session.position.x;
8549
+ const rect = element.getBoundingClientRect();
8550
+ const centerY = rect.top + rect.height / 2;
8551
+ const previousPrompt = session.context.prompt;
8552
+ agentManager.dismissSession(sessionId);
8553
+ setMouseX(positionX);
8554
+ setMouseY(centerY);
8555
+ setFrozenElement(element);
8556
+ setInputText("");
8557
+ setIsInputExpanded(true);
8558
+ setIsInputMode(true);
8559
+ setIsToggleMode(true);
8560
+ setIsToggleFrozen(true);
8561
+ setReplySessionId(session.context.sessionId ?? sessionId);
8562
+ setReplyToPrompt(previousPrompt);
8563
+ if (!isActivated()) {
8564
+ activateRenderer();
8565
+ }
8566
+ }
8567
+ },
8387
8568
  onAcknowledgeSessionError: (sessionId) => {
8388
8569
  const prompt = agentManager.acknowledgeSessionError(sessionId);
8389
8570
  if (prompt) {
8390
8571
  setInputText(prompt);
8391
8572
  }
8392
8573
  },
8574
+ onRetrySession: (sessionId) => {
8575
+ agentManager.retrySession(sessionId);
8576
+ },
8393
8577
  onInputChange: handleInputChange,
8394
8578
  onInputSubmit: () => void handleInputSubmit(),
8395
8579
  onInputCancel: handleInputCancel,
@@ -8498,6 +8682,8 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8498
8682
  };
8499
8683
  agentManager.setOptions(mergedOptions);
8500
8684
  setHasAgentProvider(Boolean(mergedOptions.provider));
8685
+ setSupportsUndo(Boolean(mergedOptions.provider?.undo));
8686
+ setSupportsFollowUp(Boolean(mergedOptions.provider?.supportsFollowUp));
8501
8687
  if (mergedOptions.provider?.checkConnection) {
8502
8688
  void mergedOptions.provider.checkConnection().then((connected) => {
8503
8689
  setIsAgentConnected(connected);