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.js CHANGED
@@ -87,7 +87,7 @@ var React8 = __toESM(require("react"));
87
87
  var React = __toESM(require("react"));
88
88
 
89
89
  // dist/styles.css
90
- 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}}';
90
+ 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}}';
91
91
 
92
92
  // src/portal-container.tsx
93
93
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -572,14 +572,7 @@ function getReactComponentInfo(element) {
572
572
  }
573
573
  return { ...getRenderStack(fiber), elementSourceFile };
574
574
  }
575
- var EXCLUDED_PROP_KEYS = /* @__PURE__ */ new Set([
576
- "className",
577
- "style",
578
- "children",
579
- "ref",
580
- "key",
581
- "render"
582
- ]);
575
+ var EXCLUDED_PROP_KEYS = /* @__PURE__ */ new Set(["className", "style", "children", "ref", "key", "render"]);
583
576
  function serializePropValue(value) {
584
577
  if (typeof value === "function") return "[function]";
585
578
  if (typeof value === "symbol") return void 0;
@@ -690,19 +683,7 @@ function classifyComponentFiber(fiber, frames, elementSourceFile) {
690
683
  return { isComponentPrimitive: false };
691
684
  }
692
685
 
693
- // src/utils.ts
694
- function clamp(value, min, max) {
695
- if (!Number.isFinite(value)) return min;
696
- if (max < min) return min;
697
- return Math.max(min, Math.min(max, value));
698
- }
699
- function isInputFocused() {
700
- let active = document.activeElement;
701
- while (active?.shadowRoot?.activeElement) {
702
- active = active.shadowRoot.activeElement;
703
- }
704
- return active instanceof HTMLInputElement || active instanceof HTMLTextAreaElement || active instanceof HTMLElement && active.isContentEditable;
705
- }
686
+ // src/utils/computed-styles.ts
706
687
  function getComputedStyles(element) {
707
688
  const computed = window.getComputedStyle(element);
708
689
  return {
@@ -811,6 +792,255 @@ function getOriginalInlineStyles(element) {
811
792
  }
812
793
  return styles;
813
794
  }
795
+ function getComputedTypography(element) {
796
+ const computed = window.getComputedStyle(element);
797
+ let textVerticalAlign = "flex-start";
798
+ if (computed.display === "flex" || computed.display === "inline-flex") {
799
+ const alignItems = computed.alignItems;
800
+ if (alignItems === "center") textVerticalAlign = "center";
801
+ else if (alignItems === "flex-end" || alignItems === "end") textVerticalAlign = "flex-end";
802
+ }
803
+ const lineHeight = computed.lineHeight === "normal" ? {
804
+ numericValue: parseFloat(computed.fontSize) * 1.2,
805
+ unit: "px",
806
+ raw: `${Math.round(parseFloat(computed.fontSize) * 1.2)}px`
807
+ } : parsePropertyValue(computed.lineHeight);
808
+ const fontSize = parseFloat(computed.fontSize);
809
+ let letterSpacing;
810
+ if (computed.letterSpacing === "normal") {
811
+ letterSpacing = { numericValue: 0, unit: "em", raw: "0em" };
812
+ } else {
813
+ const parsed = parsePropertyValue(computed.letterSpacing);
814
+ if (parsed.unit === "px" && fontSize > 0) {
815
+ const emValue = Math.round(parsed.numericValue / fontSize * 100) / 100;
816
+ letterSpacing = { numericValue: emValue, unit: "em", raw: `${emValue}em` };
817
+ } else {
818
+ letterSpacing = parsed;
819
+ }
820
+ }
821
+ return {
822
+ fontFamily: computed.fontFamily,
823
+ fontWeight: computed.fontWeight,
824
+ fontSize: parsePropertyValue(computed.fontSize),
825
+ lineHeight,
826
+ letterSpacing,
827
+ textAlign: computed.textAlign,
828
+ textVerticalAlign
829
+ };
830
+ }
831
+ function getComputedSizing(element) {
832
+ return {
833
+ width: getSizingValue(element, "width"),
834
+ height: getSizingValue(element, "height")
835
+ };
836
+ }
837
+ var TEXT_ELEMENT_TAGS = /* @__PURE__ */ new Set([
838
+ "p",
839
+ "h1",
840
+ "h2",
841
+ "h3",
842
+ "h4",
843
+ "h5",
844
+ "h6",
845
+ "span",
846
+ "label",
847
+ "a",
848
+ "strong",
849
+ "em",
850
+ "small",
851
+ "blockquote",
852
+ "li",
853
+ "td",
854
+ "th",
855
+ "caption",
856
+ "figcaption",
857
+ "legend",
858
+ "dt",
859
+ "dd",
860
+ "abbr",
861
+ "cite",
862
+ "code",
863
+ "pre"
864
+ ]);
865
+ function hasDirectNonWhitespaceText(element) {
866
+ return Array.from(element.childNodes).some(
867
+ (node) => node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim())
868
+ );
869
+ }
870
+ var TRANSPARENT_COLOR = { hex: "000000", alpha: 0, raw: "transparent" };
871
+ function isVisibleBorderSide(side) {
872
+ return side.style !== "none" && side.style !== "hidden" && parseFloat(side.width) > 0;
873
+ }
874
+ function hasVisibleOutline(computed) {
875
+ return computed.outlineStyle !== "none" && parseFloat(computed.outlineWidth) > 0;
876
+ }
877
+ function parseVisibleColor(value, fallbackCurrentColor) {
878
+ const raw = value.trim();
879
+ const lowered = raw.toLowerCase();
880
+ if (!raw || lowered === "none" || lowered === "transparent") {
881
+ return null;
882
+ }
883
+ const resolved = /^currentcolor$/i.test(raw) ? fallbackCurrentColor ?? raw : raw;
884
+ const parsed = parseColorValue(resolved);
885
+ if (parsed.alpha <= 0) {
886
+ return null;
887
+ }
888
+ return parsed;
889
+ }
890
+ function addUniqueColor(colors, color) {
891
+ if (!color) return;
892
+ colors.set(`${color.hex}:${color.alpha}`, color);
893
+ }
894
+ function isTextRenderingFormControl(element) {
895
+ if (element instanceof HTMLTextAreaElement) return true;
896
+ if (element instanceof HTMLSelectElement) return true;
897
+ if (element instanceof HTMLButtonElement) return true;
898
+ if (element instanceof HTMLInputElement) {
899
+ const textlessInputTypes = /* @__PURE__ */ new Set([
900
+ "hidden",
901
+ "checkbox",
902
+ "radio",
903
+ "range",
904
+ "color",
905
+ "file",
906
+ "image"
907
+ ]);
908
+ return !textlessInputTypes.has(element.type.toLowerCase());
909
+ }
910
+ return false;
911
+ }
912
+ function hasRenderableTextNode(element) {
913
+ if (element.isContentEditable) return true;
914
+ if (isTextRenderingFormControl(element)) return true;
915
+ if (!element.textContent?.trim()) return false;
916
+ if (hasDirectNonWhitespaceText(element)) return true;
917
+ const tagName = element.tagName.toLowerCase();
918
+ return TEXT_ELEMENT_TAGS.has(tagName) || element.children.length === 0;
919
+ }
920
+ function getComputedBoxShadow(element) {
921
+ const computed = window.getComputedStyle(element);
922
+ const value = computed.boxShadow.trim();
923
+ return value || "none";
924
+ }
925
+ function getComputedColorStyles(element) {
926
+ const computed = window.getComputedStyle(element);
927
+ const borderSides = [
928
+ {
929
+ style: computed.borderTopStyle,
930
+ width: computed.borderTopWidth,
931
+ color: computed.borderTopColor
932
+ },
933
+ {
934
+ style: computed.borderRightStyle,
935
+ width: computed.borderRightWidth,
936
+ color: computed.borderRightColor
937
+ },
938
+ {
939
+ style: computed.borderBottomStyle,
940
+ width: computed.borderBottomWidth,
941
+ color: computed.borderBottomColor
942
+ },
943
+ {
944
+ style: computed.borderLeftStyle,
945
+ width: computed.borderLeftWidth,
946
+ color: computed.borderLeftColor
947
+ }
948
+ ];
949
+ const visibleBorderSide = borderSides.find((side) => isVisibleBorderSide(side));
950
+ const hasBorder = Boolean(visibleBorderSide);
951
+ const hasOutline = hasVisibleOutline(computed);
952
+ return {
953
+ backgroundColor: parseColorValue(computed.backgroundColor),
954
+ color: parseColorValue(computed.color),
955
+ borderColor: hasBorder && visibleBorderSide ? parseColorValue(visibleBorderSide.color) : TRANSPARENT_COLOR,
956
+ outlineColor: hasOutline ? parseColorValue(computed.outlineColor) : TRANSPARENT_COLOR
957
+ };
958
+ }
959
+ function getSelectionColors(element) {
960
+ const uniqueColors = /* @__PURE__ */ new Map();
961
+ const queue = [element];
962
+ for (let index = 0; index < queue.length; index++) {
963
+ const node = queue[index];
964
+ const computed = window.getComputedStyle(node);
965
+ if (computed.display === "none") {
966
+ continue;
967
+ }
968
+ const isVisibilityHidden = computed.visibility === "hidden" || computed.visibility === "collapse";
969
+ const currentTextColor = computed.color;
970
+ if (!isVisibilityHidden) {
971
+ addUniqueColor(uniqueColors, parseVisibleColor(computed.backgroundColor));
972
+ if (node instanceof HTMLElement && hasRenderableTextNode(node)) {
973
+ addUniqueColor(uniqueColors, parseVisibleColor(currentTextColor));
974
+ }
975
+ const borderSides = [
976
+ {
977
+ style: computed.borderTopStyle,
978
+ width: computed.borderTopWidth,
979
+ color: computed.borderTopColor
980
+ },
981
+ {
982
+ style: computed.borderRightStyle,
983
+ width: computed.borderRightWidth,
984
+ color: computed.borderRightColor
985
+ },
986
+ {
987
+ style: computed.borderBottomStyle,
988
+ width: computed.borderBottomWidth,
989
+ color: computed.borderBottomColor
990
+ },
991
+ {
992
+ style: computed.borderLeftStyle,
993
+ width: computed.borderLeftWidth,
994
+ color: computed.borderLeftColor
995
+ }
996
+ ];
997
+ for (const side of borderSides) {
998
+ if (!isVisibleBorderSide(side)) continue;
999
+ addUniqueColor(uniqueColors, parseVisibleColor(side.color, currentTextColor));
1000
+ }
1001
+ if (hasVisibleOutline(computed)) {
1002
+ addUniqueColor(uniqueColors, parseVisibleColor(computed.outlineColor, currentTextColor));
1003
+ }
1004
+ if (node instanceof SVGElement) {
1005
+ const fillColor = parseVisibleColor(computed.getPropertyValue("fill"), currentTextColor) ?? parseVisibleColor(node.getAttribute("fill") ?? "", currentTextColor);
1006
+ const strokeColor = parseVisibleColor(computed.getPropertyValue("stroke"), currentTextColor) ?? parseVisibleColor(node.getAttribute("stroke") ?? "", currentTextColor);
1007
+ addUniqueColor(uniqueColors, fillColor);
1008
+ addUniqueColor(uniqueColors, strokeColor);
1009
+ }
1010
+ }
1011
+ for (const child of node.children) {
1012
+ queue.push(child);
1013
+ }
1014
+ }
1015
+ return Array.from(uniqueColors.values());
1016
+ }
1017
+ function getAllComputedStyles(element) {
1018
+ const { spacing, borderRadius, flex } = getComputedStyles(element);
1019
+ return {
1020
+ spacing,
1021
+ borderRadius,
1022
+ border: getComputedBorderStyles(element),
1023
+ flex,
1024
+ sizing: getComputedSizing(element),
1025
+ color: getComputedColorStyles(element),
1026
+ boxShadow: getComputedBoxShadow(element),
1027
+ typography: getComputedTypography(element)
1028
+ };
1029
+ }
1030
+
1031
+ // src/utils.ts
1032
+ function clamp(value, min, max) {
1033
+ if (!Number.isFinite(value)) return min;
1034
+ if (max < min) return min;
1035
+ return Math.max(min, Math.min(max, value));
1036
+ }
1037
+ function isInputFocused() {
1038
+ let active = document.activeElement;
1039
+ while (active?.shadowRoot?.activeElement) {
1040
+ active = active.shadowRoot.activeElement;
1041
+ }
1042
+ return active instanceof HTMLInputElement || active instanceof HTMLTextAreaElement || active instanceof HTMLElement && active.isContentEditable;
1043
+ }
814
1044
  var spacingScale = { 0: "0", 1: "px", 2: "0.5", 4: "1", 8: "2", 12: "3", 16: "4", 20: "5", 24: "6", 32: "8" };
815
1045
  var tailwindClassMap = {
816
1046
  padding: { prefix: "p", scale: spacingScale },
@@ -1137,7 +1367,7 @@ var typographyPropertyToCSSMap = {
1137
1367
  textAlign: "text-align",
1138
1368
  textVerticalAlign: "align-items"
1139
1369
  };
1140
- var TEXT_ELEMENT_TAGS = /* @__PURE__ */ new Set([
1370
+ var TEXT_ELEMENT_TAGS2 = /* @__PURE__ */ new Set([
1141
1371
  "p",
1142
1372
  "h1",
1143
1373
  "h2",
@@ -1165,17 +1395,17 @@ var TEXT_ELEMENT_TAGS = /* @__PURE__ */ new Set([
1165
1395
  "code",
1166
1396
  "pre"
1167
1397
  ]);
1168
- function hasDirectNonWhitespaceText(element) {
1398
+ function hasDirectNonWhitespaceText2(element) {
1169
1399
  return Array.from(element.childNodes).some(
1170
1400
  (node) => node.nodeType === Node.TEXT_NODE && Boolean(node.textContent?.trim())
1171
1401
  );
1172
1402
  }
1173
1403
  function isTextElement2(element) {
1174
1404
  const tagName = element.tagName.toLowerCase();
1175
- if (TEXT_ELEMENT_TAGS.has(tagName)) {
1405
+ if (TEXT_ELEMENT_TAGS2.has(tagName)) {
1176
1406
  return true;
1177
1407
  }
1178
- if (hasDirectNonWhitespaceText(element)) {
1408
+ if (hasDirectNonWhitespaceText2(element)) {
1179
1409
  return true;
1180
1410
  }
1181
1411
  if (element.children.length === 0 && element.textContent?.trim()) {
@@ -1183,38 +1413,6 @@ function isTextElement2(element) {
1183
1413
  }
1184
1414
  return false;
1185
1415
  }
1186
- function getComputedTypography(element) {
1187
- const computed = window.getComputedStyle(element);
1188
- let textVerticalAlign = "flex-start";
1189
- if (computed.display === "flex" || computed.display === "inline-flex") {
1190
- const alignItems = computed.alignItems;
1191
- if (alignItems === "center") textVerticalAlign = "center";
1192
- else if (alignItems === "flex-end" || alignItems === "end") textVerticalAlign = "flex-end";
1193
- }
1194
- 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);
1195
- const fontSize = parseFloat(computed.fontSize);
1196
- let letterSpacing;
1197
- if (computed.letterSpacing === "normal") {
1198
- letterSpacing = { numericValue: 0, unit: "em", raw: "0em" };
1199
- } else {
1200
- const parsed = parsePropertyValue(computed.letterSpacing);
1201
- if (parsed.unit === "px" && fontSize > 0) {
1202
- const emValue = Math.round(parsed.numericValue / fontSize * 100) / 100;
1203
- letterSpacing = { numericValue: emValue, unit: "em", raw: `${emValue}em` };
1204
- } else {
1205
- letterSpacing = parsed;
1206
- }
1207
- }
1208
- return {
1209
- fontFamily: computed.fontFamily,
1210
- fontWeight: computed.fontWeight,
1211
- fontSize: parsePropertyValue(computed.fontSize),
1212
- lineHeight,
1213
- letterSpacing,
1214
- textAlign: computed.textAlign,
1215
- textVerticalAlign
1216
- };
1217
- }
1218
1416
  function detectSizingMode(element, dimension) {
1219
1417
  const computed = window.getComputedStyle(element);
1220
1418
  const inlineValue = element.style[dimension];
@@ -1262,12 +1460,6 @@ function getSizingValue(element, dimension) {
1262
1460
  }
1263
1461
  };
1264
1462
  }
1265
- function getComputedSizing(element) {
1266
- return {
1267
- width: getSizingValue(element, "width"),
1268
- height: getSizingValue(element, "height")
1269
- };
1270
- }
1271
1463
  function sizingValueToCSS(sizing) {
1272
1464
  switch (sizing.mode) {
1273
1465
  case "fill":
@@ -1307,202 +1499,74 @@ function parseRgbAlpha(value) {
1307
1499
  const token = value.trim();
1308
1500
  if (token.endsWith("%")) {
1309
1501
  const numeric2 = parseFloat(token.slice(0, -1));
1310
- if (!Number.isFinite(numeric2)) return null;
1311
- return Math.max(0, Math.min(100, numeric2)) / 100;
1312
- }
1313
- const numeric = parseFloat(token);
1314
- if (!Number.isFinite(numeric)) return null;
1315
- return Math.max(0, Math.min(1, numeric));
1316
- }
1317
- function parseRgbaColor(rgba) {
1318
- const raw = rgba.trim();
1319
- const fnMatch = raw.match(/^rgba?\((.*)\)$/i);
1320
- if (!fnMatch) {
1321
- return { hex: "000000", alpha: 100, raw: rgba };
1322
- }
1323
- const body = fnMatch[1].trim();
1324
- let channelTokens = null;
1325
- let alphaToken;
1326
- const commaParts = body.split(",").map((part) => part.trim()).filter(Boolean);
1327
- if (commaParts.length === 3 || commaParts.length === 4) {
1328
- channelTokens = [commaParts[0], commaParts[1], commaParts[2]];
1329
- alphaToken = commaParts[3];
1330
- } else {
1331
- const slashParts = body.split("/");
1332
- if (slashParts.length === 1 || slashParts.length === 2) {
1333
- const channels = slashParts[0].trim().split(/\s+/).filter(Boolean);
1334
- if (channels.length === 3) {
1335
- channelTokens = [channels[0], channels[1], channels[2]];
1336
- alphaToken = slashParts[1]?.trim();
1337
- }
1338
- }
1339
- }
1340
- if (!channelTokens) {
1341
- return { hex: "000000", alpha: 100, raw: rgba };
1342
- }
1343
- const r = parseRgbChannel(channelTokens[0]);
1344
- const g = parseRgbChannel(channelTokens[1]);
1345
- const b = parseRgbChannel(channelTokens[2]);
1346
- const a = parseRgbAlpha(alphaToken);
1347
- if (r === null || g === null || b === null || a === null) {
1348
- return { hex: "000000", alpha: 100, raw: rgba };
1349
- }
1350
- const hex = [r, g, b].map((v) => v.toString(16).padStart(2, "0")).join("").toUpperCase();
1351
- const alpha = Math.round(a * 100);
1352
- return { hex, alpha, raw: rgba };
1353
- }
1354
- function parseNamedColor(name) {
1355
- const ctx = document.createElement("canvas").getContext("2d");
1356
- if (!ctx) {
1357
- return { hex: "000000", alpha: 100, raw: name };
1358
- }
1359
- ctx.fillStyle = name;
1360
- const computed = ctx.fillStyle;
1361
- if (computed.startsWith("#")) {
1362
- return parseHexColor(computed);
1363
- }
1364
- return parseRgbaColor(computed);
1365
- }
1366
- function parseColorValue(cssValue) {
1367
- const raw = cssValue.trim();
1368
- if (raw === "transparent") {
1369
- return { hex: "000000", alpha: 0, raw };
1370
- }
1371
- if (raw.startsWith("#")) {
1372
- return parseHexColor(raw);
1373
- }
1374
- if (raw.startsWith("rgb")) {
1375
- return parseRgbaColor(raw);
1376
- }
1377
- return parseNamedColor(raw);
1378
- }
1379
- var TRANSPARENT_COLOR = { hex: "000000", alpha: 0, raw: "transparent" };
1380
- function isVisibleBorderSide(side) {
1381
- return side.style !== "none" && side.style !== "hidden" && parseFloat(side.width) > 0;
1382
- }
1383
- function hasVisibleOutline(computed) {
1384
- return computed.outlineStyle !== "none" && parseFloat(computed.outlineWidth) > 0;
1385
- }
1386
- function parseVisibleColor(value, fallbackCurrentColor) {
1387
- const raw = value.trim();
1388
- const lowered = raw.toLowerCase();
1389
- if (!raw || lowered === "none" || lowered === "transparent") {
1390
- return null;
1391
- }
1392
- const resolved = /^currentcolor$/i.test(raw) ? fallbackCurrentColor ?? raw : raw;
1393
- const parsed = parseColorValue(resolved);
1394
- if (parsed.alpha <= 0) {
1395
- return null;
1396
- }
1397
- return parsed;
1398
- }
1399
- function addUniqueColor(colors, color) {
1400
- if (!color) return;
1401
- colors.set(`${color.hex}:${color.alpha}`, color);
1402
- }
1403
- function isTextRenderingFormControl(element) {
1404
- if (element instanceof HTMLTextAreaElement) return true;
1405
- if (element instanceof HTMLSelectElement) return true;
1406
- if (element instanceof HTMLButtonElement) return true;
1407
- if (element instanceof HTMLInputElement) {
1408
- const textlessInputTypes = /* @__PURE__ */ new Set([
1409
- "hidden",
1410
- "checkbox",
1411
- "radio",
1412
- "range",
1413
- "color",
1414
- "file",
1415
- "image"
1416
- ]);
1417
- return !textlessInputTypes.has(element.type.toLowerCase());
1418
- }
1419
- return false;
1420
- }
1421
- function hasRenderableTextNode(element) {
1422
- if (element.isContentEditable) return true;
1423
- if (isTextRenderingFormControl(element)) return true;
1424
- if (!element.textContent?.trim()) return false;
1425
- if (hasDirectNonWhitespaceText(element)) return true;
1426
- const tagName = element.tagName.toLowerCase();
1427
- return TEXT_ELEMENT_TAGS.has(tagName) || element.children.length === 0;
1428
- }
1429
- function getComputedBoxShadow(element) {
1430
- const computed = window.getComputedStyle(element);
1431
- const value = computed.boxShadow.trim();
1432
- return value || "none";
1433
- }
1434
- function getComputedColorStyles(element) {
1435
- const computed = window.getComputedStyle(element);
1436
- const borderSides = [
1437
- { style: computed.borderTopStyle, width: computed.borderTopWidth, color: computed.borderTopColor },
1438
- { style: computed.borderRightStyle, width: computed.borderRightWidth, color: computed.borderRightColor },
1439
- { style: computed.borderBottomStyle, width: computed.borderBottomWidth, color: computed.borderBottomColor },
1440
- { style: computed.borderLeftStyle, width: computed.borderLeftWidth, color: computed.borderLeftColor }
1441
- ];
1442
- const visibleBorderSide = borderSides.find((side) => isVisibleBorderSide(side));
1443
- const hasBorder = Boolean(visibleBorderSide);
1444
- const hasOutline = hasVisibleOutline(computed);
1445
- return {
1446
- backgroundColor: parseColorValue(computed.backgroundColor),
1447
- color: parseColorValue(computed.color),
1448
- borderColor: hasBorder && visibleBorderSide ? parseColorValue(visibleBorderSide.color) : TRANSPARENT_COLOR,
1449
- outlineColor: hasOutline ? parseColorValue(computed.outlineColor) : TRANSPARENT_COLOR
1450
- };
1502
+ if (!Number.isFinite(numeric2)) return null;
1503
+ return Math.max(0, Math.min(100, numeric2)) / 100;
1504
+ }
1505
+ const numeric = parseFloat(token);
1506
+ if (!Number.isFinite(numeric)) return null;
1507
+ return Math.max(0, Math.min(1, numeric));
1451
1508
  }
1452
- function getSelectionColors(element) {
1453
- const uniqueColors = /* @__PURE__ */ new Map();
1454
- const queue = [element];
1455
- for (let index = 0; index < queue.length; index++) {
1456
- const node = queue[index];
1457
- const computed = window.getComputedStyle(node);
1458
- if (computed.display === "none") {
1459
- continue;
1460
- }
1461
- const isVisibilityHidden = computed.visibility === "hidden" || computed.visibility === "collapse";
1462
- const currentTextColor = computed.color;
1463
- if (!isVisibilityHidden) {
1464
- addUniqueColor(uniqueColors, parseVisibleColor(computed.backgroundColor));
1465
- if (node instanceof HTMLElement && hasRenderableTextNode(node)) {
1466
- addUniqueColor(uniqueColors, parseVisibleColor(currentTextColor));
1467
- }
1468
- const borderSides = [
1469
- { style: computed.borderTopStyle, width: computed.borderTopWidth, color: computed.borderTopColor },
1470
- { style: computed.borderRightStyle, width: computed.borderRightWidth, color: computed.borderRightColor },
1471
- { style: computed.borderBottomStyle, width: computed.borderBottomWidth, color: computed.borderBottomColor },
1472
- { style: computed.borderLeftStyle, width: computed.borderLeftWidth, color: computed.borderLeftColor }
1473
- ];
1474
- for (const side of borderSides) {
1475
- if (!isVisibleBorderSide(side)) continue;
1476
- addUniqueColor(uniqueColors, parseVisibleColor(side.color, currentTextColor));
1477
- }
1478
- if (hasVisibleOutline(computed)) {
1479
- addUniqueColor(uniqueColors, parseVisibleColor(computed.outlineColor, currentTextColor));
1480
- }
1481
- if (node instanceof SVGElement) {
1482
- const fillColor = parseVisibleColor(computed.getPropertyValue("fill"), currentTextColor) ?? parseVisibleColor(node.getAttribute("fill") ?? "", currentTextColor);
1483
- const strokeColor = parseVisibleColor(computed.getPropertyValue("stroke"), currentTextColor) ?? parseVisibleColor(node.getAttribute("stroke") ?? "", currentTextColor);
1484
- addUniqueColor(uniqueColors, fillColor);
1485
- addUniqueColor(uniqueColors, strokeColor);
1509
+ function parseRgbaColor(rgba) {
1510
+ const raw = rgba.trim();
1511
+ const fnMatch = raw.match(/^rgba?\((.*)\)$/i);
1512
+ if (!fnMatch) {
1513
+ return { hex: "000000", alpha: 100, raw: rgba };
1514
+ }
1515
+ const body = fnMatch[1].trim();
1516
+ let channelTokens = null;
1517
+ let alphaToken;
1518
+ const commaParts = body.split(",").map((part) => part.trim()).filter(Boolean);
1519
+ if (commaParts.length === 3 || commaParts.length === 4) {
1520
+ channelTokens = [commaParts[0], commaParts[1], commaParts[2]];
1521
+ alphaToken = commaParts[3];
1522
+ } else {
1523
+ const slashParts = body.split("/");
1524
+ if (slashParts.length === 1 || slashParts.length === 2) {
1525
+ const channels = slashParts[0].trim().split(/\s+/).filter(Boolean);
1526
+ if (channels.length === 3) {
1527
+ channelTokens = [channels[0], channels[1], channels[2]];
1528
+ alphaToken = slashParts[1]?.trim();
1486
1529
  }
1487
1530
  }
1488
- for (const child of node.children) {
1489
- queue.push(child);
1490
- }
1491
1531
  }
1492
- return Array.from(uniqueColors.values());
1532
+ if (!channelTokens) {
1533
+ return { hex: "000000", alpha: 100, raw: rgba };
1534
+ }
1535
+ const r = parseRgbChannel(channelTokens[0]);
1536
+ const g = parseRgbChannel(channelTokens[1]);
1537
+ const b = parseRgbChannel(channelTokens[2]);
1538
+ const a = parseRgbAlpha(alphaToken);
1539
+ if (r === null || g === null || b === null || a === null) {
1540
+ return { hex: "000000", alpha: 100, raw: rgba };
1541
+ }
1542
+ const hex = [r, g, b].map((v) => v.toString(16).padStart(2, "0")).join("").toUpperCase();
1543
+ const alpha = Math.round(a * 100);
1544
+ return { hex, alpha, raw: rgba };
1493
1545
  }
1494
- function getAllComputedStyles(element) {
1495
- const { spacing, borderRadius, flex } = getComputedStyles(element);
1496
- return {
1497
- spacing,
1498
- borderRadius,
1499
- border: getComputedBorderStyles(element),
1500
- flex,
1501
- sizing: getComputedSizing(element),
1502
- color: getComputedColorStyles(element),
1503
- boxShadow: getComputedBoxShadow(element),
1504
- typography: getComputedTypography(element)
1505
- };
1546
+ function parseNamedColor(name) {
1547
+ const ctx = document.createElement("canvas").getContext("2d");
1548
+ if (!ctx) {
1549
+ return { hex: "000000", alpha: 100, raw: name };
1550
+ }
1551
+ ctx.fillStyle = name;
1552
+ const computed = ctx.fillStyle;
1553
+ if (computed.startsWith("#")) {
1554
+ return parseHexColor(computed);
1555
+ }
1556
+ return parseRgbaColor(computed);
1557
+ }
1558
+ function parseColorValue(cssValue) {
1559
+ const raw = cssValue.trim();
1560
+ if (raw === "transparent") {
1561
+ return { hex: "000000", alpha: 0, raw };
1562
+ }
1563
+ if (raw.startsWith("#")) {
1564
+ return parseHexColor(raw);
1565
+ }
1566
+ if (raw.startsWith("rgb")) {
1567
+ return parseRgbaColor(raw);
1568
+ }
1569
+ return parseNamedColor(raw);
1506
1570
  }
1507
1571
  var colorPropertyToCSSMap = {
1508
1572
  backgroundColor: "background-color",
@@ -1958,7 +2022,7 @@ function findChildAtPoint(parent, clientX, clientY) {
1958
2022
  return clientX >= r.left && clientX <= r.right && clientY >= r.top && clientY <= r.bottom;
1959
2023
  });
1960
2024
  if (hit) return hit;
1961
- if (children.length === 1 && !hasDirectNonWhitespaceText(parent)) return children[0];
2025
+ if (children.length === 1 && !hasDirectNonWhitespaceText2(parent)) return children[0];
1962
2026
  return null;
1963
2027
  }
1964
2028
  function elementFromPointWithoutOverlays(x, y) {
@@ -7761,6 +7825,219 @@ function createDragInteractionGuard() {
7761
7825
  };
7762
7826
  }
7763
7827
 
7828
+ // src/utils/resize-geometry.ts
7829
+ function toFinite(value, fallback) {
7830
+ if (!Number.isFinite(value)) return fallback;
7831
+ return value;
7832
+ }
7833
+ function multiplyMatrix(left, right) {
7834
+ return {
7835
+ a: left.a * right.a + left.c * right.b,
7836
+ b: left.b * right.a + left.d * right.b,
7837
+ c: left.a * right.c + left.c * right.d,
7838
+ d: left.b * right.c + left.d * right.d
7839
+ };
7840
+ }
7841
+ function splitTransformArgs(raw) {
7842
+ return raw.trim().replace(/,/g, " ").split(/\s+/).filter(Boolean);
7843
+ }
7844
+ function parseAngleRadians(value) {
7845
+ const numeric = Number.parseFloat(value);
7846
+ if (!Number.isFinite(numeric)) return 0;
7847
+ const unit = value.trim().replace(String(numeric), "").trim().toLowerCase();
7848
+ switch (unit) {
7849
+ case "rad":
7850
+ return numeric;
7851
+ case "turn":
7852
+ return numeric * Math.PI * 2;
7853
+ case "grad":
7854
+ return numeric * Math.PI / 200;
7855
+ case "deg":
7856
+ case "":
7857
+ default:
7858
+ return numeric * Math.PI / 180;
7859
+ }
7860
+ }
7861
+ function parseTransformFunction(name, rawArgs) {
7862
+ const args = splitTransformArgs(rawArgs);
7863
+ switch (name.toLowerCase()) {
7864
+ case "matrix": {
7865
+ if (args.length < 4) return null;
7866
+ const [a, b, c, d] = args.map(Number.parseFloat);
7867
+ if (![a, b, c, d].every(Number.isFinite)) return null;
7868
+ return { a, b, c, d };
7869
+ }
7870
+ case "matrix3d": {
7871
+ if (args.length < 16) return null;
7872
+ const values = args.map(Number.parseFloat);
7873
+ if (!values.every(Number.isFinite)) return null;
7874
+ return { a: values[0], b: values[1], c: values[4], d: values[5] };
7875
+ }
7876
+ case "scale": {
7877
+ const scaleX = Number.parseFloat(args[0] ?? "1");
7878
+ const scaleY = Number.parseFloat(args[1] ?? args[0] ?? "1");
7879
+ if (!Number.isFinite(scaleX) || !Number.isFinite(scaleY)) return null;
7880
+ return { a: scaleX, b: 0, c: 0, d: scaleY };
7881
+ }
7882
+ case "scalex": {
7883
+ const scaleX = Number.parseFloat(args[0] ?? "1");
7884
+ if (!Number.isFinite(scaleX)) return null;
7885
+ return { a: scaleX, b: 0, c: 0, d: 1 };
7886
+ }
7887
+ case "scaley": {
7888
+ const scaleY = Number.parseFloat(args[0] ?? "1");
7889
+ if (!Number.isFinite(scaleY)) return null;
7890
+ return { a: 1, b: 0, c: 0, d: scaleY };
7891
+ }
7892
+ case "rotate": {
7893
+ const angle = parseAngleRadians(args[0] ?? "0deg");
7894
+ const cos = Math.cos(angle);
7895
+ const sin = Math.sin(angle);
7896
+ return { a: cos, b: sin, c: -sin, d: cos };
7897
+ }
7898
+ case "translate":
7899
+ case "translatex":
7900
+ case "translatey":
7901
+ return { a: 1, b: 0, c: 0, d: 1 };
7902
+ default:
7903
+ return null;
7904
+ }
7905
+ }
7906
+ function parseTransformMatrix(transform) {
7907
+ const functionPattern = /([a-zA-Z0-9]+)\(([^)]*)\)/g;
7908
+ let matrix = { a: 1, b: 0, c: 0, d: 1 };
7909
+ let matched = false;
7910
+ for (const match of transform.matchAll(functionPattern)) {
7911
+ const next = parseTransformFunction(match[1], match[2]);
7912
+ if (!next) return null;
7913
+ matrix = multiplyMatrix(matrix, next);
7914
+ matched = true;
7915
+ }
7916
+ return matched ? matrix : null;
7917
+ }
7918
+ function scaleFromMatrix(matrix) {
7919
+ return {
7920
+ scaleX: Math.hypot(matrix.a, matrix.b) || 1,
7921
+ scaleY: Math.hypot(matrix.c, matrix.d) || 1
7922
+ };
7923
+ }
7924
+ function getRenderedOffsetScale(element) {
7925
+ const rect = element.getBoundingClientRect();
7926
+ const width = element.offsetWidth;
7927
+ const height = element.offsetHeight;
7928
+ if (width <= 0 || height <= 0 || rect.width <= 0 || rect.height <= 0) return null;
7929
+ return {
7930
+ scaleX: rect.width / width,
7931
+ scaleY: rect.height / height
7932
+ };
7933
+ }
7934
+ function clampSize(value, minSize = 1) {
7935
+ const safeMin = Math.max(1, toFinite(minSize, 1));
7936
+ const safeValue = toFinite(value, safeMin);
7937
+ return Math.max(safeMin, safeValue);
7938
+ }
7939
+ function getElementScale(element) {
7940
+ const transform = getComputedStyle(element).transform;
7941
+ if (!transform || transform === "none") {
7942
+ return getRenderedOffsetScale(element) ?? { scaleX: 1, scaleY: 1 };
7943
+ }
7944
+ let transformMatrix = null;
7945
+ if (typeof DOMMatrix !== "undefined") {
7946
+ try {
7947
+ const matrix = new DOMMatrix(transform);
7948
+ transformMatrix = matrix;
7949
+ } catch {
7950
+ }
7951
+ }
7952
+ transformMatrix = transformMatrix ?? parseTransformMatrix(transform);
7953
+ if (!transformMatrix) return getRenderedOffsetScale(element) ?? { scaleX: 1, scaleY: 1 };
7954
+ const localScale = scaleFromMatrix(transformMatrix);
7955
+ const rect = element.getBoundingClientRect();
7956
+ const width = element.offsetWidth;
7957
+ const height = element.offsetHeight;
7958
+ if (width <= 0 || height <= 0 || rect.width <= 0 || rect.height <= 0) return localScale;
7959
+ const transformedWidth = Math.abs(transformMatrix.a) * width + Math.abs(transformMatrix.c) * height;
7960
+ const transformedHeight = Math.abs(transformMatrix.b) * width + Math.abs(transformMatrix.d) * height;
7961
+ if (transformedWidth <= 0 || transformedHeight <= 0) return localScale;
7962
+ return {
7963
+ scaleX: rect.width / transformedWidth * localScale.scaleX,
7964
+ scaleY: rect.height / transformedHeight * localScale.scaleY
7965
+ };
7966
+ }
7967
+ function computeEdgeSize({
7968
+ handle,
7969
+ startWidth,
7970
+ startHeight,
7971
+ dx,
7972
+ dy,
7973
+ minSize = 1
7974
+ }) {
7975
+ const baseWidth = clampSize(startWidth, minSize);
7976
+ const baseHeight = clampSize(startHeight, minSize);
7977
+ switch (handle) {
7978
+ case "right":
7979
+ return { width: clampSize(baseWidth + dx, minSize), height: baseHeight };
7980
+ case "left":
7981
+ return { width: clampSize(baseWidth - dx, minSize), height: baseHeight };
7982
+ case "bottom":
7983
+ return { width: baseWidth, height: clampSize(baseHeight + dy, minSize) };
7984
+ case "top":
7985
+ return { width: baseWidth, height: clampSize(baseHeight - dy, minSize) };
7986
+ }
7987
+ }
7988
+ function computeCornerProportionalSize({
7989
+ handle,
7990
+ startWidth,
7991
+ startHeight,
7992
+ dx,
7993
+ dy,
7994
+ minSize = 1
7995
+ }) {
7996
+ const baseWidth = clampSize(startWidth, minSize);
7997
+ const baseHeight = clampSize(startHeight, minSize);
7998
+ const ratio = baseWidth > 0 && baseHeight > 0 ? baseWidth / baseHeight : 1;
7999
+ const widthSign = handle === "top-left" || handle === "bottom-left" ? -1 : 1;
8000
+ const heightSign = handle === "top-left" || handle === "top-right" ? -1 : 1;
8001
+ const rawWidth = baseWidth + widthSign * dx;
8002
+ const rawHeight = baseHeight + heightSign * dy;
8003
+ const widthIntent = clampSize(rawWidth, minSize);
8004
+ const heightIntent = clampSize(rawHeight, minSize);
8005
+ const widthChange = Math.abs(widthIntent - baseWidth) / Math.max(baseWidth, 1);
8006
+ const heightChange = Math.abs(heightIntent - baseHeight) / Math.max(baseHeight, 1);
8007
+ if (widthChange >= heightChange) {
8008
+ const width2 = clampSize(widthIntent, minSize);
8009
+ const height2 = clampSize(width2 / Math.max(ratio, 1e-4), minSize);
8010
+ return { width: width2, height: height2 };
8011
+ }
8012
+ const height = clampSize(heightIntent, minSize);
8013
+ const width = clampSize(height * ratio, minSize);
8014
+ return { width, height };
8015
+ }
8016
+ function computeFillRenderedWidth(element) {
8017
+ const parent = element.parentElement;
8018
+ if (!parent) return null;
8019
+ const parentComputed = window.getComputedStyle(parent);
8020
+ const elementComputed = window.getComputedStyle(element);
8021
+ const parentClientWidth = parent.clientWidth;
8022
+ const parentPaddingLeft = parseFloat(parentComputed.paddingLeft) || 0;
8023
+ const parentPaddingRight = parseFloat(parentComputed.paddingRight) || 0;
8024
+ const parentContentWidth = parentClientWidth - parentPaddingLeft - parentPaddingRight;
8025
+ if (!Number.isFinite(parentContentWidth) || parentContentWidth <= 0) {
8026
+ return null;
8027
+ }
8028
+ const elementPaddingLeft = parseFloat(elementComputed.paddingLeft) || 0;
8029
+ const elementPaddingRight = parseFloat(elementComputed.paddingRight) || 0;
8030
+ const elementBorderLeft = parseFloat(elementComputed.borderLeftWidth) || 0;
8031
+ const elementBorderRight = parseFloat(elementComputed.borderRightWidth) || 0;
8032
+ if (elementComputed.boxSizing === "border-box") {
8033
+ return clampSize(parentContentWidth, 1);
8034
+ }
8035
+ return clampSize(
8036
+ parentContentWidth + elementPaddingLeft + elementPaddingRight + elementBorderLeft + elementBorderRight,
8037
+ 1
8038
+ );
8039
+ }
8040
+
7764
8041
  // src/use-move.ts
7765
8042
  var INITIAL_DRAG_STATE = {
7766
8043
  isDragging: false,
@@ -7833,9 +8110,12 @@ function useMove({ onMoveComplete }) {
7833
8110
  const onMoveCompleteRef = React12.useRef(onMoveComplete);
7834
8111
  const dragOptionsRef = React12.useRef(DEFAULT_DRAG_OPTIONS);
7835
8112
  const dragGuardRef = React12.useRef(createDragInteractionGuard());
7836
- const initialRectRef = React12.useRef(
7837
- { x: 0, y: 0, scaleX: 1, scaleY: 1 }
7838
- );
8113
+ const initialRectRef = React12.useRef({
8114
+ x: 0,
8115
+ y: 0,
8116
+ scaleX: 1,
8117
+ scaleY: 1
8118
+ });
7839
8119
  const originalTransformRef = React12.useRef("");
7840
8120
  const composeBaseRef = React12.useRef("");
7841
8121
  const reorderPreviewRef = React12.useRef(/* @__PURE__ */ new Map());
@@ -7851,79 +8131,85 @@ function useMove({ onMoveComplete }) {
7851
8131
  }
7852
8132
  reorderPreviewRef.current.clear();
7853
8133
  }, []);
7854
- const setReorderPreviewTransform = React12.useCallback((element, transform) => {
7855
- const existing = reorderPreviewRef.current.get(element);
7856
- if (!existing) {
7857
- reorderPreviewRef.current.set(element, {
7858
- transform: element.style.transform,
7859
- transition: element.style.transition
7860
- });
7861
- }
7862
- const originalTransition = reorderPreviewRef.current.get(element)?.transition ?? element.style.transition;
7863
- element.style.transition = withTransformTransition(originalTransition);
7864
- element.style.transform = transform;
7865
- }, []);
7866
- const applyReorderPreview = React12.useCallback((target, draggedElement, originalParent) => {
7867
- if (!target || !draggedElement) {
7868
- clearReorderPreview();
7869
- return;
7870
- }
7871
- const container = target.container;
7872
- const containerChildren = Array.from(container.children).filter(
7873
- (child) => child instanceof HTMLElement
7874
- );
7875
- const siblings = containerChildren.filter((child) => child !== draggedElement);
7876
- const insertIndex = getInsertIndex(siblings, target.insertBefore);
7877
- if (insertIndex === null) {
7878
- clearReorderPreview();
7879
- return;
7880
- }
7881
- const draggedRect = draggedElement.getBoundingClientRect();
7882
- const isHorizontal = isHorizontalDirection(target.flexDirection);
7883
- const dragSize = isHorizontal ? draggedRect.width : draggedRect.height;
7884
- if (!Number.isFinite(dragSize) || dragSize <= 0) {
7885
- clearReorderPreview();
7886
- return;
7887
- }
7888
- const sign = forwardVisualSign(target.flexDirection);
7889
- const shiftedElements = /* @__PURE__ */ new Map();
7890
- if (container === originalParent) {
7891
- const originalIndex = containerChildren.indexOf(draggedElement);
7892
- if (originalIndex >= 0) {
7893
- if (insertIndex > originalIndex) {
7894
- const shift = -sign * dragSize;
7895
- for (let i = originalIndex; i < insertIndex; i++) {
7896
- const sibling = siblings[i];
7897
- if (sibling) shiftedElements.set(sibling, shift);
7898
- }
7899
- } else if (insertIndex < originalIndex) {
7900
- const shift = sign * dragSize;
7901
- for (let i = insertIndex; i < originalIndex; i++) {
7902
- const sibling = siblings[i];
7903
- if (sibling) shiftedElements.set(sibling, shift);
8134
+ const setReorderPreviewTransform = React12.useCallback(
8135
+ (element, transform) => {
8136
+ const existing = reorderPreviewRef.current.get(element);
8137
+ if (!existing) {
8138
+ reorderPreviewRef.current.set(element, {
8139
+ transform: element.style.transform,
8140
+ transition: element.style.transition
8141
+ });
8142
+ }
8143
+ const originalTransition = reorderPreviewRef.current.get(element)?.transition ?? element.style.transition;
8144
+ element.style.transition = withTransformTransition(originalTransition);
8145
+ element.style.transform = transform;
8146
+ },
8147
+ []
8148
+ );
8149
+ const applyReorderPreview = React12.useCallback(
8150
+ (target, draggedElement, originalParent) => {
8151
+ if (!target || !draggedElement) {
8152
+ clearReorderPreview();
8153
+ return;
8154
+ }
8155
+ const container = target.container;
8156
+ const containerChildren = Array.from(container.children).filter(
8157
+ (child) => child instanceof HTMLElement
8158
+ );
8159
+ const siblings = containerChildren.filter((child) => child !== draggedElement);
8160
+ const insertIndex = getInsertIndex(siblings, target.insertBefore);
8161
+ if (insertIndex === null) {
8162
+ clearReorderPreview();
8163
+ return;
8164
+ }
8165
+ const draggedRect = draggedElement.getBoundingClientRect();
8166
+ const isHorizontal = isHorizontalDirection(target.flexDirection);
8167
+ const dragSize = isHorizontal ? draggedRect.width : draggedRect.height;
8168
+ if (!Number.isFinite(dragSize) || dragSize <= 0) {
8169
+ clearReorderPreview();
8170
+ return;
8171
+ }
8172
+ const sign = forwardVisualSign(target.flexDirection);
8173
+ const shiftedElements = /* @__PURE__ */ new Map();
8174
+ if (container === originalParent) {
8175
+ const originalIndex = containerChildren.indexOf(draggedElement);
8176
+ if (originalIndex >= 0) {
8177
+ if (insertIndex > originalIndex) {
8178
+ const shift = -sign * dragSize;
8179
+ for (let i = originalIndex; i < insertIndex; i++) {
8180
+ const sibling = siblings[i];
8181
+ if (sibling) shiftedElements.set(sibling, shift);
8182
+ }
8183
+ } else if (insertIndex < originalIndex) {
8184
+ const shift = sign * dragSize;
8185
+ for (let i = insertIndex; i < originalIndex; i++) {
8186
+ const sibling = siblings[i];
8187
+ if (sibling) shiftedElements.set(sibling, shift);
8188
+ }
7904
8189
  }
7905
8190
  }
8191
+ } else {
8192
+ const shift = sign * dragSize;
8193
+ for (let i = insertIndex; i < siblings.length; i++) {
8194
+ shiftedElements.set(siblings[i], shift);
8195
+ }
7906
8196
  }
7907
- } else {
7908
- const shift = sign * dragSize;
7909
- for (let i = insertIndex; i < siblings.length; i++) {
7910
- shiftedElements.set(siblings[i], shift);
7911
- }
7912
- }
7913
- const axis = isHorizontal ? "x" : "y";
7914
- const keep = new Set(shiftedElements.keys());
7915
- for (const [element, snapshot2] of reorderPreviewRef.current) {
7916
- if (!keep.has(element)) {
7917
- element.style.transform = snapshot2.transform;
7918
- element.style.transition = snapshot2.transition;
7919
- reorderPreviewRef.current.delete(element);
8197
+ const axis = isHorizontal ? "x" : "y";
8198
+ const keep = new Set(shiftedElements.keys());
8199
+ for (const [element, snapshot2] of reorderPreviewRef.current) {
8200
+ if (!keep.has(element)) {
8201
+ element.style.transform = snapshot2.transform;
8202
+ element.style.transition = snapshot2.transition;
8203
+ reorderPreviewRef.current.delete(element);
8204
+ }
7920
8205
  }
7921
- }
7922
- for (const [element, shift] of shiftedElements) {
7923
- const baseTransform = reorderPreviewRef.current.get(element)?.transform ?? element.style.transform;
7924
- setReorderPreviewTransform(element, withAxisTranslate(baseTransform, axis, shift));
7925
- }
7926
- }, [clearReorderPreview, setReorderPreviewTransform]);
8206
+ for (const [element, shift] of shiftedElements) {
8207
+ const baseTransform = reorderPreviewRef.current.get(element)?.transform ?? element.style.transform;
8208
+ setReorderPreviewTransform(element, withAxisTranslate(baseTransform, axis, shift));
8209
+ }
8210
+ },
8211
+ [clearReorderPreview, setReorderPreviewTransform]
8212
+ );
7927
8213
  const cancelDrag = React12.useCallback(() => {
7928
8214
  const current = dragStateRef.current;
7929
8215
  if (current.draggedElement) {
@@ -7983,7 +8269,13 @@ function useMove({ onMoveComplete }) {
7983
8269
  const deltaX = (current.ghostPosition.x - rect.left) / scaleX;
7984
8270
  const deltaY = (current.ghostPosition.y - rect.top) / scaleY;
7985
8271
  if ((Math.abs(deltaX) > 0.5 || Math.abs(deltaY) > 0.5) && originalParent) {
7986
- moveInfo = { originalParent, originalPreviousSibling, originalNextSibling, mode: "position", positionDelta: { x: deltaX, y: deltaY } };
8272
+ moveInfo = {
8273
+ originalParent,
8274
+ originalPreviousSibling,
8275
+ originalNextSibling,
8276
+ mode: "position",
8277
+ positionDelta: { x: deltaX, y: deltaY }
8278
+ };
7987
8279
  }
7988
8280
  }
7989
8281
  } else if (target && tryReparent(draggedElement, target, originalParent, originalNextSibling)) {
@@ -8009,11 +8301,12 @@ function useMove({ onMoveComplete }) {
8009
8301
  const previousSibling = element.previousElementSibling;
8010
8302
  const nextSibling = element.nextElementSibling;
8011
8303
  dragOptionsRef.current = normalizeStartDragOptions(options);
8304
+ const { scaleX, scaleY } = getElementScale(element);
8012
8305
  initialRectRef.current = {
8013
8306
  x: rect.left,
8014
8307
  y: rect.top,
8015
- scaleX: element.offsetWidth > 0 ? rect.width / element.offsetWidth : 1,
8016
- scaleY: element.offsetHeight > 0 ? rect.height / element.offsetHeight : 1
8308
+ scaleX,
8309
+ scaleY
8017
8310
  };
8018
8311
  const inlineTransform = element.style.transform;
8019
8312
  originalTransformRef.current = inlineTransform;
@@ -8097,19 +8390,9 @@ function useMove({ onMoveComplete }) {
8097
8390
  }
8098
8391
  return;
8099
8392
  }
8100
- const container = dragOptionsRef.current.constrainToOriginalParent ? originalParent : findContainerAtPoint(
8101
- e.clientX,
8102
- e.clientY,
8103
- draggedElement,
8104
- originalParent
8105
- );
8393
+ const container = dragOptionsRef.current.constrainToOriginalParent ? originalParent : findContainerAtPoint(e.clientX, e.clientY, draggedElement, originalParent);
8106
8394
  if (container && draggedElement) {
8107
- const dropPos = calculateDropPosition(
8108
- container,
8109
- e.clientX,
8110
- e.clientY,
8111
- draggedElement
8112
- );
8395
+ const dropPos = calculateDropPosition(container, e.clientX, e.clientY, draggedElement);
8113
8396
  if (dropPos) {
8114
8397
  const nextTarget = {
8115
8398
  container,
@@ -8482,7 +8765,10 @@ function isSelectableElement(element) {
8482
8765
  if (!(element instanceof HTMLElement)) return false;
8483
8766
  if (!element.isConnected) return false;
8484
8767
  if (element === document.body || element === document.documentElement) return false;
8485
- if (element.matches("[data-direct-edit], [data-direct-edit-host], script, style, link, meta, noscript")) return false;
8768
+ if (element.matches(
8769
+ "[data-direct-edit], [data-direct-edit-host], script, style, link, meta, noscript"
8770
+ ))
8771
+ return false;
8486
8772
  const rect = element.getBoundingClientRect();
8487
8773
  if (rect.width <= 0 || rect.height <= 0) return false;
8488
8774
  const computed = window.getComputedStyle(element);
@@ -8500,7 +8786,9 @@ function compareDomOrder2(a, b) {
8500
8786
  }
8501
8787
  function collectMarqueeTargets(rect) {
8502
8788
  const hits = Array.from(document.querySelectorAll("*")).filter(isSelectableElement).filter((element) => rectsIntersect(rect, element.getBoundingClientRect()));
8503
- const deepestHits = hits.filter((element) => !hits.some((other) => other !== element && element.contains(other)));
8789
+ const deepestHits = hits.filter(
8790
+ (element) => !hits.some((other) => other !== element && element.contains(other))
8791
+ );
8504
8792
  deepestHits.sort(compareDomOrder2);
8505
8793
  return deepestHits;
8506
8794
  }
@@ -9091,99 +9379,27 @@ var import_lucide_react2 = require("lucide-react");
9091
9379
 
9092
9380
  // src/use-selection-resize.ts
9093
9381
  var React18 = __toESM(require("react"));
9094
-
9095
- // src/utils/resize-geometry.ts
9096
- function toFinite(value, fallback) {
9097
- if (!Number.isFinite(value)) return fallback;
9098
- return value;
9099
- }
9100
- function clampSize(value, minSize = 1) {
9101
- const safeMin = Math.max(1, toFinite(minSize, 1));
9102
- const safeValue = toFinite(value, safeMin);
9103
- return Math.max(safeMin, safeValue);
9104
- }
9105
- function computeEdgeSize({
9106
- handle,
9107
- startWidth,
9108
- startHeight,
9109
- dx,
9110
- dy,
9111
- minSize = 1
9112
- }) {
9113
- const baseWidth = clampSize(startWidth, minSize);
9114
- const baseHeight = clampSize(startHeight, minSize);
9115
- switch (handle) {
9116
- case "right":
9117
- return { width: clampSize(baseWidth + dx, minSize), height: baseHeight };
9118
- case "left":
9119
- return { width: clampSize(baseWidth - dx, minSize), height: baseHeight };
9120
- case "bottom":
9121
- return { width: baseWidth, height: clampSize(baseHeight + dy, minSize) };
9122
- case "top":
9123
- return { width: baseWidth, height: clampSize(baseHeight - dy, minSize) };
9124
- }
9125
- }
9126
- function computeCornerProportionalSize({
9127
- handle,
9128
- startWidth,
9129
- startHeight,
9130
- dx,
9131
- dy,
9132
- minSize = 1
9133
- }) {
9134
- const baseWidth = clampSize(startWidth, minSize);
9135
- const baseHeight = clampSize(startHeight, minSize);
9136
- const ratio = baseWidth > 0 && baseHeight > 0 ? baseWidth / baseHeight : 1;
9137
- const widthSign = handle === "top-left" || handle === "bottom-left" ? -1 : 1;
9138
- const heightSign = handle === "top-left" || handle === "top-right" ? -1 : 1;
9139
- const rawWidth = baseWidth + widthSign * dx;
9140
- const rawHeight = baseHeight + heightSign * dy;
9141
- const widthIntent = clampSize(rawWidth, minSize);
9142
- const heightIntent = clampSize(rawHeight, minSize);
9143
- const widthChange = Math.abs(widthIntent - baseWidth) / Math.max(baseWidth, 1);
9144
- const heightChange = Math.abs(heightIntent - baseHeight) / Math.max(baseHeight, 1);
9145
- if (widthChange >= heightChange) {
9146
- const width2 = clampSize(widthIntent, minSize);
9147
- const height2 = clampSize(width2 / Math.max(ratio, 1e-4), minSize);
9148
- return { width: width2, height: height2 };
9149
- }
9150
- const height = clampSize(heightIntent, minSize);
9151
- const width = clampSize(height * ratio, minSize);
9152
- return { width, height };
9153
- }
9154
- function computeFillRenderedWidth(element) {
9155
- const parent = element.parentElement;
9156
- if (!parent) return null;
9157
- const parentComputed = window.getComputedStyle(parent);
9158
- const elementComputed = window.getComputedStyle(element);
9159
- const parentClientWidth = parent.clientWidth;
9160
- const parentPaddingLeft = parseFloat(parentComputed.paddingLeft) || 0;
9161
- const parentPaddingRight = parseFloat(parentComputed.paddingRight) || 0;
9162
- const parentContentWidth = parentClientWidth - parentPaddingLeft - parentPaddingRight;
9163
- if (!Number.isFinite(parentContentWidth) || parentContentWidth <= 0) {
9164
- return null;
9165
- }
9166
- const elementPaddingLeft = parseFloat(elementComputed.paddingLeft) || 0;
9167
- const elementPaddingRight = parseFloat(elementComputed.paddingRight) || 0;
9168
- const elementBorderLeft = parseFloat(elementComputed.borderLeftWidth) || 0;
9169
- const elementBorderRight = parseFloat(elementComputed.borderRightWidth) || 0;
9170
- if (elementComputed.boxSizing === "border-box") {
9171
- return clampSize(parentContentWidth, 1);
9172
- }
9173
- return clampSize(
9174
- parentContentWidth + elementPaddingLeft + elementPaddingRight + elementBorderLeft + elementBorderRight,
9175
- 1
9176
- );
9177
- }
9178
-
9179
- // src/use-selection-resize.ts
9180
9382
  var MIN_SIZE_PX = 1;
9181
9383
  var SNAP_IN_PX = 2;
9182
9384
  var SNAP_OUT_PX = 6;
9183
9385
  var EPSILON = 1e-4;
9184
9386
  var EDGE_HANDLES = /* @__PURE__ */ new Set(["top", "right", "bottom", "left"]);
9185
- var WIDTH_HANDLES = /* @__PURE__ */ new Set(["left", "right", "top-left", "top-right", "bottom-left", "bottom-right"]);
9186
- var HEIGHT_HANDLES = /* @__PURE__ */ new Set(["top", "bottom", "top-left", "top-right", "bottom-left", "bottom-right"]);
9387
+ var WIDTH_HANDLES = /* @__PURE__ */ new Set([
9388
+ "left",
9389
+ "right",
9390
+ "top-left",
9391
+ "top-right",
9392
+ "bottom-left",
9393
+ "bottom-right"
9394
+ ]);
9395
+ var HEIGHT_HANDLES = /* @__PURE__ */ new Set([
9396
+ "top",
9397
+ "bottom",
9398
+ "top-left",
9399
+ "top-right",
9400
+ "bottom-left",
9401
+ "bottom-right"
9402
+ ]);
9187
9403
  function createSizingValue(mode, numericValue) {
9188
9404
  const rounded = Math.max(MIN_SIZE_PX, Math.round(clampSize(numericValue, MIN_SIZE_PX)));
9189
9405
  return {
@@ -9205,125 +9421,135 @@ function useSelectionResize({
9205
9421
  }) {
9206
9422
  const cleanupRef = React18.useRef(null);
9207
9423
  const txCounterRef = React18.useRef(0);
9208
- const emitSizingChange = React18.useCallback((changes, options) => {
9209
- onResizeSizingChange?.(changes, options);
9210
- }, [onResizeSizingChange]);
9424
+ const emitSizingChange = React18.useCallback(
9425
+ (changes, options) => {
9426
+ onResizeSizingChange?.(changes, options);
9427
+ },
9428
+ [onResizeSizingChange]
9429
+ );
9211
9430
  React18.useEffect(() => {
9212
9431
  return () => {
9213
9432
  cleanupRef.current?.();
9214
9433
  cleanupRef.current = null;
9215
9434
  };
9216
9435
  }, []);
9217
- const getResizeHandlePointerDown = React18.useCallback((handle) => {
9218
- return (e) => {
9219
- if (!enabled || !onResizeSizingChange) return;
9220
- if (e.button !== 0) return;
9221
- e.preventDefault();
9222
- e.stopPropagation();
9223
- cleanupRef.current?.();
9224
- const rect = selectedElement.getBoundingClientRect();
9225
- const offsetWidth = selectedElement.offsetWidth;
9226
- const offsetHeight = selectedElement.offsetHeight;
9227
- const startWidth = clampSize(offsetWidth > 0 ? offsetWidth : rect.width, MIN_SIZE_PX);
9228
- const startHeight = clampSize(offsetHeight > 0 ? offsetHeight : rect.height, MIN_SIZE_PX);
9229
- const scaleX = Math.max(EPSILON, offsetWidth > 0 ? rect.width / offsetWidth : 1);
9230
- const scaleY = Math.max(EPSILON, offsetHeight > 0 ? rect.height / offsetHeight : 1);
9231
- const transactionId = `resize-${Date.now()}-${txCounterRef.current++}`;
9232
- const state = {
9233
- transactionId,
9234
- handle,
9235
- startClientX: e.clientX,
9236
- startClientY: e.clientY,
9237
- startWidth,
9238
- startHeight,
9239
- scaleX,
9240
- scaleY,
9241
- fillTargetWidth: computeFillRenderedWidth(selectedElement),
9242
- fillLocked: detectSizingMode(selectedElement, "width") === "fill"
9243
- };
9244
- emitSizingChange({}, { transactionId: state.transactionId, phase: "start" });
9245
- const onPointerMove = (moveEvent) => {
9246
- const dx = (moveEvent.clientX - state.startClientX) / state.scaleX;
9247
- const dy = (moveEvent.clientY - state.startClientY) / state.scaleY;
9248
- const nextSize = isEdgeHandle(state.handle) ? computeEdgeSize({
9249
- handle: state.handle,
9250
- startWidth: state.startWidth,
9251
- startHeight: state.startHeight,
9252
- dx,
9253
- dy,
9254
- minSize: MIN_SIZE_PX
9255
- }) : computeCornerProportionalSize({
9256
- handle: state.handle,
9257
- startWidth: state.startWidth,
9258
- startHeight: state.startHeight,
9259
- dx,
9260
- dy,
9261
- minSize: MIN_SIZE_PX
9262
- });
9263
- const nextWidth = Math.max(MIN_SIZE_PX, Math.round(nextSize.width));
9264
- const nextHeight = Math.max(MIN_SIZE_PX, Math.round(nextSize.height));
9265
- const changes = {};
9266
- if (WIDTH_HANDLES.has(state.handle)) {
9267
- if (state.fillTargetWidth !== null) {
9268
- const distance = Math.abs(nextWidth - state.fillTargetWidth);
9269
- if (state.fillLocked) {
9270
- if (distance > SNAP_OUT_PX) {
9271
- state.fillLocked = false;
9436
+ const getResizeHandlePointerDown = React18.useCallback(
9437
+ (handle) => {
9438
+ return (e) => {
9439
+ if (!enabled || !onResizeSizingChange) return;
9440
+ if (e.button !== 0) return;
9441
+ e.preventDefault();
9442
+ e.stopPropagation();
9443
+ cleanupRef.current?.();
9444
+ const rect = selectedElement.getBoundingClientRect();
9445
+ const offsetWidth = selectedElement.offsetWidth;
9446
+ const offsetHeight = selectedElement.offsetHeight;
9447
+ const startWidth = clampSize(offsetWidth > 0 ? offsetWidth : rect.width, MIN_SIZE_PX);
9448
+ const startHeight = clampSize(offsetHeight > 0 ? offsetHeight : rect.height, MIN_SIZE_PX);
9449
+ const { scaleX: rawScaleX, scaleY: rawScaleY } = getElementScale(selectedElement);
9450
+ const scaleX = Math.max(EPSILON, rawScaleX);
9451
+ const scaleY = Math.max(EPSILON, rawScaleY);
9452
+ const transactionId = `resize-${Date.now()}-${txCounterRef.current++}`;
9453
+ const state = {
9454
+ transactionId,
9455
+ handle,
9456
+ startClientX: e.clientX,
9457
+ startClientY: e.clientY,
9458
+ startWidth,
9459
+ startHeight,
9460
+ scaleX,
9461
+ scaleY,
9462
+ fillTargetWidth: computeFillRenderedWidth(selectedElement),
9463
+ fillLocked: detectSizingMode(selectedElement, "width") === "fill"
9464
+ };
9465
+ emitSizingChange({}, { transactionId: state.transactionId, phase: "start" });
9466
+ const onPointerMove = (moveEvent) => {
9467
+ const dx = (moveEvent.clientX - state.startClientX) / state.scaleX;
9468
+ const dy = (moveEvent.clientY - state.startClientY) / state.scaleY;
9469
+ const nextSize = isEdgeHandle(state.handle) ? computeEdgeSize({
9470
+ handle: state.handle,
9471
+ startWidth: state.startWidth,
9472
+ startHeight: state.startHeight,
9473
+ dx,
9474
+ dy,
9475
+ minSize: MIN_SIZE_PX
9476
+ }) : computeCornerProportionalSize({
9477
+ handle: state.handle,
9478
+ startWidth: state.startWidth,
9479
+ startHeight: state.startHeight,
9480
+ dx,
9481
+ dy,
9482
+ minSize: MIN_SIZE_PX
9483
+ });
9484
+ const nextWidth = Math.max(MIN_SIZE_PX, Math.round(nextSize.width));
9485
+ const nextHeight = Math.max(MIN_SIZE_PX, Math.round(nextSize.height));
9486
+ const changes = {};
9487
+ if (WIDTH_HANDLES.has(state.handle)) {
9488
+ if (state.fillTargetWidth !== null) {
9489
+ const distance = Math.abs(nextWidth - state.fillTargetWidth);
9490
+ if (state.fillLocked) {
9491
+ if (distance > SNAP_OUT_PX) {
9492
+ state.fillLocked = false;
9493
+ }
9494
+ } else if (distance <= SNAP_IN_PX) {
9495
+ state.fillLocked = true;
9272
9496
  }
9273
- } else if (distance <= SNAP_IN_PX) {
9274
- state.fillLocked = true;
9497
+ } else {
9498
+ state.fillLocked = false;
9499
+ }
9500
+ if (state.fillLocked) {
9501
+ const fillWidth = state.fillTargetWidth ?? nextWidth;
9502
+ changes.width = createSizingValue("fill", fillWidth);
9503
+ } else {
9504
+ changes.width = createSizingValue("fixed", nextWidth);
9275
9505
  }
9276
- } else {
9277
- state.fillLocked = false;
9278
9506
  }
9279
- if (state.fillLocked) {
9280
- const fillWidth = state.fillTargetWidth ?? nextWidth;
9281
- changes.width = createSizingValue("fill", fillWidth);
9282
- } else {
9283
- changes.width = createSizingValue("fixed", nextWidth);
9507
+ if (HEIGHT_HANDLES.has(state.handle)) {
9508
+ changes.height = createSizingValue("fixed", nextHeight);
9284
9509
  }
9285
- }
9286
- if (HEIGHT_HANDLES.has(state.handle)) {
9287
- changes.height = createSizingValue("fixed", nextHeight);
9288
- }
9289
- if (Object.keys(changes).length === 0) return;
9290
- emitSizingChange(changes, { transactionId: state.transactionId, phase: "update" });
9510
+ if (Object.keys(changes).length === 0) return;
9511
+ emitSizingChange(changes, { transactionId: state.transactionId, phase: "update" });
9512
+ };
9513
+ const stop = () => {
9514
+ window.removeEventListener("pointermove", onPointerMove);
9515
+ window.removeEventListener("pointerup", stop);
9516
+ window.removeEventListener("pointercancel", stop);
9517
+ window.removeEventListener("blur", stop);
9518
+ cleanupRef.current = null;
9519
+ emitSizingChange({}, { transactionId: state.transactionId, phase: "end" });
9520
+ };
9521
+ cleanupRef.current = stop;
9522
+ window.addEventListener("pointermove", onPointerMove);
9523
+ window.addEventListener("pointerup", stop);
9524
+ window.addEventListener("pointercancel", stop);
9525
+ window.addEventListener("blur", stop);
9291
9526
  };
9292
- const stop = () => {
9293
- window.removeEventListener("pointermove", onPointerMove);
9294
- window.removeEventListener("pointerup", stop);
9295
- window.removeEventListener("pointercancel", stop);
9296
- window.removeEventListener("blur", stop);
9297
- cleanupRef.current = null;
9298
- emitSizingChange({}, { transactionId: state.transactionId, phase: "end" });
9527
+ },
9528
+ [emitSizingChange, enabled, onResizeSizingChange, selectedElement]
9529
+ );
9530
+ const getResizeHandleDoubleClick = React18.useCallback(
9531
+ (handle) => {
9532
+ return (e) => {
9533
+ if (!enabled || !onResizeSizingChange) return;
9534
+ if (!isEdgeHandle(handle)) return;
9535
+ const hasElementChildren = selectedElement.children.length > 0;
9536
+ const hasTextContent = Boolean(selectedElement.textContent?.trim());
9537
+ const isEligibleElement = hasElementChildren || hasTextContent;
9538
+ if (!isEligibleElement) return;
9539
+ e.preventDefault();
9540
+ e.stopPropagation();
9541
+ const rect = selectedElement.getBoundingClientRect();
9542
+ const width = Math.max(MIN_SIZE_PX, Math.round(rect.width));
9543
+ const height = Math.max(MIN_SIZE_PX, Math.round(rect.height));
9544
+ if (handle === "left" || handle === "right") {
9545
+ emitSizingChange({ width: createSizingValue("fit", width) });
9546
+ } else {
9547
+ emitSizingChange({ height: createSizingValue("fit", height) });
9548
+ }
9299
9549
  };
9300
- cleanupRef.current = stop;
9301
- window.addEventListener("pointermove", onPointerMove);
9302
- window.addEventListener("pointerup", stop);
9303
- window.addEventListener("pointercancel", stop);
9304
- window.addEventListener("blur", stop);
9305
- };
9306
- }, [emitSizingChange, enabled, onResizeSizingChange, selectedElement]);
9307
- const getResizeHandleDoubleClick = React18.useCallback((handle) => {
9308
- return (e) => {
9309
- if (!enabled || !onResizeSizingChange) return;
9310
- if (!isEdgeHandle(handle)) return;
9311
- const hasElementChildren = selectedElement.children.length > 0;
9312
- const hasTextContent = Boolean(selectedElement.textContent?.trim());
9313
- const isEligibleElement = hasElementChildren || hasTextContent;
9314
- if (!isEligibleElement) return;
9315
- e.preventDefault();
9316
- e.stopPropagation();
9317
- const rect = selectedElement.getBoundingClientRect();
9318
- const width = Math.max(MIN_SIZE_PX, Math.round(rect.width));
9319
- const height = Math.max(MIN_SIZE_PX, Math.round(rect.height));
9320
- if (handle === "left" || handle === "right") {
9321
- emitSizingChange({ width: createSizingValue("fit", width) });
9322
- } else {
9323
- emitSizingChange({ height: createSizingValue("fit", height) });
9324
- }
9325
- };
9326
- }, [emitSizingChange, enabled, onResizeSizingChange, selectedElement]);
9550
+ },
9551
+ [emitSizingChange, enabled, onResizeSizingChange, selectedElement]
9552
+ );
9327
9553
  return {
9328
9554
  getResizeHandlePointerDown,
9329
9555
  getResizeHandleDoubleClick
@@ -9948,17 +10174,20 @@ function getGroupBounds(rects) {
9948
10174
  if (rects.length === 0) {
9949
10175
  return { left: 0, top: 0, right: 0, bottom: 0 };
9950
10176
  }
9951
- return rects.reduce((bounds, rect) => ({
9952
- left: Math.min(bounds.left, rect.left),
9953
- top: Math.min(bounds.top, rect.top),
9954
- right: Math.max(bounds.right, rect.right),
9955
- bottom: Math.max(bounds.bottom, rect.bottom)
9956
- }), {
9957
- left: rects[0].left,
9958
- top: rects[0].top,
9959
- right: rects[0].right,
9960
- bottom: rects[0].bottom
9961
- });
10177
+ return rects.reduce(
10178
+ (bounds, rect) => ({
10179
+ left: Math.min(bounds.left, rect.left),
10180
+ top: Math.min(bounds.top, rect.top),
10181
+ right: Math.max(bounds.right, rect.right),
10182
+ bottom: Math.max(bounds.bottom, rect.bottom)
10183
+ }),
10184
+ {
10185
+ left: rects[0].left,
10186
+ top: rects[0].top,
10187
+ right: rects[0].right,
10188
+ bottom: rects[0].bottom
10189
+ }
10190
+ );
9962
10191
  }
9963
10192
  function MultiSelectionOverlay({ selectedElements }) {
9964
10193
  const elements = React20.useMemo(
@@ -9967,10 +10196,12 @@ function MultiSelectionOverlay({ selectedElements }) {
9967
10196
  );
9968
10197
  const [selectionRects, setSelectionRects] = React20.useState([]);
9969
10198
  const updateRects = React20.useCallback(() => {
9970
- setSelectionRects(elements.map((element) => ({
9971
- element,
9972
- rect: element.getBoundingClientRect()
9973
- })));
10199
+ setSelectionRects(
10200
+ elements.map((element) => ({
10201
+ element,
10202
+ rect: element.getBoundingClientRect()
10203
+ }))
10204
+ );
9974
10205
  }, [elements]);
9975
10206
  React20.useLayoutEffect(() => {
9976
10207
  updateRects();
@@ -13149,89 +13380,91 @@ function DirectEditPanelInner({
13149
13380
  sectionRefs
13150
13381
  }
13151
13382
  ),
13152
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex-1 overflow-y-auto backdrop-blur-xl bg-background/85", ref: scrollRef, onWheelCapture: (e) => e.stopPropagation(), children: [
13153
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13154
- LayoutSection,
13155
- {
13156
- elementInfo,
13157
- computedFlex,
13158
- computedSpacing,
13159
- computedSizing,
13160
- onToggleFlex,
13161
- onUpdateFlex,
13162
- onUpdateSpacing,
13163
- onUpdateSizing,
13164
- sectionRef: sectionRefs.layout
13165
- }
13166
- ),
13167
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.radius, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CollapsibleSection, { title: "Radius", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13168
- BorderRadiusInputs,
13169
- {
13170
- values: {
13171
- topLeft: computedBorderRadius.borderTopLeftRadius,
13172
- topRight: computedBorderRadius.borderTopRightRadius,
13173
- bottomRight: computedBorderRadius.borderBottomRightRadius,
13174
- bottomLeft: computedBorderRadius.borderBottomLeftRadius
13175
- },
13176
- onChange: onUpdateBorderRadius
13177
- }
13178
- ) }) }),
13179
- computedColor && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.fill, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13180
- BackgroundFillSection,
13181
- {
13182
- backgroundColor: computedColor.backgroundColor,
13183
- onSetCSS,
13184
- pendingStyles
13185
- }
13186
- ) }),
13187
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.border, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13188
- BorderSection,
13189
- {
13190
- border: computedBorder,
13191
- borderColor: computedColor?.borderColor,
13192
- outlineColor: computedColor?.outlineColor,
13193
- borderStyleControlPreference,
13194
- onChange: onUpdateBorder,
13195
- onBatchChange: onBatchUpdateBorder,
13196
- onBorderColorChange: (value) => onUpdateColor("borderColor", value),
13197
- onOutlineColorChange: (value) => onUpdateColor("outlineColor", value),
13198
- onSetCSS,
13199
- pendingStyles
13200
- }
13201
- ) }),
13202
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.shadow, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13203
- ShadowSection,
13204
- {
13205
- boxShadow: computedBoxShadow,
13206
- onSetCSS,
13207
- pendingStyles
13208
- }
13209
- ) }),
13210
- elementInfo.isTextElement && computedTypography && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.text, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CollapsibleSection, { title: "Text", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13211
- TypographyInputs,
13212
- {
13213
- typography: computedTypography,
13214
- onUpdate: onUpdateTypography
13215
- }
13216
- ) }) }),
13217
- computedColor && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.colors, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CollapsibleSection, { title: "Selection colors", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13218
- FillSection,
13219
- {
13220
- textColor: computedColor.color,
13221
- borderColor: computedColor.borderColor,
13222
- outlineColor: computedColor.outlineColor,
13223
- selectionColors,
13224
- onTextChange: (value) => onUpdateColor("color", value),
13225
- onBorderColorChange: (value) => onUpdateColor("borderColor", value),
13226
- onOutlineColorChange: (value) => onUpdateColor("outlineColor", value),
13227
- onSelectionColorChange: onReplaceSelectionColor,
13228
- onSelectionColorTarget: onSelectSelectionColorTarget,
13229
- hasTextContent: elementInfo.isTextElement,
13230
- showBorderColor: computedColor.borderColor.alpha > 0,
13231
- showOutlineColor: computedColor.outlineColor.alpha > 0
13232
- }
13233
- ) }) })
13234
- ] }),
13383
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
13384
+ "div",
13385
+ {
13386
+ className: "flex-1 overflow-y-auto backdrop-blur-xl bg-background/85",
13387
+ ref: scrollRef,
13388
+ onWheelCapture: (e) => e.stopPropagation(),
13389
+ children: [
13390
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13391
+ LayoutSection,
13392
+ {
13393
+ elementInfo,
13394
+ computedFlex,
13395
+ computedSpacing,
13396
+ computedSizing,
13397
+ onToggleFlex,
13398
+ onUpdateFlex,
13399
+ onUpdateSpacing,
13400
+ onUpdateSizing,
13401
+ sectionRef: sectionRefs.layout
13402
+ }
13403
+ ),
13404
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.radius, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CollapsibleSection, { title: "Radius", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13405
+ BorderRadiusInputs,
13406
+ {
13407
+ values: {
13408
+ topLeft: computedBorderRadius.borderTopLeftRadius,
13409
+ topRight: computedBorderRadius.borderTopRightRadius,
13410
+ bottomRight: computedBorderRadius.borderBottomRightRadius,
13411
+ bottomLeft: computedBorderRadius.borderBottomLeftRadius
13412
+ },
13413
+ onChange: onUpdateBorderRadius
13414
+ }
13415
+ ) }) }),
13416
+ computedColor && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.fill, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13417
+ BackgroundFillSection,
13418
+ {
13419
+ backgroundColor: computedColor.backgroundColor,
13420
+ onSetCSS,
13421
+ pendingStyles
13422
+ }
13423
+ ) }),
13424
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.border, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13425
+ BorderSection,
13426
+ {
13427
+ border: computedBorder,
13428
+ borderColor: computedColor?.borderColor,
13429
+ outlineColor: computedColor?.outlineColor,
13430
+ borderStyleControlPreference,
13431
+ onChange: onUpdateBorder,
13432
+ onBatchChange: onBatchUpdateBorder,
13433
+ onBorderColorChange: (value) => onUpdateColor("borderColor", value),
13434
+ onOutlineColorChange: (value) => onUpdateColor("outlineColor", value),
13435
+ onSetCSS,
13436
+ pendingStyles
13437
+ }
13438
+ ) }),
13439
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.shadow, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13440
+ ShadowSection,
13441
+ {
13442
+ boxShadow: computedBoxShadow,
13443
+ onSetCSS,
13444
+ pendingStyles
13445
+ }
13446
+ ) }),
13447
+ elementInfo.isTextElement && computedTypography && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.text, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CollapsibleSection, { title: "Text", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(TypographyInputs, { typography: computedTypography, onUpdate: onUpdateTypography }) }) }),
13448
+ computedColor && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { ref: sectionRefs.colors, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(CollapsibleSection, { title: "Selection colors", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13449
+ FillSection,
13450
+ {
13451
+ textColor: computedColor.color,
13452
+ borderColor: computedColor.borderColor,
13453
+ outlineColor: computedColor.outlineColor,
13454
+ selectionColors,
13455
+ onTextChange: (value) => onUpdateColor("color", value),
13456
+ onBorderColorChange: (value) => onUpdateColor("borderColor", value),
13457
+ onOutlineColorChange: (value) => onUpdateColor("outlineColor", value),
13458
+ onSelectionColorChange: onReplaceSelectionColor,
13459
+ onSelectionColorTarget: onSelectSelectionColorTarget,
13460
+ hasTextContent: elementInfo.isTextElement,
13461
+ showBorderColor: computedColor.borderColor.alpha > 0,
13462
+ showOutlineColor: computedColor.outlineColor.alpha > 0
13463
+ }
13464
+ ) }) })
13465
+ ]
13466
+ }
13467
+ ),
13235
13468
  (onExportEdits || showSendButton && onSendToAgent) && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
