react-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.
@@ -948,8 +948,7 @@ function cleanChildren(parent, current, marker, replacement) {
948
948
  }
949
949
 
950
950
  // dist/styles.css
951
- var styles_default = `/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */
952
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--font-weight-medium:500;--radius-xs:.125rem;--ease-out:cubic-bezier(0,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-grab-pink:#b21c8e;--color-grab-purple:#d239c0;--color-label-tag-border:#730079;--color-label-muted:#767676}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.top-0{top:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-2147483645{z-index:2147483645}.z-2147483646{z-index:2147483646}.z-2147483647{z-index:2147483647}.z-\\[2147483645\\]{z-index:2147483645}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.-mt-px{margin-top:-1px}.-ml-\\[2px\\]{margin-left:-2px}.ml-1{margin-left:calc(var(--spacing)*1)}.box-border{box-sizing:border-box}.flex{display:flex}.grid{display:grid}.hidden{display:none}.size-fit{width:fit-content;height:fit-content}.h-0{height:calc(var(--spacing)*0)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-5\\.5{height:calc(var(--spacing)*5.5)}.h-\\[7px\\]{height:7px}.h-\\[17px\\]{height:17px}.h-\\[18px\\]{height:18px}.h-fit{height:fit-content}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.w-0{width:calc(var(--spacing)*0)}.w-0\\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-\\[7px\\]{width:7px}.w-\\[17px\\]{width:17px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\\[280px\\]{max-width:280px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-crosshair{cursor:crosshair}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-\\[3px\\]{gap:3px}.gap-\\[5px\\]{gap:5px}.gap-px{gap:1px}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\\[1\\.5px\\]{border-radius:1.5px}.rounded-\\[1px\\]{border-radius:1px}.rounded-full{border-radius:3.40282e38px}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-b-xs{border-bottom-right-radius:var(--radius-xs);border-bottom-left-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.\\[border-width\\:0\\.5px\\]{border-width:.5px}.\\[border-top-width\\:0\\.5px\\]{border-top-width:.5px}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\\[\\#7e0002\\]{border-color:#7e0002}.border-\\[\\#B3B3B3\\]{border-color:#b3b3b3}.border-grab-purple{border-color:var(--color-grab-purple)}.border-grab-purple\\/40{border-color:#d239c066}@supports (color:color-mix(in lab, red, red)){.border-grab-purple\\/40{border-color:color-mix(in oklab,var(--color-grab-purple)40%,transparent)}}.border-grab-purple\\/50{border-color:#d239c080}@supports (color:color-mix(in lab, red, red)){.border-grab-purple\\/50{border-color:color-mix(in oklab,var(--color-grab-purple)50%,transparent)}}.border-label-tag-border{border-color:var(--color-label-tag-border)}.border-white{border-color:var(--color-white)}.border-t-\\[\\#D9D9D9\\]{border-top-color:#d9d9d9}.bg-\\[\\#F7F7F7\\]{background-color:#f7f7f7}.bg-black{background-color:var(--color-black)}.bg-grab-pink{background-color:var(--color-grab-pink)}.bg-grab-purple{background-color:var(--color-grab-purple)}.bg-grab-purple\\/5{background-color:#d239c00d}@supports (color:color-mix(in lab, red, red)){.bg-grab-purple\\/5{background-color:color-mix(in oklab,var(--color-grab-purple)5%,transparent)}}.bg-grab-purple\\/8{background-color:#d239c014}@supports (color:color-mix(in lab, red, red)){.bg-grab-purple\\/8{background-color:color-mix(in oklab,var(--color-grab-purple)8%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-\\[2px\\]{padding-inline:2px}.px-\\[3px\\]{padding-inline:3px}.py-0{padding-block:calc(var(--spacing)*0)}.py-\\[2px\\]{padding-block:2px}.py-\\[3px\\]{padding-block:3px}.py-\\[5px\\]{padding-block:5px}.py-px{padding-block:1px}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-1\\.5{padding-right:calc(var(--spacing)*1.5)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pl-1\\.5{padding-left:calc(var(--spacing)*1.5)}.align-middle{vertical-align:middle}.font-\\[ui-monospace\\,\\'SFMono-Regular\\'\\,\\'SF_Mono\\'\\,\\'Menlo\\'\\,\\'Consolas\\'\\,\\'Liberation_Mono\\'\\,monospace\\]{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-\\[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}}`;
951
+ var styles_default = '/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--font-weight-medium:500;--radius-xs:.125rem;--ease-out:cubic-bezier(0,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-grab-pink:#b21c8e;--color-grab-purple:#d239c0;--color-label-tag-border:#730079;--color-label-muted:#767676}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.top-0{top:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-2147483645{z-index:2147483645}.z-2147483646{z-index:2147483646}.z-2147483647{z-index:2147483647}.z-\\[2147483645\\]{z-index:2147483645}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.-mt-px{margin-top:-1px}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.-ml-\\[2px\\]{margin-left:-2px}.ml-1{margin-left:calc(var(--spacing)*1)}.box-border{box-sizing:border-box}.flex{display:flex}.grid{display:grid}.hidden{display:none}.size-fit{width:fit-content;height:fit-content}.h-0{height:calc(var(--spacing)*0)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-5\\.5{height:calc(var(--spacing)*5.5)}.h-\\[7px\\]{height:7px}.h-\\[17px\\]{height:17px}.h-\\[18px\\]{height:18px}.h-fit{height:fit-content}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.w-0{width:calc(var(--spacing)*0)}.w-0\\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-\\[7px\\]{width:7px}.w-\\[17px\\]{width:17px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\\[280px\\]{max-width:280px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-crosshair{cursor:crosshair}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-\\[3px\\]{gap:3px}.gap-\\[5px\\]{gap:5px}.gap-px{gap:1px}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-\\[1\\.5px\\]{border-radius:1.5px}.rounded-\\[1px\\]{border-radius:1px}.rounded-full{border-radius:3.40282e38px}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-b-xs{border-bottom-right-radius:var(--radius-xs);border-bottom-left-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.\\[border-width\\:0\\.5px\\]{border-width:.5px}.\\[border-top-width\\:0\\.5px\\]{border-top-width:.5px}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\\[\\#7e0002\\]{border-color:#7e0002}.border-\\[\\#B3B3B3\\]{border-color:#b3b3b3}.border-grab-purple{border-color:var(--color-grab-purple)}.border-grab-purple\\/40{border-color:#d239c066}@supports (color:color-mix(in lab, red, red)){.border-grab-purple\\/40{border-color:color-mix(in oklab,var(--color-grab-purple)40%,transparent)}}.border-grab-purple\\/50{border-color:#d239c080}@supports (color:color-mix(in lab, red, red)){.border-grab-purple\\/50{border-color:color-mix(in oklab,var(--color-grab-purple)50%,transparent)}}.border-label-tag-border{border-color:var(--color-label-tag-border)}.border-white{border-color:var(--color-white)}.border-t-\\[\\#D9D9D9\\]{border-top-color:#d9d9d9}.bg-\\[\\#F7F7F7\\]{background-color:#f7f7f7}.bg-black{background-color:var(--color-black)}.bg-grab-pink{background-color:var(--color-grab-pink)}.bg-grab-purple{background-color:var(--color-grab-purple)}.bg-grab-purple\\/5{background-color:#d239c00d}@supports (color:color-mix(in lab, red, red)){.bg-grab-purple\\/5{background-color:color-mix(in oklab,var(--color-grab-purple)5%,transparent)}}.bg-grab-purple\\/8{background-color:#d239c014}@supports (color:color-mix(in lab, red, red)){.bg-grab-purple\\/8{background-color:color-mix(in oklab,var(--color-grab-purple)8%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-\\[2px\\]{padding-inline:2px}.px-\\[3px\\]{padding-inline:3px}.py-0{padding-block:calc(var(--spacing)*0)}.py-\\[2px\\]{padding-block:2px}.py-\\[3px\\]{padding-block:3px}.py-\\[5px\\]{padding-block:5px}.py-px{padding-block:1px}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-1\\.5{padding-right:calc(var(--spacing)*1.5)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pl-1\\.5{padding-left:calc(var(--spacing)*1.5)}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-\\[9px\\]{font-size:9px}.text-\\[11\\.5px\\]{font-size:11.5px}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.leading-3{--tw-leading:calc(var(--spacing)*3);line-height:calc(var(--spacing)*3)}.leading-3\\.5{--tw-leading:calc(var(--spacing)*3.5);line-height:calc(var(--spacing)*3.5)}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.wrap-break-word{overflow-wrap:break-word}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.text-\\[\\#0C0C0C\\]{color:#0c0c0c}.text-\\[\\#47004A\\]{color:#47004a}.text-\\[\\#71717a\\]{color:#71717a}.text-\\[\\#B91C1C\\]{color:#b91c1c}.text-\\[\\#a1a1aa\\]{color:#a1a1aa}.text-\\[\\#c00002\\]{color:#c00002}.text-black{color:var(--color-black)}.text-black\\/50{color:#00000080}@supports (color:color-mix(in lab, red, red)){.text-black\\/50{color:color-mix(in oklab,var(--color-black)50%,transparent)}}.text-label-muted{color:var(--color-label-muted)}.text-label-tag-border{color:var(--color-label-tag-border)}.text-white{color:var(--color-white)}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-100{opacity:1}.opacity-\\[0\\.99\\]{opacity:.99}.brightness-125{--tw-brightness:brightness(125%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter-\\[drop-shadow\\(0px_0px_4px_\\#51515180\\)\\]{filter:drop-shadow(0 0 4px #51515180)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[width\\,height\\]{transition-property:width,height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-30{--tw-duration:30ms;transition-duration:30ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-\\[transform\\,width\\,height\\]{will-change:transform,width,height}.contain-layout{--tw-contain-layout:layout;contain:var(--tw-contain-size,)var(--tw-contain-layout,)var(--tw-contain-paint,)var(--tw-contain-style,)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\\[font-synthesis\\:none\\]{font-synthesis:none}@media (hover:hover){.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:bg-\\[\\#F5F5F5\\]:hover{background-color:#f5f5f5}.hover\\:bg-\\[\\#FEF2F2\\]:hover{background-color:#fef2f2}.hover\\:opacity-100:hover{opacity:1}}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-contain-size{syntax:"*";inherits:false}@property --tw-contain-layout{syntax:"*";inherits:false}@property --tw-contain-paint{syntax:"*";inherits:false}@property --tw-contain-style{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}';
953
952
 
