@cognicatch/react 1.0.0 → 1.1.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.
@@ -1 +1 @@
1
- /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@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-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-purple-500:oklch(62.7% .265 303.9);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--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)}}@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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.fixed{position:fixed}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-50{z-index:50}.mx-auto{margin-inline:auto}.\!mt-0\.5{margin-top:calc(var(--spacing)*.5)!important}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.\!line-clamp-2{-webkit-line-clamp:2!important;-webkit-box-orient:vertical!important;display:-webkit-box!important;overflow:hidden!important}.flex{display:flex}.grid{display:grid}.inline{display:inline}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-16{height:calc(var(--spacing)*16)}.h-full{height:100%}.min-h-\[70vh\]{min-height:70vh}.min-h-\[100px\]{min-height:100px}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[280px\]{max-width:280px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.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)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.\!rounded-md{border-radius:var(--radius-md)!important}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.\!border{border-style:var(--tw-border-style)!important;border-width:1px!important}.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-dashed{--tw-border-style:dashed;border-style:dashed}.\!border-transparent{border-color:#0000!important}.\!border-zinc-200{border-color:var(--color-zinc-200)!important}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/60{border-color:#fee68599}@supports (color:color-mix(in lab,red,red)){.border-amber-200\/60{border-color:color-mix(in oklab,var(--color-amber-200)60%,transparent)}}.border-indigo-500\/30{border-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/30{border-color:color-mix(in oklab,var(--color-indigo-500)30%,transparent)}}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-transparent{border-color:#0000}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-200\/50{border-color:#e4e4e780}@supports (color:color-mix(in lab,red,red)){.border-zinc-200\/50{border-color:color-mix(in oklab,var(--color-zinc-200)50%,transparent)}}.border-zinc-300{border-color:var(--color-zinc-300)}.border-t-indigo-500{border-top-color:var(--color-indigo-500)}.\!bg-white\/90{background-color:#ffffffe6!important}@supports (color:color-mix(in lab,red,red)){.\!bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)!important}}.\!bg-zinc-900{background-color:var(--color-zinc-900)!important}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-50\/50{background-color:#fafafa80}@supports (color:color-mix(in lab,red,red)){.bg-zinc-50\/50{background-color:color-mix(in oklab,var(--color-zinc-50)50%,transparent)}}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-900\/20{background-color:#18181b33}@supports (color:color-mix(in lab,red,red)){.bg-zinc-900\/20{background-color:color-mix(in oklab,var(--color-zinc-900)20%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-indigo-500\/20{--tw-gradient-from:#625fff33}@supports (color:color-mix(in lab,red,red)){.from-indigo-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-indigo-500)20%,transparent)}}.from-indigo-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-500\/20{--tw-gradient-to:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.to-purple-500\/20{--tw-gradient-to:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.to-purple-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.\!px-3{padding-inline:calc(var(--spacing)*3)!important}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.\!py-1\.5{padding-block:calc(var(--spacing)*1.5)!important}.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)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-10{padding-bottom:calc(var(--spacing)*10)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.text-center{text-align:center}.font-sans{font-family:var(--font-sans)}.\!text-sm{font-size:var(--text-sm)!important;line-height:var(--tw-leading,var(--text-sm--line-height))!important}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\!font-medium{--tw-font-weight:var(--font-weight-medium)!important;font-weight:var(--font-weight-medium)!important}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.\!text-white{color:var(--color-white)!important}.\!text-zinc-500{color:var(--color-zinc-500)!important}.\!text-zinc-900{color:var(--color-zinc-900)!important}.text-amber-500{color:var(--color-amber-500)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-500{color:var(--color-blue-500)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-700{color:var(--color-emerald-700)}.text-indigo-500{color:var(--color-indigo-500)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-white{color:var(--color-white)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-900{color:var(--color-zinc-900)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.\!shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.\!shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.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-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-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-indigo-500\/20{--tw-shadow-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.shadow-indigo-500\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-indigo-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-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-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-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-500{--tw-duration:.5s;transition-duration:.5s}@media(hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:border-amber-300:hover{border-color:var(--color-amber-300)}.hover\:\!bg-zinc-800:hover{background-color:var(--color-zinc-800)!important}.hover\:bg-amber-200:hover{background-color:var(--color-amber-200)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-300:hover{background-color:var(--color-zinc-300)}.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.hover\:text-amber-900:hover{color:var(--color-amber-900)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}}.focus\:ring-2:focus{--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)}.focus\:ring-indigo-500\/50:focus{--tw-ring-color:#625fff80}@supports (color:color-mix(in lab,red,red)){.focus\:ring-indigo-500\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-indigo-500)50%,transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:underline:focus-visible{text-decoration-line:underline}.focus-visible\:ring-2:focus-visible{--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)}.focus-visible\:ring-amber-500\/30:focus-visible{--tw-ring-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-amber-500\/30:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}@media(min-width:40rem){.sm\:top-\[50\%\]{top:50%}.sm\:bottom-auto{bottom:auto}.sm\:left-\[50\%\]{left:50%}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-none{max-width:none}.sm\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:rounded-2xl{border-radius:var(--radius-2xl)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}}.dark\:\!border-zinc-300:where(.dark,.dark *){border-color:var(--color-zinc-300)!important}.dark\:\!border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)!important}.dark\:border-amber-800\/50:where(.dark,.dark *){border-color:#953d0080}@supports (color:color-mix(in lab,red,red)){.dark\:border-amber-800\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-amber-800)50%,transparent)}}.dark\:border-amber-900\/40:where(.dark,.dark *){border-color:#7b330666}@supports (color:color-mix(in lab,red,red)){.dark\:border-amber-900\/40:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-amber-900)40%,transparent)}}.dark\:border-red-500\/20:where(.dark,.dark *){border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark\:border-red-500\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark\:border-zinc-700:where(.dark,.dark *){border-color:var(--color-zinc-700)}.dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)}.dark\:border-zinc-800\/50:where(.dark,.dark *){border-color:#27272a80}@supports (color:color-mix(in lab,red,red)){.dark\:border-zinc-800\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}}.dark\:\!bg-white:where(.dark,.dark *){background-color:var(--color-white)!important}.dark\:\!bg-zinc-950\/80:where(.dark,.dark *){background-color:#09090bcc!important}@supports (color:color-mix(in lab,red,red)){.dark\:\!bg-zinc-950\/80:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-950)80%,transparent)!important}}.dark\:bg-amber-500\/10:where(.dark,.dark *){background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.dark\:bg-amber-950\/20:where(.dark,.dark *){background-color:#46190133}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}}.dark\:bg-amber-950\/50:where(.dark,.dark *){background-color:#46190180}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-950)50%,transparent)}}.dark\:bg-black\/80:where(.dark,.dark *){background-color:#000c}@supports (color:color-mix(in lab,red,red)){.dark\:bg-black\/80:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.dark\:bg-emerald-500\/10:where(.dark,.dark *){background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-emerald-500)10%,transparent)}}.dark\:bg-red-500\/10:where(.dark,.dark *){background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark\:bg-zinc-100:where(.dark,.dark *){background-color:var(--color-zinc-100)}.dark\:bg-zinc-800:where(.dark,.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-900\/20:where(.dark,.dark *){background-color:#18181b33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-zinc-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-900)20%,transparent)}}.dark\:bg-zinc-900\/50:where(.dark,.dark *){background-color:#18181b80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-zinc-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-900)50%,transparent)}}.dark\:bg-zinc-950:where(.dark,.dark *){background-color:var(--color-zinc-950)}.dark\:\!text-black:where(.dark,.dark *){color:var(--color-black)!important}.dark\:\!text-zinc-50:where(.dark,.dark *){color:var(--color-zinc-50)!important}.dark\:\!text-zinc-400:where(.dark,.dark *){color:var(--color-zinc-400)!important}.dark\:text-amber-100:where(.dark,.dark *){color:var(--color-amber-100)}.dark\:text-amber-200\/70:where(.dark,.dark *){color:#fee685b3}@supports (color:color-mix(in lab,red,red)){.dark\:text-amber-200\/70:where(.dark,.dark *){color:color-mix(in oklab,var(--color-amber-200)70%,transparent)}}.dark\:text-amber-200\/80:where(.dark,.dark *){color:#fee685cc}@supports (color:color-mix(in lab,red,red)){.dark\:text-amber-200\/80:where(.dark,.dark *){color:color-mix(in oklab,var(--color-amber-200)80%,transparent)}}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-blue-400:where(.dark,.dark *){color:var(--color-blue-400)}.dark\:text-emerald-400:where(.dark,.dark *){color:var(--color-emerald-400)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-red-500:where(.dark,.dark *){color:var(--color-red-500)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-zinc-50:where(.dark,.dark *){color:var(--color-zinc-50)}.dark\:text-zinc-100:where(.dark,.dark *){color:var(--color-zinc-100)}.dark\:text-zinc-300:where(.dark,.dark *){color:var(--color-zinc-300)}.dark\:text-zinc-400:where(.dark,.dark *){color:var(--color-zinc-400)}.dark\:text-zinc-900:where(.dark,.dark *){color:var(--color-zinc-900)}.dark\:\!shadow-2xl:where(.dark,.dark *){--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.dark\:shadow-\[0_1px_2px_rgba\(0\,0\,0\,0\.1\)\]:where(.dark,.dark *){--tw-shadow:0 1px 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)}@media(hover:hover){.dark\:hover\:border-amber-700\/50:where(.dark,.dark *):hover{border-color:#b7500080}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:border-amber-700\/50:where(.dark,.dark *):hover{border-color:color-mix(in oklab,var(--color-amber-700)50%,transparent)}}.dark\:hover\:border-zinc-800:where(.dark,.dark *):hover{border-color:var(--color-zinc-800)}.dark\:hover\:\!bg-zinc-100:where(.dark,.dark *):hover{background-color:var(--color-zinc-100)!important}.dark\:hover\:bg-amber-900\/70:where(.dark,.dark *):hover{background-color:#7b3306b3}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-amber-900\/70:where(.dark,.dark *):hover{background-color:color-mix(in oklab,var(--color-amber-900)70%,transparent)}}.dark\:hover\:bg-white:where(.dark,.dark *):hover{background-color:var(--color-white)}.dark\:hover\:bg-zinc-700:where(.dark,.dark *):hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-900:where(.dark,.dark *):hover{background-color:var(--color-zinc-900)}.dark\:hover\:text-amber-100:where(.dark,.dark *):hover{color:var(--color-amber-100)}.dark\:hover\:text-zinc-200:where(.dark,.dark *):hover{color:var(--color-zinc-200)}}}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}@keyframes overlayShow{0%{opacity:0}to{opacity:1}}@keyframes overlayHide{0%{opacity:1}to{opacity:0}}@keyframes contentShowDesktop{0%{opacity:0;transform:translateY(8px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes contentHideDesktop{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(8px)scale(.96)}}@keyframes contentShowMobile{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes contentHideMobile{0%{transform:translateY(0)}to{transform:translateY(100%)}}.radix-overlay[data-state=open]{animation:.4s cubic-bezier(.16,1,.3,1) overlayShow}.radix-overlay[data-state=closed]{animation:.3s cubic-bezier(.16,1,.3,1) overlayHide}.radix-content[data-state=open]{animation:.4s cubic-bezier(.16,1,.3,1) contentShowMobile}.radix-content[data-state=closed]{animation:.3s cubic-bezier(.16,1,.3,1) contentHideMobile}@media(min-width:640px){.radix-content[data-state=open]{animation:.5s cubic-bezier(.16,1,.3,1) contentShowDesktop}.radix-content[data-state=closed]{animation:.4s cubic-bezier(.16,1,.3,1) contentHideDesktop}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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-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-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-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}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
1
+ /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}@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-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-900:oklch(39.6% .141 25.723);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-purple-500:oklch(62.7% .265 303.9);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--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)}}@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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.fixed{position:fixed}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-\[99999\]{z-index:99999}.z-\[999999\]{z-index:999999}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-16{height:calc(var(--spacing)*16)}.h-full{height:100%}.min-h-\[70vh\]{min-height:70vh}.min-h-\[100px\]{min-height:100px}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[280px\]{max-width:280px}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.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)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.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-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/60{border-color:#fee68599}@supports (color:color-mix(in lab,red,red)){.border-amber-200\/60{border-color:color-mix(in oklab,var(--color-amber-200)60%,transparent)}}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-transparent{border-color:#0000}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-200\/50{border-color:#e4e4e780}@supports (color:color-mix(in lab,red,red)){.border-zinc-200\/50{border-color:color-mix(in oklab,var(--color-zinc-200)50%,transparent)}}.border-zinc-300{border-color:var(--color-zinc-300)}.border-zinc-400\/30{border-color:#9f9fa94d}@supports (color:color-mix(in lab,red,red)){.border-zinc-400\/30{border-color:color-mix(in oklab,var(--color-zinc-400)30%,transparent)}}.border-t-zinc-900{border-top-color:var(--color-zinc-900)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-50\/50{background-color:#fafafa80}@supports (color:color-mix(in lab,red,red)){.bg-zinc-50\/50{background-color:color-mix(in oklab,var(--color-zinc-50)50%,transparent)}}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-900\/20{background-color:#18181b33}@supports (color:color-mix(in lab,red,red)){.bg-zinc-900\/20{background-color:color-mix(in oklab,var(--color-zinc-900)20%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-indigo-500\/20{--tw-gradient-from:#625fff33}@supports (color:color-mix(in lab,red,red)){.from-indigo-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-indigo-500)20%,transparent)}}.from-indigo-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-500\/20{--tw-gradient-to:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.to-purple-500\/20{--tw-gradient-to:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.to-purple-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.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)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-10{padding-bottom:calc(var(--spacing)*10)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.text-center{text-align:center}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-amber-500{color:var(--color-amber-500)}.text-amber-700{color:var(--color-amber-700)}.text-amber-900{color:var(--color-amber-900)}.text-blue-500{color:var(--color-blue-500)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-700{color:var(--color-emerald-700)}.text-indigo-500{color:var(--color-indigo-500)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-white{color:var(--color-white)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-900{color:var(--color-zinc-900)}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.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-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-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-indigo-500\/20{--tw-shadow-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.shadow-indigo-500\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-indigo-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-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-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-500{--tw-duration:.5s;transition-duration:.5s}@media(hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:bg-amber-200:hover{background-color:var(--color-amber-200)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-300:hover{background-color:var(--color-zinc-300)}.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:ring-2:focus{--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)}.focus\:ring-indigo-500\/50:focus{--tw-ring-color:#625fff80}@supports (color:color-mix(in lab,red,red)){.focus\:ring-indigo-500\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-indigo-500)50%,transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}@media(min-width:40rem){.sm\:top-1\/2{top:50%}.sm\:bottom-auto{bottom:auto}.sm\:left-1\/2{left:50%}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-none{max-width:none}.sm\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:rounded-2xl{border-radius:var(--radius-2xl)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}}.dark\:border-amber-800\/50:where(.dark,.dark *){border-color:#953d0080}@supports (color:color-mix(in lab,red,red)){.dark\:border-amber-800\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-amber-800)50%,transparent)}}.dark\:border-amber-900\/40:where(.dark,.dark *){border-color:#7b330666}@supports (color:color-mix(in lab,red,red)){.dark\:border-amber-900\/40:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-amber-900)40%,transparent)}}.dark\:border-red-500\/20:where(.dark,.dark *){border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark\:border-red-500\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark\:border-zinc-500\/30:where(.dark,.dark *){border-color:#71717b4d}@supports (color:color-mix(in lab,red,red)){.dark\:border-zinc-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-zinc-500)30%,transparent)}}.dark\:border-zinc-700:where(.dark,.dark *){border-color:var(--color-zinc-700)}.dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)}.dark\:border-zinc-800\/50:where(.dark,.dark *){border-color:#27272a80}@supports (color:color-mix(in lab,red,red)){.dark\:border-zinc-800\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}}.dark\:border-t-zinc-100:where(.dark,.dark *){border-top-color:var(--color-zinc-100)}.dark\:bg-amber-500\/10:where(.dark,.dark *){background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.dark\:bg-amber-950\/20:where(.dark,.dark *){background-color:#46190133}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}}.dark\:bg-amber-950\/50:where(.dark,.dark *){background-color:#46190180}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-950)50%,transparent)}}.dark\:bg-black\/80:where(.dark,.dark *){background-color:#000c}@supports (color:color-mix(in lab,red,red)){.dark\:bg-black\/80:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.dark\:bg-emerald-500\/10:where(.dark,.dark *){background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-emerald-500)10%,transparent)}}.dark\:bg-red-500\/10:where(.dark,.dark *){background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark\:bg-zinc-100:where(.dark,.dark *){background-color:var(--color-zinc-100)}.dark\:bg-zinc-800:where(.dark,.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-900\/20:where(.dark,.dark *){background-color:#18181b33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-zinc-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-900)20%,transparent)}}.dark\:bg-zinc-900\/50:where(.dark,.dark *){background-color:#18181b80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-zinc-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-900)50%,transparent)}}.dark\:bg-zinc-950:where(.dark,.dark *){background-color:var(--color-zinc-950)}.dark\:bg-zinc-950\/80:where(.dark,.dark *){background-color:#09090bcc}@supports (color:color-mix(in lab,red,red)){.dark\:bg-zinc-950\/80:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-950)80%,transparent)}}.dark\:text-amber-100:where(.dark,.dark *){color:var(--color-amber-100)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-emerald-400:where(.dark,.dark *){color:var(--color-emerald-400)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-red-500:where(.dark,.dark *){color:var(--color-red-500)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-zinc-50:where(.dark,.dark *){color:var(--color-zinc-50)}.dark\:text-zinc-100:where(.dark,.dark *){color:var(--color-zinc-100)}.dark\:text-zinc-300:where(.dark,.dark *){color:var(--color-zinc-300)}.dark\:text-zinc-400:where(.dark,.dark *){color:var(--color-zinc-400)}.dark\:text-zinc-900:where(.dark,.dark *){color:var(--color-zinc-900)}.dark\:shadow-2xl:where(.dark,.dark *){--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)}@media(hover:hover){.dark\:hover\:border-zinc-800:where(.dark,.dark *):hover{border-color:var(--color-zinc-800)}.dark\:hover\:bg-white:where(.dark,.dark *):hover{background-color:var(--color-white)}.dark\:hover\:bg-zinc-700:where(.dark,.dark *):hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-900:where(.dark,.dark *):hover{background-color:var(--color-zinc-900)}.dark\:hover\:text-zinc-200:where(.dark,.dark *):hover{color:var(--color-zinc-200)}}}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}@keyframes overlayShow{0%{opacity:0}to{opacity:1}}@keyframes overlayHide{0%{opacity:1}to{opacity:0}}@keyframes contentShowDesktop{0%{opacity:0;transform:translateY(8px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes contentHideDesktop{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(8px)scale(.96)}}@keyframes contentShowMobile{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes contentHideMobile{0%{transform:translateY(0)}to{transform:translateY(100%)}}.radix-overlay[data-state=open]{animation:.4s cubic-bezier(.16,1,.3,1) overlayShow}.radix-overlay[data-state=closed]{animation:.3s cubic-bezier(.16,1,.3,1) overlayHide}.radix-content[data-state=open]{animation:.4s cubic-bezier(.16,1,.3,1) contentShowMobile}.radix-content[data-state=closed]{animation:.3s cubic-bezier(.16,1,.3,1) contentHideMobile}@media(min-width:640px){.radix-content[data-state=open]{animation:.5s cubic-bezier(.16,1,.3,1) contentShowDesktop}.radix-content[data-state=closed]{animation:.4s cubic-bezier(.16,1,.3,1) contentHideDesktop}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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-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-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-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}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
package/dist/index.cjs CHANGED
@@ -1 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),g=require("react"),p=require("lucide-react"),C=require("clsx"),N=require("tailwind-merge"),E=require("@radix-ui/react-dialog"),l=require("sonner");function P(r){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(r){for(const a in r)if(a!=="default"){const s=Object.getOwnPropertyDescriptor(r,a);Object.defineProperty(e,a,s.get?s:{enumerable:!0,get:()=>r[a]})}}return e.default=r,Object.freeze(e)}const b=P(E),D=[{name:"email",pattern:/[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/g,replacement:"[EMAIL_REDACTED]"},{name:"bearer_token",pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [TOKEN_REDACTED]"},{name:"jwt",pattern:/eyJ[A-Za-z0-9\-_]+\.eyJ[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+/g,replacement:"[JWT_REDACTED]"},{name:"api_key",pattern:/\b([A-Za-z0-9]{32,})\b/g,replacement:"[KEY_REDACTED]"},{name:"phone",pattern:/(\+?\d[\d\s\-().]{7,}\d)/g,replacement:"[PHONE_REDACTED]"},{name:"ipv4",pattern:/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g,replacement:"[IP_REDACTED]"},{name:"url_query_params",pattern:/([?&](?:token|key|secret|auth|email|user|access_token|refresh_token|api_key|apikey|password|passwd|pwd)=[^&\s]+)/gi,replacement:"[PARAM_REDACTED]"},{name:"ssn",pattern:/\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g,replacement:"[SSN_REDACTED]"},{name:"credit_card",pattern:/\b(?:\d[ -]?){13,19}\b/g,replacement:"[CC_REDACTED]"}];function f(r){let e=r;for(const{pattern:a,replacement:s}of D)e=e.replace(a,s);return e}function c(...r){return N.twMerge(C.clsx(r))}function A({title:r,description:e,primaryAction:a,secondaryAction:s,theme:o,className:i}){return t.jsx("div",{className:c("rounded-xl border p-4 transition-colors","bg-amber-50 border-amber-200/60 shadow-sm","dark:bg-amber-950/20 dark:border-amber-900/40 dark:shadow-[0_1px_2px_rgba(0,0,0,0.1)]",o?.fontFamily,i),style:{backgroundColor:o?.backgroundColor,borderColor:o?.primaryColor?`${o.primaryColor}30`:void 0},children:t.jsxs("div",{className:"flex gap-3",children:[t.jsx(p.AlertTriangle,{className:"h-5 w-5 shrink-0 mt-0.5 text-amber-500 dark:text-amber-400"}),t.jsxs("div",{className:"flex-1",children:[t.jsx("h3",{className:"text-sm font-medium leading-none text-amber-900 dark:text-amber-100",children:r}),t.jsx("p",{className:"mt-2 text-sm leading-relaxed text-amber-800 dark:text-amber-200/80",children:e}),(a||s)&&t.jsxs("div",{className:"mt-4 flex items-center gap-3",children:[a&&t.jsx("button",{onClick:a.onClick,className:c("text-xs font-medium px-3 py-1.5 rounded-md transition-colors","focus-visible:ring-2 focus-visible:ring-amber-500/30 focus:outline-none","bg-amber-100 border border-amber-200 text-amber-900 hover:bg-amber-200 hover:border-amber-300","dark:bg-amber-950/50 dark:border-amber-800/50 dark:text-amber-100 dark:hover:bg-amber-900/70 dark:hover:border-amber-700/50"),children:a.label}),s&&t.jsx("button",{onClick:s.onClick,className:c("text-xs font-medium transition-colors focus-visible:underline focus:outline-none","text-amber-700 hover:text-amber-900","dark:text-amber-200/70 dark:hover:text-amber-100"),children:s.label})]})]})]})})}function w({title:r,description:e,statusUrl:a,isOpen:s,onOpenChange:o,theme:i}){return t.jsx(b.Root,{open:s,onOpenChange:o,children:t.jsxs(b.Portal,{children:[t.jsx(b.Overlay,{className:"radix-overlay fixed inset-0 z-50 bg-zinc-900/20 dark:bg-black/80 backdrop-blur-sm"}),t.jsxs(b.Content,{className:c("radix-content fixed z-50 flex flex-col items-center text-center shadow-2xl transition-colors","bg-white border-zinc-200 dark:bg-zinc-950 dark:border-zinc-800","bottom-0 left-0 right-0 border-t rounded-t-3xl p-8 pb-10","sm:bottom-auto sm:top-[50%] sm:left-[50%] sm:-translate-x-1/2 sm:-translate-y-1/2 sm:w-full sm:max-w-md sm:rounded-2xl sm:border",i?.fontFamily),children:[t.jsx("div",{className:"mx-auto w-12 h-1.5 rounded-full bg-zinc-200 dark:bg-zinc-800 mb-6 sm:hidden"}),t.jsx("div",{className:"w-16 h-16 rounded-full flex items-center justify-center mb-6 border bg-red-50 border-red-100 dark:bg-red-500/10 dark:border-red-500/20",children:t.jsx(p.AlertOctagon,{className:"w-8 h-8 text-red-600 dark:text-red-500"})}),t.jsx(b.Title,{className:"text-xl font-semibold text-zinc-900 dark:text-zinc-50 mb-3 tracking-tight",children:r}),t.jsx(b.Description,{className:"text-sm leading-relaxed mb-8 max-w-[280px] sm:max-w-none text-zinc-600 dark:text-zinc-400",children:e}),t.jsxs("div",{className:"flex flex-col w-full gap-3",children:[t.jsxs("button",{onClick:()=>window.location.reload(),className:c("flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-all shadow-sm","bg-zinc-900 text-white hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-white hover:scale-[1.02] active:scale-95"),children:[t.jsx(p.RefreshCcw,{className:"w-4 h-4"}),"Atualizar a página"]}),a&&t.jsxs("a",{href:a,target:"_blank",rel:"noopener noreferrer",className:c("flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-colors border border-transparent","text-zinc-500 hover:text-zinc-900 hover:bg-zinc-100 dark:text-zinc-400 dark:hover:text-zinc-200 dark:hover:bg-zinc-900 dark:hover:border-zinc-800"),children:["Verificar status do sistema",t.jsx(p.ExternalLink,{className:"w-4 h-4 opacity-70"})]})]})]})]})})}function _({customTheme:r,toastOptions:e,position:a="top-right",...s}){return t.jsx(l.Toaster,{position:a,toastOptions:{...e,classNames:{...e?.classNames,toast:c("backdrop-blur-md font-sans rounded-xl px-4 py-3 transition-colors","!bg-white/90 !border !border-zinc-200 !text-zinc-900 !shadow-xl","dark:!bg-zinc-950/80 dark:!border-zinc-800 dark:!text-zinc-50 dark:!shadow-2xl",r?.fontFamily,e?.classNames?.toast),title:c("!font-medium !text-sm !text-zinc-900 dark:!text-zinc-50",e?.classNames?.title),description:c("!mt-0.5 !text-sm !text-zinc-500 dark:!text-zinc-400 !line-clamp-2",e?.classNames?.description),actionButton:c("!font-medium !rounded-md !shadow-sm transition-colors !px-3 !py-1.5 !border","!bg-zinc-900 !text-white !border-transparent hover:!bg-zinc-800","dark:!bg-white dark:!text-black dark:!border-zinc-300 dark:hover:!bg-zinc-100",e?.classNames?.actionButton)},style:{backgroundColor:r?.backgroundColor,color:r?.textColor,borderColor:r?.primaryColor?`${r.primaryColor}40`:void 0,...e?.style}}})}function z(r,e,a,s){l.toast(r,{description:e,icon:t.jsx(p.AlertCircle,{className:"w-5 h-5 text-red-500 dark:text-red-400"}),action:a?{label:a,onClick:()=>{s&&s()}}:void 0})}const R={success:(r,e)=>l.toast(r,{description:e,icon:t.jsx(p.CheckCircle2,{className:"w-5 h-5 text-emerald-500 dark:text-emerald-400"})}),error:(r,e)=>l.toast(r,{description:e,icon:t.jsx(p.AlertCircle,{className:"w-5 h-5 text-red-500 dark:text-red-400"})}),warning:(r,e)=>l.toast(r,{description:e,icon:t.jsx(p.AlertTriangle,{className:"w-5 h-5 text-amber-500 dark:text-amber-400"})}),info:(r,e)=>l.toast(r,{description:e,icon:t.jsx(p.Info,{className:"w-5 h-5 text-blue-500 dark:text-blue-400"})}),message:(r,e)=>l.toast(r,{description:e}),customTheme:(r,e,a)=>{l.toast.custom(s=>t.jsxs("div",{className:c("w-full flex gap-3 p-4 shadow-2xl transition-all",a.fontFamily),style:{backgroundColor:a.backgroundColor||"#ffffff",color:a.textColor||"#000000",border:`1px solid ${a.primaryColor||"#e4e4e7"}`,borderRadius:a.borderRadius||"12px"},children:[t.jsx("div",{className:"w-1.5 rounded-full shrink-0",style:{backgroundColor:a.primaryColor||"#3b82f6"}}),t.jsxs("div",{className:"flex flex-col gap-1",children:[t.jsx("span",{className:"font-medium text-sm leading-none",children:r}),t.jsx("span",{className:"text-sm opacity-80 leading-relaxed mt-1",children:e})]})]}))}},v=g.createContext(void 0);function T({apiKey:r,apiUrl:e,language:a,children:s}){const o=async i=>{const d=i instanceof Error?i:new Error(String(i)),n=l.toast.loading("Analyzing error context...",{description:"Applying AI recovery heuristics..."});try{const m=f(d.message).slice(0,500),k=f(d.stack||"").slice(0,1500),h=e||"https://api.cognicatch.dev/v1/analyze-error",u=typeof navigator<"u"?navigator.language:"en-US",j=a||u,y=await fetch(h,{method:"POST",headers:{Authorization:`Bearer ${r}`,"Content-Type":"application/json"},body:JSON.stringify({error:m,stack:k,language:j})});if(!y.ok)throw new Error("SaaS API Error");const x=await y.json();x&&((x.severity||x.level)==="low"?l.toast.info(x.title,{id:n,description:x.description}):l.toast.error(x.title,{id:n,description:x.description}))}catch(m){console.error("AdaptiveUI API Request failed:",m),l.toast.error("Analysis Failed",{id:n,description:"We couldn't reach the AI servers. Please try again later."})}};return t.jsx(v.Provider,{value:{apiKey:r,apiUrl:e,language:a,captureAsyncError:o},children:s})}function S(){const r=g.useContext(v);if(!r)throw new Error("❌ AdaptiveUI Developer Error: You tried to use the 'useAdaptive' hook outside of an <AdaptiveProvider>. Please wrap the root of your application (e.g., App.tsx) with <AdaptiveProvider apiKey='YOUR_KEY'>");return r}class I extends g.Component{static contextType=v;constructor(e){super(e),this.state={hasError:!1,error:null,aiData:null,isProcessingAuto:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,a){const{mode:s}=this.props;s==="manual"&&this.props.severity==="low"&&z(this.props.title,this.props.description,this.props.actionLabel??void 0,this.handleRecover),s==="auto"&&(this.setState({isProcessingAuto:!0}),this.processAutoMode(e))}processAutoMode=async e=>{const a=this.props,s=a.apiKey||this.context?.apiKey,o=a.apiUrl||this.context?.apiUrl,i=typeof navigator<"u"?navigator.language:"en-US",d=a.language||this.context?.language||i;if(!s){console.error("AdaptiveUI: Missing API Key for auto mode. Provide it via props or <AdaptiveProvider>."),this.setState({isProcessingAuto:!1});return}if(s==="sk_test_mock"){setTimeout(()=>{this.setState({isProcessingAuto:!1,aiData:{severity:"medium",title:"Incomplete data",description:"The dashboard encountered an error while attempting to read user information. Our team has already been notified.",actionLabel:"Reload Widget"}})},1500);return}try{const n=f(e.message).slice(0,500),m=f(e.stack||"").slice(0,1500),h=await fetch(o||"https://api.cognicatch.dev/v1/analyze-error",{method:"POST",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},body:JSON.stringify({error:n,stack:m,language:d})});if(!h.ok)throw new Error(`SaaS API returned ${h.status}`);const u=await h.json();u&&(u.severity==="low"?(z(u.title,u.description,u.actionLabel??void 0,this.handleRecover),this.setState({isProcessingAuto:!1,hasError:!1,error:null})):this.setState({isProcessingAuto:!1,aiData:u}))}catch(n){console.error("AdaptiveUI AI Request failed:",n),this.setState({isProcessingAuto:!1,aiData:{severity:"medium",title:"Communication Error",description:"We were unable to connect to the analytics servers at this time. Our team has already been notified.",actionLabel:"Reload Component"}})}};handleRecover=()=>{this.setState({hasError:!1,error:null,aiData:null}),this.props.onRecover&&this.props.onRecover()};render(){if(!this.state.hasError)return this.props.children;const{mode:e,theme:a,className:s}=this.props;if(e==="manual"){const{severity:o,title:i,description:d,actionLabel:n}=this.props;if(o==="high")return t.jsx(w,{isOpen:!0,onOpenChange:m=>{m||this.handleRecover()},title:i,description:d,theme:a});if(o==="medium")return t.jsx(A,{title:i,description:d,primaryAction:n?{label:n,onClick:this.handleRecover}:void 0,theme:a,className:s});if(o==="low")return null}if(e==="auto"){if(this.state.isProcessingAuto)return t.jsxs("div",{className:"w-full h-full min-h-[100px] rounded-xl border border-zinc-200/50 dark:border-zinc-800/50 bg-zinc-50/50 dark:bg-zinc-900/20 flex flex-col items-center justify-center p-6 animate-pulse",children:[t.jsx("div",{className:"w-5 h-5 border-2 border-indigo-500/30 border-t-indigo-500 rounded-full animate-spin mb-3"}),t.jsx("p",{className:"text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"Analyzing error context..."})]});if(this.state.aiData){const{severity:o,title:i,description:d,actionLabel:n}=this.state.aiData;if(o==="high")return t.jsx(w,{isOpen:!0,onOpenChange:m=>{m||this.handleRecover()},title:i,description:d,theme:a});if(o==="medium")return t.jsx(A,{title:i,description:d,primaryAction:n?{label:n,onClick:this.handleRecover}:void 0,theme:a,className:s})}}return null}}exports.AdaptiveErrorBoundary=I;exports.AdaptiveProvider=T;exports.AdaptiveToastProvider=_;exports.adaptiveToast=R;exports.useAdaptive=S;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),g=require("react"),p=require("lucide-react"),E=require("clsx"),_=require("tailwind-merge"),D=require("react-dom"),R=require("@radix-ui/react-dialog"),u=require("sonner");function P(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const a in t)if(a!=="default"){const o=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(r,a,o.get?o:{enumerable:!0,get:()=>t[a]})}}return r.default=t,Object.freeze(r)}const v=P(R),S=[{name:"email",pattern:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,replacement:"[EMAIL_REDACTED]"},{name:"bearer_token",pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [TOKEN_REDACTED]"},{name:"jwt",pattern:/eyJ[A-Za-z0-9\-_]+\.eyJ[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+/g,replacement:"[JWT_REDACTED]"},{name:"api_key",pattern:/\b(?:sk|pk|key|api|sec)_[a-zA-Z0-9]{20,}\b|\b[A-Za-z0-9]{32,48}\b/g,replacement:"[KEY_REDACTED]"},{name:"phone",pattern:/(?:\+?\d{1,3}[-.\s]?)?\(?\d{2,4}\)?[-.\s]?\d{3,5}[-.\s]?\d{4}\b/g,replacement:"[PHONE_REDACTED]"},{name:"ipv4",pattern:/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,replacement:"[IP_REDACTED]"},{name:"url_query_params",pattern:/([?&](?:token|key|secret|auth|email|user|access_token|refresh_token|api_key|apikey|password|passwd|pwd)=[^&\s]+)/gi,replacement:"[PARAM_REDACTED]"},{name:"ssn",pattern:/\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g,replacement:"[SSN_REDACTED]"},{name:"credit_card",pattern:/\b(?:\d[ -]?){12,18}\d\b/g,replacement:"[CC_REDACTED]"}];function w(t,r=1e3){if(!t)return"";let a=String(t);return a.length>r&&(a=a.slice(0,r)+"... [TRUNCATED]"),S.reduce((o,{pattern:s,replacement:n})=>o.replace(s,n),a)}function N(t){let r;if(t.url)try{r=new URL(t.url,"http://dummy.com").pathname}catch{r=void 0}let a=t.componentName;if(!a&&t.componentStack){const o=t.componentStack.split(`
2
+ `)[1]??"";a=/at (\w+)/.exec(o)?.[1]}return{message:w(t.message,500),httpStatus:t.httpStatus,errorCode:t.errorCode?w(t.errorCode,100):void 0,routePath:r,componentName:a}}function x(...t){return _.twMerge(E.clsx(t))}function z({title:t,description:r,severity:a="medium",primaryAction:o,secondaryAction:s,theme:n,className:i}){const l=a==="high";return e.jsx("div",{role:"alert","aria-live":"polite",className:x("rounded-xl border p-4 transition-all shadow-sm",!n?.backgroundColor&&"bg-amber-50 border-amber-200/60 dark:bg-amber-950/20 dark:border-amber-900/40",n?.fontFamily,i),style:{backgroundColor:n?.backgroundColor,color:n?.textColor,borderColor:n?.primaryColor?`${n.primaryColor}40`:void 0},children:e.jsxs("div",{className:"flex gap-3",children:[e.jsx("div",{className:"shrink-0 mt-0.5",children:l?e.jsx(p.AlertCircle,{className:"h-5 w-5 text-red-500"}):e.jsx(p.AlertTriangle,{className:"h-5 w-5 text-amber-500"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:"text-sm font-medium leading-none text-amber-900 dark:text-amber-100",style:{color:n?.textColor},children:t}),e.jsx("p",{className:"mt-2 text-sm leading-relaxed opacity-90",style:{color:n?.textColor},children:r}),(o||s)&&e.jsxs("div",{className:"mt-4 flex flex-wrap items-center gap-3",children:[o&&e.jsx("button",{onClick:o.onClick,style:n?.primaryColor?{backgroundColor:n.primaryColor,color:"#fff"}:{},className:x("text-xs font-medium px-3 py-1.5 rounded-lg transition-all active:scale-95","bg-amber-100 border border-amber-200 text-amber-900 hover:bg-amber-200","dark:bg-amber-950/50 dark:border-amber-800/50 dark:text-amber-100"),children:o.label}),s&&e.jsx("button",{onClick:s.onClick,className:"text-xs font-medium opacity-70 hover:opacity-100 transition-opacity underline-offset-4 hover:underline",style:{color:n?.textColor},children:s.label})]})]})]})})}function A({title:t,description:r,statusUrl:a,showRefresh:o=!0,isOpen:s,onOpenChange:n,theme:i,onPrimaryAction:l,primaryActionLabel:c="Atualizar a página"}){const[h,b]=g.useState(!1);g.useEffect(()=>{b(!0)},[]);const f=i==="dark"||typeof i=="object"&&i?.backgroundColor==="dark",d=typeof i=="object"?i.primaryColor:void 0,y=typeof i=="object"?i.fontFamily:void 0;if(!h)return null;const k=e.jsx(v.Root,{open:s,onOpenChange:n,children:e.jsx(v.Portal,{children:e.jsxs("div",{className:`cognicatch-ui-wrapper ${f?"dark":""} ${y||""}`,children:[e.jsx(v.Overlay,{className:"radix-overlay fixed inset-0 z-[99999] bg-zinc-900/20 dark:bg-black/80 backdrop-blur-sm"}),e.jsxs(v.Content,{onInteractOutside:m=>m.preventDefault(),onEscapeKeyDown:m=>m.preventDefault(),className:x("radix-content fixed z-[999999] flex flex-col items-center text-center shadow-2xl transition-all","bg-white border-zinc-200 dark:bg-zinc-950 dark:border-zinc-800","bottom-0 left-0 right-0 border-t rounded-t-3xl p-8 pb-10","sm:bottom-auto sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2 sm:w-full sm:max-w-md sm:rounded-2xl sm:border"),style:{boxSizing:"border-box"},children:[e.jsx("div",{className:"mx-auto w-12 h-1.5 rounded-full bg-zinc-200 dark:bg-zinc-800 mb-6 sm:hidden"}),e.jsx("div",{className:"w-16 h-16 rounded-full flex items-center justify-center mb-6 border bg-red-50 border-red-100 dark:bg-red-500/10 dark:border-red-500/20",children:e.jsx(p.AlertOctagon,{className:"w-8 h-8 text-red-600 dark:text-red-500"})}),e.jsx(v.Title,{className:"text-xl font-semibold text-zinc-900 dark:text-zinc-50 mb-3 tracking-tight",children:t}),e.jsx(v.Description,{className:"text-sm leading-relaxed mb-8 max-w-[280px] sm:max-w-none text-zinc-600 dark:text-zinc-400",children:r}),e.jsxs("div",{className:"flex flex-col w-full gap-3",children:[o&&e.jsxs("button",{onClick:()=>l?l():window.location.reload(),style:d?{backgroundColor:d,borderColor:d}:{},className:x("flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-all shadow-sm",d?"text-white hover:opacity-90 hover:scale-[1.02] active:scale-95":"bg-zinc-900 text-white hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-white hover:scale-[1.02] active:scale-95"),children:[e.jsx(p.RefreshCcw,{className:"w-4 h-4"}),c]}),a&&e.jsxs("a",{href:a,target:"_blank",rel:"noopener noreferrer",className:x("flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-colors border border-transparent","text-zinc-500 hover:text-zinc-900 hover:bg-zinc-100 dark:text-zinc-400 dark:hover:text-zinc-200 dark:hover:bg-zinc-900 dark:hover:border-zinc-800"),children:["Check system status",e.jsx(p.ExternalLink,{className:"w-4 h-4 opacity-70"})]})]})]})]})})});return D.createPortal(k,document.body)}function T({customTheme:t,toastOptions:r,position:a="top-right",...o}){return e.jsx(u.Toaster,{position:a,containerAriaLabel:"Notifications",...o,toastOptions:{...r,classNames:{...r?.classNames,toast:x("bg-white/90 border-zinc-200 text-zinc-900 shadow-xl backdrop-blur-md","dark:bg-zinc-950/80 dark:border-zinc-800 dark:text-zinc-50 dark:shadow-2xl",t?.fontFamily,r?.classNames?.toast),title:x("font-medium text-sm text-zinc-900 dark:text-zinc-50",r?.classNames?.title),description:x("mt-0.5 text-xs text-zinc-500 dark:text-zinc-400 line-clamp-2",r?.classNames?.description),actionButton:x("font-medium rounded-lg transition-all px-3 py-1.5 border text-xs","bg-zinc-900 text-white border-transparent hover:scale-[1.02] active:scale-95","dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-white",r?.classNames?.actionButton)},style:{borderRadius:t?.borderRadius||"0.75rem",backgroundColor:t?.backgroundColor,color:t?.textColor,fontFamily:t?.fontFamily,...r?.style}}})}function j(t,r,a,o,s="medium"){const n={low:e.jsx(p.Info,{className:"w-5 h-5 text-blue-500"}),medium:e.jsx(p.AlertTriangle,{className:"w-5 h-5 text-amber-500"}),high:e.jsx(p.AlertCircle,{className:"w-5 h-5 text-red-500"})};return u.toast(t,{description:r,icon:n[s],duration:s==="high"?8e3:5e3,action:a?{label:a,onClick:()=>o?.()}:void 0})}const M={success:(t,r)=>u.toast(t,{description:r,icon:e.jsx(p.CheckCircle2,{className:"w-5 h-5 text-emerald-500"})}),error:(t,r)=>u.toast(t,{description:r,icon:e.jsx(p.AlertCircle,{className:"w-5 h-5 text-red-500"})}),warning:(t,r)=>u.toast(t,{description:r,icon:e.jsx(p.AlertTriangle,{className:"w-5 h-5 text-amber-500 dark:text-amber-400"})}),loading:(t,r)=>u.toast.loading(t,{description:r}),custom:(t,r,a)=>{u.toast.custom(o=>e.jsx("div",{className:x("flex gap-3 p-4 shadow-2xl border",a.fontFamily),style:{backgroundColor:a.backgroundColor||"var(--bg-card)",color:a.textColor||"var(--text-card)",borderColor:a.primaryColor||"#e4e4e7",borderRadius:a.borderRadius||"12px"},children:e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("span",{className:"font-semibold text-sm",children:t}),e.jsx("span",{className:"text-xs opacity-70",children:r})]})}))}},C=g.createContext(void 0);function I({apiKey:t,apiUrl:r,language:a,children:o}){const s=g.useCallback(async i=>{const l=i instanceof Error?i:new Error(String(i)),c=u.toast.loading("Analyzing error context...",{description:"Applying AI recovery heuristics..."});if(t==="sk_test_mock"){setTimeout(()=>{u.toast.info("Mock Mode Analysis",{id:c,description:"This is a mocked async recovery because sk_test_mock was used."})},1500);return}try{const h={message:l.message,componentStack:l.stack,url:typeof window<"u"?window.location.href:void 0},b=N(h),f=r||"https://api.cognicatch.dev/v1/analyze-error",d=typeof navigator<"u"?navigator.language:"en-US",y=a||d,k=await fetch(f,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({error:b.message,stack:b.componentName?`Component: ${b.componentName}`:b.errorCode||"Async Error",routePath:b.routePath,language:y})});if(!k.ok)throw new Error("SaaS API Error");const m=await k.json();m&&((m.severity||m.level)==="low"?u.toast.info(m.title,{id:c,description:m.description}):u.toast.error(m.title,{id:c,description:m.description}))}catch(h){console.error("AdaptiveUI API Request failed:",h),u.toast.error("Analysis Failed",{id:c,description:"We couldn't reach the AI servers. Please try again later."})}},[t,r,a]),n=g.useMemo(()=>({apiKey:t,apiUrl:r,language:a,captureAsyncError:s}),[t,r,a,s]);return e.jsx(C.Provider,{value:n,children:o})}function F(){const t=g.useContext(C);if(!t)throw new Error("❌ AdaptiveUI Developer Error: You tried to use the 'useAdaptive' hook outside of an <AdaptiveProvider>. Please wrap the root of your application (e.g., App.tsx or layout.tsx) with <AdaptiveProvider apiKey='YOUR_KEY'>");return t}const L=({onRecover:t,theme:r})=>{const a=r==="dark";return e.jsx("div",{className:`p-6 rounded-xl border border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-950 shadow-sm ${a?"dark":""}`,children:e.jsxs("div",{className:"flex flex-col items-center text-center gap-4",children:[e.jsx("div",{className:"p-3 rounded-full bg-red-50 dark:bg-red-900/20",children:e.jsx("svg",{className:"w-6 h-6 text-red-600 dark:text-red-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"})})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-zinc-900 dark:text-zinc-100",children:"Component Unavailable"}),e.jsx("p",{className:"text-xs text-zinc-500 dark:text-zinc-400 mt-1",children:"An unexpected error occurred in the interface."})]}),e.jsx("button",{onClick:t,style:{backgroundColor:r?.primaryColor||void 0},className:"px-4 py-2 text-xs font-medium bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 rounded-lg hover:opacity-90 transition-opacity",children:"Try Reloading"})]})})};class O extends g.Component{static contextType=C;_isMounted=!1;constructor(r){super(r),this.state={hasError:!1,error:null,aiData:null,isProcessingAuto:!1,hasCrashedFallback:!1}}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,a){if(this.state.hasCrashedFallback)return;const{mode:o}=this.props;o==="manual"&&this.props.severity==="low"&&j(this.props.title,this.props.description,this.props.actionLabel??void 0,this.handleRecover),o==="auto"&&this._isMounted&&(this.setState({isProcessingAuto:!0}),this.processAutoMode(r,a))}processAutoMode=async(r,a)=>{const o=this.props,s=o.apiKey||this.context?.apiKey,n=o.apiUrl||this.context?.apiUrl,i=typeof navigator<"u"?navigator.language:"en-US",l=o.language||this.context?.language||i;if(!s){console.error("AdaptiveUI: Missing API Key for auto mode. Provide it via props or <AdaptiveProvider>."),this._isMounted&&this.setState({isProcessingAuto:!1});return}if(s==="sk_test_mock"){setTimeout(()=>{this._isMounted&&this.setState({isProcessingAuto:!1,aiData:{severity:"medium",title:"Mock Mode Error",description:"This is a mocked response because sk_test_mock was used.",actionLabel:"Reload Component"}})},1500);return}try{const c={message:r.message,componentStack:a.componentStack||void 0,url:typeof window<"u"?window.location.href:void 0},h=N(c),f=await fetch(n||"https://api.cognicatch.dev/v1/analyze-error",{method:"POST",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},body:JSON.stringify({error:h.message,stack:h.componentName?`Component: ${h.componentName}`:"No stack",routePath:h.routePath,language:l})});if(!f.ok)throw new Error(`SaaS API returned ${f.status}`);const d=await f.json();d&&this._isMounted&&(d.severity==="low"?(j(d.title,d.description,d.actionLabel??void 0,this.handleRecover),this.setState({isProcessingAuto:!1,aiData:d})):this.setState({isProcessingAuto:!1,aiData:d}))}catch(c){console.error("AdaptiveUI AI Request failed:",c),this._isMounted&&this.setState({isProcessingAuto:!1,aiData:{severity:"medium",title:"Communication Error",description:"We were unable to connect to the analytics servers at this time. Our team has already been notified.",actionLabel:"Reload Component"}})}};handleRecover=()=>{this._isMounted&&this.setState({hasError:!1,error:null,aiData:null,hasCrashedFallback:!1}),this.props.onRecover&&this.props.onRecover()};render(){if(this.state.hasCrashedFallback)return e.jsx(L,{onRecover:this.handleRecover,theme:this.props.theme});if(!this.state.hasError)return this.props.children;const{mode:r,theme:a,className:o}=this.props;if(r==="manual"){const{severity:s,title:n,description:i,actionLabel:l}=this.props;try{if(s==="high")return e.jsx(A,{isOpen:!0,onOpenChange:c=>{c||this.handleRecover()},title:n,description:i,theme:a});if(s==="medium")return e.jsx(z,{title:n,description:i,primaryAction:l?{label:l,onClick:this.handleRecover}:void 0,theme:a,className:o});if(s==="low")return null}catch{return this.setState({hasCrashedFallback:!0}),null}}if(r==="auto"){if(this.state.isProcessingAuto)return e.jsxs("div",{className:"w-full h-full min-h-[100px] rounded-xl border border-zinc-200/50 dark:border-zinc-800/50 bg-zinc-50/50 dark:bg-zinc-900/20 flex flex-col items-center justify-center p-6 animate-pulse",children:[e.jsx("div",{className:"w-5 h-5 border-2 border-zinc-400/30 dark:border-zinc-500/30 border-t-zinc-900 dark:border-t-zinc-100 rounded-full animate-spin mb-3"}),e.jsx("p",{className:"text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"Analyzing error context..."})]});if(this.state.aiData){const{severity:s,title:n,description:i,actionLabel:l}=this.state.aiData;try{if(s==="high")return e.jsx(A,{isOpen:!0,onOpenChange:c=>{c||this.handleRecover()},title:n,description:i,theme:a});if(s==="medium")return e.jsx(z,{title:n,description:i,primaryAction:l?{label:l,onClick:this.handleRecover}:void 0,theme:a,className:o});if(s==="low")return null}catch{return this.setState({hasCrashedFallback:!0}),null}}}return null}}exports.AdaptiveErrorBoundary=O;exports.AdaptiveProvider=I;exports.AdaptiveToastProvider=T;exports.adaptiveToast=M;exports.useAdaptive=F;
package/dist/index.d.ts CHANGED
@@ -18,10 +18,13 @@ declare interface AdaptiveContextType {
18
18
  export declare class AdaptiveErrorBoundary extends Component<Props, State> {
19
19
  static contextType: default_2.Context<AdaptiveContextType | undefined>;
20
20
  context: default_2.ContextType<typeof AdaptiveContext>;
21
+ private _isMounted;
21
22
  constructor(props: Props);
23
+ componentDidMount(): void;
24
+ componentWillUnmount(): void;
22
25
  static getDerivedStateFromError(error: Error): Partial<State>;
23
26
  componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
24
- processAutoMode: (error: Error) => Promise<void>;
27
+ processAutoMode: (error: Error, errorInfo: ErrorInfo) => Promise<void>;
25
28
  handleRecover: () => void;
26
29
  render(): string | number | bigint | boolean | JSX.Element | Iterable<default_2.ReactNode> | Promise<string | number | bigint | boolean | default_2.ReactPortal | default_2.ReactElement<unknown, string | default_2.JSXElementConstructor<any>> | Iterable<default_2.ReactNode> | null | undefined> | null | undefined;
27
30
  }
@@ -39,9 +42,8 @@ export declare const adaptiveToast: {
39
42
  success: (title: string, description?: string) => string | number;
40
43
  error: (title: string, description?: string) => string | number;
41
44
  warning: (title: string, description?: string) => string | number;
42
- info: (title: string, description?: string) => string | number;
43
- message: (title: string, description?: string) => string | number;
44
- customTheme: (title: string, description: string, theme: ThemeOptions) => void;
45
+ loading: (title: string, description?: string) => string | number;
46
+ custom: (title: string, description: string, theme: ThemeOptions) => void;
45
47
  };
46
48
 
47
49
  export declare function AdaptiveToastProvider({ customTheme, toastOptions, position, ...props }: AdaptiveToastProviderProps): JSX.Element;
@@ -96,6 +98,7 @@ declare interface State {
96
98
  error: Error | null;
97
99
  aiData: GenUIResponse | null;
98
100
  isProcessingAuto: boolean;
101
+ hasCrashedFallback: boolean;
99
102
  }
100
103
 
101
104
  export declare interface ThemeOptions {
package/dist/index.js CHANGED
@@ -1,126 +1,118 @@
1
- import { jsx as a, jsxs as d } from "react/jsx-runtime";
2
- import { createContext as E, useContext as D, Component as R } from "react";
3
- import { AlertTriangle as z, AlertOctagon as _, RefreshCcw as P, ExternalLink as S, Info as T, AlertCircle as C, CheckCircle2 as I } from "lucide-react";
4
- import { clsx as j } from "clsx";
5
- import { twMerge as L } from "tailwind-merge";
6
- import * as b from "@radix-ui/react-dialog";
7
- import { Toaster as O, toast as l } from "sonner";
8
- const B = [
9
- // Emails
10
- {
11
- name: "email",
12
- pattern: /[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/g,
13
- replacement: "[EMAIL_REDACTED]"
14
- },
15
- // Bearer / API tokens in Authorization headers
16
- {
17
- name: "bearer_token",
18
- pattern: /Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,
19
- replacement: "Bearer [TOKEN_REDACTED]"
20
- },
21
- // JWT tokens (three base64url segments)
22
- {
23
- name: "jwt",
24
- pattern: /eyJ[A-Za-z0-9\-_]+\.eyJ[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+/g,
25
- replacement: "[JWT_REDACTED]"
26
- },
27
- // Generic API keys (long hex or base64-looking strings 32+ chars)
28
- {
29
- name: "api_key",
30
- pattern: /\b([A-Za-z0-9]{32,})\b/g,
31
- replacement: "[KEY_REDACTED]"
32
- },
33
- // Phone numbers (loose match)
34
- {
35
- name: "phone",
36
- pattern: /(\+?\d[\d\s\-().]{7,}\d)/g,
37
- replacement: "[PHONE_REDACTED]"
38
- },
39
- // IP addresses
40
- {
41
- name: "ipv4",
42
- pattern: /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g,
43
- replacement: "[IP_REDACTED]"
44
- },
45
- // URL query parameters that could carry tokens/emails
46
- {
47
- name: "url_query_params",
48
- pattern: /([?&](?:token|key|secret|auth|email|user|access_token|refresh_token|api_key|apikey|password|passwd|pwd)=[^&\s]+)/gi,
49
- replacement: "[PARAM_REDACTED]"
50
- },
51
- // Potential SSNs
52
- {
53
- name: "ssn",
54
- pattern: /\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g,
55
- replacement: "[SSN_REDACTED]"
56
- },
57
- // Credit card numbers (Luhn-ish pattern)
58
- {
59
- name: "credit_card",
60
- pattern: /\b(?:\d[ -]?){13,19}\b/g,
61
- replacement: "[CC_REDACTED]"
62
- }
1
+ import { jsx as r, jsxs as m } from "react/jsx-runtime";
2
+ import { useState as D, useEffect as R, createContext as S, useCallback as P, useMemo as T, useContext as M, Component as I } from "react";
3
+ import { AlertCircle as y, AlertTriangle as C, AlertOctagon as F, RefreshCcw as L, ExternalLink as j, CheckCircle2 as O, Info as U } from "lucide-react";
4
+ import { clsx as B } from "clsx";
5
+ import { twMerge as Z } from "tailwind-merge";
6
+ import { createPortal as $ } from "react-dom";
7
+ import * as g from "@radix-ui/react-dialog";
8
+ import { Toaster as J, toast as u } from "sonner";
9
+ const K = [
10
+ { name: "email", pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, replacement: "[EMAIL_REDACTED]" },
11
+ { name: "bearer_token", pattern: /Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi, replacement: "Bearer [TOKEN_REDACTED]" },
12
+ { name: "jwt", pattern: /eyJ[A-Za-z0-9\-_]+\.eyJ[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+/g, replacement: "[JWT_REDACTED]" },
13
+ { name: "api_key", pattern: /\b(?:sk|pk|key|api|sec)_[a-zA-Z0-9]{20,}\b|\b[A-Za-z0-9]{32,48}\b/g, replacement: "[KEY_REDACTED]" },
14
+ { name: "phone", pattern: /(?:\+?\d{1,3}[-.\s]?)?\(?\d{2,4}\)?[-.\s]?\d{3,5}[-.\s]?\d{4}\b/g, replacement: "[PHONE_REDACTED]" },
15
+ { name: "ipv4", pattern: /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g, replacement: "[IP_REDACTED]" },
16
+ { name: "url_query_params", pattern: /([?&](?:token|key|secret|auth|email|user|access_token|refresh_token|api_key|apikey|password|passwd|pwd)=[^&\s]+)/gi, replacement: "[PARAM_REDACTED]" },
17
+ { name: "ssn", pattern: /\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g, replacement: "[SSN_REDACTED]" },
18
+ { name: "credit_card", pattern: /\b(?:\d[ -]?){12,18}\d\b/g, replacement: "[CC_REDACTED]" }
63
19
  ];
64
- function x(r) {
65
- let e = r;
66
- for (const { pattern: t, replacement: o } of B)
67
- e = e.replace(t, o);
68
- return e;
20
+ function z(t, e = 1e3) {
21
+ if (!t) return "";
22
+ let o = String(t);
23
+ return o.length > e && (o = o.slice(0, e) + "... [TRUNCATED]"), K.reduce((a, { pattern: n, replacement: i }) => a.replace(n, i), o);
24
+ }
25
+ function _(t) {
26
+ let e;
27
+ if (t.url)
28
+ try {
29
+ e = new URL(t.url, "http://dummy.com").pathname;
30
+ } catch {
31
+ e = void 0;
32
+ }
33
+ let o = t.componentName;
34
+ if (!o && t.componentStack) {
35
+ const a = t.componentStack.split(`
36
+ `)[1] ?? "";
37
+ o = /at (\w+)/.exec(a)?.[1];
38
+ }
39
+ return {
40
+ message: z(t.message, 500),
41
+ httpStatus: t.httpStatus,
42
+ errorCode: t.errorCode ? z(t.errorCode, 100) : void 0,
43
+ routePath: e,
44
+ componentName: o
45
+ };
69
46
  }
70
- function c(...r) {
71
- return L(j(r));
47
+ function f(...t) {
48
+ return Z(B(t));
72
49
  }
73
- function y({
74
- title: r,
50
+ function A({
51
+ title: t,
75
52
  description: e,
76
- primaryAction: t,
77
- secondaryAction: o,
53
+ severity: o = "medium",
54
+ primaryAction: a,
55
+ secondaryAction: n,
78
56
  theme: i,
79
- className: n
57
+ className: s
80
58
  }) {
81
- return /* @__PURE__ */ a(
59
+ const l = o === "high";
60
+ return /* @__PURE__ */ r(
82
61
  "div",
83
62
  {
84
- className: c(
85
- "rounded-xl border p-4 transition-colors",
86
- "bg-amber-50 border-amber-200/60 shadow-sm",
87
- "dark:bg-amber-950/20 dark:border-amber-900/40 dark:shadow-[0_1px_2px_rgba(0,0,0,0.1)]",
63
+ role: "alert",
64
+ "aria-live": "polite",
65
+ className: f(
66
+ "rounded-xl border p-4 transition-all shadow-sm",
67
+ !i?.backgroundColor && "bg-amber-50 border-amber-200/60 dark:bg-amber-950/20 dark:border-amber-900/40",
88
68
  i?.fontFamily,
89
- n
69
+ s
90
70
  ),
91
71
  style: {
92
72
  backgroundColor: i?.backgroundColor,
93
- borderColor: i?.primaryColor ? `${i.primaryColor}30` : void 0
73
+ color: i?.textColor,
74
+ borderColor: i?.primaryColor ? `${i.primaryColor}40` : void 0
94
75
  },
95
- children: /* @__PURE__ */ d("div", { className: "flex gap-3", children: [
96
- /* @__PURE__ */ a(z, { className: "h-5 w-5 shrink-0 mt-0.5 text-amber-500 dark:text-amber-400" }),
97
- /* @__PURE__ */ d("div", { className: "flex-1", children: [
98
- /* @__PURE__ */ a("h3", { className: "text-sm font-medium leading-none text-amber-900 dark:text-amber-100", children: r }),
99
- /* @__PURE__ */ a("p", { className: "mt-2 text-sm leading-relaxed text-amber-800 dark:text-amber-200/80", children: e }),
100
- (t || o) && /* @__PURE__ */ d("div", { className: "mt-4 flex items-center gap-3", children: [
101
- t && /* @__PURE__ */ a(
76
+ children: /* @__PURE__ */ m("div", { className: "flex gap-3", children: [
77
+ /* @__PURE__ */ r("div", { className: "shrink-0 mt-0.5", children: l ? /* @__PURE__ */ r(y, { className: "h-5 w-5 text-red-500" }) : /* @__PURE__ */ r(C, { className: "h-5 w-5 text-amber-500" }) }),
78
+ /* @__PURE__ */ m("div", { className: "flex-1 min-w-0", children: [
79
+ /* @__PURE__ */ r(
80
+ "h3",
81
+ {
82
+ className: "text-sm font-medium leading-none text-amber-900 dark:text-amber-100",
83
+ style: { color: i?.textColor },
84
+ children: t
85
+ }
86
+ ),
87
+ /* @__PURE__ */ r(
88
+ "p",
89
+ {
90
+ className: "mt-2 text-sm leading-relaxed opacity-90",
91
+ style: { color: i?.textColor },
92
+ children: e
93
+ }
94
+ ),
95
+ (a || n) && /* @__PURE__ */ m("div", { className: "mt-4 flex flex-wrap items-center gap-3", children: [
96
+ a && /* @__PURE__ */ r(
102
97
  "button",
103
98
  {
104
- onClick: t.onClick,
105
- className: c(
106
- "text-xs font-medium px-3 py-1.5 rounded-md transition-colors",
107
- "focus-visible:ring-2 focus-visible:ring-amber-500/30 focus:outline-none",
108
- "bg-amber-100 border border-amber-200 text-amber-900 hover:bg-amber-200 hover:border-amber-300",
109
- "dark:bg-amber-950/50 dark:border-amber-800/50 dark:text-amber-100 dark:hover:bg-amber-900/70 dark:hover:border-amber-700/50"
99
+ onClick: a.onClick,
100
+ style: i?.primaryColor ? { backgroundColor: i.primaryColor, color: "#fff" } : {},
101
+ className: f(
102
+ "text-xs font-medium px-3 py-1.5 rounded-lg transition-all active:scale-95",
103
+ "bg-amber-100 border border-amber-200 text-amber-900 hover:bg-amber-200",
104
+ "dark:bg-amber-950/50 dark:border-amber-800/50 dark:text-amber-100"
110
105
  ),
111
- children: t.label
106
+ children: a.label
112
107
  }
113
108
  ),
114
- o && /* @__PURE__ */ a(
109
+ n && /* @__PURE__ */ r(
115
110
  "button",
116
111
  {
117
- onClick: o.onClick,
118
- className: c(
119
- "text-xs font-medium transition-colors focus-visible:underline focus:outline-none",
120
- "text-amber-700 hover:text-amber-900",
121
- "dark:text-amber-200/70 dark:hover:text-amber-100"
122
- ),
123
- children: o.label
112
+ onClick: n.onClick,
113
+ className: "text-xs font-medium opacity-70 hover:opacity-100 transition-opacity underline-offset-4 hover:underline",
114
+ style: { color: i?.textColor },
115
+ children: n.label
124
116
  }
125
117
  )
126
118
  ] })
@@ -129,64 +121,76 @@ function y({
129
121
  }
130
122
  );
131
123
  }
132
- function w({
133
- title: r,
124
+ function N({
125
+ title: t,
134
126
  description: e,
135
- statusUrl: t,
136
- isOpen: o,
127
+ statusUrl: o,
128
+ showRefresh: a = !0,
129
+ isOpen: n,
137
130
  onOpenChange: i,
138
- theme: n
131
+ theme: s,
132
+ onPrimaryAction: l,
133
+ primaryActionLabel: c = "Atualizar a página"
139
134
  }) {
140
- return /* @__PURE__ */ a(b.Root, { open: o, onOpenChange: i, children: /* @__PURE__ */ d(b.Portal, { children: [
141
- /* @__PURE__ */ a(
142
- b.Overlay,
135
+ const [h, b] = D(!1);
136
+ R(() => {
137
+ b(!0);
138
+ }, []);
139
+ const x = s === "dark" || typeof s == "object" && s?.backgroundColor === "dark", d = typeof s == "object" ? s.primaryColor : void 0, v = typeof s == "object" ? s.fontFamily : void 0;
140
+ if (!h) return null;
141
+ const k = /* @__PURE__ */ r(g.Root, { open: n, onOpenChange: i, children: /* @__PURE__ */ r(g.Portal, { children: /* @__PURE__ */ m("div", { className: `cognicatch-ui-wrapper ${x ? "dark" : ""} ${v || ""}`, children: [
142
+ /* @__PURE__ */ r(
143
+ g.Overlay,
143
144
  {
144
- className: "radix-overlay fixed inset-0 z-50 bg-zinc-900/20 dark:bg-black/80 backdrop-blur-sm"
145
+ className: "radix-overlay fixed inset-0 z-[99999] bg-zinc-900/20 dark:bg-black/80 backdrop-blur-sm"
145
146
  }
146
147
  ),
147
- /* @__PURE__ */ d(
148
- b.Content,
148
+ /* @__PURE__ */ m(
149
+ g.Content,
149
150
  {
150
- className: c(
151
- "radix-content fixed z-50 flex flex-col items-center text-center shadow-2xl transition-colors",
151
+ onInteractOutside: (p) => p.preventDefault(),
152
+ onEscapeKeyDown: (p) => p.preventDefault(),
153
+ className: f(
154
+ "radix-content fixed z-[999999] flex flex-col items-center text-center shadow-2xl transition-all",
152
155
  "bg-white border-zinc-200 dark:bg-zinc-950 dark:border-zinc-800",
153
156
  "bottom-0 left-0 right-0 border-t rounded-t-3xl p-8 pb-10",
154
- "sm:bottom-auto sm:top-[50%] sm:left-[50%] sm:-translate-x-1/2 sm:-translate-y-1/2 sm:w-full sm:max-w-md sm:rounded-2xl sm:border",
155
- n?.fontFamily
157
+ "sm:bottom-auto sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2 sm:w-full sm:max-w-md sm:rounded-2xl sm:border"
156
158
  ),
159
+ style: { boxSizing: "border-box" },
157
160
  children: [
158
- /* @__PURE__ */ a("div", { className: "mx-auto w-12 h-1.5 rounded-full bg-zinc-200 dark:bg-zinc-800 mb-6 sm:hidden" }),
159
- /* @__PURE__ */ a("div", { className: "w-16 h-16 rounded-full flex items-center justify-center mb-6 border bg-red-50 border-red-100 dark:bg-red-500/10 dark:border-red-500/20", children: /* @__PURE__ */ a(_, { className: "w-8 h-8 text-red-600 dark:text-red-500" }) }),
160
- /* @__PURE__ */ a(b.Title, { className: "text-xl font-semibold text-zinc-900 dark:text-zinc-50 mb-3 tracking-tight", children: r }),
161
- /* @__PURE__ */ a(b.Description, { className: "text-sm leading-relaxed mb-8 max-w-[280px] sm:max-w-none text-zinc-600 dark:text-zinc-400", children: e }),
162
- /* @__PURE__ */ d("div", { className: "flex flex-col w-full gap-3", children: [
163
- /* @__PURE__ */ d(
161
+ /* @__PURE__ */ r("div", { className: "mx-auto w-12 h-1.5 rounded-full bg-zinc-200 dark:bg-zinc-800 mb-6 sm:hidden" }),
162
+ /* @__PURE__ */ r("div", { className: "w-16 h-16 rounded-full flex items-center justify-center mb-6 border bg-red-50 border-red-100 dark:bg-red-500/10 dark:border-red-500/20", children: /* @__PURE__ */ r(F, { className: "w-8 h-8 text-red-600 dark:text-red-500" }) }),
163
+ /* @__PURE__ */ r(g.Title, { className: "text-xl font-semibold text-zinc-900 dark:text-zinc-50 mb-3 tracking-tight", children: t }),
164
+ /* @__PURE__ */ r(g.Description, { className: "text-sm leading-relaxed mb-8 max-w-[280px] sm:max-w-none text-zinc-600 dark:text-zinc-400", children: e }),
165
+ /* @__PURE__ */ m("div", { className: "flex flex-col w-full gap-3", children: [
166
+ a && /* @__PURE__ */ m(
164
167
  "button",
165
168
  {
166
- onClick: () => window.location.reload(),
167
- className: c(
169
+ onClick: () => l ? l() : window.location.reload(),
170
+ style: d ? { backgroundColor: d, borderColor: d } : {},
171
+ className: f(
168
172
  "flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-all shadow-sm",
169
- "bg-zinc-900 text-white hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-white hover:scale-[1.02] active:scale-95"
173
+ d ? "text-white hover:opacity-90 hover:scale-[1.02] active:scale-95" : "bg-zinc-900 text-white hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-white hover:scale-[1.02] active:scale-95"
170
174
  ),
171
175
  children: [
172
- /* @__PURE__ */ a(P, { className: "w-4 h-4" }),
173
- "Atualizar a página"
176
+ /* @__PURE__ */ r(L, { className: "w-4 h-4" }),
177
+ c
174
178
  ]
175
179
  }
176
180
  ),
177
- t && /* @__PURE__ */ d(
181
+ o && /* @__PURE__ */ m(
178
182
  "a",
179
183
  {
180
- href: t,
184
+ href: o,
181
185
  target: "_blank",
182
186
  rel: "noopener noreferrer",
183
- className: c(
187
+ className: f(
184
188
  "flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-colors border border-transparent",
185
189
  "text-zinc-500 hover:text-zinc-900 hover:bg-zinc-100 dark:text-zinc-400 dark:hover:text-zinc-200 dark:hover:bg-zinc-900 dark:hover:border-zinc-800"
186
190
  ),
187
191
  children: [
188
- "Verificar status do sistema",
189
- /* @__PURE__ */ a(S, { className: "w-4 h-4 opacity-70" })
192
+ "Check system status",
193
+ /* @__PURE__ */ r(j, { className: "w-4 h-4 opacity-70" })
190
194
  ]
191
195
  }
192
196
  )
@@ -194,217 +198,260 @@ function w({
194
198
  ]
195
199
  }
196
200
  )
197
- ] }) });
201
+ ] }) }) });
202
+ return $(k, document.body);
198
203
  }
199
- function W({
200
- customTheme: r,
204
+ function te({
205
+ customTheme: t,
201
206
  toastOptions: e,
202
- position: t = "top-right",
203
- ...o
207
+ position: o = "top-right",
208
+ ...a
204
209
  }) {
205
- return /* @__PURE__ */ a(
206
- O,
210
+ return /* @__PURE__ */ r(
211
+ J,
207
212
  {
208
- position: t,
213
+ position: o,
214
+ containerAriaLabel: "Notifications",
215
+ ...a,
209
216
  toastOptions: {
210
217
  ...e,
211
218
  classNames: {
212
219
  ...e?.classNames,
213
- toast: c(
214
- "backdrop-blur-md font-sans rounded-xl px-4 py-3 transition-colors",
215
- "!bg-white/90 !border !border-zinc-200 !text-zinc-900 !shadow-xl",
216
- "dark:!bg-zinc-950/80 dark:!border-zinc-800 dark:!text-zinc-50 dark:!shadow-2xl",
217
- r?.fontFamily,
220
+ toast: f(
221
+ "bg-white/90 border-zinc-200 text-zinc-900 shadow-xl backdrop-blur-md",
222
+ "dark:bg-zinc-950/80 dark:border-zinc-800 dark:text-zinc-50 dark:shadow-2xl",
223
+ t?.fontFamily,
218
224
  e?.classNames?.toast
219
225
  ),
220
- title: c(
221
- "!font-medium !text-sm !text-zinc-900 dark:!text-zinc-50",
222
- e?.classNames?.title
223
- ),
224
- description: c(
225
- "!mt-0.5 !text-sm !text-zinc-500 dark:!text-zinc-400 !line-clamp-2",
226
- e?.classNames?.description
227
- ),
228
- actionButton: c(
229
- "!font-medium !rounded-md !shadow-sm transition-colors !px-3 !py-1.5 !border",
230
- "!bg-zinc-900 !text-white !border-transparent hover:!bg-zinc-800",
231
- "dark:!bg-white dark:!text-black dark:!border-zinc-300 dark:hover:!bg-zinc-100",
226
+ title: f("font-medium text-sm text-zinc-900 dark:text-zinc-50", e?.classNames?.title),
227
+ description: f("mt-0.5 text-xs text-zinc-500 dark:text-zinc-400 line-clamp-2", e?.classNames?.description),
228
+ actionButton: f(
229
+ "font-medium rounded-lg transition-all px-3 py-1.5 border text-xs",
230
+ "bg-zinc-900 text-white border-transparent hover:scale-[1.02] active:scale-95",
231
+ "dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-white",
232
232
  e?.classNames?.actionButton
233
233
  )
234
234
  },
235
235
  style: {
236
- backgroundColor: r?.backgroundColor,
237
- color: r?.textColor,
238
- borderColor: r?.primaryColor ? `${r.primaryColor}40` : void 0,
236
+ borderRadius: t?.borderRadius || "0.75rem",
237
+ backgroundColor: t?.backgroundColor,
238
+ color: t?.textColor,
239
+ fontFamily: t?.fontFamily,
239
240
  ...e?.style
240
241
  }
241
242
  }
242
243
  }
243
244
  );
244
245
  }
245
- function A(r, e, t, o) {
246
- l(r, {
246
+ function E(t, e, o, a, n = "medium") {
247
+ return u(t, {
247
248
  description: e,
248
- icon: /* @__PURE__ */ a(C, { className: "w-5 h-5 text-red-500 dark:text-red-400" }),
249
- action: t ? {
250
- label: t,
251
- onClick: () => {
252
- o && o();
253
- }
249
+ icon: {
250
+ low: /* @__PURE__ */ r(U, { className: "w-5 h-5 text-blue-500" }),
251
+ medium: /* @__PURE__ */ r(C, { className: "w-5 h-5 text-amber-500" }),
252
+ high: /* @__PURE__ */ r(y, { className: "w-5 h-5 text-red-500" })
253
+ }[n],
254
+ duration: n === "high" ? 8e3 : 5e3,
255
+ action: o ? {
256
+ label: o,
257
+ onClick: () => a?.()
254
258
  } : void 0
255
259
  });
256
260
  }
257
- const Y = {
258
- success: (r, e) => l(r, {
261
+ const re = {
262
+ success: (t, e) => u(t, {
259
263
  description: e,
260
- icon: /* @__PURE__ */ a(I, { className: "w-5 h-5 text-emerald-500 dark:text-emerald-400" })
264
+ icon: /* @__PURE__ */ r(O, { className: "w-5 h-5 text-emerald-500" })
261
265
  }),
262
- error: (r, e) => l(r, {
266
+ error: (t, e) => u(t, {
263
267
  description: e,
264
- icon: /* @__PURE__ */ a(C, { className: "w-5 h-5 text-red-500 dark:text-red-400" })
268
+ icon: /* @__PURE__ */ r(y, { className: "w-5 h-5 text-red-500" })
265
269
  }),
266
- warning: (r, e) => l(r, {
270
+ warning: (t, e) => u(t, {
267
271
  description: e,
268
- icon: /* @__PURE__ */ a(z, { className: "w-5 h-5 text-amber-500 dark:text-amber-400" })
272
+ icon: /* @__PURE__ */ r(C, { className: "w-5 h-5 text-amber-500 dark:text-amber-400" })
269
273
  }),
270
- info: (r, e) => l(r, {
271
- description: e,
272
- icon: /* @__PURE__ */ a(T, { className: "w-5 h-5 text-blue-500 dark:text-blue-400" })
273
- }),
274
- message: (r, e) => l(r, { description: e }),
275
- customTheme: (r, e, t) => {
276
- l.custom((o) => /* @__PURE__ */ d(
274
+ loading: (t, e) => u.loading(t, { description: e }),
275
+ custom: (t, e, o) => {
276
+ u.custom((a) => /* @__PURE__ */ r(
277
277
  "div",
278
278
  {
279
- className: c("w-full flex gap-3 p-4 shadow-2xl transition-all", t.fontFamily),
279
+ className: f("flex gap-3 p-4 shadow-2xl border", o.fontFamily),
280
280
  style: {
281
- backgroundColor: t.backgroundColor || "#ffffff",
282
- color: t.textColor || "#000000",
283
- border: `1px solid ${t.primaryColor || "#e4e4e7"}`,
284
- borderRadius: t.borderRadius || "12px"
281
+ backgroundColor: o.backgroundColor || "var(--bg-card)",
282
+ color: o.textColor || "var(--text-card)",
283
+ borderColor: o.primaryColor || "#e4e4e7",
284
+ borderRadius: o.borderRadius || "12px"
285
285
  },
286
- children: [
287
- /* @__PURE__ */ a(
288
- "div",
289
- {
290
- className: "w-1.5 rounded-full shrink-0",
291
- style: { backgroundColor: t.primaryColor || "#3b82f6" }
292
- }
293
- ),
294
- /* @__PURE__ */ d("div", { className: "flex flex-col gap-1", children: [
295
- /* @__PURE__ */ a("span", { className: "font-medium text-sm leading-none", children: r }),
296
- /* @__PURE__ */ a("span", { className: "text-sm opacity-80 leading-relaxed mt-1", children: e })
297
- ] })
298
- ]
286
+ children: /* @__PURE__ */ m("div", { className: "flex flex-col gap-1", children: [
287
+ /* @__PURE__ */ r("span", { className: "font-semibold text-sm", children: t }),
288
+ /* @__PURE__ */ r("span", { className: "text-xs opacity-70", children: e })
289
+ ] })
299
290
  }
300
291
  ));
301
292
  }
302
- }, g = E(void 0);
303
- function q({
304
- apiKey: r,
293
+ }, w = S(void 0);
294
+ function oe({
295
+ apiKey: t,
305
296
  apiUrl: e,
306
- language: t,
307
- children: o
297
+ language: o,
298
+ children: a
308
299
  }) {
309
- const i = async (n) => {
310
- const m = n instanceof Error ? n : new Error(String(n)), s = l.loading("Analyzing error context...", {
300
+ const n = P(async (s) => {
301
+ const l = s instanceof Error ? s : new Error(String(s)), c = u.loading("Analyzing error context...", {
311
302
  description: "Applying AI recovery heuristics..."
312
303
  });
304
+ if (t === "sk_test_mock") {
305
+ setTimeout(() => {
306
+ u.info("Mock Mode Analysis", {
307
+ id: c,
308
+ description: "This is a mocked async recovery because sk_test_mock was used."
309
+ });
310
+ }, 1500);
311
+ return;
312
+ }
313
313
  try {
314
- const p = x(m.message).slice(0, 500), v = x(m.stack || "").slice(0, 1500), f = e || "https://api.cognicatch.dev/v1/analyze-error", u = typeof navigator < "u" ? navigator.language : "en-US", N = t || u, k = await fetch(f, {
314
+ const h = {
315
+ message: l.message,
316
+ componentStack: l.stack,
317
+ url: typeof window < "u" ? window.location.href : void 0
318
+ }, b = _(h), x = e || "https://api.cognicatch.dev/v1/analyze-error", d = typeof navigator < "u" ? navigator.language : "en-US", v = o || d, k = await fetch(x, {
315
319
  method: "POST",
316
320
  headers: {
317
- Authorization: `Bearer ${r}`,
321
+ Authorization: `Bearer ${t}`,
318
322
  "Content-Type": "application/json"
319
323
  },
320
- body: JSON.stringify({ error: p, stack: v, language: N })
324
+ body: JSON.stringify({
325
+ error: b.message,
326
+ stack: b.componentName ? `Component: ${b.componentName}` : b.errorCode || "Async Error",
327
+ routePath: b.routePath,
328
+ language: v
329
+ })
321
330
  });
322
331
  if (!k.ok) throw new Error("SaaS API Error");
323
- const h = await k.json();
324
- h && ((h.severity || h.level) === "low" ? l.info(h.title, { id: s, description: h.description }) : l.error(h.title, { id: s, description: h.description }));
325
- } catch (p) {
326
- console.error("AdaptiveUI API Request failed:", p), l.error("Analysis Failed", {
327
- id: s,
332
+ const p = await k.json();
333
+ p && ((p.severity || p.level) === "low" ? u.info(p.title, { id: c, description: p.description }) : u.error(p.title, { id: c, description: p.description }));
334
+ } catch (h) {
335
+ console.error("AdaptiveUI API Request failed:", h), u.error("Analysis Failed", {
336
+ id: c,
328
337
  description: "We couldn't reach the AI servers. Please try again later."
329
338
  });
330
339
  }
331
- };
332
- return /* @__PURE__ */ a(g.Provider, { value: { apiKey: r, apiUrl: e, language: t, captureAsyncError: i }, children: o });
340
+ }, [t, e, o]), i = T(() => ({
341
+ apiKey: t,
342
+ apiUrl: e,
343
+ language: o,
344
+ captureAsyncError: n
345
+ }), [t, e, o, n]);
346
+ return /* @__PURE__ */ r(w.Provider, { value: i, children: a });
333
347
  }
334
- function H() {
335
- const r = D(g);
336
- if (!r)
348
+ function ae() {
349
+ const t = M(w);
350
+ if (!t)
337
351
  throw new Error(
338
- "❌ AdaptiveUI Developer Error: You tried to use the 'useAdaptive' hook outside of an <AdaptiveProvider>. Please wrap the root of your application (e.g., App.tsx) with <AdaptiveProvider apiKey='YOUR_KEY'>"
352
+ "❌ AdaptiveUI Developer Error: You tried to use the 'useAdaptive' hook outside of an <AdaptiveProvider>. Please wrap the root of your application (e.g., App.tsx or layout.tsx) with <AdaptiveProvider apiKey='YOUR_KEY'>"
339
353
  );
340
- return r;
354
+ return t;
341
355
  }
342
- class V extends R {
343
- static contextType = g;
356
+ const W = ({ onRecover: t, theme: e }) => /* @__PURE__ */ r("div", { className: `p-6 rounded-xl border border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-950 shadow-sm ${e === "dark" ? "dark" : ""}`, children: /* @__PURE__ */ m("div", { className: "flex flex-col items-center text-center gap-4", children: [
357
+ /* @__PURE__ */ r("div", { className: "p-3 rounded-full bg-red-50 dark:bg-red-900/20", children: /* @__PURE__ */ r("svg", { className: "w-6 h-6 text-red-600 dark:text-red-400", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ r("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }) }),
358
+ /* @__PURE__ */ m("div", { children: [
359
+ /* @__PURE__ */ r("h3", { className: "text-sm font-semibold text-zinc-900 dark:text-zinc-100", children: "Component Unavailable" }),
360
+ /* @__PURE__ */ r("p", { className: "text-xs text-zinc-500 dark:text-zinc-400 mt-1", children: "An unexpected error occurred in the interface." })
361
+ ] }),
362
+ /* @__PURE__ */ r(
363
+ "button",
364
+ {
365
+ onClick: t,
366
+ style: {
367
+ // Se o usuário definiu uma cor primária no objeto ThemeOptions, usamos aqui!
368
+ backgroundColor: e?.primaryColor || void 0
369
+ },
370
+ className: "px-4 py-2 text-xs font-medium bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 rounded-lg hover:opacity-90 transition-opacity",
371
+ children: "Try Reloading"
372
+ }
373
+ )
374
+ ] }) });
375
+ class ne extends I {
376
+ static contextType = w;
377
+ _isMounted = !1;
344
378
  constructor(e) {
345
379
  super(e), this.state = {
346
380
  hasError: !1,
347
381
  error: null,
348
382
  aiData: null,
349
- isProcessingAuto: !1
383
+ isProcessingAuto: !1,
384
+ hasCrashedFallback: !1
350
385
  };
351
386
  }
387
+ componentDidMount() {
388
+ this._isMounted = !0;
389
+ }
390
+ componentWillUnmount() {
391
+ this._isMounted = !1;
392
+ }
352
393
  static getDerivedStateFromError(e) {
353
394
  return { hasError: !0, error: e };
354
395
  }
355
- componentDidCatch(e, t) {
356
- const { mode: o } = this.props;
357
- o === "manual" && this.props.severity === "low" && A(
396
+ componentDidCatch(e, o) {
397
+ if (this.state.hasCrashedFallback) return;
398
+ const { mode: a } = this.props;
399
+ a === "manual" && this.props.severity === "low" && E(
358
400
  this.props.title,
359
401
  this.props.description,
360
402
  this.props.actionLabel ?? void 0,
361
403
  this.handleRecover
362
- ), o === "auto" && (this.setState({ isProcessingAuto: !0 }), this.processAutoMode(e));
404
+ ), a === "auto" && this._isMounted && (this.setState({ isProcessingAuto: !0 }), this.processAutoMode(e, o));
363
405
  }
364
- processAutoMode = async (e) => {
365
- const t = this.props, o = t.apiKey || this.context?.apiKey, i = t.apiUrl || this.context?.apiUrl, n = typeof navigator < "u" ? navigator.language : "en-US", m = t.language || this.context?.language || n;
366
- if (!o) {
367
- console.error("AdaptiveUI: Missing API Key for auto mode. Provide it via props or <AdaptiveProvider>."), this.setState({ isProcessingAuto: !1 });
406
+ processAutoMode = async (e, o) => {
407
+ const a = this.props, n = a.apiKey || this.context?.apiKey, i = a.apiUrl || this.context?.apiUrl, s = typeof navigator < "u" ? navigator.language : "en-US", l = a.language || this.context?.language || s;
408
+ if (!n) {
409
+ console.error("AdaptiveUI: Missing API Key for auto mode. Provide it via props or <AdaptiveProvider>."), this._isMounted && this.setState({ isProcessingAuto: !1 });
368
410
  return;
369
411
  }
370
- if (o === "sk_test_mock") {
412
+ if (n === "sk_test_mock") {
371
413
  setTimeout(() => {
372
- this.setState({
414
+ this._isMounted && this.setState({
373
415
  isProcessingAuto: !1,
374
416
  aiData: {
375
417
  severity: "medium",
376
- title: "Incomplete data",
377
- description: "The dashboard encountered an error while attempting to read user information. Our team has already been notified.",
378
- actionLabel: "Reload Widget"
418
+ title: "Mock Mode Error",
419
+ description: "This is a mocked response because sk_test_mock was used.",
420
+ actionLabel: "Reload Component"
379
421
  }
380
422
  });
381
423
  }, 1500);
382
424
  return;
383
425
  }
384
426
  try {
385
- const s = x(e.message).slice(0, 500), p = x(e.stack || "").slice(0, 1500), f = await fetch(i || "https://api.cognicatch.dev/v1/analyze-error", {
427
+ const c = {
428
+ message: e.message,
429
+ componentStack: o.componentStack || void 0,
430
+ url: typeof window < "u" ? window.location.href : void 0
431
+ }, h = _(c), x = await fetch(i || "https://api.cognicatch.dev/v1/analyze-error", {
386
432
  method: "POST",
387
433
  headers: {
388
- Authorization: `Bearer ${o}`,
434
+ Authorization: `Bearer ${n}`,
389
435
  "Content-Type": "application/json"
390
436
  },
391
437
  body: JSON.stringify({
392
- error: s,
393
- stack: p,
394
- language: m
438
+ error: h.message,
439
+ stack: h.componentName ? `Component: ${h.componentName}` : "No stack",
440
+ routePath: h.routePath,
441
+ language: l
395
442
  })
396
443
  });
397
- if (!f.ok)
398
- throw new Error(`SaaS API returned ${f.status}`);
399
- const u = await f.json();
400
- u && (u.severity === "low" ? (A(
401
- u.title,
402
- u.description,
403
- u.actionLabel ?? void 0,
444
+ if (!x.ok)
445
+ throw new Error(`SaaS API returned ${x.status}`);
446
+ const d = await x.json();
447
+ d && this._isMounted && (d.severity === "low" ? (E(
448
+ d.title,
449
+ d.description,
450
+ d.actionLabel ?? void 0,
404
451
  this.handleRecover
405
- ), this.setState({ isProcessingAuto: !1, hasError: !1, error: null })) : this.setState({ isProcessingAuto: !1, aiData: u }));
406
- } catch (s) {
407
- console.error("AdaptiveUI AI Request failed:", s), this.setState({
452
+ ), this.setState({ isProcessingAuto: !1, aiData: d })) : this.setState({ isProcessingAuto: !1, aiData: d }));
453
+ } catch (c) {
454
+ console.error("AdaptiveUI AI Request failed:", c), this._isMounted && this.setState({
408
455
  isProcessingAuto: !1,
409
456
  aiData: {
410
457
  severity: "medium",
@@ -416,43 +463,61 @@ class V extends R {
416
463
  }
417
464
  };
418
465
  handleRecover = () => {
419
- this.setState({ hasError: !1, error: null, aiData: null }), this.props.onRecover && this.props.onRecover();
466
+ this._isMounted && this.setState({ hasError: !1, error: null, aiData: null, hasCrashedFallback: !1 }), this.props.onRecover && this.props.onRecover();
420
467
  };
421
468
  render() {
469
+ if (this.state.hasCrashedFallback)
470
+ return /* @__PURE__ */ r(
471
+ W,
472
+ {
473
+ onRecover: this.handleRecover,
474
+ theme: this.props.theme
475
+ }
476
+ );
422
477
  if (!this.state.hasError)
423
478
  return this.props.children;
424
- const { mode: e, theme: t, className: o } = this.props;
479
+ const { mode: e, theme: o, className: a } = this.props;
425
480
  if (e === "manual") {
426
- const { severity: i, title: n, description: m, actionLabel: s } = this.props;
427
- if (i === "high") return /* @__PURE__ */ a(w, { isOpen: !0, onOpenChange: (p) => {
428
- p || this.handleRecover();
429
- }, title: n, description: m, theme: t });
430
- if (i === "medium") return /* @__PURE__ */ a(y, { title: n, description: m, primaryAction: s ? { label: s, onClick: this.handleRecover } : void 0, theme: t, className: o });
431
- if (i === "low") return null;
481
+ const { severity: n, title: i, description: s, actionLabel: l } = this.props;
482
+ try {
483
+ if (n === "high") return /* @__PURE__ */ r(N, { isOpen: !0, onOpenChange: (c) => {
484
+ c || this.handleRecover();
485
+ }, title: i, description: s, theme: o });
486
+ if (n === "medium") return /* @__PURE__ */ r(A, { title: i, description: s, primaryAction: l ? { label: l, onClick: this.handleRecover } : void 0, theme: o, className: a });
487
+ if (n === "low") return null;
488
+ } catch {
489
+ return this.setState({ hasCrashedFallback: !0 }), null;
490
+ }
432
491
  }
433
492
  if (e === "auto") {
434
493
  if (this.state.isProcessingAuto)
435
- return /* @__PURE__ */ d("div", { className: "w-full h-full min-h-[100px] rounded-xl border border-zinc-200/50 dark:border-zinc-800/50 bg-zinc-50/50 dark:bg-zinc-900/20 flex flex-col items-center justify-center p-6 animate-pulse", children: [
436
- /* @__PURE__ */ a("div", { className: "w-5 h-5 border-2 border-indigo-500/30 border-t-indigo-500 rounded-full animate-spin mb-3" }),
437
- /* @__PURE__ */ a("p", { className: "text-xs font-medium text-zinc-500 dark:text-zinc-400", children: "Analyzing error context..." })
494
+ return /* @__PURE__ */ m("div", { className: "w-full h-full min-h-[100px] rounded-xl border border-zinc-200/50 dark:border-zinc-800/50 bg-zinc-50/50 dark:bg-zinc-900/20 flex flex-col items-center justify-center p-6 animate-pulse", children: [
495
+ /* @__PURE__ */ r("div", { className: "w-5 h-5 border-2 border-zinc-400/30 dark:border-zinc-500/30 border-t-zinc-900 dark:border-t-zinc-100 rounded-full animate-spin mb-3" }),
496
+ /* @__PURE__ */ r("p", { className: "text-xs font-medium text-zinc-500 dark:text-zinc-400", children: "Analyzing error context..." })
438
497
  ] });
439
498
  if (this.state.aiData) {
440
- const { severity: i, title: n, description: m, actionLabel: s } = this.state.aiData;
441
- if (i === "high")
442
- return /* @__PURE__ */ a(w, { isOpen: !0, onOpenChange: (p) => {
443
- p || this.handleRecover();
444
- }, title: n, description: m, theme: t });
445
- if (i === "medium")
446
- return /* @__PURE__ */ a(y, { title: n, description: m, primaryAction: s ? { label: s, onClick: this.handleRecover } : void 0, theme: t, className: o });
499
+ const { severity: n, title: i, description: s, actionLabel: l } = this.state.aiData;
500
+ try {
501
+ if (n === "high")
502
+ return /* @__PURE__ */ r(N, { isOpen: !0, onOpenChange: (c) => {
503
+ c || this.handleRecover();
504
+ }, title: i, description: s, theme: o });
505
+ if (n === "medium")
506
+ return /* @__PURE__ */ r(A, { title: i, description: s, primaryAction: l ? { label: l, onClick: this.handleRecover } : void 0, theme: o, className: a });
507
+ if (n === "low")
508
+ return null;
509
+ } catch {
510
+ return this.setState({ hasCrashedFallback: !0 }), null;
511
+ }
447
512
  }
448
513
  }
449
514
  return null;
450
515
  }
451
516
  }
452
517
  export {
453
- V as AdaptiveErrorBoundary,
454
- q as AdaptiveProvider,
455
- W as AdaptiveToastProvider,
456
- Y as adaptiveToast,
457
- H as useAdaptive
518
+ ne as AdaptiveErrorBoundary,
519
+ oe as AdaptiveProvider,
520
+ te as AdaptiveToastProvider,
521
+ re as adaptiveToast,
522
+ ae as useAdaptive
458
523
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cognicatch/react",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "GenUI Error Boundaries and AI Recovery UIs for React",
5
5
  "private": false,
6
6
  "type": "module",
@@ -29,15 +29,6 @@
29
29
  "imports": {
30
30
  "#/*": "./src/*"
31
31
  },
32
- "scripts": {
33
- "dev": "vite dev --port 3000",
34
- "build": "vite build -c vite.config.build.ts",
35
- "preview": "vite preview",
36
- "test": "vitest run",
37
- "format": "biome format",
38
- "lint": "biome lint",
39
- "check": "biome check"
40
- },
41
32
  "peerDependencies": {
42
33
  "react": "^18.0.0 || ^19.0.0",
43
34
  "react-dom": "^18.0.0 || ^19.0.0"
@@ -79,5 +70,14 @@
79
70
  "vite-tsconfig-paths": "^5.1.4",
80
71
  "vitest": "^3.0.5"
81
72
  },
82
- "packageManager": "pnpm@8.6.12+sha1.a2f983fbf8f2531dc85db2a5d7f398063d51a6f3"
83
- }
73
+ "packageManager": "pnpm@8.6.12+sha1.a2f983fbf8f2531dc85db2a5d7f398063d51a6f3",
74
+ "scripts": {
75
+ "dev": "vite dev --port 3000",
76
+ "build": "vite build -c vite.config.build.ts",
77
+ "preview": "vite preview",
78
+ "test": "vitest run",
79
+ "format": "biome format",
80
+ "lint": "biome lint",
81
+ "check": "biome check"
82
+ }
83
+ }