react-grab 0.1.17 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.js CHANGED
@@ -1884,7 +1884,7 @@ var init_web = __esm({
1884
1884
  var styles_default;
1885
1885
  var init_styles = __esm({
1886
1886
  "dist/styles.css"() {
1887
- 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-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--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;--tw-content:""}}}@layer theme{:root,:host{--font-sans:"Geist",ui-sans-serif,system-ui,sans-serif;--font-mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;--color-yellow-500:oklch(79.5% .184 86.047);--color-black:#000;--color-white:#fff;--spacing:4px;--text-sm:14px;--text-sm--line-height:calc(1.25/.875);--font-weight-medium:500;--radius-sm:4px;--ease-out:cubic-bezier(0,0,.2,1);--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--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);--transition-fast:.1s;--transition-normal:.15s;--transition-slow:.2s}}@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}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.touch-hitbox{position:relative}.touch-hitbox:before{content:"";width:100%;min-width:44px;height:100%;min-height:44px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.-top-0\\.5{top:calc(var(--spacing)*-.5)}.top-0{top:calc(var(--spacing)*0)}.top-0\\.5{top:calc(var(--spacing)*.5)}.top-1\\/2{top:50%}.top-full{top:100%}.-right-0\\.5{right:calc(var(--spacing)*-.5)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-0\\.5{left:calc(var(--spacing)*.5)}.left-1\\.5{left:calc(var(--spacing)*1.5)}.left-1\\/2{left:50%}.left-2\\.5{left:calc(var(--spacing)*2.5)}.left-full{left:100%}.z-10{z-index:10}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.m-0{margin:calc(var(--spacing)*0)}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.mx-0\\.5{margin-inline:calc(var(--spacing)*.5)}.-my-1\\.5{margin-block:calc(var(--spacing)*-1.5)}.my-0\\.5{margin-block:calc(var(--spacing)*.5)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-2\\.5{margin-top:calc(var(--spacing)*2.5)}.mr-0\\.5{margin-right:calc(var(--spacing)*.5)}.mr-1\\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2\\.5{margin-right:calc(var(--spacing)*2.5)}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2\\.5{margin-bottom:calc(var(--spacing)*2.5)}.-ml-\\[2px\\]{margin-left:-2px}.ml-0\\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2\\.5{margin-left:calc(var(--spacing)*2.5)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-5{-webkit-line-clamp:5;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.size-1\\.5{width:calc(var(--spacing)*1.5);height:calc(var(--spacing)*1.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-\\[18px\\]{width:18px;height:18px}.h-0{height:calc(var(--spacing)*0)}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-\\[17px\\]{height:17px}.h-fit{height:fit-content}.max-h-\\[240px\\]{max-height:240px}.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-1\\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-\\[calc\\(100\\%\\+16px\\)\\]{width:calc(100% + 16px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\\[280px\\]{max-width:280px}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[150px\\]{min-width:150px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-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)}.-rotate-90{rotate:-90deg}.rotate-0{rotate:none}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.interactive-scale{transition-property:transform;transition-duration:var(--transition-normal);transition-timing-function:cubic-bezier(.34,1.56,.64,1)}@media (hover:hover) and (pointer:fine){.interactive-scale:hover{transform:scale(1.05)}}.interactive-scale:active{transform:scale(.97)}.press-scale{transition-property:transform;transition-duration:var(--transition-fast);transition-timing-function:ease-out}.press-scale:active{transform:scale(.97)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.grid-cols-\\[0fr\\]{grid-template-columns:0fr}.grid-cols-\\[1fr\\]{grid-template-columns:1fr}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.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-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-\\[5px\\]{gap:5px}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.rounded-\\[1px\\]{border-radius:1px}.rounded-\\[10px\\]{border-radius:10px}.rounded-full{border-radius:3.40282e38px}.rounded-sm{border-radius:var(--radius-sm)}.rounded-t-\\[10px\\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-l-\\[10px\\]{border-top-left-radius:10px;border-bottom-left-radius:10px}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-\\[10px\\]{border-top-right-radius:10px;border-bottom-right-radius:10px}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-\\[6px\\]{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.rounded-b-\\[10px\\]{border-bottom-right-radius:10px;border-bottom-left-radius:10px}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.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-\\[\\#B3B3B3\\]{border-color:#b3b3b3}.border-t-\\[\\#D9D9D9\\]{border-top-color:#d9d9d9}.bg-\\[\\#404040\\]{background-color:#404040}.bg-\\[\\#FEF2F2\\]{background-color:#fef2f2}.bg-black{background-color:var(--color-black)}.bg-black\\/5{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.bg-black\\/5{background-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.bg-black\\/25{background-color:#00000040}@supports (color:color-mix(in lab, red, red)){.bg-black\\/25{background-color:color-mix(in oklab,var(--color-black)25%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-500{background-color:var(--color-yellow-500)}.p-0{padding:calc(var(--spacing)*0)}.px-0\\.25{padding-inline:calc(var(--spacing)*.25)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-\\[3px\\]{padding-inline:3px}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-0\\.25{padding-block:calc(var(--spacing)*.25)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-px{padding-block:1px}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.text-left{text-align:left}.font-sans{font-family:var(--font-sans)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.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}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-\\[\\#71717a\\]{color:#71717a}.text-\\[\\#B3B3B3\\]{color:#b3b3b3}.text-\\[\\#B91C1C\\]{color:#b91c1c}.text-\\[\\#B91C1C\\]\\/50{color:oklab(50.542% .168942 .0880134/.5)}.text-black{color:var(--color-black)}.text-black\\/25{color:#00000040}@supports (color:color-mix(in lab, red, red)){.text-black\\/25{color:color-mix(in oklab,var(--color-black)25%,transparent)}}.text-black\\/30{color:#0000004d}@supports (color:color-mix(in lab, red, red)){.text-black\\/30{color:color-mix(in oklab,var(--color-black)30%,transparent)}}.text-black\\/40{color:#0006}@supports (color:color-mix(in lab, red, red)){.text-black\\/40{color:color-mix(in oklab,var(--color-black)40%,transparent)}}.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-black\\/60{color:#0009}@supports (color:color-mix(in lab, red, red)){.text-black\\/60{color:color-mix(in oklab,var(--color-black)60%,transparent)}}.text-black\\/70{color:#000000b3}@supports (color:color-mix(in lab, red, red)){.text-black\\/70{color:color-mix(in oklab,var(--color-black)70%,transparent)}}.text-black\\/80{color:#000c}@supports (color:color-mix(in lab, red, red)){.text-black\\/80{color:color-mix(in oklab,var(--color-black)80%,transparent)}}.text-black\\/85{color:#000000d9}@supports (color:color-mix(in lab, red, red)){.text-black\\/85{color:color-mix(in oklab,var(--color-black)85%,transparent)}}.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-35{opacity:.35}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);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_1px_2px_\\#51515140\\)\\]{filter:drop-shadow(0 1px 2px #51515140)}.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-columns\\,opacity\\]{transition-property:grid-template-columns,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\,opacity\\]{transition-property:grid-template-rows,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,opacity\\]{transition-property:transform,opacity;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-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.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-\\[opacity\\,transform\\]{will-change:opacity,transform}.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}.\\[corner-shape\\:superellipse\\(1\\.25\\)\\]{corner-shape:superellipse(1.25)}.\\[font-synthesis\\:none\\]{font-synthesis:none}.\\[grid-area\\:1\\/1\\]{grid-area:1/1}.group-focus-within\\:invisible:is(:where(.group):focus-within *){visibility:hidden}.group-focus-within\\:visible:is(:where(.group):focus-within *){visibility:visible}@media (hover:hover){.group-hover\\:invisible:is(:where(.group):hover *){visibility:hidden}.group-hover\\:visible:is(:where(.group):hover *){visibility:visible}}.before\\:\\!min-h-full:before{content:var(--tw-content);min-height:100%!important}.before\\:\\!min-w-full:before{content:var(--tw-content);min-width:100%!important}.focus-within\\:bg-black\\/5:focus-within{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.focus-within\\:bg-black\\/5:focus-within{background-color:color-mix(in oklab,var(--color-black)5%,transparent)}}@media (hover:hover){.hover\\:bg-\\[\\#F5F5F5\\]:hover{background-color:#f5f5f5}.hover\\:bg-\\[\\#FEE2E2\\]:hover{background-color:#fee2e2}.hover\\:bg-black\\/5:hover{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-black\\/5:hover{background-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.hover\\:bg-black\\/10:hover{background-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-black\\/10:hover{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.hover\\:text-\\[\\#B91C1C\\]:hover{color:#b91c1c}.hover\\:text-black:hover{color:var(--color-black)}.hover\\:text-black\\/60:hover{color:#0009}@supports (color:color-mix(in lab, red, red)){.hover\\:text-black\\/60:hover{color:color-mix(in oklab,var(--color-black)60%,transparent)}}.hover\\:opacity-100:hover{opacity:1}}.disabled\\:cursor-default:disabled{cursor:default}.disabled\\:opacity-40:disabled{opacity:.4}@media (hover:hover){.disabled\\:hover\\:bg-transparent:disabled:hover{background-color:#0000}}}:host{all:initial;direction:ltr}@keyframes shake{0%,to{transform:translate(0)}15%{transform:translate(-3px)}30%{transform:translate(3px)}45%{transform:translate(-3px)}60%{transform:translate(3px)}75%{transform:translate(-2px)}90%{transform:translate(2px)}}@keyframes pop-in{0%{opacity:0;transform:scale(.9)}70%{opacity:1;transform:scale(1.02)}to{opacity:1;transform:scale(1)}}@keyframes pop-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}@keyframes slide-in-bottom{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-in-top{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-in-left{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}@keyframes slide-in-right{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:translate(0)}}@keyframes success-pop{0%{opacity:0;transform:scale(.9)}60%{opacity:1;transform:scale(1.1)}80%{transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes tooltip-fade-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes icon-loader-spin{0%{opacity:1}50%{opacity:.5}to{opacity:.2}}.icon-loader-bar{animation:.5s linear infinite icon-loader-spin}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.shimmer-text{color:#0000;background:linear-gradient(90deg,#71717a 0%,#a1a1aa 25%,#71717a 50%,#a1a1aa 75%,#71717a 100%) 0 0/200% 100%;-webkit-background-clip:text;background-clip:text;animation:2.5s linear infinite shimmer}@keyframes clock-flash{0%{transform:scale(1)}25%{transform:scale(1.2)}50%{transform:scale(.92)}75%{transform:scale(1.05)}to{transform:scale(1)}}.animate-clock-flash{will-change:transform;animation:.4s ease-out clock-flash}.animate-shake{will-change:transform;animation:.3s ease-out shake}.animate-pop-in{animation:pop-in var(--transition-normal)ease-out;will-change:transform,opacity}.animate-pop-out{animation:pop-out var(--transition-normal)ease-out forwards;will-change:transform,opacity}.animate-slide-in-bottom{animation:slide-in-bottom var(--transition-slow)ease-out;will-change:transform,opacity}.animate-slide-in-top{animation:slide-in-top var(--transition-slow)ease-out;will-change:transform,opacity}.animate-slide-in-left{animation:slide-in-left var(--transition-slow)ease-out;will-change:transform,opacity}.animate-slide-in-right{animation:slide-in-right var(--transition-slow)ease-out;will-change:transform,opacity}.animate-success-pop{will-change:transform,opacity;animation:.25s ease-out success-pop}.animate-tooltip-fade-in{animation:tooltip-fade-in var(--transition-fast)ease-out;will-change:transform,opacity}@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-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@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}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}';
1887
+ 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-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--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-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-contain-size:initial;--tw-contain-layout:initial;--tw-contain-paint:initial;--tw-contain-style:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:"Geist",ui-sans-serif,system-ui,sans-serif;--font-mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;--color-yellow-500:oklch(79.5% .184 86.047);--color-black:#000;--color-white:#fff;--spacing:4px;--text-sm:14px;--text-sm--line-height:calc(1.25/.875);--font-weight-medium:500;--radius-sm:4px;--ease-out:cubic-bezier(0,0,.2,1);--animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--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);--transition-fast:.1s;--transition-normal:.15s;--transition-slow:.2s}}@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}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.touch-hitbox{position:relative}.touch-hitbox:before{content:"";width:100%;min-width:44px;height:100%;min-height:44px;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.-top-0\\.5{top:calc(var(--spacing)*-.5)}.top-0{top:calc(var(--spacing)*0)}.top-0\\.5{top:calc(var(--spacing)*.5)}.top-1\\/2{top:50%}.top-full{top:100%}.-right-0\\.5{right:calc(var(--spacing)*-.5)}.right-full{right:100%}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-0\\.5{left:calc(var(--spacing)*.5)}.left-1\\.5{left:calc(var(--spacing)*1.5)}.left-1\\/2{left:50%}.left-2\\.5{left:calc(var(--spacing)*2.5)}.left-full{left:100%}.z-10{z-index:10}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.m-0{margin:calc(var(--spacing)*0)}.-mx-2{margin-inline:calc(var(--spacing)*-2)}.mx-0\\.5{margin-inline:calc(var(--spacing)*.5)}.-my-1\\.5{margin-block:calc(var(--spacing)*-1.5)}.my-0\\.5{margin-block:calc(var(--spacing)*.5)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-2\\.5{margin-top:calc(var(--spacing)*2.5)}.mr-0\\.5{margin-right:calc(var(--spacing)*.5)}.mr-1\\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2\\.5{margin-right:calc(var(--spacing)*2.5)}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2\\.5{margin-bottom:calc(var(--spacing)*2.5)}.-ml-\\[2px\\]{margin-left:-2px}.ml-0\\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2\\.5{margin-left:calc(var(--spacing)*2.5)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-5{-webkit-line-clamp:5;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.size-1\\.5{width:calc(var(--spacing)*1.5);height:calc(var(--spacing)*1.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-\\[18px\\]{width:18px;height:18px}.h-0{height:calc(var(--spacing)*0)}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-\\[17px\\]{height:17px}.h-fit{height:fit-content}.max-h-\\[240px\\]{max-height:240px}.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-1\\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-\\[calc\\(100\\%\\+16px\\)\\]{width:calc(100% + 16px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\\[280px\\]{max-width:280px}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[150px\\]{min-width:150px}.flex-1{flex:1}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.-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)}.-rotate-90{rotate:-90deg}.rotate-0{rotate:none}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.interactive-scale{transition-property:transform;transition-duration:var(--transition-normal);transition-timing-function:cubic-bezier(.34,1.56,.64,1)}@media (hover:hover) and (pointer:fine){.interactive-scale:hover{transform:scale(1.05)}}.interactive-scale:active{transform:scale(.97)}.press-scale{transition-property:transform;transition-duration:var(--transition-fast);transition-timing-function:ease-out}.press-scale:active{transform:scale(.97)}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.grid-cols-\\[0fr\\]{grid-template-columns:0fr}.grid-cols-\\[1fr\\]{grid-template-columns:1fr}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.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-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-\\[5px\\]{gap:5px}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.rounded-\\[1px\\]{border-radius:1px}.rounded-\\[10px\\]{border-radius:10px}.rounded-full{border-radius:3.40282e38px}.rounded-sm{border-radius:var(--radius-sm)}.rounded-t-\\[10px\\]{border-top-left-radius:10px;border-top-right-radius:10px}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-l-\\[10px\\]{border-top-left-radius:10px;border-bottom-left-radius:10px}.rounded-l-none{border-top-left-radius:0;border-bottom-left-radius:0}.rounded-r-\\[10px\\]{border-top-right-radius:10px;border-bottom-right-radius:10px}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-b-\\[6px\\]{border-bottom-right-radius:6px;border-bottom-left-radius:6px}.rounded-b-\\[10px\\]{border-bottom-right-radius:10px;border-bottom-left-radius:10px}.rounded-b-none{border-bottom-right-radius:0;border-bottom-left-radius:0}.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-\\[\\#B3B3B3\\]{border-color:#b3b3b3}.border-t-\\[\\#D9D9D9\\]{border-top-color:#d9d9d9}.bg-\\[\\#404040\\]{background-color:#404040}.bg-\\[\\#FEF2F2\\]{background-color:#fef2f2}.bg-black{background-color:var(--color-black)}.bg-black\\/5{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.bg-black\\/5{background-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.bg-black\\/25{background-color:#00000040}@supports (color:color-mix(in lab, red, red)){.bg-black\\/25{background-color:color-mix(in oklab,var(--color-black)25%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-500{background-color:var(--color-yellow-500)}.p-0{padding:calc(var(--spacing)*0)}.px-0\\.25{padding-inline:calc(var(--spacing)*.25)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-\\[3px\\]{padding-inline:3px}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-0\\.25{padding-block:calc(var(--spacing)*.25)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-px{padding-block:1px}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.text-left{text-align:left}.font-sans{font-family:var(--font-sans)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[12px\\]{font-size:12px}.text-\\[13px\\]{font-size:13px}.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}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.text-\\[\\#71717a\\]{color:#71717a}.text-\\[\\#B3B3B3\\]{color:#b3b3b3}.text-\\[\\#B91C1C\\]{color:#b91c1c}.text-\\[\\#B91C1C\\]\\/50{color:oklab(50.542% .168942 .0880134/.5)}.text-black{color:var(--color-black)}.text-black\\/25{color:#00000040}@supports (color:color-mix(in lab, red, red)){.text-black\\/25{color:color-mix(in oklab,var(--color-black)25%,transparent)}}.text-black\\/30{color:#0000004d}@supports (color:color-mix(in lab, red, red)){.text-black\\/30{color:color-mix(in oklab,var(--color-black)30%,transparent)}}.text-black\\/40{color:#0006}@supports (color:color-mix(in lab, red, red)){.text-black\\/40{color:color-mix(in oklab,var(--color-black)40%,transparent)}}.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-black\\/60{color:#0009}@supports (color:color-mix(in lab, red, red)){.text-black\\/60{color:color-mix(in oklab,var(--color-black)60%,transparent)}}.text-black\\/70{color:#000000b3}@supports (color:color-mix(in lab, red, red)){.text-black\\/70{color:color-mix(in oklab,var(--color-black)70%,transparent)}}.text-black\\/80{color:#000c}@supports (color:color-mix(in lab, red, red)){.text-black\\/80{color:color-mix(in oklab,var(--color-black)80%,transparent)}}.text-black\\/85{color:#000000d9}@supports (color:color-mix(in lab, red, red)){.text-black\\/85{color:color-mix(in oklab,var(--color-black)85%,transparent)}}.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-35{opacity:.35}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);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_1px_2px_\\#51515140\\)\\]{filter:drop-shadow(0 1px 2px #51515140)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,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-columns\\,opacity\\]{transition-property:grid-template-columns,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\,opacity\\]{transition-property:grid-template-rows,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,transform\\]{transition-property:opacity,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,opacity\\]{transition-property:transform,opacity;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-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;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-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.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-\\[opacity\\,transform\\]{will-change:opacity,transform}.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}.\\[corner-shape\\:superellipse\\(1\\.25\\)\\]{corner-shape:superellipse(1.25)}.\\[font-synthesis\\:none\\]{font-synthesis:none}.\\[grid-area\\:1\\/1\\]{grid-area:1/1}.group-focus-within\\:invisible:is(:where(.group):focus-within *){visibility:hidden}.group-focus-within\\:visible:is(:where(.group):focus-within *){visibility:visible}@media (hover:hover){.group-hover\\:invisible:is(:where(.group):hover *){visibility:hidden}.group-hover\\:visible:is(:where(.group):hover *){visibility:visible}}.before\\:\\!min-h-full:before{content:var(--tw-content);min-height:100%!important}.before\\:\\!min-w-full:before{content:var(--tw-content);min-width:100%!important}.focus-within\\:bg-black\\/5:focus-within{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.focus-within\\:bg-black\\/5:focus-within{background-color:color-mix(in oklab,var(--color-black)5%,transparent)}}@media (hover:hover){.hover\\:bg-\\[\\#F5F5F5\\]:hover{background-color:#f5f5f5}.hover\\:bg-\\[\\#FEE2E2\\]:hover{background-color:#fee2e2}.hover\\:bg-black\\/5:hover{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-black\\/5:hover{background-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.hover\\:bg-black\\/10:hover{background-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-black\\/10:hover{background-color:color-mix(in oklab,var(--color-black)10%,transparent)}}.hover\\:text-\\[\\#B91C1C\\]:hover{color:#b91c1c}.hover\\:text-black:hover{color:var(--color-black)}.hover\\:text-black\\/60:hover{color:#0009}@supports (color:color-mix(in lab, red, red)){.hover\\:text-black\\/60:hover{color:color-mix(in oklab,var(--color-black)60%,transparent)}}.hover\\:opacity-100:hover{opacity:1}}.disabled\\:cursor-default:disabled{cursor:default}.disabled\\:opacity-40:disabled{opacity:.4}@media (hover:hover){.disabled\\:hover\\:bg-transparent:disabled:hover{background-color:#0000}}}:host{all:initial;direction:ltr}@keyframes shake{0%,to{transform:translate(0)}15%{transform:translate(-3px)}30%{transform:translate(3px)}45%{transform:translate(-3px)}60%{transform:translate(3px)}75%{transform:translate(-2px)}90%{transform:translate(2px)}}@keyframes pop-in{0%{opacity:0;transform:scale(.9)}70%{opacity:1;transform:scale(1.02)}to{opacity:1;transform:scale(1)}}@keyframes pop-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}@keyframes slide-in-bottom{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-in-top{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes slide-in-left{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}@keyframes slide-in-right{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:translate(0)}}@keyframes success-pop{0%{opacity:0;transform:scale(.9)}60%{opacity:1;transform:scale(1.1)}80%{transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes tooltip-fade-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes icon-loader-spin{0%{opacity:1}50%{opacity:.5}to{opacity:.2}}.icon-loader-bar{animation:.5s linear infinite icon-loader-spin}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.shimmer-text{color:#0000;background:linear-gradient(90deg,#71717a 0%,#a1a1aa 25%,#71717a 50%,#a1a1aa 75%,#71717a 100%) 0 0/200% 100%;-webkit-background-clip:text;background-clip:text;animation:2.5s linear infinite shimmer}@keyframes clock-flash{0%{transform:scale(1)}25%{transform:scale(1.2)}50%{transform:scale(.92)}75%{transform:scale(1.05)}to{transform:scale(1)}}.animate-clock-flash{will-change:transform;animation:.4s ease-out clock-flash}.animate-shake{will-change:transform;animation:.3s ease-out shake}.animate-pop-in{animation:pop-in var(--transition-normal)ease-out;will-change:transform,opacity}.animate-pop-out{animation:pop-out var(--transition-normal)ease-out forwards;will-change:transform,opacity}.animate-slide-in-bottom{animation:slide-in-bottom var(--transition-slow)ease-out;will-change:transform,opacity}.animate-slide-in-top{animation:slide-in-top var(--transition-slow)ease-out;will-change:transform,opacity}.animate-slide-in-left{animation:slide-in-left var(--transition-slow)ease-out;will-change:transform,opacity}.animate-slide-in-right{animation:slide-in-right var(--transition-slow)ease-out;will-change:transform,opacity}.animate-success-pop{will-change:transform,opacity;animation:.25s ease-out success-pop}.animate-tooltip-fade-in{animation:tooltip-fade-in var(--transition-fast)ease-out;will-change:transform,opacity}@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-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@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-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-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}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}';
1888
1888
  }
1889
1889
  });
1890
1890
 
@@ -2136,11 +2136,11 @@ var init_store = __esm({
2136
2136
  });
2137
2137
 
2138
2138
  // src/constants.ts
2139
- var VERSION, VIEWPORT_MARGIN_PX, OFFSCREEN_POSITION, SELECTION_LERP_FACTOR, FEEDBACK_DURATION_MS, FADE_DURATION_MS, FADE_COMPLETE_BUFFER_MS, DISMISS_ANIMATION_BUFFER_MS, KEYDOWN_SPAM_TIMEOUT_MS, BLUR_DEACTIVATION_THRESHOLD_MS, WINDOW_REFOCUS_GRACE_PERIOD_MS, INPUT_FOCUS_ACTIVATION_DELAY_MS, INPUT_TEXT_SELECTION_ACTIVATION_DELAY_MS, DEFERRED_EXECUTION_DELAY_MS, DEFAULT_KEY_HOLD_DURATION_MS, MIN_HOLD_FOR_ACTIVATION_AFTER_COPY_MS, RECENT_THRESHOLD_MS, FINDER_TIMEOUT_MS, SELECTOR_ATTR_VALUE_MAX_LENGTH_CHARS, ACTION_CYCLE_IDLE_TRIGGER_MS, DRAG_THRESHOLD_PX, ELEMENT_DETECTION_THROTTLE_MS, COMPONENT_NAME_DEBOUNCE_MS, DRAG_PREVIEW_DEBOUNCE_MS, BOUNDS_CACHE_TTL_MS, BOUNDS_RECALC_INTERVAL_MS, AUTO_SCROLL_EDGE_THRESHOLD_PX, AUTO_SCROLL_SPEED_PX, Z_INDEX_HOST, Z_INDEX_LABEL, Z_INDEX_OVERLAY_CANVAS, DRAG_LERP_FACTOR, LERP_CONVERGENCE_THRESHOLD_PX, FADE_OUT_BUFFER_MS, MIN_DEVICE_PIXEL_RATIO, GRAB_PURPLE_RGB, OVERLAY_CROSSHAIR_COLOR, OVERLAY_BORDER_COLOR_DRAG, OVERLAY_FILL_COLOR_DRAG, OVERLAY_BORDER_COLOR_DEFAULT, OVERLAY_FILL_COLOR_DEFAULT, FROZEN_GLOW_COLOR, FROZEN_GLOW_EDGE_PX, ARROW_HEIGHT_PX, ARROW_MIN_SIZE_PX, ARROW_MAX_LABEL_WIDTH_RATIO, ARROW_CENTER_PERCENT, ARROW_LABEL_MARGIN_PX, LABEL_GAP_PX, PREVIEW_TEXT_MAX_LENGTH, PREVIEW_ATTR_VALUE_MAX_LENGTH, PREVIEW_MAX_ATTRS, PREVIEW_PRIORITY_ATTRS, SCREENSHOT_CAPTURE_DELAY_MS, SYMBOLICATION_TIMEOUT_MS, VIDEO_METADATA_TIMEOUT_MS, VIDEO_READY_POLL_INTERVAL_MS, VIDEO_READY_TIMEOUT_MS, MODIFIER_KEYS, ARROW_KEYS, FROZEN_ELEMENT_ATTRIBUTE, USER_IGNORE_ATTRIBUTE, VIEWPORT_COVERAGE_THRESHOLD, OVERLAY_Z_INDEX_THRESHOLD, DEV_TOOLS_OVERLAY_Z_INDEX_THRESHOLD, TOOLTIP_DELAY_MS, TOOLTIP_GRACE_PERIOD_MS, TOOLBAR_SNAP_MARGIN_PX, TOOLBAR_FADE_IN_DELAY_MS, TOOLBAR_SNAP_ANIMATION_DURATION_MS, TOOLBAR_DRAG_THRESHOLD_PX, TOOLBAR_VELOCITY_MULTIPLIER_MS, TOOLBAR_COLLAPSED_SHORT_PX, TOOLBAR_COLLAPSED_LONG_PX, TOOLBAR_COLLAPSE_ANIMATION_DURATION_MS, TOGGLE_ANIMATION_BUFFER_MS, TOOLBAR_DEFAULT_WIDTH_PX, TOOLBAR_DEFAULT_HEIGHT_PX, TOOLBAR_SHAKE_TOOLTIP_DURATION_MS, DRAG_SELECTION_COVERAGE_THRESHOLD, DRAG_SELECTION_SAMPLE_SPACING_PX, DRAG_SELECTION_MIN_SAMPLES_PER_AXIS, DRAG_SELECTION_MAX_SAMPLES_PER_AXIS, DRAG_SELECTION_MAX_TOTAL_SAMPLE_POINTS, DRAG_SELECTION_EDGE_INSET_PX, MAX_ARROW_NAVIGATION_HISTORY, MAX_MEMORY_SESSIONS, MAX_TRANSFORM_ANCESTOR_DEPTH, TRANSFORM_EARLY_BAIL_DEPTH, ELEMENT_POSITION_CACHE_DISTANCE_THRESHOLD_PX, ELEMENT_POSITION_THROTTLE_MS, VISIBILITY_CACHE_TTL_MS, ZOOM_DETECTION_THRESHOLD, MOUNT_ROOT_RECHECK_DELAY_MS, MAX_HISTORY_ITEMS, MAX_SESSION_STORAGE_SIZE_BYTES, DROPDOWN_ANIMATION_DURATION_MS, DROPDOWN_HOVER_OPEN_DELAY_MS, DROPDOWN_VIEWPORT_PADDING_PX, DROPDOWN_ANCHOR_GAP_PX, SAFE_POLYGON_BUFFER_PX, DROPDOWN_ICON_SIZE_PX, DROPDOWN_MIN_WIDTH_PX, DROPDOWN_MAX_WIDTH_PX, TOOLBAR_MENU_MIN_WIDTH_PX, PANEL_STYLES, DROPDOWN_OFFSCREEN_POSITION, DROPDOWN_EDGE_TRANSFORM_ORIGIN, LOGO_SVG, NEXTJS_REVALIDATION_DELAY_MS, IME_COMPOSING_KEY_CODE, SELECTION_LABEL_OFFSCREEN_PX;
2139
+ var VERSION, VIEWPORT_MARGIN_PX, OFFSCREEN_POSITION, SELECTION_LERP_FACTOR, FEEDBACK_DURATION_MS, FADE_DURATION_MS, FADE_COMPLETE_BUFFER_MS, DISMISS_ANIMATION_BUFFER_MS, KEYDOWN_SPAM_TIMEOUT_MS, BLUR_DEACTIVATION_THRESHOLD_MS, WINDOW_REFOCUS_GRACE_PERIOD_MS, INPUT_FOCUS_ACTIVATION_DELAY_MS, INPUT_TEXT_SELECTION_ACTIVATION_DELAY_MS, DEFERRED_EXECUTION_DELAY_MS, DEFAULT_KEY_HOLD_DURATION_MS, MIN_HOLD_FOR_ACTIVATION_AFTER_COPY_MS, RECENT_THRESHOLD_MS, FINDER_TIMEOUT_MS, SELECTOR_ATTR_VALUE_MAX_LENGTH_CHARS, ACTION_CYCLE_IDLE_TRIGGER_MS, DRAG_THRESHOLD_PX, ELEMENT_DETECTION_THROTTLE_MS, COMPONENT_NAME_DEBOUNCE_MS, DRAG_PREVIEW_DEBOUNCE_MS, BOUNDS_CACHE_TTL_MS, BOUNDS_RECALC_INTERVAL_MS, AUTO_SCROLL_EDGE_THRESHOLD_PX, AUTO_SCROLL_SPEED_PX, Z_INDEX_HOST, Z_INDEX_LABEL, Z_INDEX_OVERLAY_CANVAS, DRAG_LERP_FACTOR, LERP_CONVERGENCE_THRESHOLD_PX, FADE_OUT_BUFFER_MS, MIN_DEVICE_PIXEL_RATIO, GRAB_PURPLE_RGB, OVERLAY_CROSSHAIR_COLOR, OVERLAY_BORDER_COLOR_DRAG, OVERLAY_FILL_COLOR_DRAG, OVERLAY_BORDER_COLOR_DEFAULT, OVERLAY_FILL_COLOR_DEFAULT, FROZEN_GLOW_COLOR, FROZEN_GLOW_EDGE_PX, ARROW_HEIGHT_PX, ARROW_MIN_SIZE_PX, ARROW_MAX_LABEL_WIDTH_RATIO, ARROW_CENTER_PERCENT, ARROW_LABEL_MARGIN_PX, LABEL_GAP_PX, PREVIEW_TEXT_MAX_LENGTH, PREVIEW_ATTR_VALUE_MAX_LENGTH, PREVIEW_MAX_ATTRS, PREVIEW_PRIORITY_ATTRS, SYMBOLICATION_TIMEOUT_MS, MODIFIER_KEYS, ARROW_KEYS, FROZEN_ELEMENT_ATTRIBUTE, USER_IGNORE_ATTRIBUTE, VIEWPORT_COVERAGE_THRESHOLD, OVERLAY_Z_INDEX_THRESHOLD, DEV_TOOLS_OVERLAY_Z_INDEX_THRESHOLD, TOOLTIP_DELAY_MS, TOOLTIP_GRACE_PERIOD_MS, TOOLBAR_SNAP_MARGIN_PX, TOOLBAR_FADE_IN_DELAY_MS, TOOLBAR_SNAP_ANIMATION_DURATION_MS, TOOLBAR_DRAG_THRESHOLD_PX, TOOLBAR_VELOCITY_MULTIPLIER_MS, TOOLBAR_COLLAPSED_SHORT_PX, TOOLBAR_COLLAPSED_LONG_PX, TOOLBAR_COLLAPSE_ANIMATION_DURATION_MS, TOGGLE_ANIMATION_BUFFER_MS, TOOLBAR_DEFAULT_WIDTH_PX, TOOLBAR_DEFAULT_HEIGHT_PX, TOOLBAR_SHAKE_TOOLTIP_DURATION_MS, DRAG_SELECTION_COVERAGE_THRESHOLD, DRAG_SELECTION_SAMPLE_SPACING_PX, DRAG_SELECTION_MIN_SAMPLES_PER_AXIS, DRAG_SELECTION_MAX_SAMPLES_PER_AXIS, DRAG_SELECTION_MAX_TOTAL_SAMPLE_POINTS, DRAG_SELECTION_EDGE_INSET_PX, MAX_ARROW_NAVIGATION_HISTORY, MAX_MEMORY_SESSIONS, MAX_TRANSFORM_ANCESTOR_DEPTH, TRANSFORM_EARLY_BAIL_DEPTH, ELEMENT_POSITION_CACHE_DISTANCE_THRESHOLD_PX, ELEMENT_POSITION_THROTTLE_MS, VISIBILITY_CACHE_TTL_MS, ZOOM_DETECTION_THRESHOLD, MOUNT_ROOT_RECHECK_DELAY_MS, MAX_HISTORY_ITEMS, MAX_SESSION_STORAGE_SIZE_BYTES, DROPDOWN_ANIMATION_DURATION_MS, DROPDOWN_HOVER_OPEN_DELAY_MS, DROPDOWN_VIEWPORT_PADDING_PX, DROPDOWN_ANCHOR_GAP_PX, SAFE_POLYGON_BUFFER_PX, DROPDOWN_ICON_SIZE_PX, DROPDOWN_MIN_WIDTH_PX, DROPDOWN_MAX_WIDTH_PX, TOOLBAR_MENU_MIN_WIDTH_PX, PANEL_STYLES, DROPDOWN_OFFSCREEN_POSITION, DROPDOWN_EDGE_TRANSFORM_ORIGIN, LOGO_SVG, NEXTJS_REVALIDATION_DELAY_MS, IME_COMPOSING_KEY_CODE, SELECTION_LABEL_OFFSCREEN_PX, RELEVANT_CSS_PROPERTIES;
2140
2140
  var init_constants = __esm({
2141
2141
  "src/constants.ts"() {
2142
2142
  "use strict";
2143
- VERSION = "0.1.17";
2143
+ VERSION = "0.1.19";
2144
2144
  VIEWPORT_MARGIN_PX = 8;
2145
2145
  OFFSCREEN_POSITION = -1e3;
2146
2146
  SELECTION_LERP_FACTOR = 0.95;
@@ -2201,11 +2201,7 @@ var init_constants = __esm({
2201
2201
  "name",
2202
2202
  "title"
2203
2203
  ];
2204
- SCREENSHOT_CAPTURE_DELAY_MS = 50;
2205
2204
  SYMBOLICATION_TIMEOUT_MS = 5e3;
2206
- VIDEO_METADATA_TIMEOUT_MS = 5e3;
2207
- VIDEO_READY_POLL_INTERVAL_MS = 10;
2208
- VIDEO_READY_TIMEOUT_MS = 2e3;
2209
2205
  MODIFIER_KEYS = [
2210
2206
  "Meta",
2211
2207
  "Control",
@@ -2275,6 +2271,93 @@ var init_constants = __esm({
2275
2271
  NEXTJS_REVALIDATION_DELAY_MS = 1e3;
2276
2272
  IME_COMPOSING_KEY_CODE = 229;
2277
2273
  SELECTION_LABEL_OFFSCREEN_PX = -9999;
2274
+ RELEVANT_CSS_PROPERTIES = /* @__PURE__ */ new Set([
2275
+ "display",
2276
+ "position",
2277
+ "top",
2278
+ "right",
2279
+ "bottom",
2280
+ "left",
2281
+ "z-index",
2282
+ "overflow",
2283
+ "overflow-x",
2284
+ "overflow-y",
2285
+ "width",
2286
+ "height",
2287
+ "min-width",
2288
+ "min-height",
2289
+ "max-width",
2290
+ "max-height",
2291
+ "margin-top",
2292
+ "margin-right",
2293
+ "margin-bottom",
2294
+ "margin-left",
2295
+ "padding-top",
2296
+ "padding-right",
2297
+ "padding-bottom",
2298
+ "padding-left",
2299
+ "flex-direction",
2300
+ "flex-wrap",
2301
+ "justify-content",
2302
+ "align-items",
2303
+ "align-self",
2304
+ "align-content",
2305
+ "flex-grow",
2306
+ "flex-shrink",
2307
+ "flex-basis",
2308
+ "order",
2309
+ "gap",
2310
+ "row-gap",
2311
+ "column-gap",
2312
+ "grid-template-columns",
2313
+ "grid-template-rows",
2314
+ "grid-template-areas",
2315
+ "font-family",
2316
+ "font-size",
2317
+ "font-weight",
2318
+ "font-style",
2319
+ "line-height",
2320
+ "letter-spacing",
2321
+ "text-align",
2322
+ "text-decoration-line",
2323
+ "text-decoration-style",
2324
+ "text-transform",
2325
+ "text-overflow",
2326
+ "text-shadow",
2327
+ "white-space",
2328
+ "word-break",
2329
+ "overflow-wrap",
2330
+ "vertical-align",
2331
+ "color",
2332
+ "background-color",
2333
+ "background-image",
2334
+ "background-position",
2335
+ "background-size",
2336
+ "background-repeat",
2337
+ "border-top-width",
2338
+ "border-right-width",
2339
+ "border-bottom-width",
2340
+ "border-left-width",
2341
+ "border-top-style",
2342
+ "border-right-style",
2343
+ "border-bottom-style",
2344
+ "border-left-style",
2345
+ "border-top-color",
2346
+ "border-right-color",
2347
+ "border-bottom-color",
2348
+ "border-left-color",
2349
+ "border-top-left-radius",
2350
+ "border-top-right-radius",
2351
+ "border-bottom-left-radius",
2352
+ "border-bottom-right-radius",
2353
+ "box-shadow",
2354
+ "opacity",
2355
+ "transform",
2356
+ "filter",
2357
+ "backdrop-filter",
2358
+ "object-fit",
2359
+ "object-position"
2360
+ ]);
2278
2361
  }
2279
2362
  });
2280
2363
 
@@ -3079,6 +3162,29 @@ var init_mount_root = __esm({
3079
3162
  }
3080
3163
  });
3081
3164
 
3165
+ // src/utils/native-raf.ts
3166
+ var isClientSide, noopAnimationFrame, noopCancelFrame, nativeRequestAnimationFrame, nativeCancelAnimationFrame, waitUntilNextFrame;
3167
+ var init_native_raf = __esm({
3168
+ "src/utils/native-raf.ts"() {
3169
+ "use strict";
3170
+ isClientSide = typeof window !== "undefined";
3171
+ noopAnimationFrame = (_callback) => 0;
3172
+ noopCancelFrame = (_id) => {
3173
+ };
3174
+ nativeRequestAnimationFrame = isClientSide ? (Object.getOwnPropertyDescriptor(
3175
+ Window.prototype,
3176
+ "requestAnimationFrame"
3177
+ )?.value ?? window.requestAnimationFrame).bind(window) : noopAnimationFrame;
3178
+ nativeCancelAnimationFrame = isClientSide ? (Object.getOwnPropertyDescriptor(
3179
+ Window.prototype,
3180
+ "cancelAnimationFrame"
3181
+ )?.value ?? window.cancelAnimationFrame).bind(window) : noopCancelFrame;
3182
+ waitUntilNextFrame = () => isClientSide ? new Promise(
3183
+ (resolve) => nativeRequestAnimationFrame(() => resolve())
3184
+ ) : Promise.resolve();
3185
+ }
3186
+ });
3187
+
3082
3188
  // ../../node_modules/.pnpm/bippy@0.5.30_@types+react@19.2.11_react@19.2.3/node_modules/bippy/dist/source.js
3083
3189
  var g3, _3, v2, y2, b2, x2, S2, ee2, C2, w2, te2, T2, ne2, E, re2, ie2, D, ae2, oe2, se2, O2, k2, A2, j2, M2, fe2, I2, L2, pe2, me2, R, z2, B2, he2, V2, H2, ge2, _e2, ve2, U2, W2, G2, K, q, ye2, J, Y, be2, X2, Z, xe2, Se2, Ce2, we2, Te2, Ee2, De2, Oe, Q, $2, je2, Me2, Ne2, Pe2;
3084
3190
  var init_source = __esm({
@@ -3774,7 +3880,7 @@ var init_truncate_string = __esm({
3774
3880
  });
3775
3881
 
3776
3882
  // src/core/context.ts
3777
- var NEXT_INTERNAL_COMPONENT_NAMES, REACT_INTERNAL_COMPONENT_NAMES, cachedIsNextProject, checkIsNextProject, checkIsInternalComponentName, checkIsSourceComponentName, SERVER_COMPONENT_URL_PREFIXES, isServerComponentUrl, devirtualizeServerUrl, symbolicateServerFrames, extractServerFramesFromDebugStack, enrichServerFrameLocations, stackCache, fetchStackForElement, getStack, getNearestComponentName, resolveSourceFromStack, isUsefulComponentName, getComponentDisplayName, hasSourceFiles, getComponentNamesFromFiber, getElementContext, getFallbackContext, truncateAttrValue, formatPriorityAttrs, getHTMLPreview;
3883
+ var NEXT_INTERNAL_COMPONENT_NAMES, REACT_INTERNAL_COMPONENT_NAMES, cachedIsNextProject, checkIsNextProject, checkIsInternalComponentName, checkIsSourceComponentName, SERVER_COMPONENT_URL_PREFIXES, isServerComponentUrl, devirtualizeServerUrl, symbolicateServerFrames, extractServerFramesFromDebugStack, enrichServerFrameLocations, stackCache, fetchStackForElement, getStack, getNearestComponentName, resolveSourceFromStack, isUsefulComponentName, getComponentDisplayName, hasSourceFiles, getComponentNamesFromFiber, formatStackContext, getStackContext, getElementContext, getFallbackContext, truncateAttrValue, formatPriorityAttrs, getHTMLPreview;
3778
3884
  var init_context = __esm({
3779
3885
  "src/core/context.ts"() {
3780
3886
  "use strict";
@@ -4050,46 +4156,56 @@ var init_context = __esm({
4050
4156
  );
4051
4157
  return componentNames;
4052
4158
  };
4053
- getElementContext = async (element, options = {}) => {
4159
+ formatStackContext = (stack, options = {}) => {
4054
4160
  const { maxLines = 3 } = options;
4055
- const stack = await getStack(element);
4056
- const html = getHTMLPreview(element);
4057
- if (stack && hasSourceFiles(stack)) {
4058
- const isNextProject = checkIsNextProject();
4059
- const stackContext = [];
4060
- for (const frame of stack) {
4061
- if (stackContext.length >= maxLines) break;
4062
- const hasResolvedSource = frame.fileName && Pe2(frame.fileName);
4063
- if (frame.isServer && !hasResolvedSource && (!frame.functionName || checkIsSourceComponentName(frame.functionName))) {
4064
- stackContext.push(
4065
- `
4161
+ const isNextProject = checkIsNextProject();
4162
+ const stackContext = [];
4163
+ for (const frame of stack) {
4164
+ if (stackContext.length >= maxLines) break;
4165
+ const hasResolvedSource = frame.fileName && Pe2(frame.fileName);
4166
+ if (frame.isServer && !hasResolvedSource && (!frame.functionName || checkIsSourceComponentName(frame.functionName))) {
4167
+ stackContext.push(
4168
+ `
4066
4169
  in ${frame.functionName || "<anonymous>"} (at Server)`
4067
- );
4068
- continue;
4170
+ );
4171
+ continue;
4172
+ }
4173
+ if (hasResolvedSource) {
4174
+ let line = "\n in ";
4175
+ const hasComponentName = frame.functionName && checkIsSourceComponentName(frame.functionName);
4176
+ if (hasComponentName) {
4177
+ line += `${frame.functionName} (at `;
4069
4178
  }
4070
- if (hasResolvedSource) {
4071
- let line = "\n in ";
4072
- const hasComponentName = frame.functionName && checkIsSourceComponentName(frame.functionName);
4073
- if (hasComponentName) {
4074
- line += `${frame.functionName} (at `;
4075
- }
4076
- line += Ne2(frame.fileName);
4077
- if (isNextProject && frame.lineNumber && frame.columnNumber) {
4078
- line += `:${frame.lineNumber}:${frame.columnNumber}`;
4079
- }
4080
- if (hasComponentName) {
4081
- line += `)`;
4082
- }
4083
- stackContext.push(line);
4179
+ line += Ne2(frame.fileName);
4180
+ if (isNextProject && frame.lineNumber && frame.columnNumber) {
4181
+ line += `:${frame.lineNumber}:${frame.columnNumber}`;
4084
4182
  }
4183
+ if (hasComponentName) {
4184
+ line += `)`;
4185
+ }
4186
+ stackContext.push(line);
4085
4187
  }
4086
- return `${html}${stackContext.join("")}`;
4188
+ }
4189
+ return stackContext.join("");
4190
+ };
4191
+ getStackContext = async (element, options = {}) => {
4192
+ const maxLines = options.maxLines ?? 3;
4193
+ const stack = await getStack(element);
4194
+ if (stack && hasSourceFiles(stack)) {
4195
+ return formatStackContext(stack, options);
4087
4196
  }
4088
4197
  const componentNames = getComponentNamesFromFiber(element, maxLines);
4089
4198
  if (componentNames.length > 0) {
4090
- const componentContext = componentNames.map((name) => `
4199
+ return componentNames.map((name) => `
4091
4200
  in ${name}`).join("");
4092
- return `${html}${componentContext}`;
4201
+ }
4202
+ return "";
4203
+ };
4204
+ getElementContext = async (element, options = {}) => {
4205
+ const html = getHTMLPreview(element);
4206
+ const stackContext = await getStackContext(element, options);
4207
+ if (stackContext) {
4208
+ return `${html}${stackContext}`;
4093
4209
  }
4094
4210
  return getFallbackContext(element);
4095
4211
  };
@@ -4252,6 +4368,7 @@ var init_overlay_canvas = __esm({
4252
4368
  init_solid();
4253
4369
  init_lerp();
4254
4370
  init_constants();
4371
+ init_native_raf();
4255
4372
  _tmpl$ = /* @__PURE__ */ template(`<canvas data-react-grab-overlay-canvas style=position:fixed;top:0;left:0;pointer-events:none>`);
4256
4373
  LAYER_STYLES = {
4257
4374
  drag: {
@@ -4545,14 +4662,14 @@ var init_overlay_canvas = __esm({
4545
4662
  }
4546
4663
  compositeAllLayers();
4547
4664
  if (shouldContinueAnimating) {
4548
- animationFrameId = requestAnimationFrame(runAnimationFrame);
4665
+ animationFrameId = nativeRequestAnimationFrame(runAnimationFrame);
4549
4666
  } else {
4550
4667
  animationFrameId = null;
4551
4668
  }
4552
4669
  };
4553
4670
  const scheduleAnimationFrame = () => {
4554
4671
  if (animationFrameId !== null) return;
4555
- animationFrameId = requestAnimationFrame(runAnimationFrame);
4672
+ animationFrameId = nativeRequestAnimationFrame(runAnimationFrame);
4556
4673
  };
4557
4674
  const handleWindowResize = () => {
4558
4675
  initializeCanvas();
@@ -4712,7 +4829,7 @@ var init_overlay_canvas = __esm({
4712
4829
  currentDprMediaQuery.removeEventListener("change", handleDevicePixelRatioChange);
4713
4830
  }
4714
4831
  if (animationFrameId !== null) {
4715
- cancelAnimationFrame(animationFrameId);
4832
+ nativeCancelAnimationFrame(animationFrameId);
4716
4833
  }
4717
4834
  });
4718
4835
  });
@@ -9421,6 +9538,96 @@ var init_create_style_element = __esm({
9421
9538
  }
9422
9539
  });
9423
9540
 
9541
+ // src/utils/freeze-gsap.ts
9542
+ var isRafFrozen, pendingRafCallbacks, nextFakeRafId, knownAnimationCallbacks, nativeIdToHeldId, replayedFakeToNativeId, isAnimationLibraryCallback, freezeGsap, unfreezeGsap;
9543
+ var init_freeze_gsap = __esm({
9544
+ "src/utils/freeze-gsap.ts"() {
9545
+ "use strict";
9546
+ init_native_raf();
9547
+ isRafFrozen = false;
9548
+ pendingRafCallbacks = /* @__PURE__ */ new Map();
9549
+ nextFakeRafId = -1;
9550
+ knownAnimationCallbacks = /* @__PURE__ */ new WeakSet();
9551
+ nativeIdToHeldId = /* @__PURE__ */ new Map();
9552
+ replayedFakeToNativeId = /* @__PURE__ */ new Map();
9553
+ isAnimationLibraryCallback = (callback) => {
9554
+ if (knownAnimationCallbacks.has(callback)) return true;
9555
+ if (!isRafFrozen || !("gsapVersions" in window)) return false;
9556
+ const stack = new Error().stack ?? "";
9557
+ if (!stack.includes("_tick")) return false;
9558
+ knownAnimationCallbacks.add(callback);
9559
+ return true;
9560
+ };
9561
+ if (typeof window !== "undefined") {
9562
+ window.requestAnimationFrame = (callback) => {
9563
+ if (!isAnimationLibraryCallback(callback)) {
9564
+ return nativeRequestAnimationFrame(callback);
9565
+ }
9566
+ if (isRafFrozen) {
9567
+ const identifier = nextFakeRafId--;
9568
+ pendingRafCallbacks.set(identifier, callback);
9569
+ return identifier;
9570
+ }
9571
+ const nativeId = nativeRequestAnimationFrame(
9572
+ (timestamp) => {
9573
+ if (isRafFrozen) {
9574
+ const identifier = nextFakeRafId--;
9575
+ pendingRafCallbacks.set(identifier, callback);
9576
+ nativeIdToHeldId.set(nativeId, identifier);
9577
+ return;
9578
+ }
9579
+ callback(timestamp);
9580
+ }
9581
+ );
9582
+ return nativeId;
9583
+ };
9584
+ window.cancelAnimationFrame = (identifier) => {
9585
+ if (pendingRafCallbacks.has(identifier)) {
9586
+ pendingRafCallbacks.delete(identifier);
9587
+ return;
9588
+ }
9589
+ const replayed = replayedFakeToNativeId.get(identifier);
9590
+ if (replayed !== void 0) {
9591
+ nativeCancelAnimationFrame(replayed.nativeId);
9592
+ replayedFakeToNativeId.delete(identifier);
9593
+ return;
9594
+ }
9595
+ const heldId = nativeIdToHeldId.get(identifier);
9596
+ if (heldId !== void 0) {
9597
+ pendingRafCallbacks.delete(heldId);
9598
+ nativeIdToHeldId.delete(identifier);
9599
+ return;
9600
+ }
9601
+ nativeCancelAnimationFrame(identifier);
9602
+ };
9603
+ }
9604
+ freezeGsap = () => {
9605
+ if (isRafFrozen) return;
9606
+ isRafFrozen = true;
9607
+ pendingRafCallbacks.clear();
9608
+ nativeIdToHeldId.clear();
9609
+ for (const [fakeId, { nativeId, callback }] of replayedFakeToNativeId) {
9610
+ nativeCancelAnimationFrame(nativeId);
9611
+ pendingRafCallbacks.set(fakeId, callback);
9612
+ }
9613
+ replayedFakeToNativeId.clear();
9614
+ };
9615
+ unfreezeGsap = () => {
9616
+ if (!isRafFrozen) return;
9617
+ isRafFrozen = false;
9618
+ for (const [fakeId, callback] of pendingRafCallbacks.entries()) {
9619
+ const nativeId = nativeRequestAnimationFrame((timestamp) => {
9620
+ replayedFakeToNativeId.delete(fakeId);
9621
+ callback(timestamp);
9622
+ });
9623
+ replayedFakeToNativeId.set(fakeId, { nativeId, callback });
9624
+ }
9625
+ pendingRafCallbacks.clear();
9626
+ nativeIdToHeldId.clear();
9627
+ };
9628
+ }
9629
+ });
9630
+
9424
9631
  // src/utils/freeze-animations.ts
9425
9632
  var FROZEN_STYLES, GLOBAL_FREEZE_STYLES, styleElement, frozenElements, lastInputElements, globalAnimationStyleElement, ensureStylesInjected, areElementsSame, freezeAllAnimations, unfreezeAllAnimations, freezeAnimations, freezeGlobalAnimations, unfreezeGlobalAnimations;
9426
9633
  var init_freeze_animations = __esm({
@@ -9428,6 +9635,7 @@ var init_freeze_animations = __esm({
9428
9635
  "use strict";
9429
9636
  init_constants();
9430
9637
  init_create_style_element();
9638
+ init_freeze_gsap();
9431
9639
  FROZEN_STYLES = `
9432
9640
  [${FROZEN_ELEMENT_ATTRIBUTE}],
9433
9641
  [${FROZEN_ELEMENT_ATTRIBUTE}] * {
@@ -9456,8 +9664,8 @@ var init_freeze_animations = __esm({
9456
9664
  freezeAllAnimations = (elements) => {
9457
9665
  if (elements.length === 0) return;
9458
9666
  if (areElementsSame(elements, lastInputElements)) return;
9459
- lastInputElements = [...elements];
9460
9667
  unfreezeAllAnimations();
9668
+ lastInputElements = [...elements];
9461
9669
  ensureStylesInjected();
9462
9670
  frozenElements = elements;
9463
9671
  for (const element of frozenElements) {
@@ -9487,6 +9695,7 @@ var init_freeze_animations = __esm({
9487
9695
  "data-react-grab-global-freeze",
9488
9696
  GLOBAL_FREEZE_STYLES
9489
9697
  );
9698
+ freezeGsap();
9490
9699
  };
9491
9700
  unfreezeGlobalAnimations = () => {
9492
9701
  if (!globalAnimationStyleElement) return;
@@ -9512,6 +9721,7 @@ var init_freeze_animations = __esm({
9512
9721
  }
9513
9722
  globalAnimationStyleElement.remove();
9514
9723
  globalAnimationStyleElement = null;
9724
+ unfreezeGsap();
9515
9725
  };
9516
9726
  }
9517
9727
  });
@@ -9941,6 +10151,7 @@ var init_toolbar = __esm({
9941
10151
  init_freeze_pseudo_states();
9942
10152
  init_tooltip();
9943
10153
  init_toolbar_layout();
10154
+ init_native_raf();
9944
10155
  _tmpl$27 = /* @__PURE__ */ template(`<span data-react-grab-unread-indicator class="absolute -top-0.5 -right-0.5 w-1.5 h-1.5 rounded-full bg-[#404040]">`);
9945
10156
  _tmpl$28 = /* @__PURE__ */ template(`<div style=z-index:2147483647>Enable to continue`);
9946
10157
  _tmpl$35 = /* @__PURE__ */ template(`<div data-react-grab-ignore-events data-react-grab-toolbar style=z-index:2147483647><div><div><div><div><div><div><button data-react-grab-ignore-events data-react-grab-toolbar-toggle></button></div></div><div><div><button data-react-grab-ignore-events data-react-grab-toolbar-history><span class="inline-flex relative"></span></button></div></div><div><div><button data-react-grab-ignore-events data-react-grab-toolbar-copy-all></button></div></div><div><div><button data-react-grab-ignore-events data-react-grab-toolbar-menu></button></div></div></div><div class="relative shrink-0 overflow-visible"><button data-react-grab-ignore-events data-react-grab-toolbar-enabled><div><div></div></div></button></div></div></div><button data-react-grab-ignore-events data-react-grab-toolbar-collapse class="contain-layout shrink-0 flex items-center justify-center cursor-pointer interactive-scale">`);
@@ -10150,8 +10361,8 @@ var init_toolbar = __esm({
10150
10361
  const didPositionChange = clampedX !== currentPos.x || clampedY !== currentPos.y;
10151
10362
  if (didPositionChange) {
10152
10363
  setIsCollapseAnimating(true);
10153
- requestAnimationFrame(() => {
10154
- requestAnimationFrame(() => {
10364
+ nativeRequestAnimationFrame(() => {
10365
+ nativeRequestAnimationFrame(() => {
10155
10366
  setPosition({
10156
10367
  x: clampedX,
10157
10368
  y: clampedY
@@ -10459,7 +10670,7 @@ var init_toolbar = __esm({
10459
10670
  };
10460
10671
  };
10461
10672
  if (toggleAnimationRafId !== void 0) {
10462
- cancelAnimationFrame(toggleAnimationRafId);
10673
+ nativeCancelAnimationFrame(toggleAnimationRafId);
10463
10674
  }
10464
10675
  if (isRapidRetoggle()) {
10465
10676
  const finalExpandDimension = isCurrentlyEnabled ? 0 : expandableDimension;
@@ -10477,14 +10688,14 @@ var init_toolbar = __esm({
10477
10688
  const currentExpandDimension = isVerticalEdge ? expandableButtonsRef.getBoundingClientRect().height : expandableButtonsRef.getBoundingClientRect().width;
10478
10689
  setPosition(computeClampedPosition(currentExpandDimension));
10479
10690
  }
10480
- toggleAnimationRafId = requestAnimationFrame(syncPositionWithGrid);
10691
+ toggleAnimationRafId = nativeRequestAnimationFrame(syncPositionWithGrid);
10481
10692
  };
10482
- toggleAnimationRafId = requestAnimationFrame(syncPositionWithGrid);
10693
+ toggleAnimationRafId = nativeRequestAnimationFrame(syncPositionWithGrid);
10483
10694
  }
10484
10695
  clearTimeout(toggleAnimationTimeout);
10485
10696
  toggleAnimationTimeout = setTimeout(() => {
10486
10697
  if (toggleAnimationRafId !== void 0) {
10487
- cancelAnimationFrame(toggleAnimationRafId);
10698
+ nativeCancelAnimationFrame(toggleAnimationRafId);
10488
10699
  toggleAnimationRafId = void 0;
10489
10700
  }
10490
10701
  const finalExpandDimension = isCurrentlyEnabled ? 0 : expandableDimension;
@@ -10600,7 +10811,7 @@ var init_toolbar = __esm({
10600
10811
  setSnapEdge(snap.edge);
10601
10812
  setPositionRatio(ratio);
10602
10813
  setIsSnapping(true);
10603
- requestAnimationFrame(() => {
10814
+ nativeRequestAnimationFrame(() => {
10604
10815
  const postRenderRect = containerRef?.getBoundingClientRect();
10605
10816
  if (postRenderRect) {
10606
10817
  expandedDimensions = {
@@ -10608,7 +10819,7 @@ var init_toolbar = __esm({
10608
10819
  height: postRenderRect.height
10609
10820
  };
10610
10821
  }
10611
- requestAnimationFrame(() => {
10822
+ nativeRequestAnimationFrame(() => {
10612
10823
  const snappedPosition = getPositionFromEdgeAndRatio(snap.edge, ratio, expandedDimensions.width, expandedDimensions.height);
10613
10824
  setPosition(snappedPosition);
10614
10825
  saveAndNotify({
@@ -10834,7 +11045,7 @@ var init_toolbar = __esm({
10834
11045
  clearTimeout(toggleAnimationTimeout);
10835
11046
  clearTimeout(historyItemCountTimeout);
10836
11047
  if (toggleAnimationRafId !== void 0) {
10837
- cancelAnimationFrame(toggleAnimationRafId);
11048
+ nativeCancelAnimationFrame(toggleAnimationRafId);
10838
11049
  }
10839
11050
  unfreezeUpdatesCallback?.();
10840
11051
  safePolygonTracker.stop();
@@ -11213,6 +11424,7 @@ var init_toolbar_menu = __esm({
11213
11424
  init_format_shortcut();
11214
11425
  init_is_event_from_overlay();
11215
11426
  init_resolve_action_enabled();
11427
+ init_native_raf();
11216
11428
  _tmpl$29 = /* @__PURE__ */ template(`<div data-react-grab-ignore-events data-react-grab-toolbar-menu class="fixed font-sans text-[13px] antialiased filter-[drop-shadow(0px_1px_2px_#51515140)] select-none transition-[opacity,transform] duration-100 ease-out will-change-[opacity,transform]"style=z-index:2147483647><div><div class="flex flex-col py-1">`);
11217
11429
  _tmpl$210 = /* @__PURE__ */ template(`<div><div>`);
11218
11430
  _tmpl$36 = /* @__PURE__ */ template(`<button data-react-grab-ignore-events class="contain-layout flex items-center justify-between w-full px-2 py-1 cursor-pointer transition-colors hover:bg-black/5 text-left border-none bg-transparent disabled:opacity-40 disabled:cursor-default disabled:hover:bg-transparent"><span class="text-[13px] leading-4 font-sans font-medium text-black">`);
@@ -11239,14 +11451,14 @@ var init_toolbar_menu = __esm({
11239
11451
  setLastAnchorEdge(anchor.edge);
11240
11452
  clearTimeout(exitAnimationTimeout);
11241
11453
  setShouldMount(true);
11242
- if (enterAnimationFrameId !== void 0) cancelAnimationFrame(enterAnimationFrameId);
11243
- enterAnimationFrameId = requestAnimationFrame(() => {
11454
+ if (enterAnimationFrameId !== void 0) nativeCancelAnimationFrame(enterAnimationFrameId);
11455
+ enterAnimationFrameId = nativeRequestAnimationFrame(() => {
11244
11456
  measureContainer();
11245
11457
  void containerRef?.offsetHeight;
11246
11458
  setIsAnimatedIn(true);
11247
11459
  });
11248
11460
  } else {
11249
- if (enterAnimationFrameId !== void 0) cancelAnimationFrame(enterAnimationFrameId);
11461
+ if (enterAnimationFrameId !== void 0) nativeCancelAnimationFrame(enterAnimationFrameId);
11250
11462
  setIsAnimatedIn(false);
11251
11463
  exitAnimationTimeout = setTimeout(() => {
11252
11464
  setShouldMount(false);
@@ -11314,7 +11526,7 @@ var init_toolbar_menu = __esm({
11314
11526
  props.onDismiss();
11315
11527
  }
11316
11528
  };
11317
- const frameId = requestAnimationFrame(() => {
11529
+ const frameId = nativeRequestAnimationFrame(() => {
11318
11530
  window.addEventListener("mousedown", handleClickOutside, {
11319
11531
  capture: true
11320
11532
  });
@@ -11326,9 +11538,9 @@ var init_toolbar_menu = __esm({
11326
11538
  capture: true
11327
11539
  });
11328
11540
  onCleanup(() => {
11329
- cancelAnimationFrame(frameId);
11541
+ nativeCancelAnimationFrame(frameId);
11330
11542
  clearTimeout(exitAnimationTimeout);
11331
- if (enterAnimationFrameId !== void 0) cancelAnimationFrame(enterAnimationFrameId);
11543
+ if (enterAnimationFrameId !== void 0) nativeCancelAnimationFrame(enterAnimationFrameId);
11332
11544
  window.removeEventListener("mousedown", handleClickOutside, {
11333
11545
  capture: true
11334
11546
  });
@@ -11461,6 +11673,7 @@ var init_context_menu = __esm({
11461
11673
  init_get_tag_display();
11462
11674
  init_resolve_action_enabled();
11463
11675
  init_is_event_from_overlay();
11676
+ init_native_raf();
11464
11677
  _tmpl$30 = /* @__PURE__ */ template(`<div class="flex flex-col w-[calc(100%+16px)] -mx-2 -my-1.5">`);
11465
11678
  _tmpl$211 = /* @__PURE__ */ template(`<div data-react-grab-ignore-events data-react-grab-context-menu class="fixed font-sans text-[13px] antialiased filter-[drop-shadow(0px_1px_2px_#51515140)] select-none"style=z-index:2147483647;pointer-events:auto><div><div class="contain-layout shrink-0 flex items-center gap-1 pt-1.5 pb-1 w-fit h-fit px-2">`);
11466
11679
  _tmpl$37 = /* @__PURE__ */ template(`<span class="text-[11px] font-sans text-black/50 ml-4">`);
@@ -11483,7 +11696,7 @@ var init_context_menu = __esm({
11483
11696
  };
11484
11697
  createEffect(() => {
11485
11698
  if (isVisible()) {
11486
- requestAnimationFrame(measureContainer);
11699
+ nativeRequestAnimationFrame(measureContainer);
11487
11700
  }
11488
11701
  });
11489
11702
  const computedPosition = () => {
@@ -11592,7 +11805,7 @@ var init_context_menu = __esm({
11592
11805
  runActionIfAllowed(modifierAction);
11593
11806
  }
11594
11807
  };
11595
- const frameId = requestAnimationFrame(() => {
11808
+ const frameId = nativeRequestAnimationFrame(() => {
11596
11809
  window.addEventListener("mousedown", handleClickOutside, {
11597
11810
  capture: true
11598
11811
  });
@@ -11604,7 +11817,7 @@ var init_context_menu = __esm({
11604
11817
  capture: true
11605
11818
  });
11606
11819
  onCleanup(() => {
11607
- cancelAnimationFrame(frameId);
11820
+ nativeCancelAnimationFrame(frameId);
11608
11821
  window.removeEventListener("mousedown", handleClickOutside, {
11609
11822
  capture: true
11610
11823
  });
@@ -11768,6 +11981,7 @@ var init_history_dropdown = __esm({
11768
11981
  init_icon_copy();
11769
11982
  init_icon_check();
11770
11983
  init_tooltip();
11984
+ init_native_raf();
11771
11985
  _tmpl$38 = /* @__PURE__ */ template(`<div class="flex items-center gap-[5px]"><div class=relative><button data-react-grab-ignore-events data-react-grab-history-clear class="contain-layout shrink-0 flex items-center justify-center px-[3px] py-px rounded-sm bg-[#FEF2F2] cursor-pointer transition-all hover:bg-[#FEE2E2] press-scale h-[17px] text-[#B91C1C]"></button></div><div class=relative><button data-react-grab-ignore-events data-react-grab-history-copy-all class="contain-layout shrink-0 flex items-center justify-center gap-1 px-[3px] py-px rounded-sm bg-white [border-width:0.5px] border-solid border-[#B3B3B3] cursor-pointer transition-all hover:bg-[#F5F5F5] press-scale h-[17px] text-black/60">`);
11772
11986
  _tmpl$212 = /* @__PURE__ */ template(`<div data-react-grab-ignore-events data-react-grab-history-dropdown class="fixed font-sans text-[13px] antialiased filter-[drop-shadow(0px_1px_2px_#51515140)] select-none transition-[opacity,transform] duration-100 ease-out will-change-[opacity,transform]"style=z-index:2147483647><div><div class="contain-layout shrink-0 flex items-center justify-between px-2 pt-1.5 pb-1"><span class="text-[11px] font-medium text-black/40">History</span></div><div class="min-h-0 [border-top-width:0.5px] border-t-solid border-t-[#D9D9D9] px-2 py-1.5"><div class="flex flex-col max-h-[240px] overflow-y-auto -mx-2 -my-1.5"style="scrollbar-color:rgba(0,0,0,0.15) transparent">`);
11773
11987
  _tmpl$39 = /* @__PURE__ */ template(`<span class="text-[11px] leading-3 font-sans text-black/40 truncate mt-0.5">`);
@@ -11828,14 +12042,14 @@ var init_history_dropdown = __esm({
11828
12042
  if (props.position) setLastAnchorEdge(props.position.edge);
11829
12043
  clearTimeout(exitAnimationTimeout);
11830
12044
  setShouldMount(true);
11831
- if (enterAnimationFrameId !== void 0) cancelAnimationFrame(enterAnimationFrameId);
11832
- enterAnimationFrameId = requestAnimationFrame(() => {
12045
+ if (enterAnimationFrameId !== void 0) nativeCancelAnimationFrame(enterAnimationFrameId);
12046
+ enterAnimationFrameId = nativeRequestAnimationFrame(() => {
11833
12047
  measureContainer();
11834
12048
  void containerRef?.offsetHeight;
11835
12049
  setIsAnimatedIn(true);
11836
12050
  });
11837
12051
  } else {
11838
- if (enterAnimationFrameId !== void 0) cancelAnimationFrame(enterAnimationFrameId);
12052
+ if (enterAnimationFrameId !== void 0) nativeCancelAnimationFrame(enterAnimationFrameId);
11839
12053
  setIsAnimatedIn(false);
11840
12054
  exitAnimationTimeout = setTimeout(() => {
11841
12055
  setShouldMount(false);
@@ -11906,7 +12120,7 @@ var init_history_dropdown = __esm({
11906
12120
  clearTimeout(copyAllFeedbackTimeout);
11907
12121
  clearTimeout(copyItemFeedbackTimeout);
11908
12122
  clearTimeout(exitAnimationTimeout);
11909
- if (enterAnimationFrameId !== void 0) cancelAnimationFrame(enterAnimationFrameId);
12123
+ if (enterAnimationFrameId !== void 0) nativeCancelAnimationFrame(enterAnimationFrameId);
11910
12124
  window.removeEventListener("keydown", handleKeyDown, {
11911
12125
  capture: true
11912
12126
  });
@@ -12151,6 +12365,7 @@ var init_clear_history_prompt = __esm({
12151
12365
  init_is_event_from_overlay();
12152
12366
  init_is_keyboard_event_triggered_by_input();
12153
12367
  init_discard_prompt();
12368
+ init_native_raf();
12154
12369
  _tmpl$40 = /* @__PURE__ */ template(`<div data-react-grab-ignore-events data-react-grab-clear-history-prompt class="fixed font-sans text-[13px] antialiased filter-[drop-shadow(0px_1px_2px_#51515140)] select-none transition-[opacity,transform] duration-100 ease-out will-change-[opacity,transform]"style=z-index:2147483647><div>`);
12155
12370
  ClearHistoryPrompt = (props) => {
12156
12371
  let containerRef;
@@ -12173,14 +12388,14 @@ var init_clear_history_prompt = __esm({
12173
12388
  setLastAnchorEdge(anchor.edge);
12174
12389
  clearTimeout(exitAnimationTimeout);
12175
12390
  setShouldMount(true);
12176
- if (enterAnimationFrameId !== void 0) cancelAnimationFrame(enterAnimationFrameId);
12177
- enterAnimationFrameId = requestAnimationFrame(() => {
12391
+ if (enterAnimationFrameId !== void 0) nativeCancelAnimationFrame(enterAnimationFrameId);
12392
+ enterAnimationFrameId = nativeRequestAnimationFrame(() => {
12178
12393
  measureContainer();
12179
12394
  void containerRef?.offsetHeight;
12180
12395
  setIsAnimatedIn(true);
12181
12396
  });
12182
12397
  } else {
12183
- if (enterAnimationFrameId !== void 0) cancelAnimationFrame(enterAnimationFrameId);
12398
+ if (enterAnimationFrameId !== void 0) nativeCancelAnimationFrame(enterAnimationFrameId);
12184
12399
  setIsAnimatedIn(false);
12185
12400
  exitAnimationTimeout = setTimeout(() => {
12186
12401
  setShouldMount(false);
@@ -12249,7 +12464,7 @@ var init_clear_history_prompt = __esm({
12249
12464
  if (!props.position || isEventFromOverlay(event, "data-react-grab-ignore-events")) return;
12250
12465
  props.onCancel();
12251
12466
  };
12252
- const frameId = requestAnimationFrame(() => {
12467
+ const frameId = nativeRequestAnimationFrame(() => {
12253
12468
  window.addEventListener("mousedown", handleClickOutside, {
12254
12469
  capture: true
12255
12470
  });
@@ -12258,9 +12473,9 @@ var init_clear_history_prompt = __esm({
12258
12473
  });
12259
12474
  });
12260
12475
  onCleanup(() => {
12261
- cancelAnimationFrame(frameId);
12476
+ nativeCancelAnimationFrame(frameId);
12262
12477
  clearTimeout(exitAnimationTimeout);
12263
- if (enterAnimationFrameId !== void 0) cancelAnimationFrame(enterAnimationFrameId);
12478
+ if (enterAnimationFrameId !== void 0) nativeCancelAnimationFrame(enterAnimationFrameId);
12264
12479
  window.removeEventListener("keydown", handleKeyDown, {
12265
12480
  capture: true
12266
12481
  });
@@ -12813,6 +13028,7 @@ var init_noop_api = __esm({
12813
13028
  },
12814
13029
  copyElement: () => Promise.resolve(false),
12815
13030
  getSource: () => Promise.resolve(null),
13031
+ getStackContext: () => Promise.resolve(""),
12816
13032
  getState,
12817
13033
  setOptions: () => {
12818
13034
  },
@@ -13602,12 +13818,11 @@ var init_is_target_key_combination = __esm({
13602
13818
  }
13603
13819
  });
13604
13820
 
13605
- // src/utils/capture-screenshot.ts
13606
- var combineBounds, captureVideoFrame, captureElementScreenshot, copyImageToClipboard;
13607
- var init_capture_screenshot = __esm({
13608
- "src/utils/capture-screenshot.ts"() {
13821
+ // src/utils/combine-bounds.ts
13822
+ var combineBounds;
13823
+ var init_combine_bounds = __esm({
13824
+ "src/utils/combine-bounds.ts"() {
13609
13825
  "use strict";
13610
- init_constants();
13611
13826
  combineBounds = (boundsList) => {
13612
13827
  if (boundsList.length === 0) {
13613
13828
  return { x: 0, y: 0, width: 0, height: 0 };
@@ -13632,129 +13847,6 @@ var init_capture_screenshot = __esm({
13632
13847
  height: maxY - minY
13633
13848
  };
13634
13849
  };
13635
- captureVideoFrame = (video, bounds) => {
13636
- return new Promise((resolve, reject) => {
13637
- const canvas = document.createElement("canvas");
13638
- const context = canvas.getContext("2d");
13639
- if (!context) {
13640
- reject(new Error("Failed to get canvas context"));
13641
- return;
13642
- }
13643
- const scaleX = video.videoWidth / window.innerWidth;
13644
- const scaleY = video.videoHeight / window.innerHeight;
13645
- const scaledBounds = {
13646
- x: bounds.x * scaleX,
13647
- y: bounds.y * scaleY,
13648
- width: bounds.width * scaleX,
13649
- height: bounds.height * scaleY
13650
- };
13651
- canvas.width = scaledBounds.width;
13652
- canvas.height = scaledBounds.height;
13653
- context.drawImage(
13654
- video,
13655
- scaledBounds.x,
13656
- scaledBounds.y,
13657
- scaledBounds.width,
13658
- scaledBounds.height,
13659
- 0,
13660
- 0,
13661
- scaledBounds.width,
13662
- scaledBounds.height
13663
- );
13664
- canvas.toBlob(
13665
- (blob) => {
13666
- if (blob) {
13667
- resolve(blob);
13668
- } else {
13669
- reject(new Error("Failed to create image blob"));
13670
- }
13671
- },
13672
- "image/png",
13673
- 1
13674
- );
13675
- });
13676
- };
13677
- captureElementScreenshot = async (bounds) => {
13678
- const stream = await navigator.mediaDevices.getDisplayMedia({
13679
- video: {
13680
- displaySurface: "browser"
13681
- },
13682
- preferCurrentTab: true
13683
- });
13684
- const video = document.createElement("video");
13685
- video.srcObject = stream;
13686
- video.autoplay = true;
13687
- video.playsInline = true;
13688
- await new Promise((resolve, reject) => {
13689
- const timeout = setTimeout(() => {
13690
- reject(new Error("Video metadata loading timed out"));
13691
- }, VIDEO_METADATA_TIMEOUT_MS);
13692
- video.onerror = () => {
13693
- clearTimeout(timeout);
13694
- reject(new Error("Video failed to load"));
13695
- };
13696
- video.onloadedmetadata = () => {
13697
- clearTimeout(timeout);
13698
- void video.play();
13699
- resolve();
13700
- };
13701
- });
13702
- await new Promise((resolve, reject) => {
13703
- const startTime = Date.now();
13704
- const checkReady = () => {
13705
- if (video.readyState >= HTMLMediaElement.HAVE_CURRENT_DATA) {
13706
- resolve();
13707
- return;
13708
- }
13709
- if (Date.now() - startTime >= VIDEO_READY_TIMEOUT_MS) {
13710
- reject(new Error("Video frame not ready within timeout"));
13711
- return;
13712
- }
13713
- setTimeout(checkReady, VIDEO_READY_POLL_INTERVAL_MS);
13714
- };
13715
- checkReady();
13716
- });
13717
- try {
13718
- const blob = await captureVideoFrame(video, bounds);
13719
- return blob;
13720
- } finally {
13721
- stream.getTracks().forEach((track) => track.stop());
13722
- video.srcObject = null;
13723
- }
13724
- };
13725
- copyImageToClipboard = async (blob) => {
13726
- try {
13727
- await navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })]);
13728
- return true;
13729
- } catch {
13730
- return false;
13731
- }
13732
- };
13733
- }
13734
- });
13735
-
13736
- // src/utils/is-screenshot-supported.ts
13737
- var isScreenshotSupported;
13738
- var init_is_screenshot_supported = __esm({
13739
- "src/utils/is-screenshot-supported.ts"() {
13740
- "use strict";
13741
- isScreenshotSupported = () => {
13742
- if (typeof window === "undefined" || typeof navigator === "undefined") {
13743
- return false;
13744
- }
13745
- const hasGetDisplayMedia = typeof navigator.mediaDevices?.getDisplayMedia === "function";
13746
- const hasClipboardWrite = typeof navigator.clipboard?.write === "function" && typeof ClipboardItem !== "undefined";
13747
- return hasGetDisplayMedia && hasClipboardWrite;
13748
- };
13749
- }
13750
- });
13751
-
13752
- // src/utils/delay.ts
13753
- var delay;
13754
- var init_delay = __esm({
13755
- "src/utils/delay.ts"() {
13756
- "use strict";
13757
- delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
13758
13850
  }
13759
13851
  });
13760
13852
 
@@ -14007,7 +14099,6 @@ var init_plugin_registry = __esm({
14007
14099
  cancelPendingToolbarActions: () => callHook("cancelPendingToolbarActions"),
14008
14100
  onOpenFile: (filePath, lineNumber) => callHookWithHandled("onOpenFile", filePath, lineNumber),
14009
14101
  transformHtmlContent: async (html, elements) => callHookReduce("transformHtmlContent", html, elements),
14010
- transformScreenshot: async (blob, elements, bounds) => callHookReduce("transformScreenshot", blob, elements, bounds),
14011
14102
  transformAgentContext: async (context, elements) => callHookReduce("transformAgentContext", context, elements),
14012
14103
  transformActionContext: (context) => callHookReduceSync("transformActionContext", context),
14013
14104
  transformOpenFileUrl: (url, filePath, lineNumber) => callHookReduceSync("transformOpenFileUrl", url, filePath, lineNumber),
@@ -14854,6 +14945,7 @@ var init_auto_scroll = __esm({
14854
14945
  "src/core/auto-scroll.ts"() {
14855
14946
  "use strict";
14856
14947
  init_constants();
14948
+ init_native_raf();
14857
14949
  getAutoScrollDirection = (clientX, clientY) => {
14858
14950
  return {
14859
14951
  top: clientY < AUTO_SCROLL_EDGE_THRESHOLD_PX,
@@ -14876,7 +14968,7 @@ var init_auto_scroll = __esm({
14876
14968
  if (direction.left) window.scrollBy(-AUTO_SCROLL_SPEED_PX, 0);
14877
14969
  if (direction.right) window.scrollBy(AUTO_SCROLL_SPEED_PX, 0);
14878
14970
  if (direction.top || direction.bottom || direction.left || direction.right) {
14879
- animationId = requestAnimationFrame(scroll);
14971
+ animationId = nativeRequestAnimationFrame(scroll);
14880
14972
  } else {
14881
14973
  animationId = null;
14882
14974
  }
@@ -14886,7 +14978,7 @@ var init_auto_scroll = __esm({
14886
14978
  };
14887
14979
  const stop2 = () => {
14888
14980
  if (animationId !== null) {
14889
- cancelAnimationFrame(animationId);
14981
+ nativeCancelAnimationFrame(animationId);
14890
14982
  animationId = null;
14891
14983
  }
14892
14984
  };
@@ -14921,7 +15013,7 @@ var init_log_intro = __esm({
14921
15013
  init_is_extension_context();
14922
15014
  logIntro = () => {
14923
15015
  try {
14924
- const version = "0.1.17";
15016
+ const version = "0.1.19";
14925
15017
  const logoDataUri = `data:image/svg+xml;base64,${btoa(LOGO_SVG)}`;
14926
15018
  console.log(
14927
15019
  `%cReact Grab${version ? ` v${version}` : ""}%c
@@ -15118,11 +15210,25 @@ var init_open = __esm({
15118
15210
  }
15119
15211
  });
15120
15212
 
15213
+ // src/utils/append-stack-context.ts
15214
+ var appendStackContext;
15215
+ var init_append_stack_context = __esm({
15216
+ "src/utils/append-stack-context.ts"() {
15217
+ "use strict";
15218
+ appendStackContext = (content, stackContext) => {
15219
+ if (!stackContext) return content;
15220
+ return `${content}
15221
+ ${stackContext}`;
15222
+ };
15223
+ }
15224
+ });
15225
+
15121
15226
  // src/core/plugins/copy-html.ts
15122
15227
  var copyHtmlPlugin;
15123
15228
  var init_copy_html = __esm({
15124
15229
  "src/core/plugins/copy-html.ts"() {
15125
15230
  "use strict";
15231
+ init_append_stack_context();
15126
15232
  init_copy_content();
15127
15233
  copyHtmlPlugin = {
15128
15234
  name: "copy-html",
@@ -15133,10 +15239,12 @@ var init_copy_html = __esm({
15133
15239
  onElementSelect: (element) => {
15134
15240
  if (!isPendingSelection) return;
15135
15241
  isPendingSelection = false;
15136
- void hooks.transformHtmlContent(element.outerHTML, [element]).then((transformedHtml) => {
15137
- if (transformedHtml) {
15138
- copyContent(transformedHtml);
15139
- }
15242
+ void Promise.all([
15243
+ hooks.transformHtmlContent(element.outerHTML, [element]),
15244
+ api.getStackContext(element)
15245
+ ]).then(([transformedHtml, stackContext]) => {
15246
+ if (!transformedHtml) return;
15247
+ copyContent(appendStackContext(transformedHtml, stackContext));
15140
15248
  }).catch(() => {
15141
15249
  });
15142
15250
  return true;
@@ -15160,7 +15268,14 @@ var init_copy_html = __esm({
15160
15268
  context.elements
15161
15269
  );
15162
15270
  if (!transformedHtml) return false;
15163
- return copyContent(transformedHtml);
15271
+ const stackContext = await api.getStackContext(context.element);
15272
+ return copyContent(
15273
+ appendStackContext(transformedHtml, stackContext),
15274
+ {
15275
+ componentName: context.componentName,
15276
+ tagName: context.tagName
15277
+ }
15278
+ );
15164
15279
  });
15165
15280
  }
15166
15281
  },
@@ -15180,49 +15295,103 @@ var init_copy_html = __esm({
15180
15295
  }
15181
15296
  });
15182
15297
 
15183
- // src/core/plugins/screenshot.ts
15184
- var getElementBounds, captureAndCopyScreenshot, screenshotPlugin;
15185
- var init_screenshot = __esm({
15186
- "src/core/plugins/screenshot.ts"() {
15298
+ // src/utils/extract-element-css.ts
15299
+ var BORDER_FILTER_SIDE_MAP, baselineIframe, defaultStylesByTag, ensureBaselineIframe, getDefaultStylesForTag, isBorderPropertyWithoutWidth, extractElementCss, disposeBaselineStyles;
15300
+ var init_extract_element_css = __esm({
15301
+ "src/utils/extract-element-css.ts"() {
15187
15302
  "use strict";
15188
15303
  init_constants();
15189
- init_capture_screenshot();
15190
- init_is_screenshot_supported();
15191
- init_delay();
15192
- getElementBounds = (elements) => combineBounds(
15193
- elements.map((element) => {
15194
- const rect = element.getBoundingClientRect();
15195
- return {
15196
- x: rect.x + window.scrollX,
15197
- y: rect.y + window.scrollY,
15198
- width: rect.width,
15199
- height: rect.height
15200
- };
15201
- })
15304
+ BORDER_FILTER_SIDE_MAP = new Map(
15305
+ ["top", "right", "bottom", "left"].flatMap((side) => [
15306
+ [`border-${side}-style`, side],
15307
+ [`border-${side}-color`, side]
15308
+ ])
15202
15309
  );
15203
- captureAndCopyScreenshot = async (elements, transformScreenshot) => {
15204
- const captureBounds = getElementBounds(elements);
15205
- if (captureBounds.width === 0 || captureBounds.height === 0) return false;
15206
- await delay(SCREENSHOT_CAPTURE_DELAY_MS);
15207
- const capturedBlob = await captureElementScreenshot(captureBounds);
15208
- const transformedBlob = await transformScreenshot(
15209
- capturedBlob,
15210
- elements,
15211
- captureBounds
15212
- );
15213
- return await copyImageToClipboard(transformedBlob);
15310
+ baselineIframe = null;
15311
+ defaultStylesByTag = /* @__PURE__ */ new Map();
15312
+ ensureBaselineIframe = () => {
15313
+ if (baselineIframe) return baselineIframe;
15314
+ baselineIframe = document.createElement("iframe");
15315
+ baselineIframe.style.cssText = "position:fixed;left:-9999px;width:0;height:0;border:none;visibility:hidden;";
15316
+ document.body.appendChild(baselineIframe);
15317
+ return baselineIframe;
15318
+ };
15319
+ getDefaultStylesForTag = (tagName) => {
15320
+ const cached = defaultStylesByTag.get(tagName);
15321
+ if (cached) return cached;
15322
+ const iframe = ensureBaselineIframe();
15323
+ const iframeDocument = iframe.contentDocument;
15324
+ const baselineElement = iframeDocument.createElement(tagName);
15325
+ iframeDocument.body.appendChild(baselineElement);
15326
+ const baselineComputed = iframe.contentWindow.getComputedStyle(baselineElement);
15327
+ const defaultStyles = /* @__PURE__ */ new Map();
15328
+ for (const propertyName of RELEVANT_CSS_PROPERTIES) {
15329
+ const propertyValue = baselineComputed.getPropertyValue(propertyName);
15330
+ if (propertyValue) {
15331
+ defaultStyles.set(propertyName, propertyValue);
15332
+ }
15333
+ }
15334
+ baselineElement.remove();
15335
+ defaultStylesByTag.set(tagName, defaultStyles);
15336
+ return defaultStyles;
15337
+ };
15338
+ isBorderPropertyWithoutWidth = (propertyName, computedStyle) => {
15339
+ const side = BORDER_FILTER_SIDE_MAP.get(propertyName);
15340
+ if (!side) return false;
15341
+ const widthValue = computedStyle.getPropertyValue(`border-${side}-width`);
15342
+ return widthValue === "0px" || widthValue === "0";
15343
+ };
15344
+ extractElementCss = (element) => {
15345
+ const tagName = element.tagName.toLowerCase();
15346
+ const defaultStyles = getDefaultStylesForTag(tagName);
15347
+ const computedStyle = getComputedStyle(element);
15348
+ const declarations = [];
15349
+ for (const propertyName of RELEVANT_CSS_PROPERTIES) {
15350
+ const propertyValue = computedStyle.getPropertyValue(propertyName);
15351
+ if (!propertyValue) continue;
15352
+ if (propertyValue === defaultStyles.get(propertyName)) continue;
15353
+ if (isBorderPropertyWithoutWidth(propertyName, computedStyle)) continue;
15354
+ declarations.push(`${propertyName}: ${propertyValue};`);
15355
+ }
15356
+ const classAttribute = element.getAttribute("class")?.trim();
15357
+ const cssBlock = declarations.join("\n");
15358
+ if (!classAttribute) return cssBlock;
15359
+ if (!cssBlock) return `className: ${classAttribute}`;
15360
+ return `className: ${classAttribute}
15361
+
15362
+ ${cssBlock}`;
15214
15363
  };
15215
- screenshotPlugin = {
15216
- name: "screenshot",
15217
- setup: (api, hooks) => {
15364
+ disposeBaselineStyles = () => {
15365
+ baselineIframe?.remove();
15366
+ baselineIframe = null;
15367
+ defaultStylesByTag.clear();
15368
+ };
15369
+ }
15370
+ });
15371
+
15372
+ // src/core/plugins/copy-styles.ts
15373
+ var copyStylesPlugin;
15374
+ var init_copy_styles = __esm({
15375
+ "src/core/plugins/copy-styles.ts"() {
15376
+ "use strict";
15377
+ init_append_stack_context();
15378
+ init_copy_content();
15379
+ init_extract_element_css();
15380
+ copyStylesPlugin = {
15381
+ name: "copy-styles",
15382
+ setup: (api) => {
15218
15383
  let isPendingSelection = false;
15219
15384
  return {
15220
15385
  hooks: {
15221
15386
  onElementSelect: (element) => {
15222
15387
  if (!isPendingSelection) return;
15223
15388
  isPendingSelection = false;
15224
- api.deactivate();
15225
- return captureAndCopyScreenshot([element], hooks.transformScreenshot);
15389
+ const extractedCss = extractElementCss(element);
15390
+ void api.getStackContext(element).then((stackContext) => {
15391
+ copyContent(appendStackContext(extractedCss, stackContext));
15392
+ }).catch(() => {
15393
+ });
15394
+ return true;
15226
15395
  },
15227
15396
  onDeactivate: () => {
15228
15397
  isPendingSelection = false;
@@ -15233,42 +15402,33 @@ var init_screenshot = __esm({
15233
15402
  },
15234
15403
  actions: [
15235
15404
  {
15236
- id: "screenshot",
15237
- label: "Screenshot",
15238
- shortcut: "S",
15239
- enabled: isScreenshotSupported,
15405
+ id: "copy-styles",
15406
+ label: "Copy styles",
15240
15407
  onAction: async (context) => {
15241
- const captureBounds = getElementBounds(context.elements);
15242
- if (captureBounds.width === 0 || captureBounds.height === 0) return;
15243
15408
  await context.performWithFeedback(async () => {
15244
- context.hideOverlay();
15245
- await delay(SCREENSHOT_CAPTURE_DELAY_MS);
15246
- try {
15247
- const capturedBlob = await captureElementScreenshot(captureBounds);
15248
- const transformedBlob = await context.hooks.transformScreenshot(
15249
- capturedBlob,
15250
- context.elements,
15251
- captureBounds
15252
- );
15253
- return await copyImageToClipboard(transformedBlob);
15254
- } finally {
15255
- context.showOverlay();
15256
- }
15409
+ const combinedCss = context.elements.map(extractElementCss).join("\n\n");
15410
+ const stackContext = await api.getStackContext(context.element);
15411
+ return copyContent(
15412
+ appendStackContext(combinedCss, stackContext),
15413
+ {
15414
+ componentName: context.componentName,
15415
+ tagName: context.tagName
15416
+ }
15417
+ );
15257
15418
  });
15258
15419
  }
15259
15420
  },
15260
15421
  {
15261
- id: "screenshot-toolbar",
15262
- label: "Screenshot",
15263
- shortcut: "S",
15422
+ id: "copy-styles-toolbar",
15423
+ label: "Copy styles",
15264
15424
  target: "toolbar",
15265
- enabled: isScreenshotSupported,
15266
15425
  onAction: () => {
15267
15426
  isPendingSelection = true;
15268
15427
  api.activate();
15269
15428
  }
15270
15429
  }
15271
- ]
15430
+ ],
15431
+ cleanup: disposeBaselineStyles
15272
15432
  };
15273
15433
  }
15274
15434
  };
@@ -15365,6 +15525,7 @@ var init_core = __esm({
15365
15525
  init_store2();
15366
15526
  init_is_keyboard_event_triggered_by_input();
15367
15527
  init_mount_root();
15528
+ init_native_raf();
15368
15529
  init_renderer();
15369
15530
  init_context();
15370
15531
  init_source();
@@ -15388,9 +15549,7 @@ var init_core = __esm({
15388
15549
  init_parse_activation_key();
15389
15550
  init_is_event_from_overlay();
15390
15551
  init_open_file();
15391
- init_capture_screenshot();
15392
- init_is_screenshot_supported();
15393
- init_delay();
15552
+ init_combine_bounds();
15394
15553
  init_resolve_action_enabled();
15395
15554
  init_theme();
15396
15555
  init_plugin_registry();
@@ -15408,7 +15567,7 @@ var init_core = __esm({
15408
15567
  init_comment();
15409
15568
  init_open();
15410
15569
  init_copy_html();
15411
- init_screenshot();
15570
+ init_copy_styles();
15412
15571
  init_freeze_animations();
15413
15572
  init_freeze_pseudo_states();
15414
15573
  init_freeze_updates();
@@ -15420,7 +15579,7 @@ var init_core = __esm({
15420
15579
  init_theme();
15421
15580
  init_generate_snippet();
15422
15581
  init_copy_content();
15423
- builtInPlugins = [copyPlugin, commentPlugin, copyHtmlPlugin, screenshotPlugin, openPlugin];
15582
+ builtInPlugins = [copyPlugin, commentPlugin, copyHtmlPlugin, copyStylesPlugin, openPlugin];
15424
15583
  hasInited = false;
15425
15584
  toolbarStateChangeCallbacks = /* @__PURE__ */ new Set();
15426
15585
  init = (rawOptions) => {
@@ -15533,13 +15692,6 @@ var init_core = __esm({
15533
15692
  return connectedMappedElements;
15534
15693
  };
15535
15694
  const getFirstConnectedHistoryElement = (historyItem) => getConnectedHistoryElements(historyItem)[0];
15536
- const getHistoryPreviewBounds = (historyItem) => {
15537
- const connectedElements = getConnectedHistoryElements(historyItem);
15538
- if (connectedElements.length > 0) {
15539
- return connectedElements.map((element) => createElementBounds(element));
15540
- }
15541
- return historyItem.previewBounds ?? [];
15542
- };
15543
15695
  const historyDisconnectedItemIds = createMemo(() => {
15544
15696
  void historyDropdownPosition();
15545
15697
  const disconnectedIds = /* @__PURE__ */ new Set();
@@ -15651,7 +15803,6 @@ var init_core = __esm({
15651
15803
  let holdStartTimestamp = null;
15652
15804
  let copyWaitingForConfirmation = false;
15653
15805
  let holdTimerFiredWaitingForConfirmation = false;
15654
- let isScreenshotInProgress = false;
15655
15806
  let lastWindowFocusTimestamp = 0;
15656
15807
  let inToggleFeedbackPeriod = false;
15657
15808
  let toggleFeedbackTimerId = null;
@@ -15930,7 +16081,7 @@ var init_core = __esm({
15930
16081
  showTemporaryGrabbedBox(createElementBounds(element), element);
15931
16082
  }
15932
16083
  }
15933
- await new Promise((resolve) => requestAnimationFrame(resolve));
16084
+ await waitUntilNextFrame();
15934
16085
  if (unhandledElements.length > 0) {
15935
16086
  await copyWithFallback(unhandledElements, extraPrompt, resolvedComponentName2);
15936
16087
  } else if (pendingResults.length > 0) {
@@ -16833,56 +16984,6 @@ var init_core = __esm({
16833
16984
  }
16834
16985
  return true;
16835
16986
  };
16836
- const handleScreenshotShortcut = (event) => {
16837
- if (!isScreenshotSupported()) return false;
16838
- if (store.contextMenuPosition !== null) return false;
16839
- if (event.key?.toLowerCase() !== "s" || isPromptMode()) return false;
16840
- if (!isActivated() || !(event.metaKey || event.ctrlKey)) return false;
16841
- const allBounds = frozenElementsBounds();
16842
- const singleBounds = selectionBounds();
16843
- const element = store.frozenElement || targetElement();
16844
- const bounds = allBounds.length > 1 ? combineBounds(allBounds) : singleBounds;
16845
- if (!bounds) return false;
16846
- event.preventDefault();
16847
- event.stopPropagation();
16848
- const tagName = element ? getTagName(element) || "element" : "element";
16849
- const shouldDeactivate = store.wasActivatedByToggle;
16850
- const overlayBounds = createFlatOverlayBounds(bounds);
16851
- const selectionBoundsArray = allBounds.length > 1 ? allBounds : singleBounds ? [singleBounds] : [];
16852
- const instanceId = createLabelInstance(overlayBounds, tagName, void 0, "copying", {
16853
- element: element ?? void 0,
16854
- mouseX: bounds.x + bounds.width / 2,
16855
- boundsMultiple: selectionBoundsArray
16856
- });
16857
- isScreenshotInProgress = true;
16858
- rendererRoot.style.visibility = "hidden";
16859
- const elementsForScreenshot = store.frozenElements.length > 0 ? [...store.frozenElements] : element ? [element] : [];
16860
- void (async () => {
16861
- await delay(SCREENSHOT_CAPTURE_DELAY_MS);
16862
- let didSucceed = false;
16863
- let errorMessage;
16864
- try {
16865
- const rawBlob = await captureElementScreenshot(bounds);
16866
- const transformedBlob = await pluginRegistry.hooks.transformScreenshot(rawBlob, elementsForScreenshot, bounds);
16867
- didSucceed = await copyImageToClipboard(transformedBlob);
16868
- if (!didSucceed) {
16869
- errorMessage = "Failed to copy";
16870
- }
16871
- } catch (error) {
16872
- errorMessage = error instanceof Error && error.message ? error.message : "Screenshot failed";
16873
- }
16874
- isScreenshotInProgress = false;
16875
- rendererRoot.style.visibility = "";
16876
- actions.updateLabelInstance(instanceId, didSucceed ? "copied" : "error", didSucceed ? void 0 : errorMessage || "Unknown error");
16877
- scheduleLabelFade(instanceId);
16878
- if (shouldDeactivate) {
16879
- deactivateRenderer();
16880
- } else {
16881
- actions.unfreeze();
16882
- }
16883
- })();
16884
- return true;
16885
- };
16886
16987
  const clearActionCycleIdleTimeout = () => {
16887
16988
  if (actionCycleIdleTimeoutId !== null) {
16888
16989
  window.clearTimeout(actionCycleIdleTimeoutId);
@@ -17139,7 +17240,6 @@ var init_core = __esm({
17139
17240
  if (handleArrowNavigation(event)) return;
17140
17241
  if (handleEnterKeyActivation(event)) return;
17141
17242
  if (handleOpenFileShortcut(event)) return;
17142
- if (handleScreenshotShortcut(event)) return;
17143
17243
  if (!didWindowJustRegainFocus) {
17144
17244
  handleActivationKeys(event);
17145
17245
  }
@@ -17318,7 +17418,7 @@ var init_core = __esm({
17318
17418
  if (document.hidden) {
17319
17419
  actions.clearGrabbedBoxes();
17320
17420
  const storeActivationTimestamp = store.activationTimestamp;
17321
- if (isActivated() && !isPromptMode() && !isScreenshotInProgress && storeActivationTimestamp !== null && Date.now() - storeActivationTimestamp > BLUR_DEACTIVATION_THRESHOLD_MS) {
17421
+ if (isActivated() && !isPromptMode() && storeActivationTimestamp !== null && Date.now() - storeActivationTimestamp > BLUR_DEACTIVATION_THRESHOLD_MS) {
17322
17422
  deactivateRenderer();
17323
17423
  }
17324
17424
  }
@@ -17379,7 +17479,7 @@ var init_core = __esm({
17379
17479
  if (shouldRunInterval && boundsRecalcIntervalId === null) {
17380
17480
  boundsRecalcIntervalId = window.setInterval(() => {
17381
17481
  if (viewportChangeFrameId !== null) return;
17382
- viewportChangeFrameId = requestAnimationFrame(() => {
17482
+ viewportChangeFrameId = nativeRequestAnimationFrame(() => {
17383
17483
  viewportChangeFrameId = null;
17384
17484
  actions.incrementViewportVersion();
17385
17485
  actions.updateSessionBounds();
@@ -17389,7 +17489,7 @@ var init_core = __esm({
17389
17489
  window.clearInterval(boundsRecalcIntervalId);
17390
17490
  boundsRecalcIntervalId = null;
17391
17491
  if (viewportChangeFrameId !== null) {
17392
- cancelAnimationFrame(viewportChangeFrameId);
17492
+ nativeCancelAnimationFrame(viewportChangeFrameId);
17393
17493
  viewportChangeFrameId = null;
17394
17494
  }
17395
17495
  }
@@ -17408,7 +17508,7 @@ var init_core = __esm({
17408
17508
  window.clearInterval(boundsRecalcIntervalId);
17409
17509
  }
17410
17510
  if (viewportChangeFrameId !== null) {
17411
- cancelAnimationFrame(viewportChangeFrameId);
17511
+ nativeCancelAnimationFrame(viewportChangeFrameId);
17412
17512
  }
17413
17513
  });
17414
17514
  eventListenerManager.addDocumentListener("copy", (event) => {
@@ -17432,7 +17532,7 @@ var init_core = __esm({
17432
17532
  window.clearTimeout(actionCycleIdleTimeoutId);
17433
17533
  }
17434
17534
  if (dropdownTrackingFrameId !== null) {
17435
- cancelAnimationFrame(dropdownTrackingFrameId);
17535
+ nativeCancelAnimationFrame(dropdownTrackingFrameId);
17436
17536
  }
17437
17537
  grabbedBoxTimeouts.forEach((timeoutId) => window.clearTimeout(timeoutId));
17438
17538
  grabbedBoxTimeouts.clear();
@@ -17687,20 +17787,11 @@ var init_core = __esm({
17687
17787
  copy: copyAction,
17688
17788
  hooks: {
17689
17789
  transformHtmlContent: pluginRegistry.hooks.transformHtmlContent,
17690
- transformScreenshot: pluginRegistry.hooks.transformScreenshot,
17691
17790
  onOpenFile: pluginRegistry.hooks.onOpenFile,
17692
17791
  transformOpenFileUrl: pluginRegistry.hooks.transformOpenFileUrl
17693
17792
  },
17694
17793
  performWithFeedback: createPerformWithFeedback(element, elements, tagName, componentName, performWithFeedbackOptions),
17695
17794
  hideContextMenu: hideContextMenuAction,
17696
- hideOverlay: () => {
17697
- isScreenshotInProgress = true;
17698
- rendererRoot.style.visibility = "hidden";
17699
- },
17700
- showOverlay: () => {
17701
- isScreenshotInProgress = false;
17702
- rendererRoot.style.visibility = "";
17703
- },
17704
17795
  cleanup: () => {
17705
17796
  if (store.wasActivatedByToggle) {
17706
17797
  deactivateRenderer();
@@ -17792,13 +17883,13 @@ var init_core = __esm({
17792
17883
  }
17793
17884
  };
17794
17885
  const showHistoryItemPreview = (item, idPrefix) => {
17795
- const previewBounds = getHistoryPreviewBounds(item);
17796
17886
  const connectedElements = getConnectedHistoryElements(item);
17887
+ const previewBounds = connectedElements.map((element) => createElementBounds(element));
17797
17888
  addHistoryItemPreview(item, previewBounds, connectedElements, idPrefix);
17798
17889
  };
17799
17890
  const stopTrackingDropdownPosition = () => {
17800
17891
  if (dropdownTrackingFrameId !== null) {
17801
- cancelAnimationFrame(dropdownTrackingFrameId);
17892
+ nativeCancelAnimationFrame(dropdownTrackingFrameId);
17802
17893
  dropdownTrackingFrameId = null;
17803
17894
  }
17804
17895
  };
@@ -17806,7 +17897,7 @@ var init_core = __esm({
17806
17897
  stopTrackingDropdownPosition();
17807
17898
  const updatePosition = () => {
17808
17899
  computePosition();
17809
- dropdownTrackingFrameId = requestAnimationFrame(updatePosition);
17900
+ dropdownTrackingFrameId = nativeRequestAnimationFrame(updatePosition);
17810
17901
  };
17811
17902
  updatePosition();
17812
17903
  };
@@ -17934,7 +18025,7 @@ var init_core = __esm({
17934
18025
  const element = getFirstConnectedHistoryElement(item);
17935
18026
  if (!element) return;
17936
18027
  actions.clearLabelInstances();
17937
- requestAnimationFrame(() => {
18028
+ nativeRequestAnimationFrame(() => {
17938
18029
  if (!isElementConnected(element)) return;
17939
18030
  const bounds = createElementBounds(element);
17940
18031
  const instanceId = createLabelInstance(bounds, item.tagName, item.componentName, "copied", {
@@ -17991,7 +18082,7 @@ var init_core = __esm({
17991
18082
  });
17992
18083
  showClearPrompt();
17993
18084
  actions.clearLabelInstances();
17994
- requestAnimationFrame(() => {
18085
+ nativeRequestAnimationFrame(() => {
17995
18086
  batch(() => {
17996
18087
  for (const historyItem of currentHistoryItems) {
17997
18088
  const connectedElements = getConnectedHistoryElements(historyItem);
@@ -18466,6 +18557,7 @@ var init_core = __esm({
18466
18557
  componentName: source.componentName
18467
18558
  };
18468
18559
  },
18560
+ getStackContext,
18469
18561
  getState: () => ({
18470
18562
  isActive: isActivated(),
18471
18563
  isDragging: isDragging(),