13236
13469
  PanelFooter,
13237
13470
  {
@@ -13304,6 +13537,8 @@ function DirectEditPanelContent() {
13304
13537
  addCommentReply,
13305
13538
  deleteComment,
13306
13539
  exportComment,
13540
+ exportEdits,
13541
+ sendEditToAgent: sendEditToAgent2,
13307
13542
  sendCommentToAgent: sendCommentToAgent2,
13308
13543
  setActiveCommentId,
13309
13544
  startTextEditing,
@@ -13337,21 +13572,23 @@ function DirectEditPanelContent() {
13337
13572
  const activeDraftComment = React34.useMemo(() => {
13338
13573
  if (!commentTargetElement || !activeCommentId) return null;
13339
13574
  const active = comments.find((comment) => comment.id === activeCommentId);
13340
- if (!active || active.text.trim().length > 0 || active.element !== commentTargetElement) return null;
13575
+ if (!active || active.text.trim().length > 0 || active.element !== commentTargetElement)
13576
+ return null;
13341
13577
  return active;
13342
13578
  }, [activeCommentId, commentTargetElement, comments]);
13343
- const { isActive: measurementActive, hoveredElement, measurements, mousePosition } = useMeasurement(
13344
- isOpen ? selectedElement : null
13345
- );
13346
13579
  const {
13347
- dragState,
13348
- dropIndicator,
13349
- startDrag
13350
- } = useMove({
13580
+ isActive: measurementActive,
13581
+ hoveredElement,
13582
+ measurements,
13583
+ mousePosition
13584
+ } = useMeasurement(isOpen ? selectedElement : null);
13585
+ const { dragState, dropIndicator, startDrag } = useMove({
13351
13586
  onMoveComplete: handleMoveComplete
13352
13587
  });
13353
13588
  const triggerCommentInputAttention = React34.useCallback((commentId) => {
13354
- setCommentInputAttention((prev) => prev?.commentId === commentId ? { commentId, nonce: prev.nonce + 1 } : { commentId, nonce: 1 });
13589
+ setCommentInputAttention(
13590
+ (prev) => prev?.commentId === commentId ? { commentId, nonce: prev.nonce + 1 } : { commentId, nonce: 1 }
13591
+ );
13355
13592
  }, []);
13356
13593
  React34.useEffect(() => {
13357
13594
  if (!activeCommentId) {
@@ -13365,26 +13602,32 @@ function DirectEditPanelContent() {
13365
13602
  setCommentDraftBlockedHandler(null);
13366
13603
  };
13367
13604
  }, [activeCommentId, setCommentDraftBlockedHandler, triggerCommentInputAttention]);
13368
- const hasPendingCommentDraft = React34.useCallback((nextCommentId = null) => {
13369
- if (!activeCommentId) return false;
13370
- if (nextCommentId && nextCommentId === activeCommentId) return false;
13371
- const active = comments.find((comment) => comment.id === activeCommentId);
13372
- if (!active) return false;
13373
- const hasUnsentDraft = active.text.trim().length === 0 && commentDraftRef.current.trim().length > 0;
13374
- if (!hasUnsentDraft) return false;
13375
- triggerCommentInputAttention(active.id);
13376
- return true;
13377
- }, [activeCommentId, comments, triggerCommentInputAttention]);
13378
- const handleSetActiveComment = React34.useCallback((id) => {
13379
- if (hasPendingCommentDraft(id)) return;
13380
- if (activeCommentId && activeCommentId !== id) {
13605
+ const hasPendingCommentDraft = React34.useCallback(
13606
+ (nextCommentId = null) => {
13607
+ if (!activeCommentId) return false;
13608
+ if (nextCommentId && nextCommentId === activeCommentId) return false;
13381
13609
  const active = comments.find((comment) => comment.id === activeCommentId);
13382
- if (active && active.text.trim().length === 0) {
13383
- deleteComment(active.id);
13610
+ if (!active) return false;
13611
+ const hasUnsentDraft = active.text.trim().length === 0 && commentDraftRef.current.trim().length > 0;
13612
+ if (!hasUnsentDraft) return false;
13613
+ triggerCommentInputAttention(active.id);
13614
+ return true;
13615
+ },
13616
+ [activeCommentId, comments, triggerCommentInputAttention]
13617
+ );
13618
+ const handleSetActiveComment = React34.useCallback(
13619
+ (id) => {
13620
+ if (hasPendingCommentDraft(id)) return;
13621
+ if (activeCommentId && activeCommentId !== id) {
13622
+ const active = comments.find((comment) => comment.id === activeCommentId);
13623
+ if (active && active.text.trim().length === 0) {
13624
+ deleteComment(active.id);
13625
+ }
13384
13626
  }
13385
- }
13386
- setActiveCommentId(id);
13387
- }, [activeCommentId, comments, hasPendingCommentDraft, deleteComment, setActiveCommentId]);
13627
+ setActiveCommentId(id);
13628
+ },
13629
+ [activeCommentId, comments, hasPendingCommentDraft, deleteComment, setActiveCommentId]
13630
+ );
13388
13631
  const handleCommentPillClick = React34.useCallback(() => {
13389
13632
  if (activeDraftComment) {
13390
13633
  handleSetActiveComment(null);
@@ -13392,13 +13635,23 @@ function DirectEditPanelContent() {
13392
13635
  }
13393
13636
  if (hasPendingCommentDraft()) return;
13394
13637
  if (!commentTargetElement) return;
13395
- const existingDraft = comments.find((comment) => comment.element === commentTargetElement && comment.text.trim().length === 0);
13638
+ const existingDraft = comments.find(
13639
+ (comment) => comment.element === commentTargetElement && comment.text.trim().length === 0
13640
+ );
13396
13641
  if (existingDraft) {
13397
13642
  setActiveCommentId(existingDraft.id);
13398
13643
  return;
13399
13644
  }
13400
13645
  addComment(commentTargetElement, getElementCommentAnchor(commentTargetElement));
13401
- }, [activeDraftComment, handleSetActiveComment, hasPendingCommentDraft, commentTargetElement, comments, setActiveCommentId, addComment]);
13646
+ }, [
13647
+ activeDraftComment,
13648
+ handleSetActiveComment,
13649
+ hasPendingCommentDraft,
13650
+ commentTargetElement,
13651
+ comments,
13652
+ setActiveCommentId,
13653
+ addComment
13654
+ ]);
13402
13655
  React34.useEffect(() => {
13403
13656
  const previous = previousCommentTriggerRef.current;
13404
13657
  previousCommentTriggerRef.current = { editModeActive, commentTargetElement };
@@ -13495,58 +13748,81 @@ function DirectEditPanelContent() {
13495
13748
  if (pageTitle.length > 0) return pageTitle;
13496
13749
  return getElementDisplayName(pageFrameElement);
13497
13750
  }, [pageFrameElement]);
13498
- const handleSelectSelectionColorTarget = React34.useCallback((targetColor) => {
13499
- if (!selectedElement) return;
13500
- const toKey = (color) => `${color.hex.toUpperCase()}:${Math.round(color.alpha)}`;
13501
- const targetKey = toKey(targetColor);
13502
- const hasOwnText2 = (node) => Array.from(node.childNodes).some((child) => child.nodeType === Node.TEXT_NODE && (child.textContent ?? "").trim().length > 0);
13503
- const parseVisibleColor3 = (raw, fallbackCurrentColor) => {
13504
- const trimmed = raw.trim();
13505
- if (!trimmed || trimmed === "none" || trimmed === "transparent") return null;
13506
- const resolved = trimmed.toLowerCase() === "currentcolor" ? fallbackCurrentColor ?? trimmed : trimmed;
13507
- const parsed = parseColorValue(resolved);
13508
- return parsed.alpha > 0 ? parsed : null;
13509
- };
13510
- const hasMatchingColor = (node) => {
13511
- const computed = window.getComputedStyle(node);
13512
- const currentTextColor = computed.color;
13513
- const matches = (raw, fallback) => {
13514
- const parsed = parseVisibleColor3(raw, fallback);
13515
- return Boolean(parsed && toKey(parsed) === targetKey);
13751
+ const handleSelectSelectionColorTarget = React34.useCallback(
13752
+ (targetColor) => {
13753
+ if (!selectedElement) return;
13754
+ const toKey = (color) => `${color.hex.toUpperCase()}:${Math.round(color.alpha)}`;
13755
+ const targetKey = toKey(targetColor);
13756
+ const hasOwnText2 = (node) => Array.from(node.childNodes).some(
13757
+ (child) => child.nodeType === Node.TEXT_NODE && (child.textContent ?? "").trim().length > 0
13758
+ );
13759
+ const parseVisibleColor3 = (raw, fallbackCurrentColor) => {
13760
+ const trimmed = raw.trim();
13761
+ if (!trimmed || trimmed === "none" || trimmed === "transparent") return null;
13762
+ const resolved = trimmed.toLowerCase() === "currentcolor" ? fallbackCurrentColor ?? trimmed : trimmed;
13763
+ const parsed = parseColorValue(resolved);
13764
+ return parsed.alpha > 0 ? parsed : null;
13516
13765
  };
13517
- if (matches(computed.backgroundColor)) return true;
13518
- if (hasOwnText2(node) && matches(currentTextColor)) return true;
13519
- const borderSides = [
13520
- { style: computed.borderTopStyle, width: computed.borderTopWidth, color: computed.borderTopColor },
13521
- { style: computed.borderRightStyle, width: computed.borderRightWidth, color: computed.borderRightColor },
13522
- { style: computed.borderBottomStyle, width: computed.borderBottomWidth, color: computed.borderBottomColor },
13523
- { style: computed.borderLeftStyle, width: computed.borderLeftWidth, color: computed.borderLeftColor }
13524
- ];
13525
- for (const side of borderSides) {
13526
- if (side.style !== "none" && parseFloat(side.width) > 0 && matches(side.color, currentTextColor)) {
13766
+ const hasMatchingColor = (node) => {
13767
+ const computed = window.getComputedStyle(node);
13768
+ const currentTextColor = computed.color;
13769
+ const matches = (raw, fallback) => {
13770
+ const parsed = parseVisibleColor3(raw, fallback);
13771
+ return Boolean(parsed && toKey(parsed) === targetKey);
13772
+ };
13773
+ if (matches(computed.backgroundColor)) return true;
13774
+ if (hasOwnText2(node) && matches(currentTextColor)) return true;
13775
+ const borderSides = [
13776
+ {
13777
+ style: computed.borderTopStyle,
13778
+ width: computed.borderTopWidth,
13779
+ color: computed.borderTopColor
13780
+ },
13781
+ {
13782
+ style: computed.borderRightStyle,
13783
+ width: computed.borderRightWidth,
13784
+ color: computed.borderRightColor
13785
+ },
13786
+ {
13787
+ style: computed.borderBottomStyle,
13788
+ width: computed.borderBottomWidth,
13789
+ color: computed.borderBottomColor
13790
+ },
13791
+ {
13792
+ style: computed.borderLeftStyle,
13793
+ width: computed.borderLeftWidth,
13794
+ color: computed.borderLeftColor
13795
+ }
13796
+ ];
13797
+ for (const side of borderSides) {
13798
+ if (side.style !== "none" && parseFloat(side.width) > 0 && matches(side.color, currentTextColor)) {
13799
+ return true;
13800
+ }
13801
+ }
13802
+ if (computed.outlineStyle !== "none" && parseFloat(computed.outlineWidth) > 0 && matches(computed.outlineColor, currentTextColor)) {
13527
13803
  return true;
13528
13804
  }
13805
+ if (node instanceof SVGGraphicsElement) {
13806
+ const fillMatch = matches(computed.getPropertyValue("fill"), currentTextColor) || matches(node.getAttribute("fill") ?? "", currentTextColor);
13807
+ const strokeMatch = matches(computed.getPropertyValue("stroke"), currentTextColor) || matches(node.getAttribute("stroke") ?? "", currentTextColor);
13808
+ if (fillMatch || strokeMatch) return true;
13809
+ }
13810
+ return false;
13811
+ };
13812
+ const descendants = Array.from(selectedElement.querySelectorAll("*"));
13813
+ const firstDescendantMatch = descendants.find(
13814
+ (node) => node instanceof HTMLElement && hasMatchingColor(node)
13815
+ );
13816
+ if (firstDescendantMatch) {
13817
+ selectElement(firstDescendantMatch);
13818
+ return;
13529
13819
  }
13530
- if (computed.outlineStyle !== "none" && parseFloat(computed.outlineWidth) > 0 && matches(computed.outlineColor, currentTextColor)) {
13531
- return true;
13532
- }
13533
- if (node instanceof SVGGraphicsElement) {
13534
- const fillMatch = matches(computed.getPropertyValue("fill"), currentTextColor) || matches(node.getAttribute("fill") ?? "", currentTextColor);
13535
- const strokeMatch = matches(computed.getPropertyValue("stroke"), currentTextColor) || matches(node.getAttribute("stroke") ?? "", currentTextColor);
13536
- if (fillMatch || strokeMatch) return true;
13820
+ if (hasMatchingColor(selectedElement)) {
13821
+ selectElement(selectedElement);
13537
13822
  }
13538
- return false;
13539
- };
13540
- const descendants = Array.from(selectedElement.querySelectorAll("*"));
13541
- const firstDescendantMatch = descendants.find((node) => node instanceof HTMLElement && hasMatchingColor(node));
13542
- if (firstDescendantMatch) {
13543
- selectElement(firstDescendantMatch);
13544
- return;
13545
- }
13546
- if (hasMatchingColor(selectedElement)) {
13547
- selectElement(selectedElement);
13548
- }
13549
- }, [selectedElement, selectElement]);
13823
+ },
13824
+ [selectedElement, selectElement]
13825
+ );
13550
13826
  const handleMoveStart = (e, targetElement, options) => {
13551
13827
  const elementToDrag = targetElement ?? selectedElement;
13552
13828
  if (elementToDrag) {
@@ -13635,7 +13911,11 @@ function DirectEditPanelContent() {
13635
13911
  hoveredElement,
13636
13912
  measurements: [
13637
13913
  ...measurements,
13638
- ...calculateGuidelineMeasurements(selectedElement, getStoredGuidelines(), mousePosition)
13914
+ ...calculateGuidelineMeasurements(
13915
+ selectedElement,
13916
+ getStoredGuidelines(),
13917
+ mousePosition
13918
+ )
13639
13919
  ]
13640
13920
  }
13641
13921
  ),
@@ -13690,6 +13970,9 @@ function DirectEditPanelContent() {
13690
13970
  onSelectSelectionColorTarget: handleSelectSelectionColorTarget,
13691
13971
  onUpdateTypography: updateTypographyProperty,
13692
13972
  onReset: resetToOriginal,
13973
+ onExportEdits: exportEdits,
13974
+ onSendToAgent: agentAvailable ? sendEditToAgent2 : void 0,
13975
+ sendFailureReason: lastSendFailure?.reason ?? null,
13693
13976
  className: "fixed z-[99999]",
13694
13977
  style: {
13695
13978
  left: position.x,