made-refine 0.2.21 → 0.3.0

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/index.mjs CHANGED
@@ -7,7 +7,7 @@ import * as React8 from "react";
7
7
  import * as React from "react";
8
8
 
9
9
  // dist/styles.css
10
- var styles_default = '/*! tailwindcss v4.1.18 | 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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--leading-relaxed:1.625;--radius-sm:calc(.5rem - 4px);--radius-md:calc(.5rem - 2px);--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-border:#e6e6e6;--color-ring:#262626;--color-background:#fff;--color-foreground:#171717;--color-primary:#171717;--color-primary-foreground:#fafafa;--color-secondary-foreground:#171717;--color-destructive:#ef4444;--color-destructive-foreground:#fafafa;--color-muted:#f2f2f2;--color-muted-foreground:#737373;--color-popover-foreground:#171717}}@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}:root,:host{color-scheme:light;color:var(--color-foreground)}@media (prefers-color-scheme:dark){:root,:host(:not([data-theme])),:host([data-theme=system]){color-scheme:dark;color:var(--color-foreground);--color-border:#2e2e2e;--color-input:#2e2e2e;--color-ring:#d4d4d4;--color-background:#121212;--color-foreground:#fafafa;--color-primary:#fafafa;--color-primary-foreground:#171717;--color-secondary:#262626;--color-secondary-foreground:#fafafa;--color-destructive:#7f1d1d;--color-destructive-foreground:#fafafa;--color-muted:#262626;--color-muted-foreground:#a3a3a3;--color-accent:#262626;--color-accent-foreground:#fafafa;--color-popover:#171717;--color-popover-foreground:#fafafa}}:host([data-theme=dark]){color-scheme:dark;color:var(--color-foreground);--color-border:#2e2e2e;--color-input:#2e2e2e;--color-ring:#d4d4d4;--color-background:#121212;--color-foreground:#fafafa;--color-primary:#fafafa;--color-primary-foreground:#171717;--color-secondary:#262626;--color-secondary-foreground:#fafafa;--color-destructive:#7f1d1d;--color-destructive-foreground:#fafafa;--color-muted:#262626;--color-muted-foreground:#a3a3a3;--color-accent:#262626;--color-accent-foreground:#fafafa;--color-popover:#171717;--color-popover-foreground:#fafafa}*,:before,:after{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--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:var(--color-background);--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;border-color:var(--color-border)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-1\\/2{top:50%}.left-1\\.5{left:calc(var(--spacing)*1.5)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.isolate{isolation:isolate}.z-\\[99990\\]{z-index:99990}.z-\\[99991\\]{z-index:99991}.z-\\[99998\\]{z-index:99998}.z-\\[99999\\]{z-index:99999}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-4{margin:calc(var(--spacing)*4)}.mx-0\\.5{margin-inline:calc(var(--spacing)*.5)}.mx-2{margin-inline:calc(var(--spacing)*2)}.my-0\\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2\\.5{margin-top:calc(var(--spacing)*2.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.size-1{width:calc(var(--spacing)*1);height:calc(var(--spacing)*1)}.size-2\\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-full{width:100%;height:100%}.h-0\\.5{height:calc(var(--spacing)*.5)}.h-2{height:calc(var(--spacing)*2)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-\\[150px\\]{height:150px}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-\\[240px\\]{max-height:240px}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\\[18px\\]{min-height:18px}.w-0\\.5{width:calc(var(--spacing)*.5)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-14{width:calc(var(--spacing)*14)}.w-\\[1\\.5px\\]{width:1.5px}.w-\\[60px\\]{width:60px}.w-\\[68px\\]{width:68px}.w-\\[180px\\]{width:180px}.w-\\[200px\\]{width:200px}.w-\\[240px\\]{width:240px}.w-\\[260px\\]{width:260px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[18px\\]{min-width:18px}.min-w-\\[20px\\]{min-width:20px}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[120px\\]{min-width:120px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.origin-\\(--transform-origin\\){transform-origin:var(--transform-origin)}.-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)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.\\[appearance\\:textfield\\]{appearance:textfield}.appearance-none{appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.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-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.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-4{gap:calc(var(--spacing)*4)}.gap-\\[2px\\]{gap:2px}.gap-\\[4px\\]{gap:4px}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-\\[6px\\]{border-radius:6px}.rounded-\\[8px\\]{border-radius:8px}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-double{--tw-border-style:double;border-style:double}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.\\[border-top-style\\:solid\\]{border-top-style:solid}.\\[border-right-style\\:dashed\\]{border-right-style:dashed}.\\[border-bottom-style\\:dashed\\]{border-bottom-style:dashed}.\\[border-bottom-style\\:dotted\\]{border-bottom-style:dotted}.\\[border-bottom-style\\:solid\\]{border-bottom-style:solid}.\\[border-left-style\\:double\\]{border-left-style:double}.\\[border-left-style\\:solid\\]{border-left-style:solid}.border-border{border-color:var(--color-border)}.border-border\\/30{border-color:#e6e6e64d}@supports (color:color-mix(in lab, red, red)){.border-border\\/30{border-color:color-mix(in oklab,var(--color-border)30%,transparent)}}.border-border\\/50{border-color:#e6e6e680}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--color-border)50%,transparent)}}.border-foreground\\/10{border-color:#1717171a}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/10{border-color:color-mix(in oklab,var(--color-foreground)10%,transparent)}}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.bg-\\[canvas\\]{background-color:canvas}.bg-background{background-color:var(--color-background)}.bg-background\\/85{background-color:#ffffffd9}@supports (color:color-mix(in lab, red, red)){.bg-background\\/85{background-color:color-mix(in oklab,var(--color-background)85%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--color-border)}.bg-destructive{background-color:var(--color-destructive)}.bg-foreground{background-color:var(--color-foreground)}.bg-foreground\\/25{background-color:#17171740}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/25{background-color:color-mix(in oklab,var(--color-foreground)25%,transparent)}}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground\\/30{background-color:#7373734d}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/30{background-color:color-mix(in oklab,var(--color-muted-foreground)30%,transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-red-500{background-color:var(--color-red-500)}.bg-transparent{background-color:#0000}.fill-border{fill:var(--color-border)}.p-0{padding:calc(var(--spacing)*0)}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.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-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\\.5{padding-block:calc(var(--spacing)*3.5)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2\\.5{padding-top:calc(var(--spacing)*2.5)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-\\[13px\\]{padding-top:13px}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-1\\.5{padding-right:calc(var(--spacing)*1.5)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\\.5{padding-bottom:calc(var(--spacing)*1.5)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-7{padding-left:calc(var(--spacing)*7)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[7px\\]{font-size:7px}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.\\[overflow-wrap\\:anywhere\\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--color-background)}.text-blue-500{color:var(--color-blue-500)}.text-destructive-foreground{color:var(--color-destructive-foreground)}.text-foreground{color:var(--color-foreground)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.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,)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.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)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xs{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_4px_6px_-1px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 6px -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)}.shadow-\\[inset_0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:inset 0 0 0 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)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px 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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--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)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px 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)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-white{--tw-ring-color:var(--color-white)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-border{outline-color:var(--color-border)}.outline-foreground\\/10{outline-color:#1717171a}@supports (color:color-mix(in lab, red, red)){.outline-foreground\\/10{outline-color:color-mix(in oklab,var(--color-foreground)10%,transparent)}}.outline-red-500\\/70{outline-color:#fb2c36b3}@supports (color:color-mix(in lab, red, red)){.outline-red-500\\/70{outline-color:color-mix(in oklab,var(--color-red-500)70%,transparent)}}.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,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-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-\\[color\\,background-color\\]{transition-property:color,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,background-color\\,color\\]{transition-property:opacity,background-color,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,scale\\,opacity\\]{transition-property:transform,scale,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-shadow{transition-property:box-shadow;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-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.animate-in{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\\[-ms-overflow-style\\:none\\]{-ms-overflow-style:none}.\\[scrollbar-width\\:none\\]{scrollbar-width:none}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.fade-in-0{--tw-enter-opacity:0}.running{animation-play-state:running}.zoom-in-95{--tw-enter-scale:.95}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\\/pin\\:inline:is(:where(.group\\/pin):hover *){display:inline}}.file\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\:bg-transparent::file-selector-button{background-color:#0000}.file\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}.placeholder\\:text-red-400::placeholder{color:var(--color-red-400)}.focus-within\\:ring-1:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:ring-ring:focus-within{--tw-ring-color:var(--color-ring)}.focus-within\\:outline-none:focus-within{--tw-outline-style:none;outline-style:none}.focus-within\\:ring-inset:focus-within{--tw-ring-inset:inset}@media (hover:hover){.hover\\:scale-\\[1\\.67\\]:hover{scale:1.67}.hover\\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\\:bg-destructive\\/90:hover{background-color:#ef4444e6}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}.hover\\:bg-foreground\\/80:hover{background-color:#171717cc}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/80:hover{background-color:color-mix(in oklab,var(--color-foreground)80%,transparent)}}.hover\\:bg-muted:hover{background-color:var(--color-muted)}.hover\\:bg-muted-foreground\\/10:hover{background-color:#7373731a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/10:hover{background-color:color-mix(in oklab,var(--color-muted-foreground)10%,transparent)}}.hover\\:bg-muted\\/50:hover{background-color:#f2f2f280}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/50:hover{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.hover\\:bg-muted\\/80:hover{background-color:#f2f2f2cc}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/80:hover{background-color:color-mix(in oklab,var(--color-muted)80%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:#171717e6}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}.hover\\:text-foreground:hover{color:var(--color-foreground)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px 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)}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\\:cursor-grabbing:active{cursor:grabbing}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.data-ending-style\\:scale-90[data-ending-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-ending-style\\:opacity-0[data-ending-style]{opacity:0}.data-instant\\:transition-none[data-instant]{transition-property:none}.data-starting-style\\:scale-90[data-starting-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-starting-style\\:opacity-0[data-starting-style]{opacity:0}.data-\\[highlighted\\]\\:bg-muted[data-highlighted]{background-color:var(--color-muted)}.data-\\[highlighted\\]\\:bg-muted\\/50[data-highlighted]{background-color:#f2f2f280}@supports (color:color-mix(in lab, red, red)){.data-\\[highlighted\\]\\:bg-muted\\/50[data-highlighted]{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.data-\\[highlighted\\]\\:text-foreground[data-highlighted]{color:var(--color-foreground)}@media (prefers-color-scheme:dark){.dark\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\\:-outline-offset-1{outline-offset:calc(1px*-1)}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:size-3\\.5 svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&\\:\\:-webkit-inner-spin-button\\]\\:appearance-none::-webkit-inner-spin-button{appearance:none}.\\[\\&\\:\\:-webkit-outer-spin-button\\]\\:appearance-none::-webkit-outer-spin-button{appearance:none}.\\[\\&\\:\\:-webkit-scrollbar\\]\\:hidden::-webkit-scrollbar{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none;animation:none}}.lucide{stroke-width:1px}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@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-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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@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-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}@keyframes pulse{50%{opacity:.5}}';
10
+ var styles_default = '/*! tailwindcss v4.1.18 | 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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--leading-relaxed:1.625;--radius-sm:calc(.5rem - 4px);--radius-md:calc(.5rem - 2px);--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-border:#e6e6e6;--color-ring:#262626;--color-background:#fff;--color-foreground:#171717;--color-primary:#171717;--color-primary-foreground:#fafafa;--color-secondary-foreground:#171717;--color-destructive:#ef4444;--color-destructive-foreground:#fafafa;--color-muted:#f2f2f2;--color-muted-foreground:#737373;--color-popover-foreground:#171717}}@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}:root,:host{color-scheme:light;color:var(--color-foreground)}@media (prefers-color-scheme:dark){:root,:host(:not([data-theme])),:host([data-theme=system]){color-scheme:dark;color:var(--color-foreground);--color-border:#2e2e2e;--color-input:#2e2e2e;--color-ring:#d4d4d4;--color-background:#121212;--color-foreground:#fafafa;--color-primary:#fafafa;--color-primary-foreground:#171717;--color-secondary:#262626;--color-secondary-foreground:#fafafa;--color-destructive:#7f1d1d;--color-destructive-foreground:#fafafa;--color-muted:#262626;--color-muted-foreground:#a3a3a3;--color-accent:#262626;--color-accent-foreground:#fafafa;--color-popover:#171717;--color-popover-foreground:#fafafa}}:host([data-theme=dark]){color-scheme:dark;color:var(--color-foreground);--color-border:#2e2e2e;--color-input:#2e2e2e;--color-ring:#d4d4d4;--color-background:#121212;--color-foreground:#fafafa;--color-primary:#fafafa;--color-primary-foreground:#171717;--color-secondary:#262626;--color-secondary-foreground:#fafafa;--color-destructive:#7f1d1d;--color-destructive-foreground:#fafafa;--color-muted:#262626;--color-muted-foreground:#a3a3a3;--color-accent:#262626;--color-accent-foreground:#fafafa;--color-popover:#171717;--color-popover-foreground:#fafafa}*,:before,:after{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--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:var(--color-background);--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;border-color:var(--color-border)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.top-1\\/2{top:50%}.left-1\\.5{left:calc(var(--spacing)*1.5)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.isolate{isolation:isolate}.z-\\[99990\\]{z-index:99990}.z-\\[99991\\]{z-index:99991}.z-\\[99998\\]{z-index:99998}.z-\\[99999\\]{z-index:99999}.\\!container{width:100%!important}@media (min-width:40rem){.\\!container{max-width:40rem!important}}@media (min-width:48rem){.\\!container{max-width:48rem!important}}@media (min-width:64rem){.\\!container{max-width:64rem!important}}@media (min-width:80rem){.\\!container{max-width:80rem!important}}@media (min-width:96rem){.\\!container{max-width:96rem!important}}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-4{margin:calc(var(--spacing)*4)}.mx-0\\.5{margin-inline:calc(var(--spacing)*.5)}.mx-2{margin-inline:calc(var(--spacing)*2)}.my-0\\.5{margin-block:calc(var(--spacing)*.5)}.my-1{margin-block:calc(var(--spacing)*1)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2\\.5{margin-top:calc(var(--spacing)*2.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.list-item{display:list-item}.table{display:table}.size-1{width:calc(var(--spacing)*1);height:calc(var(--spacing)*1)}.size-2\\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-full{width:100%;height:100%}.h-0\\.5{height:calc(var(--spacing)*.5)}.h-2{height:calc(var(--spacing)*2)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-\\[150px\\]{height:150px}.h-auto{height:auto}.h-fit{height:fit-content}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-\\[240px\\]{max-height:240px}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\\[18px\\]{min-height:18px}.w-0\\.5{width:calc(var(--spacing)*.5)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-14{width:calc(var(--spacing)*14)}.w-\\[1\\.5px\\]{width:1.5px}.w-\\[60px\\]{width:60px}.w-\\[68px\\]{width:68px}.w-\\[180px\\]{width:180px}.w-\\[200px\\]{width:200px}.w-\\[240px\\]{width:240px}.w-\\[260px\\]{width:260px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[18px\\]{min-width:18px}.min-w-\\[20px\\]{min-width:20px}.min-w-\\[100px\\]{min-width:100px}.min-w-\\[120px\\]{min-width:120px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.origin-\\(--transform-origin\\){transform-origin:var(--transform-origin)}.-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)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.\\[appearance\\:textfield\\]{appearance:textfield}.appearance-none{appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.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-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.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-4{gap:calc(var(--spacing)*4)}.gap-\\[2px\\]{gap:2px}.gap-\\[4px\\]{gap:4px}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded{border-radius:.25rem}.rounded-\\[6px\\]{border-radius:6px}.rounded-\\[8px\\]{border-radius:8px}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-tl{border-top-left-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-double{--tw-border-style:double;border-style:double}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.\\[border-top-style\\:solid\\]{border-top-style:solid}.\\[border-right-style\\:dashed\\]{border-right-style:dashed}.\\[border-bottom-style\\:dashed\\]{border-bottom-style:dashed}.\\[border-bottom-style\\:dotted\\]{border-bottom-style:dotted}.\\[border-bottom-style\\:solid\\]{border-bottom-style:solid}.\\[border-left-style\\:double\\]{border-left-style:double}.\\[border-left-style\\:solid\\]{border-left-style:solid}.border-border{border-color:var(--color-border)}.border-border\\/30{border-color:#e6e6e64d}@supports (color:color-mix(in lab, red, red)){.border-border\\/30{border-color:color-mix(in oklab,var(--color-border)30%,transparent)}}.border-border\\/50{border-color:#e6e6e680}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--color-border)50%,transparent)}}.border-foreground\\/10{border-color:#1717171a}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/10{border-color:color-mix(in oklab,var(--color-foreground)10%,transparent)}}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.bg-\\[canvas\\]{background-color:canvas}.bg-background{background-color:var(--color-background)}.bg-background\\/85{background-color:#ffffffd9}@supports (color:color-mix(in lab, red, red)){.bg-background\\/85{background-color:color-mix(in oklab,var(--color-background)85%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--color-border)}.bg-destructive{background-color:var(--color-destructive)}.bg-foreground{background-color:var(--color-foreground)}.bg-foreground\\/25{background-color:#17171740}@supports (color:color-mix(in lab, red, red)){.bg-foreground\\/25{background-color:color-mix(in oklab,var(--color-foreground)25%,transparent)}}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground\\/30{background-color:#7373734d}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/30{background-color:color-mix(in oklab,var(--color-muted-foreground)30%,transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-red-500{background-color:var(--color-red-500)}.bg-transparent{background-color:#0000}.fill-border{fill:var(--color-border)}.p-0{padding:calc(var(--spacing)*0)}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.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-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-3\\.5{padding-block:calc(var(--spacing)*3.5)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2\\.5{padding-top:calc(var(--spacing)*2.5)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-\\[13px\\]{padding-top:13px}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-1\\.5{padding-right:calc(var(--spacing)*1.5)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\\.5{padding-bottom:calc(var(--spacing)*1.5)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-7{padding-left:calc(var(--spacing)*7)}.text-center{text-align:center}.text-justify{text-align:justify}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[7px\\]{font-size:7px}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.leading-\\[18px\\]{--tw-leading:18px;line-height:18px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-extralight{--tw-font-weight:var(--font-weight-extralight);font-weight:var(--font-weight-extralight)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.\\[overflow-wrap\\:anywhere\\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--color-background)}.text-blue-500{color:var(--color-blue-500)}.text-destructive-foreground{color:var(--color-destructive-foreground)}.text-foreground{color:var(--color-foreground)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.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,)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.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)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xs{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#0000004d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_4px_6px_-1px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 6px -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)}.shadow-\\[inset_0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:inset 0 0 0 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)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px 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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--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)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px 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)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-white{--tw-ring-color:var(--color-white)}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.outline-border{outline-color:var(--color-border)}.outline-foreground\\/10{outline-color:#1717171a}@supports (color:color-mix(in lab, red, red)){.outline-foreground\\/10{outline-color:color-mix(in oklab,var(--color-foreground)10%,transparent)}}.outline-red-500\\/70{outline-color:#fb2c36b3}@supports (color:color-mix(in lab, red, red)){.outline-red-500\\/70{outline-color:color-mix(in oklab,var(--color-red-500)70%,transparent)}}.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,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-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-\\[color\\,background-color\\]{transition-property:color,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[opacity\\,background-color\\,color\\]{transition-property:opacity,background-color,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[transform\\,scale\\,opacity\\]{transition-property:transform,scale,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-shadow{transition-property:box-shadow;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-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.animate-in{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\\[-ms-overflow-style\\:none\\]{-ms-overflow-style:none}.\\[scrollbar-width\\:none\\]{scrollbar-width:none}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.fade-in-0{--tw-enter-opacity:0}.running{animation-play-state:running}.zoom-in-95{--tw-enter-scale:.95}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\\/pin\\:inline:is(:where(.group\\/pin):hover *){display:inline}}.file\\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\\:bg-transparent::file-selector-button{background-color:#0000}.file\\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}.placeholder\\:text-red-400::placeholder{color:var(--color-red-400)}.focus-within\\:ring-1:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:ring-ring:focus-within{--tw-ring-color:var(--color-ring)}.focus-within\\:outline-none:focus-within{--tw-outline-style:none;outline-style:none}.focus-within\\:ring-inset:focus-within{--tw-ring-inset:inset}@media (hover:hover){.hover\\:scale-\\[1\\.67\\]:hover{scale:1.67}.hover\\:bg-blue-600:hover{background-color:var(--color-blue-600)}.hover\\:bg-destructive\\/90:hover{background-color:#ef4444e6}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--color-destructive)90%,transparent)}}.hover\\:bg-foreground\\/80:hover{background-color:#171717cc}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-foreground\\/80:hover{background-color:color-mix(in oklab,var(--color-foreground)80%,transparent)}}.hover\\:bg-muted:hover{background-color:var(--color-muted)}.hover\\:bg-muted-foreground\\/10:hover{background-color:#7373731a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/10:hover{background-color:color-mix(in oklab,var(--color-muted-foreground)10%,transparent)}}.hover\\:bg-muted\\/50:hover{background-color:#f2f2f280}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/50:hover{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.hover\\:bg-muted\\/80:hover{background-color:#f2f2f2cc}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted\\/80:hover{background-color:color-mix(in oklab,var(--color-muted)80%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:#171717e6}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--color-primary)90%,transparent)}}.hover\\:text-foreground:hover{color:var(--color-foreground)}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px 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)}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-ring:focus-visible{--tw-ring-color:var(--color-ring)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-inset:focus-visible{--tw-ring-inset:inset}.active\\:cursor-grabbing:active{cursor:grabbing}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.data-ending-style\\:scale-90[data-ending-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-ending-style\\:opacity-0[data-ending-style]{opacity:0}.data-instant\\:transition-none[data-instant]{transition-property:none}.data-starting-style\\:scale-90[data-starting-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-starting-style\\:opacity-0[data-starting-style]{opacity:0}.data-\\[highlighted\\]\\:bg-muted[data-highlighted]{background-color:var(--color-muted)}.data-\\[highlighted\\]\\:bg-muted\\/50[data-highlighted]{background-color:#f2f2f280}@supports (color:color-mix(in lab, red, red)){.data-\\[highlighted\\]\\:bg-muted\\/50[data-highlighted]{background-color:color-mix(in oklab,var(--color-muted)50%,transparent)}}.data-\\[highlighted\\]\\:text-foreground[data-highlighted]{color:var(--color-foreground)}@media (prefers-color-scheme:dark){.dark\\:shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.dark\\:-outline-offset-1{outline-offset:calc(1px*-1)}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:size-3\\.5 svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&\\:\\:-webkit-inner-spin-button\\]\\:appearance-none::-webkit-inner-spin-button{appearance:none}.\\[\\&\\:\\:-webkit-outer-spin-button\\]\\:appearance-none::-webkit-outer-spin-button{appearance:none}.\\[\\&\\:\\:-webkit-scrollbar\\]\\:hidden::-webkit-scrollbar{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none;animation:none}}.lucide{stroke-width:1px}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@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-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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@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-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}@keyframes pulse{50%{opacity:.5}}';
11
11
 