954
953
  // src/utils/is-keyboard-event-triggered-by-input.ts
955
954
  var FORM_TAGS_AND_ROLES = [
@@ -1078,7 +1077,7 @@ var buildOpenFileUrl = (filePath, lineNumber) => {
1078
1077
  };
1079
1078
 
1080
1079
  // src/constants.ts
1081
- var VERSION = "0.0.77";
1080
+ var VERSION = "0.0.80";
1082
1081
  var VIEWPORT_MARGIN_PX = 8;
1083
1082
  var OFFSCREEN_POSITION = -1e3;
1084
1083
  var SELECTION_LERP_FACTOR = 0.95;
@@ -1089,6 +1088,7 @@ var BLUR_DEACTIVATION_THRESHOLD_MS = 500;
1089
1088
  var INPUT_FOCUS_ACTIVATION_DELAY_MS = 150;
1090
1089
  var DEFAULT_KEY_HOLD_DURATION_MS = 200;
1091
1090
  var DOUBLE_CLICK_THRESHOLD_MS = 250;
1091
+ var RECENT_THRESHOLD_MS = 1e4;
1092
1092
  var DRAG_THRESHOLD_PX = 2;
1093
1093
  var ELEMENT_DETECTION_THROTTLE_MS = 32;
1094
1094
  var BOUNDS_RECALC_INTERVAL_MS = 100;
@@ -3943,32 +3943,55 @@ var IconReturn = (props) => {
3943
3943
  })();
3944
3944
  };
3945
3945
 
3946
+ // src/components/icon-retry.tsx
3947
+ var _tmpl$6 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=none><path d="M17.65 6.35C16.2 4.9 14.21 4 12 4C7.58 4 4.01 7.58 4.01 12C4.01 16.42 7.58 20 12 20C15.73 20 18.84 17.45 19.73 14H17.65C16.83 16.33 14.61 18 12 18C8.69 18 6 15.31 6 12C6 8.69 8.69 6 12 6C13.66 6 15.14 6.69 16.22 7.78L13 11H20V4L17.65 6.35Z"fill=currentColor>`);
3948
+ var IconRetry = (props) => {
3949
+ const size = () => props.size ?? 12;
3950
+ return (() => {
3951
+ var _el$ = _tmpl$6();
3952
+ createRenderEffect((_p$) => {
3953
+ var _v$ = size(), _v$2 = size(), _v$3 = props.class;
3954
+ _v$ !== _p$.e && setAttribute(_el$, "width", _p$.e = _v$);
3955
+ _v$2 !== _p$.t && setAttribute(_el$, "height", _p$.t = _v$2);
3956
+ _v$3 !== _p$.a && setAttribute(_el$, "class", _p$.a = _v$3);
3957
+ return _p$;
3958
+ }, {
3959
+ e: void 0,
3960
+ t: void 0,
3961
+ a: void 0
3962
+ });
3963
+ return _el$;
3964
+ })();
3965
+ };
3966
+
3946
3967
  // src/components/selection-label.tsx
3947
- var _tmpl$6 = /* @__PURE__ */ template(`<div style="background-image:linear-gradient(in oklab 180deg, oklab(88.7% 0.086 -0.058) 0%, oklab(83.2% 0.132 -0.089) 100%)"><span>`);
3948
- var _tmpl$22 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center w-fit h-4 rounded-[1px] gap-1 px-[3px] [border-width:0.5px] border-solid border-[#B3B3B3] py-0 bg-[#F7F7F7]"><span class="text-[#0C0C0C] text-[11.5px] leading-3.5 shrink-0 tracking-[-0.08em] font-[ui-monospace,'SFMono-Regular','SF_Mono','Menlo','Consolas','Liberation_Mono',monospace] w-fit h-fit">`);
3949
- var _tmpl$32 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center w-fit h-4 rounded-[1px] gap-1 px-[3px] [border-width:0.5px] border-solid border-white py-0"><span class="text-[#0C0C0C] text-[11.5px] leading-3.5 shrink-0 tracking-[-0.08em] font-[ui-monospace,'SFMono-Regular','SF_Mono','Menlo','Consolas','Liberation_Mono',monospace] w-fit h-fit">&gt;`);
3968
+ var _tmpl$7 = /* @__PURE__ */ template(`<div style="background-image:linear-gradient(in oklab 180deg, oklab(88.7% 0.086 -0.058) 0%, oklab(83.2% 0.132 -0.089) 100%)"><span>`);
3969
+ var _tmpl$22 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center w-fit h-4 rounded-[1px] gap-1 px-[3px] [border-width:0.5px] border-solid border-[#B3B3B3] py-0 bg-[#F7F7F7]"><span class="text-[#0C0C0C] text-[11.5px] leading-3.5 shrink-0 font-medium w-fit h-fit">`);
3970
+ var _tmpl$32 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center w-fit h-4 rounded-[1px] gap-1 px-[3px] [border-width:0.5px] border-solid border-white py-0"><span class="text-[#0C0C0C] text-[11.5px] leading-3.5 shrink-0 font-medium w-fit h-fit">&gt;`);
3950
3971
  var _tmpl$42 = /* @__PURE__ */ template(`<div class="absolute w-0 h-0"style="border-left:8px solid transparent;border-right:8px solid transparent">`);
3951
- var _tmpl$52 = /* @__PURE__ */ template(`<div role=button><div class="text-black text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit">`);
3972
+ var _tmpl$52 = /* @__PURE__ */ template(`<div role=button><div class="text-black text-[12px] leading-4 shrink-0 font-sans font-medium w-fit h-fit">`);
3952
3973
  var _tmpl$62 = /* @__PURE__ */ template(`<div class="[font-synthesis:none] contain-layout shrink-0 flex flex-col items-start px-2 py-[5px] w-auto h-fit self-stretch [border-top-width:0.5px] border-t-solid border-t-[#D9D9D9] antialiased rounded-t-none rounded-b-xs -mt-px"style="background-image:linear-gradient(in oklab 180deg, oklab(100% 0 0) 0%, oklab(96.1% 0 0) 5.92%)">`);
3953
- var _tmpl$7 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit"><button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">No</span></button><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#7e0002] cursor-pointer transition-all hover:bg-[#FEF2F2] h-[17px]"><span class="text-[#B91C1C] text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">Yes`);
3954
- var _tmpl$8 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-end gap-1 w-fit h-fit"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-full h-fit"><span class="text-black text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit">Discard prompt?`);
3955
- var _tmpl$9 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit"><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">Ok`);
3956
- var _tmpl$0 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-end gap-1 w-fit h-fit max-w-[280px]"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-full h-fit"><span class="text-[#B91C1C] text-[12px] leading-4 tracking-[-0.04em] font-sans font-medium">`);
3957
- var _tmpl$1 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">Undo`);
3958
- var _tmpl$10 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 tracking-[-0.04em] font-sans font-medium">Ok`);
3959
- var _tmpl$11 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit">`);
3960
- var _tmpl$12 = /* @__PURE__ */ template(`<div class="[font-synthesis:none] contain-layout shrink-0 flex flex-col justify-center items-end rounded-xs bg-white antialiased w-fit h-fit"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1.5 pb-1 px-1.5 w-full h-fit"><span class="text-black text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit tabular-nums">`);
3961
- var _tmpl$13 = /* @__PURE__ */ template(`<button data-react-grab-ignore-events class="contain-layout shrink-0 flex flex-col items-start rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] p-1 size-fit cursor-pointer ml-1 transition-none hover:scale-105"><div data-react-grab-ignore-events class="shrink-0 w-[7px] h-[7px] rounded-[1px] bg-black pointer-events-none">`);
3962
- var _tmpl$14 = /* @__PURE__ */ template(`<div class="shrink-0 flex justify-between items-end w-full min-h-4"><textarea data-react-grab-ignore-events class="text-black text-[12px] leading-4 tracking-[-0.04em] font-medium bg-transparent border-none outline-none resize-none flex-1 p-0 m-0 opacity-50 wrap-break-word overflow-y-auto"placeholder="type to edit"rows=1 disabled style=field-sizing:content;min-height:16px;max-height:95px;scrollbar-width:none>`);
3963
- var _tmpl$15 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit max-w-[280px]"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-auto h-fit"><div class="contain-layout flex items-center px-0 py-px w-auto h-fit rounded-[1.5px] gap-[3px]"><span class="text-[12px] leading-4 tracking-[-0.04em] font-sans font-medium w-auto h-fit whitespace-normal text-[#71717a] animate-pulse tabular-nums">`);
3964
- var _tmpl$16 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-px w-fit h-fit">`);
3965
- var _tmpl$17 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-1 w-fit h-fit"><span class="text-label-muted text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit">Press</span><div class="contain-layout shrink-0 flex flex-col items-start px-[3px] py-[3px] rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] size-fit"></div><span class="text-label-muted text-[12px] leading-4 shrink-0 tracking-[-0.04em] font-sans font-medium w-fit h-fit">to edit`);
3966
- var _tmpl$18 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit"><div></div><div class="grid transition-[grid-template-rows] duration-30 ease-out self-stretch"><div>`);
3967
- var _tmpl$19 = /* @__PURE__ */ template(`<button>`);
3968
- var _tmpl$20 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex flex-col items-start px-[3px] py-[3px] rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] size-fit cursor-pointer transition-all hover:scale-105">`);
3969
- var _tmpl$21 = /* @__PURE__ */ template(`<div class="shrink-0 flex justify-between items-end w-full min-h-4"><textarea data-react-grab-ignore-events class="text-black text-[12px] leading-4 tracking-[-0.04em] font-medium bg-transparent border-none outline-none resize-none flex-1 p-0 m-0 wrap-break-word overflow-y-auto"rows=1 style=field-sizing:content;min-height:16px;max-height:95px;scrollbar-width:none></textarea><div class="flex items-center gap-0.5 ml-1 w-[17px] h-[17px] justify-end">`);
3970
- var _tmpl$222 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit max-w-[280px]"><div>`);
3971
- var _tmpl$23 = /* @__PURE__ */ template(`<div data-react-grab-ignore-events class="fixed font-sans antialiased transition-opacity duration-300 ease-out filter-[drop-shadow(0px_0px_4px_#51515180)] select-none"style=z-index:2147483647><div class="[font-synthesis:none] contain-layout flex items-center gap-[5px] rounded-xs bg-white antialiased w-fit h-fit p-0">`);
3974
+ var _tmpl$72 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit"><button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">No</span></button><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#7e0002] cursor-pointer transition-all hover:bg-[#FEF2F2] h-[17px]"><span class="text-[#B91C1C] text-[11px] leading-3.5 font-sans font-medium">Yes`);
3975
+ var _tmpl$8 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-end gap-1 w-fit h-fit"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-full h-fit"><span class="text-black text-[12px] leading-4 shrink-0 font-sans font-medium w-fit h-fit">Discard prompt?`);
3976
+ var _tmpl$9 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit"><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">Retry</span></button><button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">Ok`);
3977
+ var _tmpl$0 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-end gap-1 w-fit h-fit max-w-[280px]"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-full h-fit"><span class="text-[#B91C1C] text-[12px] leading-4 font-sans font-medium">`);
3978
+ var _tmpl$1 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#7e0002] cursor-pointer transition-all hover:bg-[#FEF2F2] h-[17px]"><span class="text-[#B91C1C] text-[11px] leading-3.5 font-sans font-medium">Undo`);
3979
+ var _tmpl$10 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">Reply`);
3980
+ var _tmpl$11 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] h-[17px]"><span class="text-black text-[11px] leading-3.5 font-sans font-medium">Ok`);
3981
+ var _tmpl$12 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center justify-end gap-[5px] w-full h-fit">`);
3982
+ var _tmpl$13 = /* @__PURE__ */ template(`<div class="[font-synthesis:none] contain-layout shrink-0 flex flex-col justify-center items-end rounded-xs bg-white antialiased w-fit h-fit"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1.5 pb-1 px-1.5 w-full h-fit"><span class="text-black text-[12px] leading-4 shrink-0 font-sans font-medium w-fit h-fit tabular-nums">`);
3983
+ var _tmpl$14 = /* @__PURE__ */ template(`<button data-react-grab-ignore-events class="contain-layout shrink-0 flex flex-col items-start rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] p-1 size-fit cursor-pointer ml-1 transition-none hover:scale-105"><div data-react-grab-ignore-events class="shrink-0 w-[7px] h-[7px] rounded-[1px] bg-black pointer-events-none">`);
3984
+ var _tmpl$15 = /* @__PURE__ */ template(`<div class="shrink-0 flex justify-between items-end w-full min-h-4"><textarea data-react-grab-ignore-events class="text-black text-[12px] leading-4 font-medium bg-transparent border-none outline-none resize-none flex-1 p-0 m-0 opacity-50 wrap-break-word overflow-y-auto"placeholder="type to edit"rows=1 disabled style=field-sizing:content;min-height:16px;max-height:95px;scrollbar-width:none>`);
3985
+ var _tmpl$16 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit max-w-[280px]"><div class="contain-layout shrink-0 flex items-center gap-1 pt-1 px-1.5 w-auto h-fit"><div class="contain-layout flex items-center px-0 py-px w-auto h-fit rounded-[1.5px] gap-[3px]"><span class="text-[12px] leading-4 font-sans font-medium w-auto h-fit whitespace-normal text-[#71717a] animate-pulse tabular-nums">`);
3986
+ var _tmpl$17 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-px w-fit h-fit">`);
3987
+ var _tmpl$18 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex items-center gap-1 w-fit h-fit"><span class="text-label-muted text-[12px] leading-4 shrink-0 font-sans font-medium w-fit h-fit">Double click to edit</span><div class="contain-layout shrink-0 flex flex-col items-start px-[3px] py-[3px] rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] size-fit">`);
3988
+ var _tmpl$19 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit"><div></div><div class="grid transition-[grid-template-rows] duration-30 ease-out self-stretch"><div>`);
3989
+ var _tmpl$20 = /* @__PURE__ */ template(`<div class="shrink-0 flex items-center gap-0.5 w-full mb-0.5 overflow-hidden"><span class="text-[#a1a1aa] text-[9px] leading-3 shrink-0">\u21B3</span><span class="text-[#a1a1aa] text-[9px] leading-3 italic truncate whitespace-nowrap">`);
3990
+ var _tmpl$21 = /* @__PURE__ */ template(`<button>`);
3991
+ var _tmpl$222 = /* @__PURE__ */ template(`<button class="contain-layout shrink-0 flex flex-col items-start px-[3px] py-[3px] rounded-xs bg-white [border-width:0.5px] border-solid border-[#B3B3B3] size-fit cursor-pointer transition-all hover:scale-105">`);
3992
+ var _tmpl$23 = /* @__PURE__ */ template(`<div class="shrink-0 flex justify-between items-end w-full min-h-4"><textarea data-react-grab-ignore-events class="text-black text-[12px] leading-4 font-medium bg-transparent border-none outline-none resize-none flex-1 p-0 m-0 wrap-break-word overflow-y-auto"rows=1 style=field-sizing:content;min-height:16px;max-height:95px;scrollbar-width:none></textarea><div class="flex items-center gap-0.5 ml-1 w-[17px] h-[17px] justify-end">`);
3993
+ var _tmpl$24 = /* @__PURE__ */ template(`<div class="contain-layout shrink-0 flex flex-col justify-center items-start gap-1 w-fit h-fit max-w-[280px]"><div>`);
3994
+ var _tmpl$25 = /* @__PURE__ */ template(`<div data-react-grab-ignore-events class="fixed font-sans antialiased transition-opacity duration-300 ease-out filter-[drop-shadow(0px_0px_4px_#51515180)] select-none"style=z-index:2147483647><div class="[font-synthesis:none] contain-layout flex items-center gap-[5px] rounded-xs bg-white antialiased w-fit h-fit p-0">`);
3972
3995
  var ARROW_HEIGHT = 8;
