grab 0.0.77 → 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-\\[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)}.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.77";
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 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">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);
@@ -4139,6 +4167,77 @@ var ErrorConfirmation = (props) => {
4139
4167
  return _el$14;
4140
4168
  })();
4141
4169
  };
4170
+ var CompletedConfirmation = (props) => {
4171
+ const handleKeyDown = (event) => {
4172
+ if (event.code === "Enter" || event.code === "Escape") {
4173
+ event.preventDefault();
4174
+ event.stopPropagation();
4175
+ props.onDismiss?.();
4176
+ }
4177
+ };
4178
+ onMount(() => {
4179
+ window.addEventListener("keydown", handleKeyDown, {
4180
+ capture: true
4181
+ });
4182
+ });
4183
+ onCleanup(() => {
4184
+ window.removeEventListener("keydown", handleKeyDown, {
4185
+ capture: true
4186
+ });
4187
+ });
4188
+ return (() => {
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, {
4192
+ get when() {
4193
+ return props.onDismiss || props.onUndo || props.onReply;
4194
+ },
4195
+ get children() {
4196
+ return createComponent(BottomSection, {
4197
+ get children() {
4198
+ var _el$24 = _tmpl$12();
4199
+ insert(_el$24, createComponent(Show, {
4200
+ get when() {
4201
+ return memo(() => !!props.supportsUndo)() && props.onUndo;
4202
+ },
4203
+ get children() {
4204
+ var _el$25 = _tmpl$1();
4205
+ _el$25.$$click = () => props.onUndo?.();
4206
+ return _el$25;
4207
+ }
4208
+ }), null);
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, {
4220
+ get when() {
4221
+ return props.onDismiss;
4222
+ },
4223
+ get children() {
4224
+ var _el$27 = _tmpl$11(); _el$27.firstChild;
4225
+ _el$27.$$click = () => props.onDismiss?.();
4226
+ insert(_el$27, createComponent(IconReturn, {
4227
+ size: 10,
4228
+ "class": "text-black/50"
4229
+ }), null);
4230
+ return _el$27;
4231
+ }
4232
+ }), null);
4233
+ return _el$24;
4234
+ }
4235
+ });
4236
+ }
4237
+ }), null);
4238
+ return _el$21;
4239
+ })();
4240
+ };
4142
4241
  var SelectionLabel = (props) => {
4143
4242
  let containerRef;
4144
4243
  let inputRef;
@@ -4340,111 +4439,92 @@ var SelectionLabel = (props) => {
4340
4439
  return memo(() => props.visible !== false)() && (props.selectionBounds || shouldShowWithoutBounds());
4341
4440
  },
4342
4441
  get children() {
4343
- var _el$20 = _tmpl$23(), _el$27 = _el$20.firstChild;
4344
- _el$20.$$click = stopPropagation;
4345
- _el$20.$$mousedown = stopPropagation;
4346
- _el$20.$$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;
4347
4446
  var _ref$ = containerRef;
4348
- typeof _ref$ === "function" ? use(_ref$, _el$20) : containerRef = _el$20;
4349
- insert(_el$20, createComponent(Arrow, {
4447
+ typeof _ref$ === "function" ? use(_ref$, _el$29) : containerRef = _el$29;
4448
+ insert(_el$29, createComponent(Arrow, {
4350
4449
  get position() {
4351
4450
  return arrowPosition();
4352
4451
  },
4353
4452
  get leftPx() {
4354
4453
  return computedPosition().arrowLeft;
4355
4454
  }
4356
- }), _el$27);
4357
- insert(_el$20, createComponent(Show, {
4455
+ }), _el$30);
4456
+ insert(_el$29, createComponent(Show, {
4358
4457
  get when() {
4359
4458
  return memo(() => !!(props.status === "copied" || props.status === "fading"))() && !props.error;
4360
4459
  },
4361
4460
  get children() {
4362
- var _el$21 = _tmpl$12(), _el$22 = _el$21.firstChild, _el$23 = _el$22.firstChild;
4363
- insert(_el$23, (() => {
4364
- var _c$ = memo(() => !!props.hasAgent);
4365
- return () => _c$() ? props.statusText ?? "Completed" : "Copied";
4366
- })());
4367
- insert(_el$21, createComponent(Show, {
4368
- get when() {
4369
- return props.onDismiss || props.onUndo;
4461
+ return createComponent(CompletedConfirmation, {
4462
+ get statusText() {
4463
+ return memo(() => !!props.hasAgent)() ? props.statusText ?? "Completed" : "Copied";
4370
4464
  },
4371
- get children() {
4372
- return createComponent(BottomSection, {
4373
- get children() {
4374
- var _el$24 = _tmpl$11();
4375
- insert(_el$24, createComponent(Show, {
4376
- get when() {
4377
- return props.onUndo;
4378
- },
4379
- get children() {
4380
- var _el$25 = _tmpl$1();
4381
- _el$25.$$click = () => props.onUndo?.();
4382
- return _el$25;
4383
- }
4384
- }), null);
4385
- insert(_el$24, createComponent(Show, {
4386
- get when() {
4387
- return props.onDismiss;
4388
- },
4389
- get children() {
4390
- var _el$26 = _tmpl$10();
4391
- _el$26.$$click = () => props.onDismiss?.();
4392
- return _el$26;
4393
- }
4394
- }), null);
4395
- return _el$24;
4396
- }
4397
- });
4465
+ get supportsUndo() {
4466
+ return props.supportsUndo;
4467
+ },
4468
+ get supportsFollowUp() {
4469
+ return props.supportsFollowUp;
4470
+ },
4471
+ get onDismiss() {
4472
+ return props.onDismiss;
4473
+ },
4474
+ get onUndo() {
4475
+ return props.onUndo;
4476
+ },
4477
+ get onReply() {
4478
+ return props.onReply;
4398
4479
  }
4399
- }), null);
4400
- return _el$21;
4480
+ });
4401
4481
  }
4402
- }), _el$27);
4403
- insert(_el$27, createComponent(Show, {
4482
+ }), _el$30);
4483
+ insert(_el$30, createComponent(Show, {
4404
4484
  get when() {
4405
4485
  return props.status === "copying";
4406
4486
  },
4407
4487
  get children() {
4408
- var _el$28 = _tmpl$15(), _el$29 = _el$28.firstChild, _el$30 = _el$29.firstChild, _el$31 = _el$30.firstChild;
4409
- insert(_el$31, () => props.statusText ?? "Grabbing\u2026");
4410
- insert(_el$28, 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, {
4411
4491
  get children() {
4412
- var _el$32 = _tmpl$14(), _el$33 = _el$32.firstChild;
4492
+ var _el$35 = _tmpl$15(), _el$36 = _el$35.firstChild;
4413
4493
  var _ref$2 = inputRef;
4414
- typeof _ref$2 === "function" ? use(_ref$2, _el$33) : inputRef = _el$33;
4415
- insert(_el$32, createComponent(Show, {
4494
+ typeof _ref$2 === "function" ? use(_ref$2, _el$36) : inputRef = _el$36;
4495
+ insert(_el$35, createComponent(Show, {
4416
4496
  get when() {
4417
4497
  return props.onAbort;
4418
4498
  },
4419
4499
  get children() {
4420
- var _el$34 = _tmpl$13();
4421
- _el$34.$$click = (event) => {
4500
+ var _el$37 = _tmpl$14();
4501
+ _el$37.$$click = (event) => {
4422
4502
  event.stopPropagation();
4423
4503
  props.onAbort?.();
4424
4504
  };
4425
- _el$34.$$pointerup = (event) => {
4505
+ _el$37.$$pointerup = (event) => {
4426
4506
  event.stopPropagation();
4427
4507
  props.onAbort?.();
4428
4508
  };
4429
- _el$34.$$mousedown = (event) => event.stopPropagation();
4430
- _el$34.$$pointerdown = (event) => event.stopPropagation();
4431
- return _el$34;
4509
+ _el$37.$$mousedown = (event) => event.stopPropagation();
4510
+ _el$37.$$pointerdown = (event) => event.stopPropagation();
4511
+ return _el$37;
4432
4512
  }
4433
4513
  }), null);
4434
- createRenderEffect(() => _el$33.value = props.inputValue ?? "");
4435
- return _el$32;
4514
+ createRenderEffect(() => _el$36.value = props.inputValue ?? "");
4515
+ return _el$35;
4436
4516
  }
4437
4517
  }), null);
4438
- return _el$28;
4518
+ return _el$31;
4439
4519
  }
4440
4520
  }), null);
4441
- insert(_el$27, createComponent(Show, {
4521
+ insert(_el$30, createComponent(Show, {
4442
4522
  get when() {
4443
4523
  return memo(() => !!isNotProcessing())() && !props.isInputExpanded;
4444
4524
  },
4445
4525
  get children() {
4446
- var _el$35 = _tmpl$18(), _el$36 = _el$35.firstChild, _el$38 = _el$36.nextSibling, _el$39 = _el$38.firstChild;
4447
- insert(_el$36, 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, {
4448
4528
  onClick: handleSubmit,
4449
4529
  shrink: true,
4450
4530
  get hasParent() {
@@ -4454,19 +4534,19 @@ var SelectionLabel = (props) => {
4454
4534
  return props.hasAgent;
4455
4535
  }
4456
4536
  }), null);
4457
- insert(_el$36, createComponent(Show, {
4537
+ insert(_el$39, createComponent(Show, {
4458
4538
  get when() {
4459
4539
  return props.componentName;
4460
4540
  },
4461
4541
  get children() {
4462
- var _el$37 = _tmpl$16();
4463
- insert(_el$37, createComponent(ParentBadge, {
4542
+ var _el$40 = _tmpl$17();
4543
+ insert(_el$40, createComponent(ParentBadge, {
4464
4544
  get name() {
4465
4545
  return props.componentName;
4466
4546
  }
4467
4547
  }), null);
4468
- insert(_el$37, createComponent(ChevronSeparator, {}), null);
4469
- insert(_el$37, createComponent(TagBadge, {
4548
+ insert(_el$40, createComponent(ChevronSeparator, {}), null);
4549
+ insert(_el$40, createComponent(TagBadge, {
4470
4550
  get tagName() {
4471
4551
  return tagDisplay();
4472
4552
  },
@@ -4475,13 +4555,12 @@ var SelectionLabel = (props) => {
4475
4555
  },
4476
4556
  onClick: handleTagClick,
4477
4557
  onHoverChange: handleTagHoverChange,
4478
- showMono: true,
4479
4558
  shrink: true
4480
4559
  }), null);
4481
- return _el$37;
4560
+ return _el$40;
4482
4561
  }
4483
4562
  }), null);
4484
- insert(_el$36, createComponent(Show, {
4563
+ insert(_el$39, createComponent(Show, {
4485
4564
  get when() {
4486
4565
  return !props.componentName;
4487
4566
  },
@@ -4495,42 +4574,41 @@ var SelectionLabel = (props) => {
4495
4574
  },
4496
4575
  onClick: handleTagClick,
4497
4576
  onHoverChange: handleTagHoverChange,
4498
- showMono: true,
4499
4577
  shrink: true
4500
4578
  });
4501
4579
  }
4502
4580
  }), null);
4503
- insert(_el$39, createComponent(BottomSection, {
4581
+ insert(_el$42, createComponent(BottomSection, {
4504
4582
  get children() {
4505
- var _el$40 = _tmpl$17(), _el$41 = _el$40.firstChild, _el$42 = _el$41.nextSibling;
4506
- insert(_el$42, createComponent(IconReturn, {
4583
+ var _el$43 = _tmpl$18(), _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling;
4584
+ insert(_el$45, createComponent(IconReturn, {
4507
4585
  size: 10,
4508
4586
  "class": "opacity-[0.99] text-black"
4509
4587
  }));
4510
- return _el$40;
4588
+ return _el$43;
4511
4589
  }
4512
4590
  }));
4513
4591
  createRenderEffect((_p$) => {
4514
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");
4515
- _v$3 !== _p$.e && className(_el$36, _p$.e = _v$3);
4516
- _v$4 !== _p$.t && setStyleProperty(_el$38, "grid-template-rows", _p$.t = _v$4);
4517
- _v$5 !== _p$.a && className(_el$39, _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);
4518
4596
  return _p$;
4519
4597
  }, {
4520
4598
  e: void 0,
4521
4599
  t: void 0,
4522
4600
  a: void 0
4523
4601
  });
4524
- return _el$35;
4602
+ return _el$38;
4525
4603
  }
4526
4604
  }), null);
4527
- insert(_el$27, createComponent(Show, {
4605
+ insert(_el$30, createComponent(Show, {
4528
4606
  get when() {
4529
4607
  return memo(() => !!(isNotProcessing() && props.isInputExpanded))() && !props.isPendingDismiss;
4530
4608
  },
4531
4609
  get children() {
4532
- var _el$43 = _tmpl$222(), _el$44 = _el$43.firstChild;
4533
- insert(_el$44, createComponent(ClickToCopyPill, {
4610
+ var _el$46 = _tmpl$24(), _el$47 = _el$46.firstChild;
4611
+ insert(_el$47, createComponent(ClickToCopyPill, {
4534
4612
  onClick: handleSubmit,
4535
4613
  dimmed: true,
4536
4614
  shrink: true,
@@ -4541,19 +4619,19 @@ var SelectionLabel = (props) => {
4541
4619
  return props.hasAgent;
4542
4620
  }
4543
4621
  }), null);
4544
- insert(_el$44, createComponent(Show, {
4622
+ insert(_el$47, createComponent(Show, {
4545
4623
  get when() {
4546
4624
  return props.componentName;
4547
4625
  },
4548
4626
  get children() {
4549
- var _el$45 = _tmpl$16();
4550
- insert(_el$45, createComponent(ParentBadge, {
4627
+ var _el$48 = _tmpl$17();
4628
+ insert(_el$48, createComponent(ParentBadge, {
4551
4629
  get name() {
4552
4630
  return props.componentName;
4553
4631
  }
4554
4632
  }), null);
4555
- insert(_el$45, createComponent(ChevronSeparator, {}), null);
4556
- insert(_el$45, createComponent(TagBadge, {
4633
+ insert(_el$48, createComponent(ChevronSeparator, {}), null);
4634
+ insert(_el$48, createComponent(TagBadge, {
4557
4635
  get tagName() {
4558
4636
  return tagDisplay();
4559
4637
  },
@@ -4562,14 +4640,13 @@ var SelectionLabel = (props) => {
4562
4640
  },
4563
4641
  onClick: handleTagClick,
4564
4642
  onHoverChange: handleTagHoverChange,
4565
- showMono: true,
4566
4643
  shrink: true,
4567
4644
  forceShowIcon: true
4568
4645
  }), null);
4569
- return _el$45;
4646
+ return _el$48;
4570
4647
  }
4571
4648
  }), null);
4572
- insert(_el$44, createComponent(Show, {
4649
+ insert(_el$47, createComponent(Show, {
4573
4650
  get when() {
4574
4651
  return !props.componentName;
4575
4652
  },
@@ -4583,68 +4660,78 @@ var SelectionLabel = (props) => {
4583
4660
  },
4584
4661
  onClick: handleTagClick,
4585
4662
  onHoverChange: handleTagHoverChange,
4586
- showMono: true,
4587
4663
  shrink: true,
4588
4664
  forceShowIcon: true
4589
4665
  });
4590
4666
  }
4591
4667
  }), null);
4592
- insert(_el$43, createComponent(BottomSection, {
4668
+ insert(_el$46, createComponent(BottomSection, {
4593
4669
  get children() {
4594
- var _el$46 = _tmpl$21(), _el$47 = _el$46.firstChild, _el$48 = _el$47.nextSibling;
4595
- _el$47.$$keydown = handleKeyDown;
4596
- _el$47.$$input = handleInput;
4597
- var _ref$3 = inputRef;
4598
- typeof _ref$3 === "function" ? use(_ref$3, _el$47) : inputRef = _el$47;
4599
- insert(_el$48, createComponent(Show, {
4670
+ return [createComponent(Show, {
4600
4671
  get when() {
4601
- return memo(() => !!(props.hasAgent && speechRecognition.isSupported()))() && !props.inputValue;
4672
+ return props.replyToPrompt;
4602
4673
  },
4603
4674
  get children() {
4604
- var _el$49 = _tmpl$19();
4605
- addEventListener(_el$49, "click", speechRecognition.toggle);
4606
- insert(_el$49, createComponent(IconMic, {
4607
- size: 11,
4608
- get ["class"]() {
4609
- return speechRecognition.isListening() ? "animate-pulse" : "";
4610
- }
4611
- }));
4612
- createRenderEffect((_p$) => {
4613
- 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";
4614
- _v$6 !== _p$.e && className(_el$49, _p$.e = _v$6);
4615
- _v$7 !== _p$.t && setAttribute(_el$49, "title", _p$.t = _v$7);
4616
- return _p$;
4617
- }, {
4618
- e: void 0,
4619
- t: void 0
4620
- });
4675
+ var _el$49 = _tmpl$20(), _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
4676
+ insert(_el$51, () => props.replyToPrompt);
4621
4677
  return _el$49;
4622
4678
  }
4623
- }), null);
4624
- insert(_el$48, createComponent(Show, {
4625
- get when() {
4626
- return props.inputValue;
4627
- },
4628
- get children() {
4629
- var _el$50 = _tmpl$20();
4630
- _el$50.$$click = handleSubmit;
4631
- insert(_el$50, createComponent(IconReturn, {
4632
- size: 10,
4633
- "class": "opacity-[0.99] text-black"
4634
- }));
4635
- return _el$50;
4636
- }
4637
- }), null);
4638
- createRenderEffect(() => setAttribute(_el$47, "placeholder", speechRecognition.isListening() ? "listening..." : "type prompt"));
4639
- createRenderEffect(() => _el$47.value = props.inputValue ?? "");
4640
- return _el$46;
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
+ })()];
4641
4728
  }
4642
4729
  }), null);
4643
- createRenderEffect(() => className(_el$44, 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")));
4644
- return _el$43;
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;
4645
4732
  }
4646
4733
  }), null);
4647
- insert(_el$27, createComponent(Show, {
4734
+ insert(_el$30, createComponent(Show, {
4648
4735
  get when() {
4649
4736
  return props.isPendingDismiss;
4650
4737
  },
@@ -4659,7 +4746,7 @@ var SelectionLabel = (props) => {
4659
4746
  });
4660
4747
  }
4661
4748
  }), null);
4662
- insert(_el$27, createComponent(Show, {
4749
+ insert(_el$30, createComponent(Show, {
4663
4750
  get when() {
4664
4751
  return props.error;
4665
4752
  },
@@ -4670,17 +4757,20 @@ var SelectionLabel = (props) => {
4670
4757
  },
4671
4758
  get onAcknowledge() {
4672
4759
  return props.onAcknowledgeError;
4760
+ },
4761
+ get onRetry() {
4762
+ return props.onRetry;
4673
4763
  }
4674
4764
  });
4675
4765
  }
4676
4766
  }), null);
4677
4767
  createRenderEffect((_p$) => {
4678
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;
4679
- _v$8 !== _p$.e && setStyleProperty(_el$20, "top", _p$.e = _v$8);
4680
- _v$9 !== _p$.t && setStyleProperty(_el$20, "left", _p$.t = _v$9);
4681
- _v$0 !== _p$.a && setStyleProperty(_el$20, "pointer-events", _p$.a = _v$0);
4682
- _v$1 !== _p$.o && setStyleProperty(_el$20, "opacity", _p$.o = _v$1);
4683
- _v$10 !== _p$.i && setStyleProperty(_el$27, "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);
4684
4774
  return _p$;
4685
4775
  }, {
4686
4776
  e: void 0,
@@ -4689,14 +4779,14 @@ var SelectionLabel = (props) => {
4689
4779
  o: void 0,
4690
4780
  i: void 0
4691
4781
  });
4692
- return _el$20;
4782
+ return _el$29;
4693
4783
  }
4694
4784
  });
4695
4785
  };
4696
4786
  delegateEvents(["click", "pointerdown", "mousedown", "pointerup", "input", "keydown"]);
4697
4787
 
4698
4788
  // src/components/selection-cursor.tsx
4699
- 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>`);
4700
4790
  var SelectionCursor = (props) => {
4701
4791
  const [isHovered, setIsHovered] = createSignal(false);
4702
4792
  const [debouncedVisible, setDebouncedVisible] = createSignal(false);
@@ -4733,7 +4823,7 @@ var SelectionCursor = (props) => {
4733
4823
  });
4734
4824
  }
4735
4825
  }), (() => {
4736
- var _el$ = _tmpl$24(), _el$2 = _el$.firstChild;
4826
+ var _el$ = _tmpl$26(), _el$2 = _el$.firstChild;
4737
4827
  _el$.addEventListener("mouseleave", () => setIsHovered(false));
4738
4828
  _el$.addEventListener("mouseenter", () => setIsHovered(true));
4739
4829
  _el$2.$$click = handleClick;
@@ -4885,6 +4975,12 @@ var ReactGrabRenderer = (props) => {
4885
4975
  get inputValue() {
4886
4976
  return session().context.prompt;
4887
4977
  },
4978
+ get supportsUndo() {
4979
+ return props.supportsUndo;
4980
+ },
4981
+ get supportsFollowUp() {
4982
+ return props.supportsFollowUp;
4983
+ },
4888
4984
  onAbort: () => props.onAbortSession?.(session().id),
4889
4985
  get onDismiss() {
4890
4986
  return session().isStreaming ? void 0 : () => props.onDismissSession?.(session().id);
@@ -4892,10 +4988,14 @@ var ReactGrabRenderer = (props) => {
4892
4988
  get onUndo() {
4893
4989
  return session().isStreaming ? void 0 : () => props.onUndoSession?.(session().id);
4894
4990
  },
4991
+ get onReply() {
4992
+ return session().isStreaming ? void 0 : () => props.onReplySession?.(session().id);
4993
+ },
4895
4994
  get error() {
4896
4995
  return session().error;
4897
4996
  },
4898
- onAcknowledgeError: () => props.onAcknowledgeSessionError?.(session().id)
4997
+ onAcknowledgeError: () => props.onAcknowledgeSessionError?.(session().id),
4998
+ onRetry: () => props.onRetrySession?.(session().id)
4899
4999
  })]
4900
5000
  }), createComponent(Show, {
4901
5001
  get when() {
@@ -4924,6 +5024,9 @@ var ReactGrabRenderer = (props) => {
4924
5024
  get inputValue() {
4925
5025
  return props.inputValue;
4926
5026
  },
5027
+ get replyToPrompt() {
5028
+ return props.replyToPrompt;
5029
+ },
4927
5030
  get hasAgent() {
4928
5031
  return props.hasAgent;
4929
5032
  },
@@ -6328,7 +6431,10 @@ var isTargetKeyCombination = (event, options) => {
6328
6431
  const modifiersMatch = hasModifier ? (metaKey ? event.metaKey : true) && (ctrlKey ? event.ctrlKey : true) && (shiftKey ? event.shiftKey : true) && (altKey ? event.altKey : true) : event.metaKey || event.ctrlKey;
6329
6432
  return keyMatches && modifiersMatch;
6330
6433
  }
6331
- 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
+ );
6332
6438
  };
6333
6439
 
6334
6440
  // src/utils/is-event-from-overlay.ts
@@ -6387,17 +6493,21 @@ var deepMergeTheme = mergeThemeWithBase;
6387
6493
  // src/utils/agent-session.ts
6388
6494
  var STORAGE_KEY = "react-grab:agent-sessions";
6389
6495
  var generateSessionId = () => `session-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
6390
- var createSession = (context, position, selectionBounds, tagName, componentName) => ({
6391
- id: generateSessionId(),
6392
- context,
6393
- lastStatus: "",
6394
- isStreaming: true,
6395
- createdAt: Date.now(),
6396
- position,
6397
- selectionBounds,
6398
- tagName,
6399
- componentName
6400
- });
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
+ };
6401
6511
  var getStorage = (storage) => {
6402
6512
  if (!storage) return null;
6403
6513
  return storage;
@@ -6455,7 +6565,7 @@ var clearSessionById = (sessionId, storage) => {
6455
6565
  saveSessions(sessions, storage);
6456
6566
  };
6457
6567
  var updateSession = (session, updates, storage) => {
6458
- const updatedSession = { ...session, ...updates };
6568
+ const updatedSession = { ...session, ...updates, lastUpdatedAt: Date.now() };
6459
6569
  saveSessionById(updatedSession, storage);
6460
6570
  return updatedSession;
6461
6571
  };
@@ -6587,10 +6697,17 @@ var createAgentManager = (initialAgentOptions) => {
6587
6697
  if (existingSessions.size === 0) {
6588
6698
  return;
6589
6699
  }
6590
- const streamingSessions = Array.from(existingSessions.values()).filter(
6591
- (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
+ }
6592
6709
  );
6593
- if (streamingSessions.length === 0) {
6710
+ if (resumableSessions.length === 0) {
6594
6711
  clearSessions(storage);
6595
6712
  return;
6596
6713
  }
@@ -6598,18 +6715,20 @@ var createAgentManager = (initialAgentOptions) => {
6598
6715
  clearSessions(storage);
6599
6716
  return;
6600
6717
  }
6601
- const streamingSessionsMap = new Map(
6602
- streamingSessions.map((session) => [session.id, session])
6718
+ const resumableSessionsMap = new Map(
6719
+ resumableSessions.map((session) => [session.id, session])
6603
6720
  );
6604
- setSessions(streamingSessionsMap);
6605
- saveSessions(streamingSessionsMap, storage);
6606
- for (const existingSession of streamingSessions) {
6721
+ setSessions(resumableSessionsMap);
6722
+ saveSessions(resumableSessionsMap, storage);
6723
+ for (const existingSession of resumableSessions) {
6607
6724
  const reacquiredElement = tryReacquireElement(existingSession);
6608
6725
  if (reacquiredElement) {
6609
6726
  sessionElements.set(existingSession.id, reacquiredElement);
6610
6727
  }
6611
6728
  const sessionWithResumeStatus = {
6612
6729
  ...existingSession,
6730
+ isStreaming: true,
6731
+ error: void 0,
6613
6732
  lastStatus: existingSession.lastStatus || "Resuming...",
6614
6733
  position: existingSession.position ?? {
6615
6734
  x: window.innerWidth / 2,
@@ -6631,36 +6750,55 @@ var createAgentManager = (initialAgentOptions) => {
6631
6750
  }
6632
6751
  };
6633
6752
  const startSession = async (params) => {
6634
- const { element, prompt, position, selectionBounds } = params;
6753
+ const { element, prompt, position, selectionBounds, sessionId } = params;
6635
6754
  const storage = agentOptions?.storage;
6636
6755
  if (!agentOptions?.provider) {
6637
6756
  return;
6638
6757
  }
6639
- const elements = [element];
6640
- 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 });
6641
6761
  const context = {
6642
6762
  content,
6643
6763
  prompt,
6644
- options: agentOptions?.getOptions?.()
6764
+ options: agentOptions?.getOptions?.(),
6765
+ sessionId: isFollowUp ? sessionId : void 0
6645
6766
  };
6646
- const tagName = (element.tagName || "").toLowerCase() || void 0;
6647
- const componentName = await getNearestComponentName(element) || void 0;
6648
- const session = createSession(
6649
- context,
6650
- position,
6651
- selectionBounds,
6652
- tagName,
6653
- componentName
6654
- );
6655
- session.lastStatus = "Thinking\u2026";
6656
- 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
+ }
6657
6791
  setSessions((prev) => new Map(prev).set(session.id, session));
6658
6792
  saveSessionById(session, storage);
6659
6793
  agentOptions.onStart?.(session, element);
6660
6794
  const abortController = new AbortController();
6661
6795
  abortControllers.set(session.id, abortController);
6796
+ const contextWithSessionId = {
6797
+ ...context,
6798
+ sessionId: sessionId ?? session.id
6799
+ };
6662
6800
  const streamIterator = agentOptions.provider.send(
6663
- context,
6801
+ contextWithSessionId,
6664
6802
  abortController.signal
6665
6803
  );
6666
6804
  void executeSessionStream(session, streamIterator);
@@ -6704,6 +6842,38 @@ var createAgentManager = (initialAgentOptions) => {
6704
6842
  dismissSession(sessionId);
6705
6843
  return prompt;
6706
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
+ };
6707
6877
  const updateSessionBoundsOnViewportChange = () => {
6708
6878
  const currentSessions = sessions();
6709
6879
  if (currentSessions.size === 0) return;
@@ -6748,6 +6918,7 @@ var createAgentManager = (initialAgentOptions) => {
6748
6918
  dismissSession,
6749
6919
  undoSession,
6750
6920
  acknowledgeSessionError,
6921
+ retrySession,
6751
6922
  updateSessionBoundsOnViewportChange,
6752
6923
  getSessionElement,
6753
6924
  setOptions,
@@ -6756,8 +6927,8 @@ var createAgentManager = (initialAgentOptions) => {
6756
6927
  };
6757
6928
 
6758
6929
  // src/core.tsx
6759
- var _tmpl$25 = /* @__PURE__ */ template(`<span class="tabular-nums align-middle">`);
6760
- 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;<!>>`);
6761
6932
  var _tmpl$33 = /* @__PURE__ */ template(`<span class="tabular-nums ml-1 align-middle"> in `);
6762
6933
  var onIdle = (callback) => {
6763
6934
  if ("scheduler" in globalThis) {
@@ -6854,7 +7025,7 @@ var init = (rawOptions) => {
6854
7025
  hasInited = true;
6855
7026
  const logIntro = () => {
6856
7027
  try {
6857
- const version = "0.0.77";
7028
+ const version = "0.0.80";
6858
7029
  const logoDataUri = `data:image/svg+xml;base64,${btoa(LOGO_SVG)}`;
6859
7030
  console.log(`%cReact Grab${version ? ` v${version}` : ""}%c
6860
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;`, "");
@@ -6909,6 +7080,10 @@ https://react-grab.com`, `background: #330039; color: #ffffff; border: 1px solid
6909
7080
  const [frozenElement, setFrozenElement] = createSignal(null);
6910
7081
  const [hasAgentProvider, setHasAgentProvider] = createSignal(Boolean(options.agent?.provider));
6911
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);
6912
7087
  const [isPendingDismiss, setIsPendingDismiss] = createSignal(false);
6913
7088
  const elementInputCache = /* @__PURE__ */ new WeakMap();
6914
7089
  const [nativeSelectionCursorX, setNativeSelectionCursorX] = createSignal(OFFSCREEN_POSITION);
@@ -7235,7 +7410,7 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7235
7410
  const copying = isCopying();
7236
7411
  if (!element) {
7237
7412
  return (() => {
7238
- var _el$ = _tmpl$25();
7413
+ var _el$ = _tmpl$27();
7239
7414
  insert(_el$, copying ? "Processing\u2026" : "1 element");
7240
7415
  return _el$;
7241
7416
  })();
@@ -7244,7 +7419,7 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7244
7419
  const componentName = labelComponentName();
7245
7420
  if (tagName && componentName) {
7246
7421
  return [(() => {
7247
- 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;
7248
7423
  insert(_el$2, tagName, _el$5);
7249
7424
  return _el$2;
7250
7425
  })(), (() => {
@@ -7255,13 +7430,13 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7255
7430
  }
7256
7431
  if (tagName) {
7257
7432
  return (() => {
7258
- 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;
7259
7434
  insert(_el$8, tagName, _el$1);
7260
7435
  return _el$8;
7261
7436
  })();
7262
7437
  }
7263
7438
  return (() => {
7264
- var _el$10 = _tmpl$25();
7439
+ var _el$10 = _tmpl$27();
7265
7440
  insert(_el$10, copying ? "Processing\u2026" : "1 element");
7266
7441
  return _el$10;
7267
7442
  })();
@@ -7467,7 +7642,16 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7467
7642
  if (pendingClickTimeoutId) {
7468
7643
  window.clearTimeout(pendingClickTimeoutId);
7469
7644
  pendingClickTimeoutId = null;
7645
+ const clickData = pendingClickData;
7470
7646
  pendingClickData = null;
7647
+ if (clickData) {
7648
+ setLastGrabbedElement(clickData.element);
7649
+ const bounds = createElementBounds(clickData.element);
7650
+ const tagName = extractElementTagName(clickData.element);
7651
+ void getNearestComponentName(clickData.element).then((componentName) => {
7652
+ void executeCopyOperation(clickData.clientX, clickData.clientY, () => copySingleElementToClipboard(clickData.element), bounds, tagName, componentName ?? void 0, clickData.element);
7653
+ });
7654
+ }
7471
7655
  }
7472
7656
  stopAutoScroll();
7473
7657
  stopProgressAnimation();
@@ -7522,11 +7706,12 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7522
7706
  const labelPositionX = mouseX();
7523
7707
  const currentX = bounds.x + bounds.width / 2;
7524
7708
  const currentY = bounds.y + bounds.height / 2;
7525
- setMouseX(currentX);
7526
- setMouseY(currentY);
7527
7709
  if (hasAgentProvider() && prompt) {
7528
7710
  elementInputCache.delete(element);
7529
7711
  deactivateRenderer();
7712
+ const currentReplySessionId = replySessionId();
7713
+ setReplySessionId(null);
7714
+ setReplyToPrompt(null);
7530
7715
  void agentManager.startSession({
7531
7716
  element,
7532
7717
  prompt,
@@ -7534,10 +7719,13 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7534
7719
  x: labelPositionX,
7535
7720
  y: currentY
7536
7721
  },
7537
- selectionBounds: bounds
7722
+ selectionBounds: bounds,
7723
+ sessionId: currentReplySessionId ?? void 0
7538
7724
  });
7539
7725
  return;
7540
7726
  }
7727
+ setMouseX(currentX);
7728
+ setMouseY(currentY);
7541
7729
  setIsInputMode(false);
7542
7730
  setInputText("");
7543
7731
  if (prompt) {
@@ -7565,10 +7753,12 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7565
7753
  elementInputCache.set(element, currentInput);
7566
7754
  }
7567
7755
  setIsPendingDismiss(false);
7756
+ setReplySessionId(null);
7568
7757
  deactivateRenderer();
7569
7758
  };
7570
7759
  const handleConfirmDismiss = () => {
7571
7760
  setIsPendingDismiss(false);
7761
+ setReplySessionId(null);
7572
7762
  deactivateRenderer();
7573
7763
  };
7574
7764
  const handleCancelDismiss = () => {
@@ -8330,6 +8520,9 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8330
8520
  get isInputExpanded() {
8331
8521
  return isInputExpanded();
8332
8522
  },
8523
+ get replyToPrompt() {
8524
+ return replyToPrompt() ?? void 0;
8525
+ },
8333
8526
  get hasAgent() {
8334
8527
  return hasAgentProvider();
8335
8528
  },
@@ -8339,15 +8532,48 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8339
8532
  get agentSessions() {
8340
8533
  return agentManager.sessions();
8341
8534
  },
8535
+ get supportsUndo() {
8536
+ return supportsUndo();
8537
+ },
8538
+ get supportsFollowUp() {
8539
+ return supportsFollowUp();
8540
+ },
8342
8541
  onAbortSession: (sessionId) => agentManager.abortSession(sessionId),
8343
8542
  onDismissSession: (sessionId) => agentManager.dismissSession(sessionId),
8344
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
+ },
8345
8568
  onAcknowledgeSessionError: (sessionId) => {
8346
8569
  const prompt = agentManager.acknowledgeSessionError(sessionId);
8347
8570
  if (prompt) {
8348
8571
  setInputText(prompt);
8349
8572
  }
8350
8573
  },
8574
+ onRetrySession: (sessionId) => {
8575
+ agentManager.retrySession(sessionId);
8576
+ },
8351
8577
  onInputChange: handleInputChange,
8352
8578
  onInputSubmit: () => void handleInputSubmit(),
8353
8579
  onInputCancel: handleInputCancel,
@@ -8456,6 +8682,8 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8456
8682
  };
8457
8683
  agentManager.setOptions(mergedOptions);
8458
8684
  setHasAgentProvider(Boolean(mergedOptions.provider));
8685
+ setSupportsUndo(Boolean(mergedOptions.provider?.undo));
8686
+ setSupportsFollowUp(Boolean(mergedOptions.provider?.supportsFollowUp));
8459
8687
  if (mergedOptions.provider?.checkConnection) {
8460
8688
  void mergedOptions.provider.checkConnection().then((connected) => {
8461
8689
  setIsAgentConnected(connected);