12
12
  // src/portal-container.tsx
13
13
  import { jsx } from "react/jsx-runtime";
@@ -492,14 +492,7 @@ function getReactComponentInfo(element) {
492
492
  }
493
493
  return { ...getRenderStack(fiber), elementSourceFile };
494
494
  }
495
- var EXCLUDED_PROP_KEYS = /* @__PURE__ */ new Set([
496
- "className",
497
- "style",
498
- "children",
499
- "ref",
500
- "key",
501
- "render"
502
- ]);
495
+ var EXCLUDED_PROP_KEYS = /* @__PURE__ */ new Set(["className", "style", "children", "ref", "key", "render"]);
503
496
  function serializePropValue(value) {
504
497
  if (typeof value === "function") return "[function]";
505
498
  if (typeof value === "symbol") return void 0;
@@ -610,19 +603,7 @@ function classifyComponentFiber(fiber, frames, elementSourceFile) {
610
603
  return { isComponentPrimitive: false };
611
604
  }
612
605
 
613
- // src/utils.ts
614
- function clamp(value, min, max) {
615
- if (!Number.isFinite(value)) return min;
616
- if (max < min) return min;
617
- return Math.max(min, Math.min(max, value));
618
- }
619
- function isInputFocused() {
620
- let active = document.activeElement;
621
- while (active?.shadowRoot?.activeElement) {
622
- active = active.shadowRoot.activeElement;
623
- }
624
- return active instanceof HTMLInputElement || active instanceof HTMLTextAreaElement || active instanceof HTMLElement && active.isContentEditable;
625
- }
606
+ // src/utils/computed-styles.ts
626
607
  function getComputedStyles(element) {
627
608
  const computed = window.getComputedStyle(element);
628
609
  return {
@@ -731,6 +712,255 @@ function getOriginalInlineStyles(element) {
731
712
  }
732
713
  return styles;
733
714
  }
715
+ function getComputedTypography(element) {
716
+ const computed = window.getComputedStyle(element);
717
+ let textVerticalAlign = "flex-start";
718
+ if (computed.display === "flex" || computed.display === "inline-flex") {
719
+ const alignItems = computed.alignItems;
720
+ if (alignItems === "center") textVerticalAlign = "center";
721
+ else if (alignItems === "flex-end" || alignItems === "end") textVerticalAlign = "flex-end";
722
+ }
723
+ const lineHeight = computed.lineHeight === "normal" ? {
724
+ numericValue: parseFloat(computed.fontSize) * 1.2,
725
+ unit: "px",
726
+ raw: `${Math.round(parseFloat(computed.fontSize) * 1.2)}px`
727
+ } : parsePropertyValue(computed.lineHeight);
728
+ const fontSize = parseFloat(computed.fontSize);
729
+ let letterSpacing;
730
+ if (computed.letterSpacing === "normal") {
731
+ letterSpacing = { numericValue: 0, unit: "em", raw: "0em" };
732
+ } else {
733
+ const parsed = parsePropertyValue(computed.letterSpacing);
734
+ if (parsed.unit === "px" && fontSize > 0) {
735
+ const emValue = Math.round(parsed.numericValue / fontSize * 100) / 100;
736
+ letterSpacing = { numericValue: emValue, unit: "em", raw: `${emValue}em` };
737
+ } else {
738
+ letterSpacing = parsed;
739
+ }
740
+ }
741
+ return {
742
+ fontFamily: computed.fontFamily,
743
+ fontWeight: computed.fontWeight,
744
+ fontSize: parsePropertyValue(computed.fontSize),
745
+ lineHeight,
746
+ letterSpacing,
747
+ textAlign: computed.textAlign,
748
+ textVerticalAlign
749
+ };
750
+ }
751
+ function getComputedSizing(element) {
752
+ return {
753
+ width: getSizingValue(element, "width"),
754
+ height: getSizingValue(element, "height")
755
+ };
756
+ }
757
+ var TEXT_ELEMENT_TAGS = /* @__PURE__ */ new Set([
758
+ "p",
759
+ "h1",
760
+ "h2",
761
+ "h3",
762
+ "h4",
763
+ "h5",
764
+ "h6",
765
+ "span",
766
+ "label",
767
+ "a",
768
+ "strong",
769
+ "em",
770
+ "small",
771
+ "blockquote",
772
+ "li",
773
+ "td",
774
+ "th",
775
+ "caption",
776
+ "figcaption",
777
+ "legend",
778
+ "dt",
779
+ "dd",
780
+ "abbr",
781
+ "cite",
782
+ "code",
783
+ "pre"
784
+ ]);
785
+ function hasDirectNonWhitespaceText(element) {
786
+ return Array.from(element.childNodes).some(
787
+ (node) => node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim())
788
+ );
789
+ }
790
+ var TRANSPARENT_COLOR = { hex: "000000", alpha: 0, raw: "transparent" };
791
+ function isVisibleBorderSide(side) {
792
+ return side.style !== "none" && side.style !== "hidden" && parseFloat(side.width) > 0;
793
+ }
794
+ function hasVisibleOutline(computed) {
795
+ return computed.outlineStyle !== "none" && parseFloat(computed.outlineWidth) > 0;
796
+ }
797
+ function parseVisibleColor(value, fallbackCurrentColor) {
798
+ const raw = value.trim();
799
+ const lowered = raw.toLowerCase();
800
+ if (!raw || lowered === "none" || lowered === "transparent") {
801
+ return null;
802
+ }
803
+ const resolved = /^currentcolor$/i.test(raw) ? fallbackCurrentColor ?? raw : raw;
804
+ const parsed = parseColorValue(resolved);
805
+ if (parsed.alpha <= 0) {
806
+ return null;
807
+ }
808
+ return parsed;
809
+ }
810
+ function addUniqueColor(colors, color) {
811
+ if (!color) return;
812
+ colors.set(`${color.hex}:${color.alpha}`, color);
813
+ }
814
+ function isTextRenderingFormControl(element) {
815
+ if (element instanceof HTMLTextAreaElement) return true;
816
+ if (element instanceof HTMLSelectElement) return true;
817
+ if (element instanceof HTMLButtonElement) return true;
818
+ if (element instanceof HTMLInputElement) {
819
+ const textlessInputTypes = /* @__PURE__ */ new Set([
820
+ "hidden",
821
+ "checkbox",
822
+ "radio",
823
+ "range",
824
+ "color",
825
+ "file",
826
+ "image"
827
+ ]);
828
+ return !textlessInputTypes.has(element.type.toLowerCase());
829
+ }
830
+ return false;
831
+ }
832
+ function hasRenderableTextNode(element) {
833
+ if (element.isContentEditable) return true;
834
+ if (isTextRenderingFormControl(element)) return true;
835
+ if (!element.textContent?.trim()) return false;
836
+ if (hasDirectNonWhitespaceText(element)) return true;
837
+ const tagName = element.tagName.toLowerCase();
838
+ return TEXT_ELEMENT_TAGS.has(tagName) || element.children.length === 0;
839
+ }
840
+ function getComputedBoxShadow(element) {
841
+ const computed = window.getComputedStyle(element);
842
+ const value = computed.boxShadow.trim();
843
+ return value || "none";
844
+ }
845
+ function getComputedColorStyles(element) {
846
+ const computed = window.getComputedStyle(element);
847
+ const borderSides = [
848
+ {
849
+ style: computed.borderTopStyle,
850
+ width: computed.borderTopWidth,
851
+ color: computed.borderTopColor
852
+ },
853
+ {
854
+ style: computed.borderRightStyle,
855
+ width: computed.borderRightWidth,
856
+ color: computed.borderRightColor
857
+ },
858
+ {
859
+ style: computed.borderBottomStyle,
860
+ width: computed.borderBottomWidth,
861
+ color: computed.borderBottomColor
862
+ },
863
+ {
864
+ style: computed.borderLeftStyle,
865
+ width: computed.borderLeftWidth,
866
+ color: computed.borderLeftColor
867
+ }
868
+ ];
869
+ const visibleBorderSide = borderSides.find((side) => isVisibleBorderSide(side));
870
+ const hasBorder = Boolean(visibleBorderSide);
871
+ const hasOutline = hasVisibleOutline(computed);
872
+ return {
873
+ backgroundColor: parseColorValue(computed.backgroundColor),
874
+ color: parseColorValue(computed.color),
875
+ borderColor: hasBorder && visibleBorderSide ? parseColorValue(visibleBorderSide.color) : TRANSPARENT_COLOR,
876
+ outlineColor: hasOutline ? parseColorValue(computed.outlineColor) : TRANSPARENT_COLOR
877
+ };
878
+ }
879
+ function getSelectionColors(element) {
880
+ const uniqueColors = /* @__PURE__ */ new Map();
881
+ const queue = [element];
882
+ for (let index = 0; index < queue.length; index++) {
883
+ const node = queue[index];
884
+ const computed = window.getComputedStyle(node);
885
+ if (computed.display === "none") {
886
+ continue;
887
+ }
888
+ const isVisibilityHidden = computed.visibility === "hidden" || computed.visibility === "collapse";
889
+ const currentTextColor = computed.color;
890
+ if (!isVisibilityHidden) {
891
+ addUniqueColor(uniqueColors, parseVisibleColor(computed.backgroundColor));
892
+ if (node instanceof HTMLElement && hasRenderableTextNode(node)) {
893
+ addUniqueColor(uniqueColors, parseVisibleColor(currentTextColor));
894
+ }
895
+ const borderSides = [
896
+ {
897
+ style: computed.borderTopStyle,
898
+ width: computed.borderTopWidth,
899
+ color: computed.borderTopColor
900
+ },
901
+ {
902
+ style: computed.borderRightStyle,
903
+ width: computed.borderRightWidth,
904
+ color: computed.borderRightColor
905
+ },
906
+ {
907
+ style: computed.borderBottomStyle,
908
+ width: computed.borderBottomWidth,
909
+ color: computed.borderBottomColor
910
+ },
911
+ {
912
+ style: computed.borderLeftStyle,
913
+ width: computed.borderLeftWidth,
914
+ color: computed.borderLeftColor
915
+ }
916
+ ];
917
+ for (const side of borderSides) {
918
+ if (!isVisibleBorderSide(side)) continue;
919
+ addUniqueColor(uniqueColors, parseVisibleColor(side.color, currentTextColor));
920
+ }
921
+ if (hasVisibleOutline(computed)) {
922
+ addUniqueColor(uniqueColors, parseVisibleColor(computed.outlineColor, currentTextColor));
923
+ }
924
+ if (node instanceof SVGElement) {
925
+ const fillColor = parseVisibleColor(computed.getPropertyValue("fill"), currentTextColor) ?? parseVisibleColor(node.getAttribute("fill") ?? "", currentTextColor);
926
+ const strokeColor = parseVisibleColor(computed.getPropertyValue("stroke"), currentTextColor) ?? parseVisibleColor(node.getAttribute("stroke") ?? "", currentTextColor);
927
+ addUniqueColor(uniqueColors, fillColor);
928
+ addUniqueColor(uniqueColors, strokeColor);
929
+ }
930
+ }
931
+ for (const child of node.children) {
932
+ queue.push(child);
933
+ }
934
+ }
935
+ return Array.from(uniqueColors.values());
936
+ }
937
+ function getAllComputedStyles(element) {
938
+ const { spacing, borderRadius, flex } = getComputedStyles(element);
939
+ return {
940
+ spacing,
941
+ borderRadius,
942
+ border: getComputedBorderStyles(element),
943
+ flex,
944
+ sizing: getComputedSizing(element),
945
+ color: getComputedColorStyles(element),
946
+ boxShadow: getComputedBoxShadow(element),
947
+ typography: getComputedTypography(element)
948
+ };
949
+ }
950
+
951
+ // src/utils.ts
952
+ function clamp(value, min, max) {
953
+ if (!Number.isFinite(value)) return min;
954
+ if (max < min) return min;
955
+ return Math.max(min, Math.min(max, value));
956
+ }
957
+ function isInputFocused() {
958
+ let active = document.activeElement;
959
+ while (active?.shadowRoot?.activeElement) {
960
+ active = active.shadowRoot.activeElement;
961
+ }
962
+ return active instanceof HTMLInputElement || active instanceof HTMLTextAreaElement || active instanceof HTMLElement && active.isContentEditable;
963
+ }
734
964
  var spacingScale = { 0: "0", 1: "px", 2: "0.5", 4: "1", 8: "2", 12: "3", 16: "4", 20: "5", 24: "6", 32: "8" };
735
965
  var tailwindClassMap = {
736
966
  padding: { prefix: "p", scale: spacingScale },
@@ -1057,7 +1287,7 @@ var typographyPropertyToCSSMap = {
1057
1287
  textAlign: "text-align",
1058
1288
  textVerticalAlign: "align-items"
1059
1289
  };
1060
- var TEXT_ELEMENT_TAGS = /* @__PURE__ */ new Set([
1290
+ var TEXT_ELEMENT_TAGS2 = /* @__PURE__ */ new Set([
1061
1291
  "p",
1062
1292
  "h1",
1063
1293
  "h2",
@@ -1085,17 +1315,17 @@ var TEXT_ELEMENT_TAGS = /* @__PURE__ */ new Set([
1085
1315
  "code",
1086
1316
  "pre"
1087
1317
  ]);
1088
- function hasDirectNonWhitespaceText(element) {
1318
+ function hasDirectNonWhitespaceText2(element) {
1089
1319
  return Array.from(element.childNodes).some(
1090
1320
  (node) => node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim())
1091
1321
  );
1092
1322
  }
1093
1323
  function isTextElement2(element) {
1094
1324
  const tagName = element.tagName.toLowerCase();
1095
- if (TEXT_ELEMENT_TAGS.has(tagName)) {
1325
+ if (TEXT_ELEMENT_TAGS2.has(tagName)) {
1096
1326
  return true;
1097
1327
  }
1098
- if (hasDirectNonWhitespaceText(element)) {
1328
+ if (hasDirectNonWhitespaceText2(element)) {
1099
1329
  return true;
1100
1330
  }
1101
1331
  if (element.children.length === 0 && element.textContent?.trim()) {
@@ -1103,38 +1333,6 @@ function isTextElement2(element) {
1103
1333
  }
1104
1334
  return false;
1105
1335
  }
1106
- function getComputedTypography(element) {
1107
- const computed = window.getComputedStyle(element);
1108
- let textVerticalAlign = "flex-start";
1109
- if (computed.display === "flex" || computed.display === "inline-flex") {
1110
- const alignItems = computed.alignItems;
1111
- if (alignItems === "center") textVerticalAlign = "center";
1112
- else if (alignItems === "flex-end" || alignItems === "end") textVerticalAlign = "flex-end";
1113
- }
1114
- const lineHeight = computed.lineHeight === "normal" ? { numericValue: parseFloat(computed.fontSize) * 1.2, unit: "px", raw: `${Math.round(parseFloat(computed.fontSize) * 1.2)}px` } : parsePropertyValue(computed.lineHeight);
1115
- const fontSize = parseFloat(computed.fontSize);
1116
- let letterSpacing;
1117
- if (computed.letterSpacing === "normal") {
1118
- letterSpacing = { numericValue: 0, unit: "em", raw: "0em" };
1119
- } else {
1120
- const parsed = parsePropertyValue(computed.letterSpacing);
1121
- if (parsed.unit === "px" && fontSize > 0) {
1122
- const emValue = Math.round(parsed.numericValue / fontSize * 100) / 100;
1123
- letterSpacing = { numericValue: emValue, unit: "em", raw: `${emValue}em` };
1124
- } else {
1125
- letterSpacing = parsed;
1126
- }
1127
- }
1128
- return {
1129
- fontFamily: computed.fontFamily,
1130
- fontWeight: computed.fontWeight,
1131
- fontSize: parsePropertyValue(computed.fontSize),
1132
- lineHeight,
1133
- letterSpacing,
1134
- textAlign: computed.textAlign,
1135
- textVerticalAlign
1136
- };
1137
- }
1138
1336
  function detectSizingMode(element, dimension) {
1139
1337
  const computed = window.getComputedStyle(element);
1140
1338
  const inlineValue = element.style[dimension];
@@ -1182,12 +1380,6 @@ function getSizingValue(element, dimension) {
1182
1380
  }
1183
1381
  };
1184
1382
  }
1185
- function getComputedSizing(element) {
1186
- return {
1187
- width: getSizingValue(element, "width"),
1188
- height: getSizingValue(element, "height")
1189
- };
1190
- }
1191
1383
  function sizingValueToCSS(sizing) {
1192
1384
  switch (sizing.mode) {
1193
1385
  case "fill":
@@ -1227,202 +1419,74 @@ function parseRgbAlpha(value) {
1227
1419
  const token = value.trim();
1228
1420
  if (token.endsWith("%")) {
1229
1421
  const numeric2 = parseFloat(token.slice(0, -1));
1230
- if (!Number.isFinite(numeric2)) return null;
1231
- return Math.max(0, Math.min(100, numeric2)) / 100;
1232
- }
1233
- const numeric = parseFloat(token);
1234
- if (!Number.isFinite(numeric)) return null;
1235
- return Math.max(0, Math.min(1, numeric));
1236
- }
1237
- function parseRgbaColor(rgba) {
1238
- const raw = rgba.trim();
1239
- const fnMatch = raw.match(/^rgba?\((.*)\)$/i);
1240
- if (!fnMatch) {
1241
- return { hex: "000000", alpha: 100, raw: rgba };
1242
- }
1243
- const body = fnMatch[1].trim();
1244
- let channelTokens = null;
1245
- let alphaToken;
1246
- const commaParts = body.split(",").map((part) => part.trim()).filter(Boolean);
1247
- if (commaParts.length === 3 || commaParts.length === 4) {
1248
- channelTokens = [commaParts[0], commaParts[1], commaParts[2]];
1249
- alphaToken = commaParts[3];
1250
- } else {
1251
- const slashParts = body.split("/");
1252
- if (slashParts.length === 1 || slashParts.length === 2) {
1253
- const channels = slashParts[0].trim().split(/\s+/).filter(Boolean);
1254
- if (channels.length === 3) {
1255
- channelTokens = [channels[0], channels[1], channels[2]];
1256
- alphaToken = slashParts[1]?.trim();
1257
- }
1258
- }
1259
- }
1260
- if (!channelTokens) {
1261
- return { hex: "000000", alpha: 100, raw: rgba };
1262
- }
1263
- const r = parseRgbChannel(channelTokens[0]);
1264
- const g = parseRgbChannel(channelTokens[1]);
1265
- const b = parseRgbChannel(channelTokens[2]);
1266
- const a = parseRgbAlpha(alphaToken);
1267
- if (r === null || g === null || b === null || a === null) {
1268
- return { hex: "000000", alpha: 100, raw: rgba };
1269
- }
1270
- const hex = [r, g, b].map((v) => v.toString(16).padStart(2, "0")).join("").toUpperCase();
1271
- const alpha = Math.round(a * 100);
1272
- return { hex, alpha, raw: rgba };
1273
- }
1274
- function parseNamedColor(name) {
1275
- const ctx = document.createElement("canvas").getContext("2d");
1276
- if (!ctx) {
1277
- return { hex: "000000", alpha: 100, raw: name };
1278
- }
1279
- ctx.fillStyle = name;
1280
- const computed = ctx.fillStyle;
1281
- if (computed.startsWith("#")) {
1282
- return parseHexColor(computed);
1283
- }
1284
- return parseRgbaColor(computed);
1285
- }
1286
- function parseColorValue(cssValue) {
1287
- const raw = cssValue.trim();
1288
- if (raw === "transparent") {
1289
- return { hex: "000000", alpha: 0, raw };
1290
- }
1291
- if (raw.startsWith("#")) {
1292
- return parseHexColor(raw);
1293
- }
1294
- if (raw.startsWith("rgb")) {
1295
- return parseRgbaColor(raw);
1296
- }
1297
- return parseNamedColor(raw);
1298
- }
1299
- var TRANSPARENT_COLOR = { hex: "000000", alpha: 0, raw: "transparent" };
1300
- function isVisibleBorderSide(side) {
1301
- return side.style !== "none" && side.style !== "hidden" && parseFloat(side.width) > 0;
1302
- }
1303
- function hasVisibleOutline(computed) {
1304
- return computed.outlineStyle !== "none" && parseFloat(computed.outlineWidth) > 0;
1305
- }
1306
- function parseVisibleColor(value, fallbackCurrentColor) {
1307
- const raw = value.trim();
1308
- const lowered = raw.toLowerCase();
1309
- if (!raw || lowered === "none" || lowered === "transparent") {
1310
- return null;
1311
- }
1312
- const resolved = /^currentcolor$/i.test(raw) ? fallbackCurrentColor ?? raw : raw;
1313
- const parsed = parseColorValue(resolved);
1314
- if (parsed.alpha <= 0) {
1315
- return null;
1316
- }
1317
- return parsed;
1318
- }
1319
- function addUniqueColor(colors, color) {
1320
- if (!color) return;
1321
- colors.set(`${color.hex}:${color.alpha}`, color);
1322
- }
1323
- function isTextRenderingFormControl(element) {
1324
- if (element instanceof HTMLTextAreaElement) return true;
1325
- if (element instanceof HTMLSelectElement) return true;
1326
- if (element instanceof HTMLButtonElement) return true;
1327
- if (element instanceof HTMLInputElement) {
1328
- const textlessInputTypes = /* @__PURE__ */ new Set([
1329
- "hidden",
1330
- "checkbox",
1331
- "radio",
1332
- "range",
1333
- "color",
1334
- "file",
1335
- "image"
1336
- ]);
1337
- return !textlessInputTypes.has(element.type.toLowerCase());
1338
- }
1339
- return false;
1340
- }
1341
- function hasRenderableTextNode(element) {
1342
- if (element.isContentEditable) return true;
1343
- if (isTextRenderingFormControl(element)) return true;
1344
- if (!element.textContent?.trim()) return false;
1345
- if (hasDirectNonWhitespaceText(element)) return true;
1346
- const tagName = element.tagName.toLowerCase();
1347
- return TEXT_ELEMENT_TAGS.has(tagName) || element.children.length === 0;
1348
- }
1349
- function getComputedBoxShadow(element) {
1350
- const computed = window.getComputedStyle(element);
1351
- const value = computed.boxShadow.trim();
1352
- return value || "none";
1353
- }
1354
- function getComputedColorStyles(element) {
1355
- const computed = window.getComputedStyle(element);
1356
- const borderSides = [
1357
- { style: computed.borderTopStyle, width: computed.borderTopWidth, color: computed.borderTopColor },
1358
- { style: computed.borderRightStyle, width: computed.borderRightWidth, color: computed.borderRightColor },
1359
- { style: computed.borderBottomStyle, width: computed.borderBottomWidth, color: computed.borderBottomColor },
1360
- { style: computed.borderLeftStyle, width: computed.borderLeftWidth, color: computed.borderLeftColor }
1361
- ];
1362
- const visibleBorderSide = borderSides.find((side) => isVisibleBorderSide(side));
1363
- const hasBorder = Boolean(visibleBorderSide);
1364
- const hasOutline = hasVisibleOutline(computed);
1365
- return {
1366
- backgroundColor: parseColorValue(computed.backgroundColor),
1367
- color: parseColorValue(computed.color),
1368
- borderColor: hasBorder && visibleBorderSide ? parseColorValue(visibleBorderSide.color) : TRANSPARENT_COLOR,
1369
- outlineColor: hasOutline ? parseColorValue(computed.outlineColor) : TRANSPARENT_COLOR
1370
- };
1422
+ if (!Number.isFinite(numeric2)) return null;
1423
+ return Math.max(0, Math.min(100, numeric2)) / 100;
1424
+ }
1425
+ const numeric = parseFloat(token);
1426
+ if (!Number.isFinite(numeric)) return null;
1427
+ return Math.max(0, Math.min(1, numeric));
1371
1428
  }
1372
- function getSelectionColors(element) {
1373
- const uniqueColors = /* @__PURE__ */ new Map();
1374
- const queue = [element];
1375
- for (let index = 0; index < queue.length; index++) {
1376
- const node = queue[index];
1377
- const computed = window.getComputedStyle(node);
1378
- if (computed.display === "none") {
1379
- continue;
1380
- }
1381
- const isVisibilityHidden = computed.visibility === "hidden" || computed.visibility === "collapse";
1382
- const currentTextColor = computed.color;
1383
- if (!isVisibilityHidden) {
1384
- addUniqueColor(uniqueColors, parseVisibleColor(computed.backgroundColor));
1385
- if (node instanceof HTMLElement && hasRenderableTextNode(node)) {
1386
- addUniqueColor(uniqueColors, parseVisibleColor(currentTextColor));
1387
- }
1388
- const borderSides = [
1389
- { style: computed.borderTopStyle, width: computed.borderTopWidth, color: computed.borderTopColor },
1390
- { style: computed.borderRightStyle, width: computed.borderRightWidth, color: computed.borderRightColor },
1391
- { style: computed.borderBottomStyle, width: computed.borderBottomWidth, color: computed.borderBottomColor },
1392
- { style: computed.borderLeftStyle, width: computed.borderLeftWidth, color: computed.borderLeftColor }
1393
- ];
1394
- for (const side of borderSides) {
1395
- if (!isVisibleBorderSide(side)) continue;
1396
- addUniqueColor(uniqueColors, parseVisibleColor(side.color, currentTextColor));
1397
- }
1398
- if (hasVisibleOutline(computed)) {
1399
- addUniqueColor(uniqueColors, parseVisibleColor(computed.outlineColor, currentTextColor));
1400
- }
1401
- if (node instanceof SVGElement) {
1402
- const fillColor = parseVisibleColor(computed.getPropertyValue("fill"), currentTextColor) ?? parseVisibleColor(node.getAttribute("fill") ?? "", currentTextColor);
1403
- const strokeColor = parseVisibleColor(computed.getPropertyValue("stroke"), currentTextColor) ?? parseVisibleColor(node.getAttribute("stroke") ?? "", currentTextColor);
1404
- addUniqueColor(uniqueColors, fillColor);
1405
- addUniqueColor(uniqueColors, strokeColor);
1429
+ function parseRgbaColor(rgba) {
1430
+ const raw = rgba.trim();
1431
+ const fnMatch = raw.match(/^rgba?\((.*)\)$/i);
1432
+ if (!fnMatch) {
1433
+ return { hex: "000000", alpha: 100, raw: rgba };
1434
+ }
1435
+ const body = fnMatch[1].trim();
1436
+ let channelTokens = null;
1437
+ let alphaToken;
1438
+ const commaParts = body.split(",").map((part) => part.trim()).filter(Boolean);
1439
+ if (commaParts.length === 3 || commaParts.length === 4) {
1440
+ channelTokens = [commaParts[0], commaParts[1], commaParts[2]];
1441
+ alphaToken = commaParts[3];
1442
+ } else {
1443
+ const slashParts = body.split("/");
1444
+ if (slashParts.length === 1 || slashParts.length === 2) {
1445
+ const channels = slashParts[0].trim().split(/\s+/).filter(Boolean);
1446
+ if (channels.length === 3) {
1447
+ channelTokens = [channels[0], channels[1], channels[2]];
1448
+ alphaToken = slashParts[1]?.trim();
1406
1449
  }
1407
1450
  }
1408
- for (const child of node.children) {
1409
- queue.push(child);
1410
- }
1411
1451
  }
1412
- return Array.from(uniqueColors.values());
1452
+ if (!channelTokens) {
1453
+ return { hex: "000000", alpha: 100, raw: rgba };
1454
+ }
1455
+ const r = parseRgbChannel(channelTokens[0]);
1456
+ const g = parseRgbChannel(channelTokens[1]);
1457
+ const b = parseRgbChannel(channelTokens[2]);
1458
+ const a = parseRgbAlpha(alphaToken);
1459
+ if (r === null || g === null || b === null || a === null) {
1460
+ return { hex: "000000", alpha: 100, raw: rgba };
1461
+ }
1462
+ const hex = [r, g, b].map((v) => v.toString(16).padStart(2, "0")).join("").toUpperCase();
1463
+ const alpha = Math.round(a * 100);
1464
+ return { hex, alpha, raw: rgba };
1413
1465
  }
1414
- function getAllComputedStyles(element) {
1415
- const { spacing, borderRadius, flex } = getComputedStyles(element);
1416
- return {
1417
- spacing,
1418
- borderRadius,
1419
- border: getComputedBorderStyles(element),
1420
- flex,
1421
- sizing: getComputedSizing(element),
1422
- color: getComputedColorStyles(element),
1423
- boxShadow: getComputedBoxShadow(element),
1424
- typography: getComputedTypography(element)
1425
- };
1466
+ function parseNamedColor(name) {
1467
+ const ctx = document.createElement("canvas").getContext("2d");
1468
+ if (!ctx) {
1469
+ return { hex: "000000", alpha: 100, raw: name };
1470
+ }
1471
+ ctx.fillStyle = name;
1472
+ const computed = ctx.fillStyle;
1473
+ if (computed.startsWith("#")) {
1474
+ return parseHexColor(computed);
1475
+ }
1476
+ return parseRgbaColor(computed);
1477
+ }
1478
+ function parseColorValue(cssValue) {
1479
+ const raw = cssValue.trim();
1480
+ if (raw === "transparent") {
1481
+ return { hex: "000000", alpha: 0, raw };
1482
+ }
1483
+ if (raw.startsWith("#")) {
1484
+ return parseHexColor(raw);
1485
+ }
1486
+ if (raw.startsWith("rgb")) {
1487
+ return parseRgbaColor(raw);
1488
+ }
1489
+ return parseNamedColor(raw);
1426
1490
  }
1427
1491
  var colorPropertyToCSSMap = {
1428
1492
  backgroundColor: "background-color",
@@ -1878,7 +1942,7 @@ function findChildAtPoint(parent, clientX, clientY) {
1878
1942
  return clientX >= r.left && clientX <= r.right && clientY >= r.top && clientY <= r.bottom;
1879
1943
  });
1880
1944
  if (hit) return hit;
1881
- if (children.length === 1 && !hasDirectNonWhitespaceText(parent)) return children[0];
1945
+ if (children.length === 1 && !hasDirectNonWhitespaceText2(parent)) return children[0];
1882
1946
  return null;
1883
1947
  }
1884
1948
  function elementFromPointWithoutOverlays(x, y) {
@@ -7681,6 +7745,219 @@ function createDragInteractionGuard() {
7681
7745
  };
7682
7746
  }
7683
7747
 
7748
+ // src/utils/resize-geometry.ts
7749
+ function toFinite(value, fallback) {
7750
+ if (!Number.isFinite(value)) return fallback;
7751
+ return value;
7752
+ }
7753
+ function multiplyMatrix(left, right) {
7754
+ return {
7755
+ a: left.a * right.a + left.c * right.b,
7756
+ b: left.b * right.a + left.d * right.b,
7757
+ c: left.a * right.c + left.c * right.d,
7758
+ d: left.b * right.c + left.d * right.d
7759
+ };
7760
+ }
7761
+ function splitTransformArgs(raw) {
7762
+ return raw.trim().replace(/,/g, " ").split(/\s+/).filter(Boolean);
7763
+ }
7764
+ function parseAngleRadians(value) {
7765
+ const numeric = Number.parseFloat(value);
7766
+ if (!Number.isFinite(numeric)) return 0;
7767
+ const unit = value.trim().replace(String(numeric), "").trim().toLowerCase();
7768
+ switch (unit) {
7769
+ case "rad":
7770
+ return numeric;
7771
+ case "turn":
7772
+ return numeric * Math.PI * 2;
7773
+ case "grad":
7774
+ return numeric * Math.PI / 200;
7775
+ case "deg":
7776
+ case "":
7777
+ default:
7778
+ return numeric * Math.PI / 180;
7779
+ }
7780
+ }
7781
+ function parseTransformFunction(name, rawArgs) {
7782
+ const args = splitTransformArgs(rawArgs);
7783
+ switch (name.toLowerCase()) {
7784
+ case "matrix": {
7785
+ if (args.length < 4) return null;
7786
+ const [a, b, c, d] = args.map(Number.parseFloat);
7787
+ if (![a, b, c, d].every(Number.isFinite)) return null;
7788
+ return { a, b, c, d };
7789
+ }
7790
+ case "matrix3d": {
7791
+ if (args.length < 16) return null;
7792
+ const values = args.map(Number.parseFloat);
7793
+ if (!values.every(Number.isFinite)) return null;
7794
+ return { a: values[0], b: values[1], c: values[4], d: values[5] };
7795
+ }
7796
+ case "scale": {
7797
+ const scaleX = Number.parseFloat(args[0] ?? "1");
7798
+ const scaleY = Number.parseFloat(args[1] ?? args[0] ?? "1");
7799
+ if (!Number.isFinite(scaleX) || !Number.isFinite(scaleY)) return null;
7800
+ return { a: scaleX, b: 0, c: 0, d: scaleY };
7801
+ }
7802
+ case "scalex": {
7803
+ const scaleX = Number.parseFloat(args[0] ?? "1");
7804
+ if (!Number.isFinite(scaleX)) return null;
7805
+ return { a: scaleX, b: 0, c: 0, d: 1 };
7806
+ }
7807
+ case "scaley": {
7808
+ const scaleY = Number.parseFloat(args[0] ?? "1");
7809
+ if (!Number.isFinite(scaleY)) return null;
7810
+ return { a: 1, b: 0, c: 0, d: scaleY };
7811
+ }
7812
+ case "rotate": {
7813
+ const angle = parseAngleRadians(args[0] ?? "0deg");
7814
+ const cos = Math.cos(angle);
7815
+ const sin = Math.sin(angle);
7816
+ return { a: cos, b: sin, c: -sin, d: cos };
7817
+ }
7818
+ case "translate":
7819
+ case "translatex":
7820
+ case "translatey":
7821
+ return { a: 1, b: 0, c: 0, d: 1 };
7822
+ default:
7823
+ return null;
7824
+ }
7825
+ }
7826
+ function parseTransformMatrix(transform) {
7827
+ const functionPattern = /([a-zA-Z0-9]+)\(([^)]*)\)/g;
7828
+ let matrix = { a: 1, b: 0, c: 0, d: 1 };
7829
+ let matched = false;
7830
+ for (const match of transform.matchAll(functionPattern)) {
7831
+ const next = parseTransformFunction(match[1], match[2]);
7832
+ if (!next) return null;
7833
+ matrix = multiplyMatrix(matrix, next);
7834
+ matched = true;
7835
+ }
7836
+ return matched ? matrix : null;
7837
+ }
7838
+ function scaleFromMatrix(matrix) {
7839
+ return {
7840
+ scaleX: Math.hypot(matrix.a, matrix.b) || 1,
7841
+ scaleY: Math.hypot(matrix.c, matrix.d) || 1
7842
+ };
7843
+ }
7844
+ function getRenderedOffsetScale(element) {
7845
+ const rect = element.getBoundingClientRect();
7846
+ const width = element.offsetWidth;
7847
+ const height = element.offsetHeight;
7848
+ if (width <= 0 || height <= 0 || rect.width <= 0 || rect.height <= 0) return null;
7849
+ return {
7850
+ scaleX: rect.width / width,
7851
+ scaleY: rect.height / height
7852
+ };
7853
+ }
7854
+ function clampSize(value, minSize = 1) {
7855
+ const safeMin = Math.max(1, toFinite(minSize, 1));
7856
+ const safeValue = toFinite(value, safeMin);
7857
+ return Math.max(safeMin, safeValue);
7858
+ }
7859
+ function getElementScale(element) {
7860
+ const transform = getComputedStyle(element).transform;
7861
+ if (!transform || transform === "none") {
7862
+ return getRenderedOffsetScale(element) ?? { scaleX: 1, scaleY: 1 };
7863
+ }
7864
+ let transformMatrix = null;
7865
+ if (typeof DOMMatrix !== "undefined") {
7866
+ try {
7867
+ const matrix = new DOMMatrix(transform);
7868
+ transformMatrix = matrix;
7869
+ } catch {
7870
+ }
7871
+ }
7872
+ transformMatrix = transformMatrix ?? parseTransformMatrix(transform);
7873
+ if (!transformMatrix) return getRenderedOffsetScale(element) ?? { scaleX: 1, scaleY: 1 };
7874
+ const localScale = scaleFromMatrix(transformMatrix);
7875
+ const rect = element.getBoundingClientRect();
7876
+ const width = element.offsetWidth;
7877
+ const height = element.offsetHeight;
7878
+ if (width <= 0 || height <= 0 || rect.width <= 0 || rect.height <= 0) return localScale;
7879
+ const transformedWidth = Math.abs(transformMatrix.a) * width + Math.abs(transformMatrix.c) * height;
7880
+ const transformedHeight = Math.abs(transformMatrix.b) * width + Math.abs(transformMatrix.d) * height;
7881
+ if (transformedWidth <= 0 || transformedHeight <= 0) return localScale;
7882
+ return {
7883
+ scaleX: rect.width / transformedWidth * localScale.scaleX,
7884
+ scaleY: rect.height / transformedHeight * localScale.scaleY
7885
+ };
7886
+ }
7887
+ function computeEdgeSize({
7888
+ handle,
7889
+ startWidth,
7890
+ startHeight,
7891
+ dx,
7892
+ dy,
7893
+ minSize = 1
7894
+ }) {
7895
+ const baseWidth = clampSize(startWidth, minSize);
7896
+ const baseHeight = clampSize(startHeight, minSize);
7897
+ switch (handle) {
7898
+ case "right":
7899
+ return { width: clampSize(baseWidth + dx, minSize), height: baseHeight };
7900
+ case "left":
7901
+ return { width: clampSize(baseWidth - dx, minSize), height: baseHeight };
7902
+ case "bottom":
7903
+ return { width: baseWidth, height: clampSize(baseHeight + dy, minSize) };
7904
+ case "top":
7905
+ return { width: baseWidth, height: clampSize(baseHeight - dy, minSize) };
7906
+ }
7907
+ }
7908
+ function computeCornerProportionalSize({
7909
+ handle,
7910
+ startWidth,
7911
+ startHeight,
7912
+ dx,
7913
+ dy,
7914
+ minSize = 1
7915
+ }) {
7916
+ const baseWidth = clampSize(startWidth, minSize);
7917
+ const baseHeight = clampSize(startHeight, minSize);
7918
+ const ratio = baseWidth > 0 && baseHeight > 0 ? baseWidth / baseHeight : 1;
7919
+ const widthSign = handle === "top-left" || handle === "bottom-left" ? -1 : 1;
7920
+ const heightSign = handle === "top-left" || handle === "top-right" ? -1 : 1;
7921
+ const rawWidth = baseWidth + widthSign * dx;
7922
+ const rawHeight = baseHeight + heightSign * dy;
7923
+ const widthIntent = clampSize(rawWidth, minSize);
7924
+ const heightIntent = clampSize(rawHeight, minSize);
7925
+ const widthChange = Math.abs(widthIntent - baseWidth) / Math.max(baseWidth, 1);
7926
+ const heightChange = Math.abs(heightIntent - baseHeight) / Math.max(baseHeight, 1);
7927
+ if (widthChange >= heightChange) {
7928
+ const width2 = clampSize(widthIntent, minSize);
7929
+ const height2 = clampSize(width2 / Math.max(ratio, 1e-4), minSize);
7930
+ return { width: width2, height: height2 };
7931
+ }
7932
+ const height = clampSize(heightIntent, minSize);
7933
+ const width = clampSize(height * ratio, minSize);
7934
+ return { width, height };
7935
+ }
7936
+ function computeFillRenderedWidth(element) {
7937
+ const parent = element.parentElement;
7938
+ if (!parent) return null;
7939
+ const parentComputed = window.getComputedStyle(parent);
7940
+ const elementComputed = window.getComputedStyle(element);
7941
+ const parentClientWidth = parent.clientWidth;
7942
+ const parentPaddingLeft = parseFloat(parentComputed.paddingLeft) || 0;
7943
+ const parentPaddingRight = parseFloat(parentComputed.paddingRight) || 0;
7944
+ const parentContentWidth = parentClientWidth - parentPaddingLeft - parentPaddingRight;
7945
+ if (!Number.isFinite(parentContentWidth) || parentContentWidth <= 0) {
7946
+ return null;
7947
+ }
7948
+ const elementPaddingLeft = parseFloat(elementComputed.paddingLeft) || 0;
7949
+ const elementPaddingRight = parseFloat(elementComputed.paddingRight) || 0;
7950
+ const elementBorderLeft = parseFloat(elementComputed.borderLeftWidth) || 0;
7951
+ const elementBorderRight = parseFloat(elementComputed.borderRightWidth) || 0;
7952
+ if (elementComputed.boxSizing === "border-box") {
7953
+ return clampSize(parentContentWidth, 1);
7954
+ }
7955
+ return clampSize(
7956
+ parentContentWidth + elementPaddingLeft + elementPaddingRight + elementBorderLeft + elementBorderRight,
7957
+ 1
7958
+ );
7959
+ }
7960
+
7684
7961
  // src/use-move.ts
7685
7962
  var INITIAL_DRAG_STATE = {
7686
7963
  isDragging: false,
@@ -7753,9 +8030,12 @@ function useMove({ onMoveComplete }) {
7753
8030
  const onMoveCompleteRef = React12.useRef(onMoveComplete);
7754
8031
  const dragOptionsRef = React12.useRef(DEFAULT_DRAG_OPTIONS);
7755
8032
  const dragGuardRef = React12.useRef(createDragInteractionGuard());
7756
- const initialRectRef = React12.useRef(
7757
- { x: 0, y: 0, scaleX: 1, scaleY: 1 }
7758
- );
8033
+ const initialRectRef = React12.useRef({
8034
+ x: 0,
8035
+ y: 0,
8036
+ scaleX: 1,
8037
+ scaleY: 1
8038
+ });
7759
8039
  const originalTransformRef = React12.useRef("");
7760
8040
  const composeBaseRef = React12.useRef("");
7761
8041
  const reorderPreviewRef = React12.useRef(/* @__PURE__ */ new Map());
@@ -7771,79 +8051,85 @@ function useMove({ onMoveComplete }) {
7771
8051
  }
7772
8052
  reorderPreviewRef.current.clear();
7773
8053
  }, []);
7774
- const setReorderPreviewTransform = React12.useCallback((element, transform) => {
7775
- const existing = reorderPreviewRef.current.get(element);
7776
- if (!existing) {
7777
- reorderPreviewRef.current.set(element, {
7778
- transform: element.style.transform,
7779
- transition: element.style.transition
7780
- });
7781
- }
7782
- const originalTransition = reorderPreviewRef.current.get(element)?.transition ?? element.style.transition;
7783
- element.style.transition = withTransformTransition(originalTransition);
7784
- element.style.transform = transform;
7785
- }, []);
7786
- const applyReorderPreview = React12.useCallback((target, draggedElement, originalParent) => {
7787
- if (!target || !draggedElement) {
7788
- clearReorderPreview();
7789
- return;
7790
- }
7791
- const container = target.container;
7792
- const containerChildren = Array.from(container.children).filter(
7793
- (child) => child instanceof HTMLElement
7794
- );
7795
- const siblings = containerChildren.filter((child) => child !== draggedElement);
7796
- const insertIndex = getInsertIndex(siblings, target.insertBefore);
7797
- if (insertIndex === null) {
7798
- clearReorderPreview();
7799
- return;
7800
- }
7801
- const draggedRect = draggedElement.getBoundingClientRect();
7802
- const isHorizontal = isHorizontalDirection(target.flexDirection);
7803
- const dragSize = isHorizontal ? draggedRect.width : draggedRect.height;
7804
- if (!Number.isFinite(dragSize) || dragSize <= 0) {
7805
- clearReorderPreview();
7806
- return;
7807
- }
7808
- const sign = forwardVisualSign(target.flexDirection);
7809
- const shiftedElements = /* @__PURE__ */ new Map();
7810
- if (container === originalParent) {
7811
- const originalIndex = containerChildren.indexOf(draggedElement);
7812
- if (originalIndex >= 0) {
7813
- if (insertIndex > originalIndex) {
7814
- const shift = -sign * dragSize;
7815
- for (let i = originalIndex; i < insertIndex; i++) {
7816
- const sibling = siblings[i];
7817
- if (sibling) shiftedElements.set(sibling, shift);
7818
- }
7819
- } else if (insertIndex < originalIndex) {
7820
- const shift = sign * dragSize;
7821
- for (let i = insertIndex; i < originalIndex; i++) {
7822
- const sibling = siblings[i];
7823
- if (sibling) shiftedElements.set(sibling, shift);
8054
+ const setReorderPreviewTransform = React12.useCallback(
8055
+ (element, transform) => {
8056
+ const existing = reorderPreviewRef.current.get(element);
8057
+ if (!existing) {
8058
+ reorderPreviewRef.current.set(element, {
8059
+ transform: element.style.transform,
8060
+ transition: element.style.transition
8061
+ });
8062
+ }
8063
+ const originalTransition = reorderPreviewRef.current.get(element)?.transition ?? element.style.transition;
8064
+ element.style.transition = withTransformTransition(originalTransition);
8065
+ element.style.transform = transform;
8066
+ },
8067
+ []
8068
+ );
8069
+ const applyReorderPreview = React12.useCallback(
8070
+ (target, draggedElement, originalParent) => {
8071
+ if (!target || !draggedElement) {
8072
+ clearReorderPreview();
8073
+ return;
8074
+ }
8075
+ const container = target.container;
8076
+ const containerChildren = Array.from(container.children).filter(
8077
+ (child) => child instanceof HTMLElement
8078
+ );
8079
+ const siblings = containerChildren.filter((child) => child !== draggedElement);
8080
+ const insertIndex = getInsertIndex(siblings, target.insertBefore);
8081
+ if (insertIndex === null) {
8082
+ clearReorderPreview();
8083
+ return;
8084
+ }
8085
+ const draggedRect = draggedElement.getBoundingClientRect();
8086
+ const isHorizontal = isHorizontalDirection(target.flexDirection);
8087
+ const dragSize = isHorizontal ? draggedRect.width : draggedRect.height;
8088
+ if (!Number.isFinite(dragSize) || dragSize <= 0) {
8089
+ clearReorderPreview();
8090
+ return;
8091
+ }
8092
+ const sign = forwardVisualSign(target.flexDirection);
8093
+ const shiftedElements = /* @__PURE__ */ new Map();
8094
+ if (container === originalParent) {
8095
+ const originalIndex = containerChildren.indexOf(draggedElement);
8096
+ if (originalIndex >= 0) {
8097
+ if (insertIndex > originalIndex) {
8098
+ const shift = -sign * dragSize;
8099
+ for (let i = originalIndex; i < insertIndex; i++) {
8100
+ const sibling = siblings[i];
8101
+ if (sibling) shiftedElements.set(sibling, shift);
8102
+ }
8103
+ } else if (insertIndex < originalIndex) {
8104
+ const shift = sign * dragSize;
8105
+ for (let i = insertIndex; i < originalIndex; i++) {
8106
+ const sibling = siblings[i];
8107
+ if (sibling) shiftedElements.set(sibling, shift);
8108
+ }
7824
8109
  }
7825
8110
  }
8111
+ } else {
8112
+ const shift = sign * dragSize;
8113
+ for (let i = insertIndex; i < siblings.length; i++) {
8114
+ shiftedElements.set(siblings[i], shift);
8115
+ }
7826
8116
  }
7827
- } else {
7828
- const shift = sign * dragSize;
7829
- for (let i = insertIndex; i < siblings.length; i++) {
7830
- shiftedElements.set(siblings[i], shift);
7831
- }
7832
- }
7833
- const axis = isHorizontal ? "x" : "y";
7834
- const keep = new Set(shiftedElements.keys());
7835
- for (const [element, snapshot2] of reorderPreviewRef.current) {
7836
- if (!keep.has(element)) {
7837
- element.style.transform = snapshot2.transform;
7838
- element.style.transition = snapshot2.transition;
7839
- reorderPreviewRef.current.delete(element);
8117
+ const axis = isHorizontal ? "x" : "y";
8118
+ const keep = new Set(shiftedElements.keys());
8119
+ for (const [element, snapshot2] of reorderPreviewRef.current) {
8120
+ if (!keep.has(element)) {
8121
+ element.style.transform = snapshot2.transform;
8122
+ element.style.transition = snapshot2.transition;
8123
+ reorderPreviewRef.current.delete(element);
8124
+ }
7840
8125
  }
7841
- }
7842
- for (const [element, shift] of shiftedElements) {
7843
- const baseTransform = reorderPreviewRef.current.get(element)?.transform ?? element.style.transform;
7844
- setReorderPreviewTransform(element, withAxisTranslate(baseTransform, axis, shift));
7845
- }
7846
- }, [clearReorderPreview, setReorderPreviewTransform]);
8126
+ for (const [element, shift] of shiftedElements) {
8127
+ const baseTransform = reorderPreviewRef.current.get(element)?.transform ?? element.style.transform;
8128
+ setReorderPreviewTransform(element, withAxisTranslate(baseTransform, axis, shift));
8129
+ }
8130
+ },
8131
+ [clearReorderPreview, setReorderPreviewTransform]
8132
+ );
7847
8133
  const cancelDrag = React12.useCallback(() => {
7848
8134
  const current = dragStateRef.current;
7849
8135
  if (current.draggedElement) {
@@ -7903,7 +8189,13 @@ function useMove({ onMoveComplete }) {
7903
8189
  const deltaX = (current.ghostPosition.x - rect.left) / scaleX;
7904
8190
  const deltaY = (current.ghostPosition.y - rect.top) / scaleY;
7905
8191
  if ((Math.abs(deltaX) > 0.5 || Math.abs(deltaY) > 0.5) && originalParent) {
7906
- moveInfo = { originalParent, originalPreviousSibling, originalNextSibling, mode: "position", positionDelta: { x: deltaX, y: deltaY } };
8192
+ moveInfo = {
8193
+ originalParent,
8194
+ originalPreviousSibling,
8195
+ originalNextSibling,
8196
+ mode: "position",
8197
+ positionDelta: { x: deltaX, y: deltaY }
8198
+ };
7907
8199
  }
7908
8200
  }
7909
8201
  } else if (target && tryReparent(draggedElement, target, originalParent, originalNextSibling)) {
@@ -7929,11 +8221,12 @@ function useMove({ onMoveComplete }) {
7929
8221
  const previousSibling = element.previousElementSibling;
7930
8222
  const nextSibling = element.nextElementSibling;
7931
8223
  dragOptionsRef.current = normalizeStartDragOptions(options);
8224
+ const { scaleX, scaleY } = getElementScale(element);
7932
8225
  initialRectRef.current = {
7933
8226
  x: rect.left,
7934
8227
  y: rect.top,
7935
- scaleX: element.offsetWidth > 0 ? rect.width / element.offsetWidth : 1,
7936
- scaleY: element.offsetHeight > 0 ? rect.height / element.offsetHeight : 1
8228
+ scaleX,
8229
+ scaleY
7937
8230
  };
7938
8231
  const inlineTransform = element.style.transform;
7939
8232
  originalTransformRef.current = inlineTransform;
@@ -8017,19 +8310,9 @@ function useMove({ onMoveComplete }) {
8017
8310
  }
8018
8311
  return;
8019
8312
  }
8020
- const container = dragOptionsRef.current.constrainToOriginalParent ? originalParent : findContainerAtPoint(
8021
- e.clientX,
8022
- e.clientY,
8023
- draggedElement,
8024
- originalParent
8025
- );
8313
+ const container = dragOptionsRef.current.constrainToOriginalParent ? originalParent : findContainerAtPoint(e.clientX, e.clientY, draggedElement, originalParent);
8026
8314
  if (container && draggedElement) {
8027
- const dropPos = calculateDropPosition(
8028
- container,
8029
- e.clientX,
8030
- e.clientY,
8031
- draggedElement
8032
- );
8315
+ const dropPos = calculateDropPosition(container, e.clientX, e.clientY, draggedElement);
8033
8316
  if (dropPos) {
8034
8317
  const nextTarget = {
8035
8318
  container,
@@ -8402,7 +8685,10 @@ function isSelectableElement(element) {
8402
8685
  if (!(element instanceof HTMLElement)) return false;
8403
8686
  if (!element.isConnected) return false;
8404
8687
  if (element === document.body || element === document.documentElement) return false;
8405
- if (element.matches("[data-direct-edit], [data-direct-edit-host], script, style, link, meta, noscript")) return false;
8688
+ if (element.matches(
8689
+ "[data-direct-edit], [data-direct-edit-host], script, style, link, meta, noscript"
8690
+ ))
8691
+ return false;
8406
8692
  const rect = element.getBoundingClientRect();
8407
8693
  if (rect.width <= 0 || rect.height <= 0) return false;
8408
8694
  const computed = window.getComputedStyle(element);
@@ -8420,7 +8706,9 @@ function compareDomOrder2(a, b) {
8420
8706
  }
8421
8707
  function collectMarqueeTargets(rect) {
8422
8708
  const hits = Array.from(document.querySelectorAll("*")).filter(isSelectableElement).filter((element) => rectsIntersect(rect, element.getBoundingClientRect()));
8423
- const deepestHits = hits.filter((element) => !hits.some((other) => other !== element && element.contains(other)));
8709
+ const deepestHits = hits.filter(
8710
+ (element) => !hits.some((other) => other !== element && element.contains(other))
8711
+ );
8424
8712
  deepestHits.sort(compareDomOrder2);
8425
8713
  return deepestHits;
8426
8714
  }
@@ -9011,99 +9299,27 @@ import { MessageSquare } from "lucide-react";
9011
9299
 
9012
9300
  // src/use-selection-resize.ts
9013
9301
  import * as React18 from "react";
9014
-
9015
- // src/utils/resize-geometry.ts
9016
- function toFinite(value, fallback) {
9017
- if (!Number.isFinite(value)) return fallback;
9018
- return value;
9019
- }
9020
- function clampSize(value, minSize = 1) {
9021
- const safeMin = Math.max(1, toFinite(minSize, 1));
9022
- const safeValue = toFinite(value, safeMin);
9023
- return Math.max(safeMin, safeValue);
9024
- }
9025
- function computeEdgeSize({
9026
- handle,
9027
- startWidth,
9028
- startHeight,
9029
- dx,
9030
- dy,
9031
- minSize = 1
9032
- }) {
9033
- const baseWidth = clampSize(startWidth, minSize);
9034
- const baseHeight = clampSize(startHeight, minSize);
9035
- switch (handle) {
9036
- case "right":
9037
- return { width: clampSize(baseWidth + dx, minSize), height: baseHeight };
9038
- case "left":
9039
- return { width: clampSize(baseWidth - dx, minSize), height: baseHeight };
9040
- case "bottom":
9041
- return { width: baseWidth, height: clampSize(baseHeight + dy, minSize) };
9042
- case "top":
9043
- return { width: baseWidth, height: clampSize(baseHeight - dy, minSize) };
9044
- }
9045
- }
9046
- function computeCornerProportionalSize({
9047
- handle,
9048
- startWidth,
9049
- startHeight,
9050
- dx,
9051
- dy,
9052
- minSize = 1
9053
- }) {
9054
- const baseWidth = clampSize(startWidth, minSize);
9055
- const baseHeight = clampSize(startHeight, minSize);
9056
- const ratio = baseWidth > 0 && baseHeight > 0 ? baseWidth / baseHeight : 1;
9057
- const widthSign = handle === "top-left" || handle === "bottom-left" ? -1 : 1;
9058
- const heightSign = handle === "top-left" || handle === "top-right" ? -1 : 1;
9059
- const rawWidth = baseWidth + widthSign * dx;
9060
- const rawHeight = baseHeight + heightSign * dy;
9061
- const widthIntent = clampSize(rawWidth, minSize);
9062
- const heightIntent = clampSize(rawHeight, minSize);
9063
- const widthChange = Math.abs(widthIntent - baseWidth) / Math.max(baseWidth, 1);
9064
- const heightChange = Math.abs(heightIntent - baseHeight) / Math.max(baseHeight, 1);
9065
- if (widthChange >= heightChange) {
9066
- const width2 = clampSize(widthIntent, minSize);
9067
- const height2 = clampSize(width2 / Math.max(ratio, 1e-4), minSize);
9068
- return { width: width2, height: height2 };
9069
- }
9070
- const height = clampSize(heightIntent, minSize);
9071
- const width = clampSize(height * ratio, minSize);
9072
- return { width, height };
9073
- }
9074
- function computeFillRenderedWidth(element) {
9075
- const parent = element.parentElement;
9076
- if (!parent) return null;
9077
- const parentComputed = window.getComputedStyle(parent);
9078
- const elementComputed = window.getComputedStyle(element);
9079
- const parentClientWidth = parent.clientWidth;
9080
- const parentPaddingLeft = parseFloat(parentComputed.paddingLeft) || 0;
9081
- const parentPaddingRight = parseFloat(parentComputed.paddingRight) || 0;
9082
- const parentContentWidth = parentClientWidth - parentPaddingLeft - parentPaddingRight;
9083
- if (!Number.isFinite(parentContentWidth) || parentContentWidth <= 0) {
9084
- return null;
9085
- }
9086
- const elementPaddingLeft = parseFloat(elementComputed.paddingLeft) || 0;
9087
- const elementPaddingRight = parseFloat(elementComputed.paddingRight) || 0;
9088
- const elementBorderLeft = parseFloat(elementComputed.borderLeftWidth) || 0;
9089
- const elementBorderRight = parseFloat(elementComputed.borderRightWidth) || 0;
9090
- if (elementComputed.boxSizing === "border-box") {
9091
- return clampSize(parentContentWidth, 1);
9092
- }
9093
- return clampSize(
9094
- parentContentWidth + elementPaddingLeft + elementPaddingRight + elementBorderLeft + elementBorderRight,
9095
- 1
9096
- );
9097
- }
9098
-
9099
- // src/use-selection-resize.ts
9100
9302
  var MIN_SIZE_PX = 1;
9101
9303
  var SNAP_IN_PX = 2;
9102
9304
  var SNAP_OUT_PX = 6;
9103
9305
  var EPSILON = 1e-4;
9104
9306
  var EDGE_HANDLES = /* @__PURE__ */ new Set(["top", "right", "bottom", "left"]);
9105
- var WIDTH_HANDLES = /* @__PURE__ */ new Set(["left", "right", "top-left", "top-right", "bottom-left", "bottom-right"]);
9106
- var HEIGHT_HANDLES = /* @__PURE__ */ new Set(["top", "bottom", "top-left", "top-right", "bottom-left", "bottom-right"]);
9307
+ var WIDTH_HANDLES = /* @__PURE__ */ new Set([
9308
+ "left",
9309
+ "right",
9310
+ "top-left",
9311
+ "top-right",
9312
+ "bottom-left",
9313
+ "bottom-right"
9314
+ ]);
9315
+ var HEIGHT_HANDLES = /* @__PURE__ */ new Set([
9316
+ "top",
9317
+ "bottom",
9318
+ "top-left",
9319
+ "top-right",
9320
+ "bottom-left",
9321
+ "bottom-right"
9322
+ ]);
9107
9323
  function createSizingValue(mode, numericValue) {
9108
9324
  const rounded = Math.max(MIN_SIZE_PX, Math.round(clampSize(numericValue, MIN_SIZE_PX)));
9109
9325
  return {
@@ -9125,125 +9341,135 @@ function useSelectionResize({
9125
9341
  }) {
9126
9342
  const cleanupRef = React18.useRef(null);
9127
9343
  const txCounterRef = React18.useRef(0);
9128
- const emitSizingChange = React18.useCallback((changes, options) => {
9129
- onResizeSizingChange?.(changes, options);
9130
- }, [onResizeSizingChange]);
9344
+ const emitSizingChange = React18.useCallback(
9345
+ (changes, options) => {
9346
+ onResizeSizingChange?.(changes, options);
9347
+ },
9348
+ [onResizeSizingChange]
9349
+ );
9131
9350
  React18.useEffect(() => {
9132
9351
  return () => {
9133
9352
  cleanupRef.current?.();
9134
9353
  cleanupRef.current = null;
9135
9354
  };
9136
9355
  }, []);
9137
- const getResizeHandlePointerDown = React18.useCallback((handle) => {
9138
- return (e) => {
9139
- if (!enabled || !onResizeSizingChange) return;
9140
- if (e.button !== 0) return;
9141
- e.preventDefault();
9142
- e.stopPropagation();
9143
- cleanupRef.current?.();
9144
- const rect = selectedElement.getBoundingClientRect();
9145
- const offsetWidth = selectedElement.offsetWidth;
9146
- const offsetHeight = selectedElement.offsetHeight;
9147
- const startWidth = clampSize(offsetWidth > 0 ? offsetWidth : rect.width, MIN_SIZE_PX);
9148
- const startHeight = clampSize(offsetHeight > 0 ? offsetHeight : rect.height, MIN_SIZE_PX);
9149
- const scaleX = Math.max(EPSILON, offsetWidth > 0 ? rect.width / offsetWidth : 1);
9150
- const scaleY = Math.max(EPSILON, offsetHeight > 0 ? rect.height / offsetHeight : 1);
9151
- const transactionId = `resize-${Date.now()}-${txCounterRef.current++}`;
9152
- const state = {
9153
- transactionId,
9154
- handle,
9155
- startClientX: e.clientX,
9156
- startClientY: e.clientY,
9157
- startWidth,
9158
- startHeight,
9159
- scaleX,
9160
- scaleY,
9161
- fillTargetWidth: computeFillRenderedWidth(selectedElement),
9162
- fillLocked: detectSizingMode(selectedElement, "width") === "fill"
9163
- };
9164
- emitSizingChange({}, { transactionId: state.transactionId, phase: "start" });
9165
- const onPointerMove = (moveEvent) => {
9166
- const dx = (moveEvent.clientX - state.startClientX) / state.scaleX;
9167
- const dy = (moveEvent.clientY - state.startClientY) / state.scaleY;
9168
- const nextSize = isEdgeHandle(state.handle) ? computeEdgeSize({
9169
- handle: state.handle,
9170
- startWidth: state.startWidth,
9171
- startHeight: state.startHeight,
9172
- dx,
9173
- dy,
9174
- minSize: MIN_SIZE_PX
9175
- }) : computeCornerProportionalSize({
9176
- handle: state.handle,
9177
- startWidth: state.startWidth,
9178
- startHeight: state.startHeight,
9179
- dx,
9180
- dy,
9181
- minSize: MIN_SIZE_PX
9182
- });
9183
- const nextWidth = Math.max(MIN_SIZE_PX, Math.round(nextSize.width));
9184
- const nextHeight = Math.max(MIN_SIZE_PX, Math.round(nextSize.height));
9185
- const changes = {};
9186
- if (WIDTH_HANDLES.has(state.handle)) {
9187
- if (state.fillTargetWidth !== null) {
9188
- const distance = Math.abs(nextWidth - state.fillTargetWidth);
9189
- if (state.fillLocked) {
9190
- if (distance > SNAP_OUT_PX) {
9191
- state.fillLocked = false;
9356
+ const getResizeHandlePointerDown = React18.useCallback(
9357
+ (handle) => {
9358
+ return (e) => {
9359
+ if (!enabled || !onResizeSizingChange) return;
9360
+ if (e.button !== 0) return;
9361
+ e.preventDefault();
9362
+ e.stopPropagation();
9363
+ cleanupRef.current?.();
9364
+ const rect = selectedElement.getBoundingClientRect();
9365
+ const offsetWidth = selectedElement.offsetWidth;
9366
+ const offsetHeight = selectedElement.offsetHeight;
9367
+ const startWidth = clampSize(offsetWidth > 0 ? offsetWidth : rect.width, MIN_SIZE_PX);
9368
+ const startHeight = clampSize(offsetHeight > 0 ? offsetHeight : rect.height, MIN_SIZE_PX);
9369
+ const { scaleX: rawScaleX, scaleY: rawScaleY } = getElementScale(selectedElement);
9370
+ const scaleX = Math.max(EPSILON, rawScaleX);
9371
+ const scaleY = Math.max(EPSILON, rawScaleY);
9372
+ const transactionId = `resize-${Date.now()}-${txCounterRef.current++}`;
9373
+ const state = {
9374
+ transactionId,
9375
+ handle,
9376
+ startClientX: e.clientX,
9377
+ startClientY: e.clientY,
9378
+ startWidth,
9379
+ startHeight,
9380
+ scaleX,
9381
+ scaleY,
9382
+ fillTargetWidth: computeFillRenderedWidth(selectedElement),
9383
+ fillLocked: detectSizingMode(selectedElement, "width") === "fill"
9384
+ };
9385
+ emitSizingChange({}, { transactionId: state.transactionId, phase: "start" });
9386
+ const onPointerMove = (moveEvent) => {
9387
+ const dx = (moveEvent.clientX - state.startClientX) / state.scaleX;
9388
+ const dy = (moveEvent.clientY - state.startClientY) / state.scaleY;
9389
+ const nextSize = isEdgeHandle(state.handle) ? computeEdgeSize({
9390
+ handle: state.handle,
9391
+ startWidth: state.startWidth,
9392
+ startHeight: state.startHeight,
9393
+ dx,
9394
+ dy,
9395
+ minSize: MIN_SIZE_PX
9396
+ }) : computeCornerProportionalSize({
9397
+ handle: state.handle,
9398
+ startWidth: state.startWidth,
9399
+ startHeight: state.startHeight,
9400
+ dx,
9401
+ dy,
9402
+ minSize: MIN_SIZE_PX
9403
+ });
9404
+ const nextWidth = Math.max(MIN_SIZE_PX, Math.round(nextSize.width));
9405
+ const nextHeight = Math.max(MIN_SIZE_PX, Math.round(nextSize.height));
9406
+ const changes = {};
9407
+ if (WIDTH_HANDLES.has(state.handle)) {
9408
+ if (state.fillTargetWidth !== null) {
9409
+ const distance = Math.abs(nextWidth - state.fillTargetWidth);
9410
+ if (state.fillLocked) {
9411
+ if (distance > SNAP_OUT_PX) {
9412
+ state.fillLocked = false;
9413
+ }
9414
+ } else if (distance <= SNAP_IN_PX) {
9415
+ state.fillLocked = true;
9192
9416
  }
9193
- } else if (distance <= SNAP_IN_PX) {
9194
- state.fillLocked = true;
9417
+ } else {
9418
+ state.fillLocked = false;
9419
+ }
9420
+ if (state.fillLocked) {
9421
+ const fillWidth = state.fillTargetWidth ?? nextWidth;
9422
+ changes.width = createSizingValue("fill", fillWidth);
9423
+ } else {
9424
+ changes.width = createSizingValue("fixed", nextWidth);
9195
9425
  }
9196
- } else {
9197
- state.fillLocked = false;
9198
9426
  }
9199
- if (state.fillLocked) {
9200
- const fillWidth = state.fillTargetWidth ?? nextWidth;
9201
- changes.width = createSizingValue("fill", fillWidth);
9202
- } else {
9203
- changes.width = createSizingValue("fixed", nextWidth);
9427
+ if (HEIGHT_HANDLES.has(state.handle)) {
9428
+ changes.height = createSizingValue("fixed", nextHeight);
9204
9429
  }
9205
- }
9206
- if (HEIGHT_HANDLES.has(state.handle)) {
9207
- changes.height = createSizingValue("fixed", nextHeight);
9208
- }
9209
- if (Object.keys(changes).length === 0) return;
9210
- emitSizingChange(changes, { transactionId: state.transactionId, phase: "update" });
9430
+ if (Object.keys(changes).length === 0) return;
9431
+ emitSizingChange(changes, { transactionId: state.transactionId, phase: "update" });
9432
+ };
9433
+ const stop = () => {
9434
+ window.removeEventListener("pointermove", onPointerMove);
9435
+ window.removeEventListener("pointerup", stop);
9436
+ window.removeEventListener("pointercancel", stop);
9437
+ window.removeEventListener("blur", stop);
9438
+ cleanupRef.current = null;
9439
+ emitSizingChange({}, { transactionId: state.transactionId, phase: "end" });
9440
+ };
9441
+ cleanupRef.current = stop;
9442
+ window.addEventListener("pointermove", onPointerMove);
9443
+ window.addEventListener("pointerup", stop);
9444
+ window.addEventListener("pointercancel", stop);
9445
+ window.addEventListener("blur", stop);
9211
9446
  };
9212
- const stop = () => {
9213
- window.removeEventListener("pointermove", onPointerMove);
9214
- window.removeEventListener("pointerup", stop);
9215
- window.removeEventListener("pointercancel", stop);
9216
- window.removeEventListener("blur", stop);
9217
- cleanupRef.current = null;
9218
- emitSizingChange({}, { transactionId: state.transactionId, phase: "end" });
9447
+ },
9448
+ [emitSizingChange, enabled, onResizeSizingChange, selectedElement]
9449
+ );
9450
+ const getResizeHandleDoubleClick = React18.useCallback(
9451
+ (handle) => {
9452
+ return (e) => {
9453
+ if (!enabled || !onResizeSizingChange) return;
9454
+ if (!isEdgeHandle(handle)) return;
9455
+ const hasElementChildren = selectedElement.children.length > 0;
9456
+ const hasTextContent = Boolean(selectedElement.textContent?.trim());
9457
+ const isEligibleElement = hasElementChildren || hasTextContent;
9458
+ if (!isEligibleElement) return;
9459
+ e.preventDefault();
9460
+ e.stopPropagation();
9461
+ const rect = selectedElement.getBoundingClientRect();
9462
+ const width = Math.max(MIN_SIZE_PX, Math.round(rect.width));
9463
+ const height = Math.max(MIN_SIZE_PX, Math.round(rect.height));
9464
+ if (handle === "left" || handle === "right") {
9465
+ emitSizingChange({ width: createSizingValue("fit", width) });
9466
+ } else {
9467
+ emitSizingChange({ height: createSizingValue("fit", height) });
9468
+ }
9219
9469
  };
9220
- cleanupRef.current = stop;
9221
- window.addEventListener("pointermove", onPointerMove);
9222
- window.addEventListener("pointerup", stop);
9223
- window.addEventListener("pointercancel", stop);
9224
- window.addEventListener("blur", stop);
9225
- };
9226
- }, [emitSizingChange, enabled, onResizeSizingChange, selectedElement]);
9227
- const getResizeHandleDoubleClick = React18.useCallback((handle) => {
9228
- return (e) => {
9229
- if (!enabled || !onResizeSizingChange) return;
9230
- if (!isEdgeHandle(handle)) return;
9231
- const hasElementChildren = selectedElement.children.length > 0;
9232
- const hasTextContent = Boolean(selectedElement.textContent?.trim());
9233
- const isEligibleElement = hasElementChildren || hasTextContent;
9234
- if (!isEligibleElement) return;
9235
- e.preventDefault();
9236
- e.stopPropagation();
9237
- const rect = selectedElement.getBoundingClientRect();
9238
- const width = Math.max(MIN_SIZE_PX, Math.round(rect.width));
9239
- const height = Math.max(MIN_SIZE_PX, Math.round(rect.height));
9240
- if (handle === "left" || handle === "right") {
9241
- emitSizingChange({ width: createSizingValue("fit", width) });
9242
- } else {
9243
- emitSizingChange({ height: createSizingValue("fit", height) });
9244
- }
9245
- };
9246
- }, [emitSizingChange, enabled, onResizeSizingChange, selectedElement]);
9470
+ },
9471
+ [emitSizingChange, enabled, onResizeSizingChange, selectedElement]
9472
+ );
9247
9473
  return {
9248
9474
  getResizeHandlePointerDown,
9249
9475
  getResizeHandleDoubleClick
@@ -9868,17 +10094,20 @@ function getGroupBounds(rects) {
9868
10094
  if (rects.length === 0) {
9869
10095
  return { left: 0, top: 0, right: 0, bottom: 0 };
9870
10096
  }
9871
- return rects.reduce((bounds, rect) => ({
9872
- left: Math.min(bounds.left, rect.left),
9873
- top: Math.min(bounds.top, rect.top),
9874
- right: Math.max(bounds.right, rect.right),
9875
- bottom: Math.max(bounds.bottom, rect.bottom)
9876
- }), {
9877
- left: rects[0].left,
9878
- top: rects[0].top,
9879
- right: rects[0].right,
9880
- bottom: rects[0].bottom
9881
- });
10097
+ return rects.reduce(
10098
+ (bounds, rect) => ({
10099
+ left: Math.min(bounds.left, rect.left),
10100
+ top: Math.min(bounds.top, rect.top),
10101
+ right: Math.max(bounds.right, rect.right),
10102
+ bottom: Math.max(bounds.bottom, rect.bottom)
10103
+ }),
10104
+ {
10105
+ left: rects[0].left,
10106
+ top: rects[0].top,
10107
+ right: rects[0].right,
10108
+ bottom: rects[0].bottom
10109
+ }
10110
+ );
9882
10111
  }
9883
10112
  function MultiSelectionOverlay({ selectedElements }) {
9884
10113
  const elements = React20.useMemo(
@@ -9887,10 +10116,12 @@ function MultiSelectionOverlay({ selectedElements }) {
9887
10116
  );
9888
10117
  const [selectionRects, setSelectionRects] = React20.useState([]);
9889
10118
  const updateRects = React20.useCallback(() => {
9890
- setSelectionRects(elements.map((element) => ({
9891
- element,
9892
- rect: element.getBoundingClientRect()
9893
- })));
10119
+ setSelectionRects(
10120
+ elements.map((element) => ({
10121
+ element,
10122
+ rect: element.getBoundingClientRect()
10123
+ }))
10124
+ );
9894
10125
  }, [elements]);
9895
10126
  React20.useLayoutEffect(() => {
9896
10127
  updateRects();
@@ -13120,89 +13351,91 @@ function DirectEditPanelInner({
13120
13351
  sectionRefs
13121
13352
  }
13122
13353
  ),
13123
- /* @__PURE__ */ jsxs23("div", { className: "flex-1 overflow-y-auto backdrop-blur-xl bg-background/85", ref: scrollRef, onWheelCapture: (e) => e.stopPropagation(), children: [
13124
- /* @__PURE__ */ jsx29(
13125
- LayoutSection,
13126
- {
13127
- elementInfo,
13128
- computedFlex,
13129
- computedSpacing,
13130
- computedSizing,
13131
- onToggleFlex,
13132
- onUpdateFlex,
13133
- onUpdateSpacing,
13134
- onUpdateSizing,
13135
- sectionRef: sectionRefs.layout
13136
- }
13137
- ),
13138
- /* @__PURE__ */ jsx29("div", { ref: sectionRefs.radius, children: /* @__PURE__ */ jsx29(CollapsibleSection, { title: "Radius", children: /* @__PURE__ */ jsx29(
13139
- BorderRadiusInputs,
13140
- {
13141
- values: {
13142
- topLeft: computedBorderRadius.borderTopLeftRadius,
13143
- topRight: computedBorderRadius.borderTopRightRadius,
13144
- bottomRight: computedBorderRadius.borderBottomRightRadius,
13145
- bottomLeft: computedBorderRadius.borderBottomLeftRadius
13146
- },
13147
- onChange: onUpdateBorderRadius
13148
- }
13149
- ) }) }),
13150
- computedColor && /* @__PURE__ */ jsx29("div", { ref: sectionRefs.fill, children: /* @__PURE__ */ jsx29(
13151
- BackgroundFillSection,
13152
- {
13153
- backgroundColor: computedColor.backgroundColor,
13154
- onSetCSS,
13155
- pendingStyles
13156
- }
13157
- ) }),
13158
- /* @__PURE__ */ jsx29("div", { ref: sectionRefs.border, children: /* @__PURE__ */ jsx29(
13159
- BorderSection,
13160
- {
13161
- border: computedBorder,
13162
- borderColor: computedColor?.borderColor,
13163
- outlineColor: computedColor?.outlineColor,
13164
- borderStyleControlPreference,
13165
- onChange: onUpdateBorder,
13166
- onBatchChange: onBatchUpdateBorder,
13167
- onBorderColorChange: (value) => onUpdateColor("borderColor", value),
13168
- onOutlineColorChange: (value) => onUpdateColor("outlineColor", value),
13169
- onSetCSS,
13170
- pendingStyles
13171
- }
13172
- ) }),
13173
- /* @__PURE__ */ jsx29("div", { ref: sectionRefs.shadow, children: /* @__PURE__ */ jsx29(
13174
- ShadowSection,
13175
- {
13176
- boxShadow: computedBoxShadow,
13177
- onSetCSS,
13178
- pendingStyles
13179
- }
13180
- ) }),
13181
- elementInfo.isTextElement && computedTypography && /* @__PURE__ */ jsx29("div", { ref: sectionRefs.text, children: /* @__PURE__ */ jsx29(CollapsibleSection, { title: "Text", children: /* @__PURE__ */ jsx29(
13182
- TypographyInputs,
13183
- {
13184
- typography: computedTypography,
13185
- onUpdate: onUpdateTypography
13186
- }
13187
- ) }) }),
13188
- computedColor && /* @__PURE__ */ jsx29("div", { ref: sectionRefs.colors, children: /* @__PURE__ */ jsx29(CollapsibleSection, { title: "Selection colors", children: /* @__PURE__ */ jsx29(
13189
- FillSection,
13190
- {
13191
- textColor: computedColor.color,
13192
- borderColor: computedColor.borderColor,
13193
- outlineColor: computedColor.outlineColor,
13194
- selectionColors,
13195
- onTextChange: (value) => onUpdateColor("color", value),
13196
- onBorderColorChange: (value) => onUpdateColor("borderColor", value),
13197
- onOutlineColorChange: (value) => onUpdateColor("outlineColor", value),
13198
- onSelectionColorChange: onReplaceSelectionColor,
13199
- onSelectionColorTarget: onSelectSelectionColorTarget,
13200
- hasTextContent: elementInfo.isTextElement,
13201
- showBorderColor: computedColor.borderColor.alpha > 0,
13202
- showOutlineColor: computedColor.outlineColor.alpha > 0
13203
- }
13204
- ) }) })
13205
- ] }),
13354
+ /* @__PURE__ */ jsxs23(
13355
+ "div",
13356
+ {
13357
+ className: "flex-1 overflow-y-auto backdrop-blur-xl bg-background/85",
13358
+ ref: scrollRef,
13359
+ onWheelCapture: (e) => e.stopPropagation(),
13360
+ children: [
13361
+ /* @__PURE__ */ jsx29(
13362
+ LayoutSection,
13363
+ {
13364
+ elementInfo,
13365
+ computedFlex,
13366
+ computedSpacing,
13367
+ computedSizing,
13368
+ onToggleFlex,
13369
+ onUpdateFlex,
13370
+ onUpdateSpacing,
13371
+ onUpdateSizing,
13372
+ sectionRef: sectionRefs.layout
13373
+ }
13374
+ ),
13375
+ /* @__PURE__ */ jsx29("div", { ref: sectionRefs.radius, children: /* @__PURE__ */ jsx29(CollapsibleSection, { title: "Radius", children: /* @__PURE__ */ jsx29(
13376
+ BorderRadiusInputs,
13377
+ {
13378
+ values: {
13379
+ topLeft: computedBorderRadius.borderTopLeftRadius,
13380
+ topRight: computedBorderRadius.borderTopRightRadius,
13381
+ bottomRight: computedBorderRadius.borderBottomRightRadius,
13382
+ bottomLeft: computedBorderRadius.borderBottomLeftRadius
13383
+ },
13384
+ onChange: onUpdateBorderRadius
13385
+ }
13386
+ ) }) }),
13387
+ computedColor && /* @__PURE__ */ jsx29("div", { ref: sectionRefs.fill, children: /* @__PURE__ */ jsx29(
13388
+ BackgroundFillSection,
13389
+ {
13390
+ backgroundColor: computedColor.backgroundColor,
13391
+ onSetCSS,
13392
+ pendingStyles
13393
+ }
13394
+ ) }),
13395
+ /* @__PURE__ */ jsx29("div", { ref: sectionRefs.border, children: /* @__PURE__ */ jsx29(
13396
+ BorderSection,
13397
+ {
13398
+ border: computedBorder,
13399
+ borderColor: computedColor?.borderColor,
13400
+ outlineColor: computedColor?.outlineColor,
13401
+ borderStyleControlPreference,
13402
+ onChange: onUpdateBorder,
13403
+ onBatchChange: onBatchUpdateBorder,
13404
+ onBorderColorChange: (value) => onUpdateColor("borderColor", value),
13405
+ onOutlineColorChange: (value) => onUpdateColor("outlineColor", value),
13406
+ onSetCSS,
13407
+ pendingStyles
13408
+ }
13409
+ ) }),
13410
+ /* @__PURE__ */ jsx29("div", { ref: sectionRefs.shadow, children: /* @__PURE__ */ jsx29(
13411
+ ShadowSection,
13412
+ {
13413
+ boxShadow: computedBoxShadow,
13414
+ onSetCSS,
13415
+ pendingStyles
13416
+ }
13417
+ ) }),
13418
+ elementInfo.isTextElement && computedTypography && /* @__PURE__ */ jsx29("div", { ref: sectionRefs.text, children: /* @__PURE__ */ jsx29(CollapsibleSection, { title: "Text", children: /* @__PURE__ */ jsx29(TypographyInputs, { typography: computedTypography, onUpdate: onUpdateTypography }) }) }),
13419
+ computedColor && /* @__PURE__ */ jsx29("div", { ref: sectionRefs.colors, children: /* @__PURE__ */ jsx29(CollapsibleSection, { title: "Selection colors", children: /* @__PURE__ */ jsx29(
13420
+ FillSection,
13421
+ {
13422
+ textColor: computedColor.color,
13423
+ borderColor: computedColor.borderColor,
13424
+ outlineColor: computedColor.outlineColor,
13425
+ selectionColors,
13426
+ onTextChange: (value) => onUpdateColor("color", value),
13427
+ onBorderColorChange: (value) => onUpdateColor("borderColor", value),
13428
+ onOutlineColorChange: (value) => onUpdateColor("outlineColor", value),
13429
+ onSelectionColorChange: onReplaceSelectionColor,
13430
+ onSelectionColorTarget: onSelectSelectionColorTarget,
13431
+ hasTextContent: elementInfo.isTextElement,
13432
+ showBorderColor: computedColor.borderColor.alpha > 0,
13433
+ showOutlineColor: computedColor.outlineColor.alpha > 0
13434
+ }
13435
+ ) }) })
13436
+ ]
13437
+ }
13438
+ ),
13206
13439
  (onExportEdits || showSendButton && onSendToAgent) && /* @__PURE__ */ jsx29(
13207
13440
  PanelFooter,
13208
13441
  {
@@ -13275,6 +13508,8 @@ function DirectEditPanelContent() {
13275
13508
  addCommentReply,
13276
13509
  deleteComment,
13277
13510
  exportComment,
13511
+ exportEdits,
13512
+ sendEditToAgent: sendEditToAgent2,
13278
13513
  sendCommentToAgent: sendCommentToAgent2,
13279
13514
  setActiveCommentId,
13280
13515
  startTextEditing,
@@ -13308,21 +13543,23 @@ function DirectEditPanelContent() {
13308
13543
  const activeDraftComment = React34.useMemo(() => {
13309
13544
  if (!commentTargetElement || !activeCommentId) return null;
13310
13545
  const active = comments.find((comment) => comment.id === activeCommentId);
13311
- if (!active || active.text.trim().length > 0 || active.element !== commentTargetElement) return null;
13546
+ if (!active || active.text.trim().length > 0 || active.element !== commentTargetElement)
13547
+ return null;
13312
13548
  return active;
13313
13549
  }, [activeCommentId, commentTargetElement, comments]);
13314
- const { isActive: measurementActive, hoveredElement, measurements, mousePosition } = useMeasurement(
13315
- isOpen ? selectedElement : null
13316
- );
13317
13550
  const {
13318
- dragState,
13319
- dropIndicator,
13320
- startDrag
13321
- } = useMove({
13551
+ isActive: measurementActive,
13552
+ hoveredElement,
13553
+ measurements,
13554
+ mousePosition
13555
+ } = useMeasurement(isOpen ? selectedElement : null);
13556
+ const { dragState, dropIndicator, startDrag } = useMove({
13322
13557
  onMoveComplete: handleMoveComplete
13323
13558
  });
13324
13559
  const triggerCommentInputAttention = React34.useCallback((commentId) => {
13325
- setCommentInputAttention((prev) => prev?.commentId === commentId ? { commentId, nonce: prev.nonce + 1 } : { commentId, nonce: 1 });
13560
+ setCommentInputAttention(
13561
+ (prev) => prev?.commentId === commentId ? { commentId, nonce: prev.nonce + 1 } : { commentId, nonce: 1 }
13562
+ );
13326
13563
  }, []);
13327
13564
  React34.useEffect(() => {
13328
13565
  if (!activeCommentId) {
@@ -13336,26 +13573,32 @@ function DirectEditPanelContent() {
13336
13573
  setCommentDraftBlockedHandler(null);
13337
13574
  };
13338
13575
  }, [activeCommentId, setCommentDraftBlockedHandler, triggerCommentInputAttention]);
13339
- const hasPendingCommentDraft = React34.useCallback((nextCommentId = null) => {
13340
- if (!activeCommentId) return false;
13341
- if (nextCommentId && nextCommentId === activeCommentId) return false;
13342
- const active = comments.find((comment) => comment.id === activeCommentId);
13343
- if (!active) return false;
13344
- const hasUnsentDraft = active.text.trim().length === 0 && commentDraftRef.current.trim().length > 0;
13345
- if (!hasUnsentDraft) return false;
13346
- triggerCommentInputAttention(active.id);
13347
- return true;
13348
- }, [activeCommentId, comments, triggerCommentInputAttention]);
13349
- const handleSetActiveComment = React34.useCallback((id) => {
13350
- if (hasPendingCommentDraft(id)) return;
13351
- if (activeCommentId && activeCommentId !== id) {
13576
+ const hasPendingCommentDraft = React34.useCallback(
13577
+ (nextCommentId = null) => {
13578
+ if (!activeCommentId) return false;
13579
+ if (nextCommentId && nextCommentId === activeCommentId) return false;
13352
13580
  const active = comments.find((comment) => comment.id === activeCommentId);
13353
- if (active && active.text.trim().length === 0) {
13354
- deleteComment(active.id);
13581
+ if (!active) return false;
13582
+ const hasUnsentDraft = active.text.trim().length === 0 && commentDraftRef.current.trim().length > 0;
13583
+ if (!hasUnsentDraft) return false;
13584
+ triggerCommentInputAttention(active.id);
13585
+ return true;
13586
+ },
13587
+ [activeCommentId, comments, triggerCommentInputAttention]
13588
+ );
13589
+ const handleSetActiveComment = React34.useCallback(
13590
+ (id) => {
13591
+ if (hasPendingCommentDraft(id)) return;
13592
+ if (activeCommentId && activeCommentId !== id) {
13593
+ const active = comments.find((comment) => comment.id === activeCommentId);
13594
+ if (active && active.text.trim().length === 0) {
13595
+ deleteComment(active.id);
13596
+ }
13355
13597
  }
13356
- }
13357
- setActiveCommentId(id);
13358
- }, [activeCommentId, comments, hasPendingCommentDraft, deleteComment, setActiveCommentId]);
13598
+ setActiveCommentId(id);
13599
+ },
13600
+ [activeCommentId, comments, hasPendingCommentDraft, deleteComment, setActiveCommentId]
13601
+ );
13359
13602
  const handleCommentPillClick = React34.useCallback(() => {
13360
13603
  if (activeDraftComment) {
13361
13604
  handleSetActiveComment(null);
@@ -13363,13 +13606,23 @@ function DirectEditPanelContent() {
13363
13606
  }
13364
13607
  if (hasPendingCommentDraft()) return;
13365
13608
  if (!commentTargetElement) return;
13366
- const existingDraft = comments.find((comment) => comment.element === commentTargetElement && comment.text.trim().length === 0);
13609
+ const existingDraft = comments.find(
13610
+ (comment) => comment.element === commentTargetElement && comment.text.trim().length === 0
13611
+ );
13367
13612
  if (existingDraft) {
13368
13613
  setActiveCommentId(existingDraft.id);
13369
13614
  return;
13370
13615
  }
13371
13616
  addComment(commentTargetElement, getElementCommentAnchor(commentTargetElement));
13372
- }, [activeDraftComment, handleSetActiveComment, hasPendingCommentDraft, commentTargetElement, comments, setActiveCommentId, addComment]);
13617
+ }, [
13618
+ activeDraftComment,
13619
+ handleSetActiveComment,
13620
+ hasPendingCommentDraft,
13621
+ commentTargetElement,
13622
+ comments,
13623
+ setActiveCommentId,
13624
+ addComment
13625
+ ]);
13373
13626
  React34.useEffect(() => {
13374
13627
  const previous = previousCommentTriggerRef.current;
13375
13628
  previousCommentTriggerRef.current = { editModeActive, commentTargetElement };
@@ -13466,58 +13719,81 @@ function DirectEditPanelContent() {
13466
13719
  if (pageTitle.length > 0) return pageTitle;
13467
13720
  return getElementDisplayName(pageFrameElement);
13468
13721
  }, [pageFrameElement]);
13469
- const handleSelectSelectionColorTarget = React34.useCallback((targetColor) => {
13470
- if (!selectedElement) return;
13471
- const toKey = (color) => `${color.hex.toUpperCase()}:${Math.round(color.alpha)}`;
13472
- const targetKey = toKey(targetColor);
13473
- const hasOwnText2 = (node) => Array.from(node.childNodes).some((child) => child.nodeType === Node.TEXT_NODE && (child.textContent ?? "").trim().length > 0);
13474
- const parseVisibleColor3 = (raw, fallbackCurrentColor) => {
13475
- const trimmed = raw.trim();
13476
- if (!trimmed || trimmed === "none" || trimmed === "transparent") return null;
13477
- const resolved = trimmed.toLowerCase() === "currentcolor" ? fallbackCurrentColor ?? trimmed : trimmed;
13478
- const parsed = parseColorValue(resolved);
13479
- return parsed.alpha > 0 ? parsed : null;
13480
- };
13481
- const hasMatchingColor = (node) => {
13482
- const computed = window.getComputedStyle(node);
13483
- const currentTextColor = computed.color;
13484
- const matches = (raw, fallback) => {
13485
- const parsed = parseVisibleColor3(raw, fallback);
13486
- return Boolean(parsed && toKey(parsed) === targetKey);
13722
+ const handleSelectSelectionColorTarget = React34.useCallback(
13723
+ (targetColor) => {
13724
+ if (!selectedElement) return;
13725
+ const toKey = (color) => `${color.hex.toUpperCase()}:${Math.round(color.alpha)}`;
13726
+ const targetKey = toKey(targetColor);
13727
+ const hasOwnText2 = (node) => Array.from(node.childNodes).some(
13728
+ (child) => child.nodeType === Node.TEXT_NODE && (child.textContent ?? "").trim().length > 0
13729
+ );
13730
+ const parseVisibleColor3 = (raw, fallbackCurrentColor) => {
13731
+ const trimmed = raw.trim();
13732
+ if (!trimmed || trimmed === "none" || trimmed === "transparent") return null;
13733
+ const resolved = trimmed.toLowerCase() === "currentcolor" ? fallbackCurrentColor ?? trimmed : trimmed;
13734
+ const parsed = parseColorValue(resolved);
13735
+ return parsed.alpha > 0 ? parsed : null;
13487
13736
  };
13488
- if (matches(computed.backgroundColor)) return true;
13489
- if (hasOwnText2(node) && matches(currentTextColor)) return true;
13490
- const borderSides = [
13491
- { style: computed.borderTopStyle, width: computed.borderTopWidth, color: computed.borderTopColor },
13492
- { style: computed.borderRightStyle, width: computed.borderRightWidth, color: computed.borderRightColor },
13493
- { style: computed.borderBottomStyle, width: computed.borderBottomWidth, color: computed.borderBottomColor },
13494
- { style: computed.borderLeftStyle, width: computed.borderLeftWidth, color: computed.borderLeftColor }
13495
- ];
13496
- for (const side of borderSides) {
13497
- if (side.style !== "none" && parseFloat(side.width) > 0 && matches(side.color, currentTextColor)) {
13737
+ const hasMatchingColor = (node) => {
13738
+ const computed = window.getComputedStyle(node);
13739
+ const currentTextColor = computed.color;
13740
+ const matches = (raw, fallback) => {
13741
+ const parsed = parseVisibleColor3(raw, fallback);
13742
+ return Boolean(parsed && toKey(parsed) === targetKey);
13743
+ };
13744
+ if (matches(computed.backgroundColor)) return true;
13745
+ if (hasOwnText2(node) && matches(currentTextColor)) return true;
13746
+ const borderSides = [
13747
+ {
13748
+ style: computed.borderTopStyle,
13749
+ width: computed.borderTopWidth,
13750
+ color: computed.borderTopColor
13751
+ },
13752
+ {
13753
+ style: computed.borderRightStyle,
13754
+ width: computed.borderRightWidth,
13755
+ color: computed.borderRightColor
13756
+ },
13757
+ {
13758
+ style: computed.borderBottomStyle,
13759
+ width: computed.borderBottomWidth,
13760
+ color: computed.borderBottomColor
13761
+ },
13762
+ {
13763
+ style: computed.borderLeftStyle,
13764
+ width: computed.borderLeftWidth,
13765
+ color: computed.borderLeftColor
13766
+ }
13767
+ ];
13768
+ for (const side of borderSides) {
13769
+ if (side.style !== "none" && parseFloat(side.width) > 0 && matches(side.color, currentTextColor)) {
13770
+ return true;
13771
+ }
13772
+ }
13773
+ if (computed.outlineStyle !== "none" && parseFloat(computed.outlineWidth) > 0 && matches(computed.outlineColor, currentTextColor)) {
13498
13774
  return true;
13499
13775
  }
13776
+ if (node instanceof SVGGraphicsElement) {
13777
+ const fillMatch = matches(computed.getPropertyValue("fill"), currentTextColor) || matches(node.getAttribute("fill") ?? "", currentTextColor);
13778
+ const strokeMatch = matches(computed.getPropertyValue("stroke"), currentTextColor) || matches(node.getAttribute("stroke") ?? "", currentTextColor);
13779
+ if (fillMatch || strokeMatch) return true;
13780
+ }
13781
+ return false;
13782
+ };
13783
+ const descendants = Array.from(selectedElement.querySelectorAll("*"));
13784
+ const firstDescendantMatch = descendants.find(
13785
+ (node) => node instanceof HTMLElement && hasMatchingColor(node)
13786
+ );
13787
+ if (firstDescendantMatch) {
13788
+ selectElement(firstDescendantMatch);
13789
+ return;
13500
13790
  }
13501
- if (computed.outlineStyle !== "none" && parseFloat(computed.outlineWidth) > 0 && matches(computed.outlineColor, currentTextColor)) {
13502
- return true;
13503
- }
13504
- if (node instanceof SVGGraphicsElement) {
13505
- const fillMatch = matches(computed.getPropertyValue("fill"), currentTextColor) || matches(node.getAttribute("fill") ?? "", currentTextColor);
13506
- const strokeMatch = matches(computed.getPropertyValue("stroke"), currentTextColor) || matches(node.getAttribute("stroke") ?? "", currentTextColor);
13507
- if (fillMatch || strokeMatch) return true;
13791
+ if (hasMatchingColor(selectedElement)) {
13792
+ selectElement(selectedElement);
13508
13793
  }
13509
- return false;
13510
- };
13511
- const descendants = Array.from(selectedElement.querySelectorAll("*"));
13512
- const firstDescendantMatch = descendants.find((node) => node instanceof HTMLElement && hasMatchingColor(node));
13513
- if (firstDescendantMatch) {
13514
- selectElement(firstDescendantMatch);
13515
- return;
13516
- }
13517
- if (hasMatchingColor(selectedElement)) {
13518
- selectElement(selectedElement);
13519
- }
13520
- }, [selectedElement, selectElement]);
13794
+ },
13795
+ [selectedElement, selectElement]
13796
+ );
13521
13797
  const handleMoveStart = (e, targetElement, options) => {
13522
13798
  const elementToDrag = targetElement ?? selectedElement;
13523
13799
  if (elementToDrag) {
@@ -13606,7 +13882,11 @@ function DirectEditPanelContent() {
13606
13882
  hoveredElement,
13607
13883
  measurements: [
13608
13884
  ...measurements,
13609
- ...calculateGuidelineMeasurements(selectedElement, getStoredGuidelines(), mousePosition)
13885
+ ...calculateGuidelineMeasurements(
13886
+ selectedElement,
13887
+ getStoredGuidelines(),
13888
+ mousePosition
13889
+ )
13610
13890
  ]
13611
13891
  }
13612
13892
  ),
@@ -13661,6 +13941,9 @@ function DirectEditPanelContent() {
13661
13941
  onSelectSelectionColorTarget: handleSelectSelectionColorTarget,
13662
13942
  onUpdateTypography: updateTypographyProperty,
13663
13943
  onReset: resetToOriginal,
13944
+ onExportEdits: exportEdits,
13945
+ onSendToAgent: agentAvailable ? sendEditToAgent2 : void 0,
13946
+ sendFailureReason: lastSendFailure?.reason ?? null,
13664
13947
  className: "fixed z-[99999]",
13665
13948
  style: {
13666
13949
  left: position.x,