3973
3996
  var LABEL_GAP = 4;
3974
3997
  var IDLE_TIMEOUT_MS = 400;
@@ -3983,7 +4006,7 @@ var TagBadge = (props) => {
3983
4006
  props.onHoverChange?.(false);
3984
4007
  };
3985
4008
  return (() => {
3986
- var _el$ = _tmpl$6(), _el$2 = _el$.firstChild;
4009
+ var _el$ = _tmpl$7(), _el$2 = _el$.firstChild;
3987
4010
  addEventListener(_el$, "click", props.onClick);
3988
4011
  _el$.addEventListener("mouseleave", handleMouseLeave);
3989
4012
  _el$.addEventListener("mouseenter", handleMouseEnter);
@@ -4002,7 +4025,7 @@ var TagBadge = (props) => {
4002
4025
  }
4003
4026
  }), null);
4004
4027
  createRenderEffect((_p$) => {
4005
- var _v$ = cn("contain-layout flex items-center px-[3px] py-0 h-4 rounded-[1px] gap-0.5 [border-width:0.5px] border-solid border-label-tag-border", props.shrink && "shrink-0 w-fit", props.isClickable && "cursor-pointer"), _v$2 = cn("text-[#47004A] text-[11.5px] leading-3.5 shrink-0 w-fit h-fit", props.showMono ? "tracking-[-0.08em] font-[ui-monospace,'SFMono-Regular','SF_Mono','Menlo','Consolas','Liberation_Mono',monospace]" : "tracking-[-0.04em] font-medium");
4028
+ var _v$ = cn("contain-layout flex items-center px-[3px] py-0 h-4 rounded-[1px] gap-0.5 [border-width:0.5px] border-solid border-label-tag-border", props.shrink && "shrink-0 w-fit", props.isClickable && "cursor-pointer"), _v$2 = cn("text-[#47004A] text-[11.5px] leading-3.5 shrink-0 w-fit h-fit font-medium");
4006
4029
  _v$ !== _p$.e && className(_el$, _p$.e = _v$);
4007
4030
  _v$2 !== _p$.t && className(_el$2, _p$.t = _v$2);
4008
4031
  return _p$;
@@ -4082,7 +4105,7 @@ var DismissConfirmation = (props) => {
4082
4105
  var _el$0 = _tmpl$8(); _el$0.firstChild;
4083
4106
  insert(_el$0, createComponent(BottomSection, {
4084
4107
  get children() {
4085
- var _el$10 = _tmpl$7(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling; _el$12.firstChild;
4108
+ var _el$10 = _tmpl$72(), _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling; _el$12.firstChild;
4086
4109
  addEventListener(_el$11, "click", props.onCancel);
4087
4110
  addEventListener(_el$12, "click", props.onConfirm);
4088
4111
  insert(_el$12, createComponent(IconReturn, {
@@ -4098,7 +4121,11 @@ var DismissConfirmation = (props) => {
4098
4121
  var MAX_ERROR_LENGTH = 50;
4099
4122
  var ErrorConfirmation = (props) => {
4100
4123
  const handleKeyDown = (event) => {
4101
- if (event.code === "Enter" || event.code === "Escape") {
4124
+ if (event.code === "Enter") {
4125
+ event.preventDefault();
4126
+ event.stopPropagation();
4127
+ props.onRetry?.();
4128
+ } else if (event.code === "Escape") {
4102
4129
  event.preventDefault();
4103
4130
  event.stopPropagation();
4104
4131
  props.onAcknowledge?.();
@@ -4124,12 +4151,13 @@ var ErrorConfirmation = (props) => {
4124
4151
  insert(_el$16, truncatedError);
4125
4152
  insert(_el$14, createComponent(BottomSection, {
4126
4153
  get children() {
4127
- var _el$17 = _tmpl$9(), _el$18 = _el$17.firstChild; _el$18.firstChild;
4128
- addEventListener(_el$18, "click", props.onAcknowledge);
4129
- insert(_el$18, createComponent(IconReturn, {
4154
+ var _el$17 = _tmpl$9(), _el$18 = _el$17.firstChild; _el$18.firstChild; var _el$20 = _el$18.nextSibling;
4155
+ addEventListener(_el$18, "click", props.onRetry);
4156
+ insert(_el$18, createComponent(IconRetry, {
4130
4157
  size: 10,
4131
4158
  "class": "text-black/50"
4132
4159
  }), null);
4160
+ addEventListener(_el$20, "click", props.onAcknowledge);
4133
4161
  return _el$17;
4134
4162
  }
4135
4163
  }), null);
@@ -4137,6 +4165,77 @@ var ErrorConfirmation = (props) => {
4137
4165
  return _el$14;
4138
4166
  })();
4139
4167
  };
4168
+ var CompletedConfirmation = (props) => {
4169
+ const handleKeyDown = (event) => {
4170
+ if (event.code === "Enter" || event.code === "Escape") {
4171
+ event.preventDefault();
4172
+ event.stopPropagation();
4173
+ props.onDismiss?.();
4174
+ }
4175
+ };
4176
+ onMount(() => {
4177
+ window.addEventListener("keydown", handleKeyDown, {
4178
+ capture: true
4179
+ });
4180
+ });
4181
+ onCleanup(() => {
4182
+ window.removeEventListener("keydown", handleKeyDown, {
4183
+ capture: true
4184
+ });
4185
+ });
4186
+ return (() => {
4187
+ var _el$21 = _tmpl$13(), _el$22 = _el$21.firstChild, _el$23 = _el$22.firstChild;
4188
+ insert(_el$23, () => props.statusText);
4189
+ insert(_el$21, createComponent(Show, {
4190
+ get when() {
4191
+ return props.onDismiss || props.onUndo || props.onReply;
4192
+ },
4193
+ get children() {
4194
+ return createComponent(BottomSection, {
4195
+ get children() {
4196
+ var _el$24 = _tmpl$12();
4197
+ insert(_el$24, createComponent(Show, {
4198
+ get when() {
4199
+ return memo(() => !!props.supportsUndo)() && props.onUndo;
4200
+ },
4201
+ get children() {
4202
+ var _el$25 = _tmpl$1();
4203
+ _el$25.$$click = () => props.onUndo?.();
4204
+ return _el$25;
4205
+ }
4206
+ }), null);
4207
+ insert(_el$24, createComponent(Show, {
4208
+ get when() {
4209
+ return memo(() => !!props.supportsFollowUp)() && props.onReply;
4210
+ },
4211
+ get children() {
4212
+ var _el$26 = _tmpl$10();
4213
+ _el$26.$$click = () => props.onReply?.();
4214
+ return _el$26;
4215
+ }
4216
+ }), null);
4217
+ insert(_el$24, createComponent(Show, {
4218
+ get when() {
4219
+ return props.onDismiss;
4220
+ },
4221
+ get children() {
4222
+ var _el$27 = _tmpl$11(); _el$27.firstChild;
4223
+ _el$27.$$click = () => props.onDismiss?.();
4224
+ insert(_el$27, createComponent(IconReturn, {
4225
+ size: 10,
4226
+ "class": "text-black/50"
4227
+ }), null);
4228
+ return _el$27;
4229
+ }
4230
+ }), null);
4231
+ return _el$24;
4232
+ }
4233
+ });
4234
+ }
4235
+ }), null);
4236
+ return _el$21;
4237
+ })();
4238
+ };
4140
4239
  var SelectionLabel = (props) => {
4141
4240
  let containerRef;
4142
4241
  let inputRef;
@@ -4338,111 +4437,92 @@ var SelectionLabel = (props) => {
4338
4437
  return memo(() => props.visible !== false)() && (props.selectionBounds || shouldShowWithoutBounds());
4339
4438
  },
4340
4439
  get children() {
4341
- var _el$20 = _tmpl$23(), _el$27 = _el$20.firstChild;
4342
- _el$20.$$click = stopPropagation;
4343
- _el$20.$$mousedown = stopPropagation;
4344
- _el$20.$$pointerdown = handleContainerPointerDown;
4440
+ var _el$29 = _tmpl$25(), _el$30 = _el$29.firstChild;
4441
+ _el$29.$$click = stopPropagation;
4442
+ _el$29.$$mousedown = stopPropagation;
4443
+ _el$29.$$pointerdown = handleContainerPointerDown;
4345
4444
  var _ref$ = containerRef;
4346
- typeof _ref$ === "function" ? use(_ref$, _el$20) : containerRef = _el$20;
4347
- insert(_el$20, createComponent(Arrow, {
4445
+ typeof _ref$ === "function" ? use(_ref$, _el$29) : containerRef = _el$29;
4446
+ insert(_el$29, createComponent(Arrow, {
4348
4447
  get position() {
4349
4448
  return arrowPosition();
4350
4449
  },
4351
4450
  get leftPx() {
4352
4451
  return computedPosition().arrowLeft;
4353
4452
  }
4354
- }), _el$27);
4355
- insert(_el$20, createComponent(Show, {
4453
+ }), _el$30);
4454
+ insert(_el$29, createComponent(Show, {
4356
4455
  get when() {
4357
4456
  return memo(() => !!(props.status === "copied" || props.status === "fading"))() && !props.error;
4358
4457
  },
4359
4458
  get children() {
4360
- var _el$21 = _tmpl$12(), _el$22 = _el$21.firstChild, _el$23 = _el$22.firstChild;
4361
- insert(_el$23, (() => {
4362
- var _c$ = memo(() => !!props.hasAgent);
4363
- return () => _c$() ? props.statusText ?? "Completed" : "Copied";
4364
- })());
4365
- insert(_el$21, createComponent(Show, {
4366
- get when() {
4367
- return props.onDismiss || props.onUndo;
4459
+ return createComponent(CompletedConfirmation, {
4460
+ get statusText() {
4461
+ return memo(() => !!props.hasAgent)() ? props.statusText ?? "Completed" : "Copied";
4368
4462
  },
4369
- get children() {
4370
- return createComponent(BottomSection, {
4371
- get children() {
4372
- var _el$24 = _tmpl$11();
4373
- insert(_el$24, createComponent(Show, {
4374
- get when() {
4375
- return props.onUndo;
4376
- },
4377
- get children() {
4378
- var _el$25 = _tmpl$1();
4379
- _el$25.$$click = () => props.onUndo?.();
4380
- return _el$25;
4381
- }
4382
- }), null);
4383
- insert(_el$24, createComponent(Show, {
4384
- get when() {
4385
- return props.onDismiss;
4386
- },
4387
- get children() {
4388
- var _el$26 = _tmpl$10();
4389
- _el$26.$$click = () => props.onDismiss?.();
4390
- return _el$26;
4391
- }
4392
- }), null);
4393
- return _el$24;
4394
- }
4395
- });
4463
+ get supportsUndo() {
4464
+ return props.supportsUndo;
4465
+ },
4466
+ get supportsFollowUp() {
4467
+ return props.supportsFollowUp;
4468
+ },
4469
+ get onDismiss() {
4470
+ return props.onDismiss;
4471
+ },
4472
+ get onUndo() {
4473
+ return props.onUndo;
4474
+ },
4475
+ get onReply() {
4476
+ return props.onReply;
4396
4477
  }
4397
- }), null);
4398
- return _el$21;
4478
+ });
4399
4479
  }
4400
- }), _el$27);
4401
- insert(_el$27, createComponent(Show, {
4480
+ }), _el$30);
4481
+ insert(_el$30, createComponent(Show, {
4402
4482
  get when() {
4403
4483
  return props.status === "copying";
4404
4484
  },
4405
4485
  get children() {
4406
- var _el$28 = _tmpl$15(), _el$29 = _el$28.firstChild, _el$30 = _el$29.firstChild, _el$31 = _el$30.firstChild;
4407
- insert(_el$31, () => props.statusText ?? "Grabbing\u2026");
4408
- insert(_el$28, createComponent(BottomSection, {
4486
+ var _el$31 = _tmpl$16(), _el$32 = _el$31.firstChild, _el$33 = _el$32.firstChild, _el$34 = _el$33.firstChild;
4487
+ insert(_el$34, () => props.statusText ?? "Grabbing\u2026");
4488
+ insert(_el$31, createComponent(BottomSection, {
4409
4489
  get children() {
4410
- var _el$32 = _tmpl$14(), _el$33 = _el$32.firstChild;
4490
+ var _el$35 = _tmpl$15(), _el$36 = _el$35.firstChild;
4411
4491
  var _ref$2 = inputRef;
4412
- typeof _ref$2 === "function" ? use(_ref$2, _el$33) : inputRef = _el$33;
4413
- insert(_el$32, createComponent(Show, {
4492
+ typeof _ref$2 === "function" ? use(_ref$2, _el$36) : inputRef = _el$36;
4493
+ insert(_el$35, createComponent(Show, {
4414
4494
  get when() {
4415
4495
  return props.onAbort;
4416
4496
  },
4417
4497
  get children() {
4418
- var _el$34 = _tmpl$13();
4419
- _el$34.$$click = (event) => {
4498
+ var _el$37 = _tmpl$14();
4499
+ _el$37.$$click = (event) => {
4420
4500
  event.stopPropagation();
4421
4501
  props.onAbort?.();
4422
4502
  };
4423
- _el$34.$$pointerup = (event) => {
4503
+ _el$37.$$pointerup = (event) => {
4424
4504
  event.stopPropagation();
4425
4505
  props.onAbort?.();
4426
4506
  };
4427
- _el$34.$$mousedown = (event) => event.stopPropagation();
4428
- _el$34.$$pointerdown = (event) => event.stopPropagation();
4429
- return _el$34;
4507
+ _el$37.$$mousedown = (event) => event.stopPropagation();
4508
+ _el$37.$$pointerdown = (event) => event.stopPropagation();
4509
+ return _el$37;
4430
4510
  }
4431
4511
  }), null);
4432
- createRenderEffect(() => _el$33.value = props.inputValue ?? "");
4433
- return _el$32;
4512
+ createRenderEffect(() => _el$36.value = props.inputValue ?? "");
4513
+ return _el$35;
4434
4514
  }
4435
4515
  }), null);
4436
- return _el$28;
4516
+ return _el$31;
4437
4517
  }
4438
4518
  }), null);
4439
- insert(_el$27, createComponent(Show, {
4519
+ insert(_el$30, createComponent(Show, {
4440
4520
  get when() {
4441
4521
  return memo(() => !!isNotProcessing())() && !props.isInputExpanded;
4442
4522
  },
4443
4523
  get children() {
4444
- var _el$35 = _tmpl$18(), _el$36 = _el$35.firstChild, _el$38 = _el$36.nextSibling, _el$39 = _el$38.firstChild;
4445
- insert(_el$36, createComponent(ClickToCopyPill, {
4524
+ var _el$38 = _tmpl$19(), _el$39 = _el$38.firstChild, _el$41 = _el$39.nextSibling, _el$42 = _el$41.firstChild;
4525
+ insert(_el$39, createComponent(ClickToCopyPill, {
4446
4526
  onClick: handleSubmit,
4447
4527
  shrink: true,
4448
4528
  get hasParent() {
@@ -4452,19 +4532,19 @@ var SelectionLabel = (props) => {
4452
4532
  return props.hasAgent;
4453
4533
  }
4454
4534
  }), null);
4455
- insert(_el$36, createComponent(Show, {
4535
+ insert(_el$39, createComponent(Show, {
4456
4536
  get when() {
4457
4537
  return props.componentName;
4458
4538
  },
4459
4539
  get children() {
4460
- var _el$37 = _tmpl$16();
4461
- insert(_el$37, createComponent(ParentBadge, {
4540
+ var _el$40 = _tmpl$17();
4541
+ insert(_el$40, createComponent(ParentBadge, {
4462
4542
  get name() {
4463
4543
  return props.componentName;
4464
4544
  }
4465
4545
  }), null);
4466
- insert(_el$37, createComponent(ChevronSeparator, {}), null);
4467
- insert(_el$37, createComponent(TagBadge, {
4546
+ insert(_el$40, createComponent(ChevronSeparator, {}), null);
4547
+ insert(_el$40, createComponent(TagBadge, {
4468
4548
  get tagName() {
4469
4549
  return tagDisplay();
4470
4550
  },
@@ -4473,13 +4553,12 @@ var SelectionLabel = (props) => {
4473
4553
  },
4474
4554
  onClick: handleTagClick,
4475
4555
  onHoverChange: handleTagHoverChange,
4476
- showMono: true,
4477
4556
  shrink: true
4478
4557
  }), null);
4479
- return _el$37;
4558
+ return _el$40;
4480
4559
  }
4481
4560
  }), null);
4482
- insert(_el$36, createComponent(Show, {
4561
+ insert(_el$39, createComponent(Show, {
4483
4562
  get when() {
4484
4563
  return !props.componentName;
4485
4564
  },
@@ -4493,42 +4572,41 @@ var SelectionLabel = (props) => {
4493
4572
  },
4494
4573
  onClick: handleTagClick,
4495
4574
  onHoverChange: handleTagHoverChange,
4496
- showMono: true,
4497
4575
  shrink: true
4498
4576
  });
4499
4577
  }
4500
4578
  }), null);
4501
- insert(_el$39, createComponent(BottomSection, {
4579
+ insert(_el$42, createComponent(BottomSection, {
4502
4580
  get children() {
4503
- var _el$40 = _tmpl$17(), _el$41 = _el$40.firstChild, _el$42 = _el$41.nextSibling;
4504
- insert(_el$42, createComponent(IconReturn, {
4581
+ var _el$43 = _tmpl$18(), _el$44 = _el$43.firstChild, _el$45 = _el$44.nextSibling;
4582
+ insert(_el$45, createComponent(IconReturn, {
4505
4583
  size: 10,
4506
4584
  "class": "opacity-[0.99] text-black"
4507
4585
  }));
4508
- return _el$40;
4586
+ return _el$43;
4509
4587
  }
4510
4588
  }));
4511
4589
  createRenderEffect((_p$) => {
4512
4590
  var _v$3 = cn("contain-layout shrink-0 flex items-center gap-1 pt-1 w-fit h-fit pl-1.5", props.componentName ? "pr-1.5" : "pr-1"), _v$4 = isIdle() ? "1fr" : "0fr", _v$5 = cn("overflow-hidden min-h-0", !isIdle() && "w-0");
4513
- _v$3 !== _p$.e && className(_el$36, _p$.e = _v$3);
4514
- _v$4 !== _p$.t && setStyleProperty(_el$38, "grid-template-rows", _p$.t = _v$4);
4515
- _v$5 !== _p$.a && className(_el$39, _p$.a = _v$5);
4591
+ _v$3 !== _p$.e && className(_el$39, _p$.e = _v$3);
4592
+ _v$4 !== _p$.t && setStyleProperty(_el$41, "grid-template-rows", _p$.t = _v$4);
4593
+ _v$5 !== _p$.a && className(_el$42, _p$.a = _v$5);
4516
4594
  return _p$;
4517
4595
  }, {
4518
4596
  e: void 0,
4519
4597
  t: void 0,
4520
4598
  a: void 0
4521
4599
  });
4522
- return _el$35;
4600
+ return _el$38;
4523
4601
  }
4524
4602
  }), null);
4525
- insert(_el$27, createComponent(Show, {
4603
+ insert(_el$30, createComponent(Show, {
4526
4604
  get when() {
4527
4605
  return memo(() => !!(isNotProcessing() && props.isInputExpanded))() && !props.isPendingDismiss;
4528
4606
  },
4529
4607
  get children() {
4530
- var _el$43 = _tmpl$222(), _el$44 = _el$43.firstChild;
4531
- insert(_el$44, createComponent(ClickToCopyPill, {
4608
+ var _el$46 = _tmpl$24(), _el$47 = _el$46.firstChild;
4609
+ insert(_el$47, createComponent(ClickToCopyPill, {
4532
4610
  onClick: handleSubmit,
4533
4611
  dimmed: true,
4534
4612
  shrink: true,
@@ -4539,19 +4617,19 @@ var SelectionLabel = (props) => {
4539
4617
  return props.hasAgent;
4540
4618
  }
4541
4619
  }), null);
4542
- insert(_el$44, createComponent(Show, {
4620
+ insert(_el$47, createComponent(Show, {
4543
4621
  get when() {
4544
4622
  return props.componentName;
4545
4623
  },
4546
4624
  get children() {
4547
- var _el$45 = _tmpl$16();
4548
- insert(_el$45, createComponent(ParentBadge, {
4625
+ var _el$48 = _tmpl$17();
4626
+ insert(_el$48, createComponent(ParentBadge, {
4549
4627
  get name() {
4550
4628
  return props.componentName;
4551
4629
  }
4552
4630
  }), null);
4553
- insert(_el$45, createComponent(ChevronSeparator, {}), null);
4554
- insert(_el$45, createComponent(TagBadge, {
4631
+ insert(_el$48, createComponent(ChevronSeparator, {}), null);
4632
+ insert(_el$48, createComponent(TagBadge, {
4555
4633
  get tagName() {
4556
4634
  return tagDisplay();
4557
4635
  },
@@ -4560,14 +4638,13 @@ var SelectionLabel = (props) => {
4560
4638
  },
4561
4639
  onClick: handleTagClick,
4562
4640
  onHoverChange: handleTagHoverChange,
4563
- showMono: true,
4564
4641
  shrink: true,
4565
4642
  forceShowIcon: true
4566
4643
  }), null);
4567
- return _el$45;
4644
+ return _el$48;
4568
4645
  }
4569
4646
  }), null);
4570
- insert(_el$44, createComponent(Show, {
4647
+ insert(_el$47, createComponent(Show, {
4571
4648
  get when() {
4572
4649
  return !props.componentName;
4573
4650
  },
@@ -4581,68 +4658,78 @@ var SelectionLabel = (props) => {
4581
4658
  },
4582
4659
  onClick: handleTagClick,
4583
4660
  onHoverChange: handleTagHoverChange,
4584
- showMono: true,
4585
4661
  shrink: true,
4586
4662
  forceShowIcon: true
4587
4663
  });
4588
4664
  }
4589
4665
  }), null);
4590
- insert(_el$43, createComponent(BottomSection, {
4666
+ insert(_el$46, createComponent(BottomSection, {
4591
4667
  get children() {
4592
- var _el$46 = _tmpl$21(), _el$47 = _el$46.firstChild, _el$48 = _el$47.nextSibling;
4593
- _el$47.$$keydown = handleKeyDown;
4594
- _el$47.$$input = handleInput;
4595
- var _ref$3 = inputRef;
4596
- typeof _ref$3 === "function" ? use(_ref$3, _el$47) : inputRef = _el$47;
4597
- insert(_el$48, createComponent(Show, {
4668
+ return [createComponent(Show, {
4598
4669
  get when() {
4599
- return memo(() => !!(props.hasAgent && speechRecognition.isSupported()))() && !props.inputValue;
4670
+ return props.replyToPrompt;
4600
4671
  },
4601
4672
  get children() {
4602
- var _el$49 = _tmpl$19();
4603
- addEventListener(_el$49, "click", speechRecognition.toggle);
4604
- insert(_el$49, createComponent(IconMic, {
4605
- size: 11,
4606
- get ["class"]() {
4607
- return speechRecognition.isListening() ? "animate-pulse" : "";
4608
- }
4609
- }));
4610
- createRenderEffect((_p$) => {
4611
- 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";
4612
- _v$6 !== _p$.e && className(_el$49, _p$.e = _v$6);
4613
- _v$7 !== _p$.t && setAttribute(_el$49, "title", _p$.t = _v$7);
4614
- return _p$;
4615
- }, {
4616
- e: void 0,
4617
- t: void 0
4618
- });
4673
+ var _el$49 = _tmpl$20(), _el$50 = _el$49.firstChild, _el$51 = _el$50.nextSibling;
4674
+ insert(_el$51, () => props.replyToPrompt);
4619
4675
  return _el$49;
4620
4676
  }
4621
- }), null);
4622
- insert(_el$48, createComponent(Show, {
4623
- get when() {
4624
- return props.inputValue;
4625
- },
4626
- get children() {
4627
- var _el$50 = _tmpl$20();
4628
- _el$50.$$click = handleSubmit;
4629
- insert(_el$50, createComponent(IconReturn, {
4630
- size: 10,
4631
- "class": "opacity-[0.99] text-black"
4632
- }));
4633
- return _el$50;
4634
- }
4635
- }), null);
4636
- createRenderEffect(() => setAttribute(_el$47, "placeholder", speechRecognition.isListening() ? "listening..." : "type prompt"));
4637
- createRenderEffect(() => _el$47.value = props.inputValue ?? "");
4638
- return _el$46;
4677
+ }), (() => {
4678
+ var _el$52 = _tmpl$23(), _el$53 = _el$52.firstChild, _el$54 = _el$53.nextSibling;
4679
+ _el$53.$$keydown = handleKeyDown;
4680
+ _el$53.$$input = handleInput;
4681
+ var _ref$3 = inputRef;
4682
+ typeof _ref$3 === "function" ? use(_ref$3, _el$53) : inputRef = _el$53;
4683
+ insert(_el$54, createComponent(Show, {
4684
+ get when() {
4685
+ return memo(() => !!(props.hasAgent && speechRecognition.isSupported()))() && !props.inputValue;
4686
+ },
4687
+ get children() {
4688
+ var _el$55 = _tmpl$21();
4689
+ addEventListener(_el$55, "click", speechRecognition.toggle);
4690
+ insert(_el$55, createComponent(IconMic, {
4691
+ size: 11,
4692
+ get ["class"]() {
4693
+ return speechRecognition.isListening() ? "animate-pulse" : "";
4694
+ }
4695
+ }));
4696
+ createRenderEffect((_p$) => {
4697
+ var _v$6 = cn("contain-layout shrink-0 flex items-center justify-center px-[2px] py-[2px] rounded-xs [border-width:0.5px] border-solid size-fit cursor-pointer transition-all hover:scale-105", speechRecognition.isListening() ? "bg-grab-purple border-grab-purple text-white" : "bg-white border-[#B3B3B3] text-black"), _v$7 = speechRecognition.isListening() ? "Stop listening" : "Start voice input";
4698
+ _v$6 !== _p$.e && className(_el$55, _p$.e = _v$6);
4699
+ _v$7 !== _p$.t && setAttribute(_el$55, "title", _p$.t = _v$7);
4700
+ return _p$;
4701
+ }, {
4702
+ e: void 0,
4703
+ t: void 0
4704
+ });
4705
+ return _el$55;
4706
+ }
4707
+ }), null);
4708
+ insert(_el$54, createComponent(Show, {
4709
+ get when() {
4710
+ return props.inputValue;
4711
+ },
4712
+ get children() {
4713
+ var _el$56 = _tmpl$222();
4714
+ _el$56.$$click = handleSubmit;
4715
+ insert(_el$56, createComponent(IconReturn, {
4716
+ size: 10,
4717
+ "class": "opacity-[0.99] text-black"
4718
+ }));
4719
+ return _el$56;
4720
+ }
4721
+ }), null);
4722
+ createRenderEffect(() => setAttribute(_el$53, "placeholder", speechRecognition.isListening() ? "listening..." : "type prompt"));
4723
+ createRenderEffect(() => _el$53.value = props.inputValue ?? "");
4724
+ return _el$52;
4725
+ })()];
4639
4726
  }
4640
4727
  }), null);
4641
- 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")));
4642
- return _el$43;
4728
+ createRenderEffect(() => className(_el$47, cn("contain-layout shrink-0 flex items-center gap-1 pt-1 w-fit h-fit pl-1.5", props.componentName ? "pr-1.5" : "pr-1")));
4729
+ return _el$46;
4643
4730
  }
4644
4731
  }), null);
4645
- insert(_el$27, createComponent(Show, {
4732
+ insert(_el$30, createComponent(Show, {
4646
4733
  get when() {
4647
4734
  return props.isPendingDismiss;
4648
4735
  },
@@ -4657,7 +4744,7 @@ var SelectionLabel = (props) => {
4657
4744
  });
4658
4745
  }
4659
4746
  }), null);
4660
- insert(_el$27, createComponent(Show, {
4747
+ insert(_el$30, createComponent(Show, {
4661
4748
  get when() {
4662
4749
  return props.error;
4663
4750
  },
@@ -4668,17 +4755,20 @@ var SelectionLabel = (props) => {
4668
4755
  },
4669
4756
  get onAcknowledge() {
4670
4757
  return props.onAcknowledgeError;
4758
+ },
4759
+ get onRetry() {
4760
+ return props.onRetry;
4671
4761
  }
4672
4762
  });
4673
4763
  }
4674
4764
  }), null);
4675
4765
  createRenderEffect((_p$) => {
4676
4766
  var _v$8 = `${computedPosition().top}px`, _v$9 = `${computedPosition().left}px`, _v$0 = props.isInputExpanded || props.status === "copied" && props.onDismiss || props.status === "copying" && props.onAbort ? "auto" : "none", _v$1 = props.status === "fading" ? 0 : 1, _v$10 = (props.status === "copied" || props.status === "fading") && !props.error ? "none" : void 0;
4677
- _v$8 !== _p$.e && setStyleProperty(_el$20, "top", _p$.e = _v$8);
4678
- _v$9 !== _p$.t && setStyleProperty(_el$20, "left", _p$.t = _v$9);
4679
- _v$0 !== _p$.a && setStyleProperty(_el$20, "pointer-events", _p$.a = _v$0);
4680
- _v$1 !== _p$.o && setStyleProperty(_el$20, "opacity", _p$.o = _v$1);
4681
- _v$10 !== _p$.i && setStyleProperty(_el$27, "display", _p$.i = _v$10);
4767
+ _v$8 !== _p$.e && setStyleProperty(_el$29, "top", _p$.e = _v$8);
4768
+ _v$9 !== _p$.t && setStyleProperty(_el$29, "left", _p$.t = _v$9);
4769
+ _v$0 !== _p$.a && setStyleProperty(_el$29, "pointer-events", _p$.a = _v$0);
4770
+ _v$1 !== _p$.o && setStyleProperty(_el$29, "opacity", _p$.o = _v$1);
4771
+ _v$10 !== _p$.i && setStyleProperty(_el$30, "display", _p$.i = _v$10);
4682
4772
  return _p$;
4683
4773
  }, {
4684
4774
  e: void 0,
@@ -4687,14 +4777,14 @@ var SelectionLabel = (props) => {
4687
4777
  o: void 0,
4688
4778
  i: void 0
4689
4779
  });
4690
- return _el$20;
4780
+ return _el$29;
4691
4781
  }
4692
4782
  });
4693
4783
  };
4694
4784
  delegateEvents(["click", "pointerdown", "mousedown", "pointerup", "input", "keydown"]);
4695
4785
 
4696
4786
  // src/components/selection-cursor.tsx
4697
- var _tmpl$24 = /* @__PURE__ */ template(`<div class="fixed z-2147483647"><button data-react-grab-selection-cursor>`);
4787
+ var _tmpl$26 = /* @__PURE__ */ template(`<div class="fixed z-2147483647"><button data-react-grab-selection-cursor>`);
4698
4788
  var SelectionCursor = (props) => {
4699
4789
  const [isHovered, setIsHovered] = createSignal(false);
4700
4790
  const [debouncedVisible, setDebouncedVisible] = createSignal(false);
@@ -4731,7 +4821,7 @@ var SelectionCursor = (props) => {
4731
4821
  });
4732
4822
  }
4733
4823
  }), (() => {
4734
- var _el$ = _tmpl$24(), _el$2 = _el$.firstChild;
4824
+ var _el$ = _tmpl$26(), _el$2 = _el$.firstChild;
4735
4825
  _el$.addEventListener("mouseleave", () => setIsHovered(false));
4736
4826
  _el$.addEventListener("mouseenter", () => setIsHovered(true));
4737
4827
  _el$2.$$click = handleClick;
@@ -4883,6 +4973,12 @@ var ReactGrabRenderer = (props) => {
4883
4973
  get inputValue() {
4884
4974
  return session().context.prompt;
4885
4975
  },
4976
+ get supportsUndo() {
4977
+ return props.supportsUndo;
4978
+ },
4979
+ get supportsFollowUp() {
4980
+ return props.supportsFollowUp;
4981
+ },
4886
4982
  onAbort: () => props.onAbortSession?.(session().id),
4887
4983
  get onDismiss() {
4888
4984
  return session().isStreaming ? void 0 : () => props.onDismissSession?.(session().id);
@@ -4890,10 +4986,14 @@ var ReactGrabRenderer = (props) => {
4890
4986
  get onUndo() {
4891
4987
  return session().isStreaming ? void 0 : () => props.onUndoSession?.(session().id);
4892
4988
  },
4989
+ get onReply() {
4990
+ return session().isStreaming ? void 0 : () => props.onReplySession?.(session().id);
4991
+ },
4893
4992
  get error() {
4894
4993
  return session().error;
4895
4994
  },
4896
- onAcknowledgeError: () => props.onAcknowledgeSessionError?.(session().id)
4995
+ onAcknowledgeError: () => props.onAcknowledgeSessionError?.(session().id),
4996
+ onRetry: () => props.onRetrySession?.(session().id)
4897
4997
  })]
4898
4998
  }), createComponent(Show, {
4899
4999
  get when() {
@@ -4922,6 +5022,9 @@ var ReactGrabRenderer = (props) => {
4922
5022
  get inputValue() {
4923
5023
  return props.inputValue;
4924
5024
  },
5025
+ get replyToPrompt() {
5026
+ return props.replyToPrompt;
5027
+ },
4925
5028
  get hasAgent() {
4926
5029
  return props.hasAgent;
4927
5030
  },
@@ -6326,7 +6429,10 @@ var isTargetKeyCombination = (event, options) => {
6326
6429
  const modifiersMatch = hasModifier ? (metaKey ? event.metaKey : true) && (ctrlKey ? event.ctrlKey : true) && (shiftKey ? event.shiftKey : true) && (altKey ? event.altKey : true) : event.metaKey || event.ctrlKey;
6327
6430
  return keyMatches && modifiersMatch;
6328
6431
  }
6329
- return (event.metaKey || event.ctrlKey) && isCLikeKey(event.key, event.code);
6432
+ const hasOnlyMetaOrCtrl = (event.metaKey || event.ctrlKey) && !event.shiftKey && !event.altKey;
6433
+ return Boolean(
6434
+ event.key && hasOnlyMetaOrCtrl && isCLikeKey(event.key, event.code)
6435
+ );
6330
6436
  };
6331
6437
 
6332
6438
  // src/utils/is-event-from-overlay.ts
@@ -6385,17 +6491,21 @@ var deepMergeTheme = mergeThemeWithBase;
6385
6491
  // src/utils/agent-session.ts
6386
6492
  var STORAGE_KEY = "react-grab:agent-sessions";
6387
6493
  var generateSessionId = () => `session-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
6388
- var createSession = (context, position, selectionBounds, tagName, componentName) => ({
6389
- id: generateSessionId(),
6390
- context,
6391
- lastStatus: "",
6392
- isStreaming: true,
6393
- createdAt: Date.now(),
6394
- position,
6395
- selectionBounds,
6396
- tagName,
6397
- componentName
6398
- });
6494
+ var createSession = (context, position, selectionBounds, tagName, componentName) => {
6495
+ const now = Date.now();
6496
+ return {
6497
+ id: generateSessionId(),
6498
+ context,
6499
+ lastStatus: "",
6500
+ isStreaming: true,
6501
+ createdAt: now,
6502
+ lastUpdatedAt: now,
6503
+ position,
6504
+ selectionBounds,
6505
+ tagName,
6506
+ componentName
6507
+ };
6508
+ };
6399
6509
  var getStorage = (storage) => {
6400
6510
  if (!storage) return null;
6401
6511
  return storage;
@@ -6453,7 +6563,7 @@ var clearSessionById = (sessionId, storage) => {
6453
6563
  saveSessions(sessions, storage);
6454
6564
  };
6455
6565
  var updateSession = (session, updates, storage) => {
6456
- const updatedSession = { ...session, ...updates };
6566
+ const updatedSession = { ...session, ...updates, lastUpdatedAt: Date.now() };
6457
6567
  saveSessionById(updatedSession, storage);
6458
6568
  return updatedSession;
6459
6569
  };
@@ -6585,10 +6695,17 @@ var createAgentManager = (initialAgentOptions) => {
6585
6695
  if (existingSessions.size === 0) {
6586
6696
  return;
6587
6697
  }
6588
- const streamingSessions = Array.from(existingSessions.values()).filter(
6589
- (session) => session.isStreaming
6698
+ const now = Date.now();
6699
+ const resumableSessions = Array.from(existingSessions.values()).filter(
6700
+ (session) => {
6701
+ if (session.isStreaming) return true;
6702
+ const lastUpdatedAt = session.lastUpdatedAt ?? session.createdAt;
6703
+ const age = now - lastUpdatedAt;
6704
+ const isRecent = age < RECENT_THRESHOLD_MS;
6705
+ return isRecent && Boolean(session.error);
6706
+ }
6590
6707
  );
6591
- if (streamingSessions.length === 0) {
6708
+ if (resumableSessions.length === 0) {
6592
6709
  clearSessions(storage);
6593
6710
  return;
6594
6711
  }
@@ -6596,18 +6713,20 @@ var createAgentManager = (initialAgentOptions) => {
6596
6713
  clearSessions(storage);
6597
6714
  return;
6598
6715
  }
6599
- const streamingSessionsMap = new Map(
6600
- streamingSessions.map((session) => [session.id, session])
6716
+ const resumableSessionsMap = new Map(
6717
+ resumableSessions.map((session) => [session.id, session])
6601
6718
  );
6602
- setSessions(streamingSessionsMap);
6603
- saveSessions(streamingSessionsMap, storage);
6604
- for (const existingSession of streamingSessions) {
6719
+ setSessions(resumableSessionsMap);
6720
+ saveSessions(resumableSessionsMap, storage);
6721
+ for (const existingSession of resumableSessions) {
6605
6722
  const reacquiredElement = tryReacquireElement(existingSession);
6606
6723
  if (reacquiredElement) {
6607
6724
  sessionElements.set(existingSession.id, reacquiredElement);
6608
6725
  }
6609
6726
  const sessionWithResumeStatus = {
6610
6727
  ...existingSession,
6728
+ isStreaming: true,
6729
+ error: void 0,
6611
6730
  lastStatus: existingSession.lastStatus || "Resuming...",
6612
6731
  position: existingSession.position ?? {
6613
6732
  x: window.innerWidth / 2,
@@ -6629,36 +6748,55 @@ var createAgentManager = (initialAgentOptions) => {
6629
6748
  }
6630
6749
  };
6631
6750
  const startSession = async (params) => {
6632
- const { element, prompt, position, selectionBounds } = params;
6751
+ const { element, prompt, position, selectionBounds, sessionId } = params;
6633
6752
  const storage = agentOptions?.storage;
6634
6753
  if (!agentOptions?.provider) {
6635
6754
  return;
6636
6755
  }
6637
- const elements = [element];
6638
- const content = await generateSnippet(elements, { maxLines: Infinity });
6756
+ const existingSession = sessionId ? sessions().get(sessionId) : void 0;
6757
+ const isFollowUp = Boolean(sessionId);
6758
+ const content = existingSession ? existingSession.context.content : await generateSnippet([element], { maxLines: Infinity });
6639
6759
  const context = {
6640
6760
  content,
6641
6761
  prompt,
6642
- options: agentOptions?.getOptions?.()
6762
+ options: agentOptions?.getOptions?.(),
6763
+ sessionId: isFollowUp ? sessionId : void 0
6643
6764
  };
6644
- const tagName = (element.tagName || "").toLowerCase() || void 0;
6645
- const componentName = await getNearestComponentName(element) || void 0;
6646
- const session = createSession(
6647
- context,
6648
- position,
6649
- selectionBounds,
6650
- tagName,
6651
- componentName
6652
- );
6653
- session.lastStatus = "Thinking\u2026";
6654
- sessionElements.set(session.id, element);
6765
+ let session;
6766
+ if (existingSession) {
6767
+ session = updateSession(
6768
+ existingSession,
6769
+ {
6770
+ context,
6771
+ isStreaming: true,
6772
+ lastStatus: "Thinking\u2026"
6773
+ },
6774
+ storage
6775
+ );
6776
+ } else {
6777
+ const tagName = (element.tagName || "").toLowerCase() || void 0;
6778
+ const componentName = await getNearestComponentName(element) || void 0;
6779
+ session = createSession(
6780
+ context,
6781
+ position,
6782
+ selectionBounds,
6783
+ tagName,
6784
+ componentName
6785
+ );
6786
+ session.lastStatus = "Thinking\u2026";
6787
+ sessionElements.set(session.id, element);
6788
+ }
6655
6789
  setSessions((prev) => new Map(prev).set(session.id, session));
6656
6790
  saveSessionById(session, storage);
6657
6791
  agentOptions.onStart?.(session, element);
6658
6792
  const abortController = new AbortController();
6659
6793
  abortControllers.set(session.id, abortController);
6794
+ const contextWithSessionId = {
6795
+ ...context,
6796
+ sessionId: sessionId ?? session.id
6797
+ };
6660
6798
  const streamIterator = agentOptions.provider.send(
6661
- context,
6799
+ contextWithSessionId,
6662
6800
  abortController.signal
6663
6801
  );
6664
6802
  void executeSessionStream(session, streamIterator);
@@ -6702,6 +6840,38 @@ var createAgentManager = (initialAgentOptions) => {
6702
6840
  dismissSession(sessionId);
6703
6841
  return prompt;
6704
6842
  };
6843
+ const retrySession = (sessionId) => {
6844
+ const currentSessions = sessions();
6845
+ const session = currentSessions.get(sessionId);
6846
+ if (!session || !agentOptions?.provider) return;
6847
+ const storage = agentOptions.storage;
6848
+ const element = sessionElements.get(sessionId);
6849
+ const retriedSession = updateSession(
6850
+ session,
6851
+ {
6852
+ error: void 0,
6853
+ isStreaming: true,
6854
+ lastStatus: "Retrying\u2026"
6855
+ },
6856
+ storage
6857
+ );
6858
+ setSessions((prev) => new Map(prev).set(sessionId, retriedSession));
6859
+ saveSessionById(retriedSession, storage);
6860
+ if (element) {
6861
+ agentOptions.onStart?.(retriedSession, element);
6862
+ }
6863
+ const abortController = new AbortController();
6864
+ abortControllers.set(sessionId, abortController);
6865
+ const contextWithSessionId = {
6866
+ ...retriedSession.context,
6867
+ sessionId
6868
+ };
6869
+ const streamIterator = agentOptions.provider.send(
6870
+ contextWithSessionId,
6871
+ abortController.signal
6872
+ );
6873
+ void executeSessionStream(retriedSession, streamIterator);
6874
+ };
6705
6875
  const updateSessionBoundsOnViewportChange = () => {
6706
6876
  const currentSessions = sessions();
6707
6877
  if (currentSessions.size === 0) return;
@@ -6746,6 +6916,7 @@ var createAgentManager = (initialAgentOptions) => {
6746
6916
  dismissSession,
6747
6917
  undoSession,
6748
6918
  acknowledgeSessionError,
6919
+ retrySession,
6749
6920
  updateSessionBoundsOnViewportChange,
6750
6921
  getSessionElement,
6751
6922
  setOptions,
@@ -6754,8 +6925,8 @@ var createAgentManager = (initialAgentOptions) => {
6754
6925
  };
6755
6926
 
6756
6927
  // src/core.tsx
6757
- var _tmpl$25 = /* @__PURE__ */ template(`<span class="tabular-nums align-middle">`);
6758
- var _tmpl$26 = /* @__PURE__ */ template(`<span class="font-mono tabular-nums align-middle">&lt;<!>>`);
6928
+ var _tmpl$27 = /* @__PURE__ */ template(`<span class="tabular-nums align-middle">`);
6929
+ var _tmpl$28 = /* @__PURE__ */ template(`<span class="font-mono tabular-nums align-middle">&lt;<!>>`);
6759
6930
  var _tmpl$33 = /* @__PURE__ */ template(`<span class="tabular-nums ml-1 align-middle"> in `);
6760
6931
  var onIdle = (callback) => {
6761
6932
  if ("scheduler" in globalThis) {
@@ -6852,7 +7023,7 @@ var init = (rawOptions) => {
6852
7023
  hasInited = true;
6853
7024
  const logIntro = () => {
6854
7025
  try {
6855
- const version = "0.0.77";
7026
+ const version = "0.0.80";
6856
7027
  const logoDataUri = `data:image/svg+xml;base64,${btoa(LOGO_SVG)}`;
6857
7028
  console.log(`%cReact Grab${version ? ` v${version}` : ""}%c
6858
7029
  https://react-grab.com`, `background: #330039; color: #ffffff; border: 1px solid #d75fcb; padding: 4px 4px 4px 24px; border-radius: 4px; background-image: url("${logoDataUri}"); background-size: 16px 16px; background-repeat: no-repeat; background-position: 4px center; display: inline-block; margin-bottom: 4px;`, "");
@@ -6907,6 +7078,10 @@ https://react-grab.com`, `background: #330039; color: #ffffff; border: 1px solid
6907
7078
  const [frozenElement, setFrozenElement] = createSignal(null);
6908
7079
  const [hasAgentProvider, setHasAgentProvider] = createSignal(Boolean(options.agent?.provider));
6909
7080
  const [isAgentConnected, setIsAgentConnected] = createSignal(false);
7081
+ const [supportsUndo, setSupportsUndo] = createSignal(Boolean(options.agent?.provider?.undo));
7082
+ const [supportsFollowUp, setSupportsFollowUp] = createSignal(Boolean(options.agent?.provider?.supportsFollowUp));
7083
+ const [replySessionId, setReplySessionId] = createSignal(null);
7084
+ const [replyToPrompt, setReplyToPrompt] = createSignal(null);
6910
7085
  const [isPendingDismiss, setIsPendingDismiss] = createSignal(false);
6911
7086
  const elementInputCache = /* @__PURE__ */ new WeakMap();
6912
7087
  const [nativeSelectionCursorX, setNativeSelectionCursorX] = createSignal(OFFSCREEN_POSITION);
@@ -7233,7 +7408,7 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7233
7408
  const copying = isCopying();
7234
7409
  if (!element) {
7235
7410
  return (() => {
7236
- var _el$ = _tmpl$25();
7411
+ var _el$ = _tmpl$27();
7237
7412
  insert(_el$, copying ? "Processing\u2026" : "1 element");
7238
7413
  return _el$;
7239
7414
  })();
@@ -7242,7 +7417,7 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7242
7417
  const componentName = labelComponentName();
7243
7418
  if (tagName && componentName) {
7244
7419
  return [(() => {
7245
- var _el$2 = _tmpl$26(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling; _el$5.nextSibling;
7420
+ var _el$2 = _tmpl$28(), _el$3 = _el$2.firstChild, _el$5 = _el$3.nextSibling; _el$5.nextSibling;
7246
7421
  insert(_el$2, tagName, _el$5);
7247
7422
  return _el$2;
7248
7423
  })(), (() => {
@@ -7253,13 +7428,13 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7253
7428
  }
7254
7429
  if (tagName) {
7255
7430
  return (() => {
7256
- var _el$8 = _tmpl$26(), _el$9 = _el$8.firstChild, _el$1 = _el$9.nextSibling; _el$1.nextSibling;
7431
+ var _el$8 = _tmpl$28(), _el$9 = _el$8.firstChild, _el$1 = _el$9.nextSibling; _el$1.nextSibling;
7257
7432
  insert(_el$8, tagName, _el$1);
7258
7433
  return _el$8;
7259
7434
  })();
7260
7435
  }
7261
7436
  return (() => {
7262
- var _el$10 = _tmpl$25();
7437
+ var _el$10 = _tmpl$27();
7263
7438
  insert(_el$10, copying ? "Processing\u2026" : "1 element");
7264
7439
  return _el$10;
7265
7440
  })();
@@ -7465,7 +7640,16 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7465
7640
  if (pendingClickTimeoutId) {
7466
7641
  window.clearTimeout(pendingClickTimeoutId);
7467
7642
  pendingClickTimeoutId = null;
7643
+ const clickData = pendingClickData;
7468
7644
  pendingClickData = null;
7645
+ if (clickData) {
7646
+ setLastGrabbedElement(clickData.element);
7647
+ const bounds = createElementBounds(clickData.element);
7648
+ const tagName = extractElementTagName(clickData.element);
7649
+ void getNearestComponentName(clickData.element).then((componentName) => {
7650
+ void executeCopyOperation(clickData.clientX, clickData.clientY, () => copySingleElementToClipboard(clickData.element), bounds, tagName, componentName ?? void 0, clickData.element);
7651
+ });
7652
+ }
7469
7653
  }
7470
7654
  stopAutoScroll();
7471
7655
  stopProgressAnimation();
@@ -7520,11 +7704,12 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7520
7704
  const labelPositionX = mouseX();
7521
7705
  const currentX = bounds.x + bounds.width / 2;
7522
7706
  const currentY = bounds.y + bounds.height / 2;
7523
- setMouseX(currentX);
7524
- setMouseY(currentY);
7525
7707
  if (hasAgentProvider() && prompt) {
7526
7708
  elementInputCache.delete(element);
7527
7709
  deactivateRenderer();
7710
+ const currentReplySessionId = replySessionId();
7711
+ setReplySessionId(null);
7712
+ setReplyToPrompt(null);
7528
7713
  void agentManager.startSession({
7529
7714
  element,
7530
7715
  prompt,
@@ -7532,10 +7717,13 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7532
7717
  x: labelPositionX,
7533
7718
  y: currentY
7534
7719
  },
7535
- selectionBounds: bounds
7720
+ selectionBounds: bounds,
7721
+ sessionId: currentReplySessionId ?? void 0
7536
7722
  });
7537
7723
  return;
7538
7724
  }
7725
+ setMouseX(currentX);
7726
+ setMouseY(currentY);
7539
7727
  setIsInputMode(false);
7540
7728
  setInputText("");
7541
7729
  if (prompt) {
@@ -7563,10 +7751,12 @@ ${plainTextContentOnly}` : plainTextContentOnly;
7563
7751
  elementInputCache.set(element, currentInput);
7564
7752
  }
7565
7753
  setIsPendingDismiss(false);
7754
+ setReplySessionId(null);
7566
7755
  deactivateRenderer();
7567
7756
  };
7568
7757
  const handleConfirmDismiss = () => {
7569
7758
  setIsPendingDismiss(false);
7759
+ setReplySessionId(null);
7570
7760
  deactivateRenderer();
7571
7761
  };
7572
7762
  const handleCancelDismiss = () => {
@@ -8328,6 +8518,9 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8328
8518
  get isInputExpanded() {
8329
8519
  return isInputExpanded();
8330
8520
  },
8521
+ get replyToPrompt() {
8522
+ return replyToPrompt() ?? void 0;
8523
+ },
8331
8524
  get hasAgent() {
8332
8525
  return hasAgentProvider();
8333
8526
  },
@@ -8337,15 +8530,48 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8337
8530
  get agentSessions() {
8338
8531
  return agentManager.sessions();
8339
8532
  },
8533
+ get supportsUndo() {
8534
+ return supportsUndo();
8535
+ },
8536
+ get supportsFollowUp() {
8537
+ return supportsFollowUp();
8538
+ },
8340
8539
  onAbortSession: (sessionId) => agentManager.abortSession(sessionId),
8341
8540
  onDismissSession: (sessionId) => agentManager.dismissSession(sessionId),
8342
8541
  onUndoSession: (sessionId) => agentManager.undoSession(sessionId),
8542
+ onReplySession: (sessionId) => {
8543
+ const session = agentManager.sessions().get(sessionId);
8544
+ const element = agentManager.getSessionElement(sessionId);
8545
+ if (session && element) {
8546
+ const positionX = session.position.x;
8547
+ const rect = element.getBoundingClientRect();
8548
+ const centerY = rect.top + rect.height / 2;
8549
+ const previousPrompt = session.context.prompt;
8550
+ agentManager.dismissSession(sessionId);
8551
+ setMouseX(positionX);
8552
+ setMouseY(centerY);
8553
+ setFrozenElement(element);
8554
+ setInputText("");
8555
+ setIsInputExpanded(true);
8556
+ setIsInputMode(true);
8557
+ setIsToggleMode(true);
8558
+ setIsToggleFrozen(true);
8559
+ setReplySessionId(session.context.sessionId ?? sessionId);
8560
+ setReplyToPrompt(previousPrompt);
8561
+ if (!isActivated()) {
8562
+ activateRenderer();
8563
+ }
8564
+ }
8565
+ },
8343
8566
  onAcknowledgeSessionError: (sessionId) => {
8344
8567
  const prompt = agentManager.acknowledgeSessionError(sessionId);
8345
8568
  if (prompt) {
8346
8569
  setInputText(prompt);
8347
8570
  }
8348
8571
  },
8572
+ onRetrySession: (sessionId) => {
8573
+ agentManager.retrySession(sessionId);
8574
+ },
8349
8575
  onInputChange: handleInputChange,
8350
8576
  onInputSubmit: () => void handleInputSubmit(),
8351
8577
  onInputCancel: handleInputCancel,
@@ -8454,6 +8680,8 @@ ${plainTextContentOnly}` : plainTextContentOnly;
8454
8680
  };
8455
8681
  agentManager.setOptions(mergedOptions);
8456
8682
  setHasAgentProvider(Boolean(mergedOptions.provider));
8683
+ setSupportsUndo(Boolean(mergedOptions.provider?.undo));
8684
+ setSupportsFollowUp(Boolean(mergedOptions.provider?.supportsFollowUp));
8457
8685
  if (mergedOptions.provider?.checkConnection) {
8458
8686
  void mergedOptions.provider.checkConnection().then((connected) => {
8459
8687
  setIsAgentConnected(connected);