@cognicatch/react 1.0.0 → 1.1.1

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}}}@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{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.invisible{visibility:hidden}.absolute{position:absolute}.fixed{position:fixed}.static{position:static}.inset-0{inset: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}.items-end{align-items:flex-end}.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:48rem){.md\:hidden{display:none}.md\:max-w-md{max-width:var(--container-md)}.md\:max-w-none{max-width:none}.md\:items-center{align-items:center}.md\:rounded-2xl{border-radius:var(--radius-2xl)}.md\:border{border-style:var(--tw-border-style);border-width:1px}.md\:border-zinc-200{border-color:var(--color-zinc-200)}.md\:p-4{padding:calc(var(--spacing)*4)}}.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)}}@media(min-width:48rem){.md\:dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)}}}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}@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"),h=require("lucide-react"),E=require("clsx"),_=require("tailwind-merge"),R=require("@radix-ui/react-dialog"),m=require("sonner");function D(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 k=D(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:i,replacement:s})=>o.replace(i,s),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:i,theme:s,className:n}){const d=a==="high";return e.jsx("div",{role:"alert","aria-live":"polite",className:x("rounded-xl border p-4 transition-all shadow-sm",!s?.backgroundColor&&"bg-amber-50 border-amber-200/60 dark:bg-amber-950/20 dark:border-amber-900/40",s?.fontFamily,n),style:{backgroundColor:s?.backgroundColor,color:s?.textColor,borderColor:s?.primaryColor?`${s.primaryColor}40`:void 0},children:e.jsxs("div",{className:"flex gap-3",children:[e.jsx("div",{className:"shrink-0 mt-0.5",children:d?e.jsx(h.AlertCircle,{className:"h-5 w-5 text-red-500"}):e.jsx(h.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:s?.textColor},children:t}),e.jsx("p",{className:"mt-2 text-sm leading-relaxed opacity-90",style:{color:s?.textColor},children:r}),(o||i)&&e.jsxs("div",{className:"mt-4 flex flex-wrap items-center gap-3",children:[o&&e.jsx("button",{onClick:o.onClick,style:s?.primaryColor?{backgroundColor:s.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}),i&&e.jsx("button",{onClick:i.onClick,className:"text-xs font-medium opacity-70 hover:opacity-100 transition-opacity underline-offset-4 hover:underline",style:{color:s?.textColor},children:i.label})]})]})]})})}function j({title:t,description:r,statusUrl:a,showRefresh:o=!0,isOpen:i,onOpenChange:s,theme:n,onPrimaryAction:d,primaryActionLabel:c="Refresh the page"}){const[l,u]=g.useState(!1);g.useEffect(()=>{u(!0)},[]);const f=n==="dark"||typeof n=="object"&&n?.backgroundColor==="dark",p=typeof n=="object"?n.primaryColor:void 0,y=typeof n=="object"?n.fontFamily:void 0;return l?e.jsx(k.Root,{open:i,onOpenChange:s,children:e.jsx(k.Portal,{children:e.jsxs("div",{className:`cognicatch-ui-wrapper ${f?"dark":""} ${y||""}`,children:[e.jsx(k.Overlay,{className:"radix-overlay fixed inset-0 z-[99999] bg-zinc-900/20 dark:bg-black/80 backdrop-blur-sm"}),e.jsx("div",{className:"fixed inset-0 z-[999999] flex items-end md:items-center justify-center pointer-events-none md:p-4",children:e.jsxs(k.Content,{onInteractOutside:v=>v.preventDefault(),onEscapeKeyDown:v=>v.preventDefault(),className:x("pointer-events-auto w-full flex flex-col items-center text-center shadow-2xl transition-all","bg-white dark:bg-zinc-950","rounded-t-3xl border-t border-zinc-200 dark:border-zinc-800 p-8 pb-10","md:max-w-md md:rounded-2xl md:border md:border-zinc-200 md:dark:border-zinc-800"),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 md: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(h.AlertOctagon,{className:"w-8 h-8 text-red-600 dark:text-red-500"})}),e.jsx(k.Title,{className:"text-xl font-semibold text-zinc-900 dark:text-zinc-50 mb-3 tracking-tight",children:t}),e.jsx(k.Description,{className:"text-sm leading-relaxed mb-8 max-w-[280px] md: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:()=>d?d():window.location.reload(),style:p?{backgroundColor:p,borderColor:p}:{},className:x("flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-all shadow-sm",p?"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(h.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(h.ExternalLink,{className:"w-4 h-4 opacity-70"})]})]})]})})]})})}):null}function P({customTheme:t,toastOptions:r,position:a="top-right",...o}){return e.jsx(m.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 A(t,r,a,o,i="medium"){const s={low:e.jsx(h.Info,{className:"w-5 h-5 text-blue-500"}),medium:e.jsx(h.AlertTriangle,{className:"w-5 h-5 text-amber-500"}),high:e.jsx(h.AlertCircle,{className:"w-5 h-5 text-red-500"})};return m.toast(t,{description:r,icon:s[i],duration:i==="high"?8e3:5e3,action:a?{label:a,onClick:()=>o?.()}:void 0})}const T={success:(t,r)=>m.toast(t,{description:r,icon:e.jsx(h.CheckCircle2,{className:"w-5 h-5 text-emerald-500"})}),error:(t,r)=>m.toast(t,{description:r,icon:e.jsx(h.AlertCircle,{className:"w-5 h-5 text-red-500"})}),warning:(t,r)=>m.toast(t,{description:r,icon:e.jsx(h.AlertTriangle,{className:"w-5 h-5 text-amber-500 dark:text-amber-400"})}),loading:(t,r)=>m.toast.loading(t,{description:r}),custom:(t,r,a)=>{m.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 M({apiKey:t,apiUrl:r,language:a,children:o}){const i=g.useCallback(async n=>{const d=n instanceof Error?n:new Error(String(n)),c=m.toast.loading("Analyzing error context...",{description:"Applying AI recovery heuristics..."});if(t==="sk_test_mock"){setTimeout(()=>{m.toast.info("Mock Mode Analysis",{id:c,description:"This is a mocked async recovery because sk_test_mock was used."})},1500);return}try{const l={message:d.message,componentStack:d.stack,url:typeof window<"u"?window.location.href:void 0},u=N(l),f=r||"https://api.cognicatch.dev/v1/analyze-error",p=typeof navigator<"u"?navigator.language:"en-US",y=a||p,v=await fetch(f,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({error:u.message,stack:u.componentName?`Component: ${u.componentName}`:u.errorCode||"Async Error",routePath:u.routePath,language:y})});if(!v.ok)throw new Error("SaaS API Error");const b=await v.json();b&&((b.severity||b.level)==="low"?m.toast.info(b.title,{id:c,description:b.description}):m.toast.error(b.title,{id:c,description:b.description}))}catch(l){console.error("AdaptiveUI API Request failed:",l),m.toast.error("Analysis Failed",{id:c,description:"We couldn't reach the AI servers. Please try again later."})}},[t,r,a]),s=g.useMemo(()=>({apiKey:t,apiUrl:r,language:a,captureAsyncError:i}),[t,r,a,i]);return e.jsx(C.Provider,{value:s,children:o})}function I(){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 F=({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 L 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"&&A(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,i=o.apiKey||this.context?.apiKey,s=o.apiUrl||this.context?.apiUrl,n=typeof navigator<"u"?navigator.language:"en-US",d=o.language||this.context?.language||n;if(!i){console.error("AdaptiveUI: Missing API Key for auto mode. Provide it via props or <AdaptiveProvider>."),this._isMounted&&this.setState({isProcessingAuto:!1});return}if(i==="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},l=N(c),f=await fetch(s||"https://api.cognicatch.dev/v1/analyze-error",{method:"POST",headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json"},body:JSON.stringify({error:l.message,stack:l.componentName?`Component: ${l.componentName}`:"No stack",routePath:l.routePath,language:d})});if(!f.ok)throw new Error(`SaaS API returned ${f.status}`);const p=await f.json();p&&this._isMounted&&(p.severity==="low"?(A(p.title,p.description,p.actionLabel??void 0,this.handleRecover),this.setState({isProcessingAuto:!1,aiData:p})):this.setState({isProcessingAuto:!1,aiData:p}))}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(F,{onRecover:this.handleRecover,theme:this.props.theme});if(!this.state.hasError)return this.props.children;const{mode:r,theme:a,className:o,showRefresh:i,statusUrl:s}=this.props;if(r==="manual"){const{severity:n,title:d,description:c,actionLabel:l}=this.props;try{if(n==="high")return e.jsx(j,{isOpen:!0,onOpenChange:u=>{u||this.handleRecover()},title:d,description:c,theme:a,showRefresh:i,statusUrl:s});if(n==="medium")return e.jsx(z,{title:d,description:c,primaryAction:l?{label:l,onClick:this.handleRecover}:void 0,theme:a,className:o});if(n==="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:n,title:d,description:c,actionLabel:l}=this.state.aiData;try{if(n==="high")return e.jsx(j,{isOpen:!0,onOpenChange:u=>{u||this.handleRecover()},title:d,description:c,theme:a,showRefresh:i,statusUrl:s});if(n==="medium")return e.jsx(z,{title:d,description:c,primaryAction:l?{label:l,onClick:this.handleRecover}:void 0,theme:a,className:o});if(n==="low")return null}catch{return this.setState({hasCrashedFallback:!0}),null}}}return null}}exports.AdaptiveErrorBoundary=L;exports.AdaptiveProvider=M;exports.AdaptiveToastProvider=P;exports.adaptiveToast=T;exports.useAdaptive=I;
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;
@@ -87,6 +89,8 @@ export declare interface ManualModeProps extends BaseAdaptiveProps {
87
89
 
88
90
  declare type Props = AdaptiveErrorProps & {
89
91
  children: ReactNode;
92
+ showRefresh?: boolean;
93
+ statusUrl?: string;
90
94
  };
91
95
 
92
96
  declare type SeverityLevel = 'low' | 'medium' | 'high';
@@ -96,6 +100,7 @@ declare interface State {
96
100
  error: Error | null;
97
101
  aiData: GenUIResponse | null;
98
102
  isProcessingAuto: boolean;
103
+ hasCrashedFallback: boolean;
99
104
  }
100
105
 
101
106
  export declare interface ThemeOptions {
package/dist/index.js CHANGED
@@ -1,126 +1,117 @@
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 u } from "react/jsx-runtime";
2
+ import { useState as R, useEffect as D, 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 U, Info as O } from "lucide-react";
4
+ import { clsx as B } from "clsx";
5
+ import { twMerge as Z } from "tailwind-merge";
6
+ import * as k from "@radix-ui/react-dialog";
7
+ import { Toaster as $, toast as h } from "sonner";
8
+ const J = [
9
+ { name: "email", pattern: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, replacement: "[EMAIL_REDACTED]" },
10
+ { name: "bearer_token", pattern: /Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi, replacement: "Bearer [TOKEN_REDACTED]" },
11
+ { name: "jwt", pattern: /eyJ[A-Za-z0-9\-_]+\.eyJ[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+/g, replacement: "[JWT_REDACTED]" },
12
+ { 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]" },
13
+ { name: "phone", pattern: /(?:\+?\d{1,3}[-.\s]?)?\(?\d{2,4}\)?[-.\s]?\d{3,5}[-.\s]?\d{4}\b/g, replacement: "[PHONE_REDACTED]" },
14
+ { 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]" },
15
+ { 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]" },
16
+ { name: "ssn", pattern: /\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g, replacement: "[SSN_REDACTED]" },
17
+ { name: "credit_card", pattern: /\b(?:\d[ -]?){12,18}\d\b/g, replacement: "[CC_REDACTED]" }
63
18
  ];
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;
19
+ function z(t, e = 1e3) {
20
+ if (!t) return "";
21
+ let o = String(t);
22
+ return o.length > e && (o = o.slice(0, e) + "... [TRUNCATED]"), J.reduce((a, { pattern: s, replacement: n }) => a.replace(s, n), o);
69
23
  }
70
- function c(...r) {
71
- return L(j(r));
24
+ function _(t) {
25
+ let e;
26
+ if (t.url)
27
+ try {
28
+ e = new URL(t.url, "http://dummy.com").pathname;
29
+ } catch {
30
+ e = void 0;
31
+ }
32
+ let o = t.componentName;
33
+ if (!o && t.componentStack) {
34
+ const a = t.componentStack.split(`
35
+ `)[1] ?? "";
36
+ o = /at (\w+)/.exec(a)?.[1];
37
+ }
38
+ return {
39
+ message: z(t.message, 500),
40
+ httpStatus: t.httpStatus,
41
+ errorCode: t.errorCode ? z(t.errorCode, 100) : void 0,
42
+ routePath: e,
43
+ componentName: o
44
+ };
45
+ }
46
+ function f(...t) {
47
+ return Z(B(t));
72
48
  }
73
- function y({
74
- title: r,
49
+ function A({
50
+ title: t,
75
51
  description: e,
76
- primaryAction: t,
77
- secondaryAction: o,
78
- theme: i,
79
- className: n
52
+ severity: o = "medium",
53
+ primaryAction: a,
54
+ secondaryAction: s,
55
+ theme: n,
56
+ className: i
80
57
  }) {
81
- return /* @__PURE__ */ a(
58
+ const d = o === "high";
59
+ return /* @__PURE__ */ r(
82
60
  "div",
83
61
  {
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)]",
88
- i?.fontFamily,
89
- n
62
+ role: "alert",
63
+ "aria-live": "polite",
64
+ className: f(
65
+ "rounded-xl border p-4 transition-all shadow-sm",
66
+ !n?.backgroundColor && "bg-amber-50 border-amber-200/60 dark:bg-amber-950/20 dark:border-amber-900/40",
67
+ n?.fontFamily,
68
+ i
90
69
  ),
91
70
  style: {
92
- backgroundColor: i?.backgroundColor,
93
- borderColor: i?.primaryColor ? `${i.primaryColor}30` : void 0
71
+ backgroundColor: n?.backgroundColor,
72
+ color: n?.textColor,
73
+ borderColor: n?.primaryColor ? `${n.primaryColor}40` : void 0
94
74
  },
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(
75
+ children: /* @__PURE__ */ u("div", { className: "flex gap-3", children: [
76
+ /* @__PURE__ */ r("div", { className: "shrink-0 mt-0.5", children: d ? /* @__PURE__ */ r(y, { className: "h-5 w-5 text-red-500" }) : /* @__PURE__ */ r(C, { className: "h-5 w-5 text-amber-500" }) }),
77
+ /* @__PURE__ */ u("div", { className: "flex-1 min-w-0", children: [
78
+ /* @__PURE__ */ r(
79
+ "h3",
80
+ {
81
+ className: "text-sm font-medium leading-none text-amber-900 dark:text-amber-100",
82
+ style: { color: n?.textColor },
83
+ children: t
84
+ }
85
+ ),
86
+ /* @__PURE__ */ r(
87
+ "p",
88
+ {
89
+ className: "mt-2 text-sm leading-relaxed opacity-90",
90
+ style: { color: n?.textColor },
91
+ children: e
92
+ }
93
+ ),
94
+ (a || s) && /* @__PURE__ */ u("div", { className: "mt-4 flex flex-wrap items-center gap-3", children: [
95
+ a && /* @__PURE__ */ r(
102
96
  "button",
103
97
  {
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"
98
+ onClick: a.onClick,
99
+ style: n?.primaryColor ? { backgroundColor: n.primaryColor, color: "#fff" } : {},
100
+ className: f(
101
+ "text-xs font-medium px-3 py-1.5 rounded-lg transition-all active:scale-95",
102
+ "bg-amber-100 border border-amber-200 text-amber-900 hover:bg-amber-200",
103
+ "dark:bg-amber-950/50 dark:border-amber-800/50 dark:text-amber-100"
110
104
  ),
111
- children: t.label
105
+ children: a.label
112
106
  }
113
107
  ),
114
- o && /* @__PURE__ */ a(
108
+ s && /* @__PURE__ */ r(
115
109
  "button",
116
110
  {
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
111
+ onClick: s.onClick,
112
+ className: "text-xs font-medium opacity-70 hover:opacity-100 transition-opacity underline-offset-4 hover:underline",
113
+ style: { color: n?.textColor },
114
+ children: s.label
124
115
  }
125
116
  )
126
117
  ] })
@@ -129,282 +120,334 @@ function y({
129
120
  }
130
121
  );
131
122
  }
132
- function w({
133
- title: r,
123
+ function N({
124
+ title: t,
134
125
  description: e,
135
- statusUrl: t,
136
- isOpen: o,
137
- onOpenChange: i,
138
- theme: n
126
+ statusUrl: o,
127
+ showRefresh: a = !0,
128
+ isOpen: s,
129
+ onOpenChange: n,
130
+ theme: i,
131
+ onPrimaryAction: d,
132
+ primaryActionLabel: c = "Refresh the page"
139
133
  }) {
140
- return /* @__PURE__ */ a(b.Root, { open: o, onOpenChange: i, children: /* @__PURE__ */ d(b.Portal, { children: [
141
- /* @__PURE__ */ a(
142
- b.Overlay,
134
+ const [l, m] = R(!1);
135
+ D(() => {
136
+ m(!0);
137
+ }, []);
138
+ const b = i === "dark" || typeof i == "object" && i?.backgroundColor === "dark", p = typeof i == "object" ? i.primaryColor : void 0, v = typeof i == "object" ? i.fontFamily : void 0;
139
+ return l ? /* @__PURE__ */ r(k.Root, { open: s, onOpenChange: n, children: /* @__PURE__ */ r(k.Portal, { children: /* @__PURE__ */ u("div", { className: `cognicatch-ui-wrapper ${b ? "dark" : ""} ${v || ""}`, children: [
140
+ /* @__PURE__ */ r(
141
+ k.Overlay,
143
142
  {
144
- className: "radix-overlay fixed inset-0 z-50 bg-zinc-900/20 dark:bg-black/80 backdrop-blur-sm"
143
+ className: "radix-overlay fixed inset-0 z-[99999] bg-zinc-900/20 dark:bg-black/80 backdrop-blur-sm"
145
144
  }
146
145
  ),
147
- /* @__PURE__ */ d(
148
- b.Content,
146
+ /* @__PURE__ */ r("div", { className: "fixed inset-0 z-[999999] flex items-end md:items-center justify-center pointer-events-none md:p-4", children: /* @__PURE__ */ u(
147
+ k.Content,
149
148
  {
150
- className: c(
151
- "radix-content fixed z-50 flex flex-col items-center text-center shadow-2xl transition-colors",
152
- "bg-white border-zinc-200 dark:bg-zinc-950 dark:border-zinc-800",
153
- "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
149
+ onInteractOutside: (g) => g.preventDefault(),
150
+ onEscapeKeyDown: (g) => g.preventDefault(),
151
+ className: f(
152
+ "pointer-events-auto w-full flex flex-col items-center text-center shadow-2xl transition-all",
153
+ "bg-white dark:bg-zinc-950",
154
+ "rounded-t-3xl border-t border-zinc-200 dark:border-zinc-800 p-8 pb-10",
155
+ "md:max-w-md md:rounded-2xl md:border md:border-zinc-200 md:dark:border-zinc-800"
156
156
  ),
157
+ style: { boxSizing: "border-box" },
157
158
  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(
159
+ /* @__PURE__ */ r("div", { className: "mx-auto w-12 h-1.5 rounded-full bg-zinc-200 dark:bg-zinc-800 mb-6 md:hidden" }),
160
+ /* @__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" }) }),
161
+ /* @__PURE__ */ r(k.Title, { className: "text-xl font-semibold text-zinc-900 dark:text-zinc-50 mb-3 tracking-tight", children: t }),
162
+ /* @__PURE__ */ r(k.Description, { className: "text-sm leading-relaxed mb-8 max-w-[280px] md:max-w-none text-zinc-600 dark:text-zinc-400", children: e }),
163
+ /* @__PURE__ */ u("div", { className: "flex flex-col w-full gap-3", children: [
164
+ a && /* @__PURE__ */ u(
164
165
  "button",
165
166
  {
166
- onClick: () => window.location.reload(),
167
- className: c(
167
+ onClick: () => d ? d() : window.location.reload(),
168
+ style: p ? { backgroundColor: p, borderColor: p } : {},
169
+ className: f(
168
170
  "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"
171
+ p ? "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
172
  ),
171
173
  children: [
172
- /* @__PURE__ */ a(P, { className: "w-4 h-4" }),
173
- "Atualizar a página"
174
+ /* @__PURE__ */ r(L, { className: "w-4 h-4" }),
175
+ c
174
176
  ]
175
177
  }
176
178
  ),
177
- t && /* @__PURE__ */ d(
179
+ o && /* @__PURE__ */ u(
178
180
  "a",
179
181
  {
180
- href: t,
182
+ href: o,
181
183
  target: "_blank",
182
184
  rel: "noopener noreferrer",
183
- className: c(
185
+ className: f(
184
186
  "flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-colors border border-transparent",
185
187
  "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
188
  ),
187
189
  children: [
188
- "Verificar status do sistema",
189
- /* @__PURE__ */ a(S, { className: "w-4 h-4 opacity-70" })
190
+ "Check system status",
191
+ /* @__PURE__ */ r(j, { className: "w-4 h-4 opacity-70" })
190
192
  ]
191
193
  }
192
194
  )
193
195
  ] })
194
196
  ]
195
197
  }
196
- )
197
- ] }) });
198
+ ) })
199
+ ] }) }) }) : null;
198
200
  }
199
- function W({
200
- customTheme: r,
201
+ function X({
202
+ customTheme: t,
201
203
  toastOptions: e,
202
- position: t = "top-right",
203
- ...o
204
+ position: o = "top-right",
205
+ ...a
204
206
  }) {
205
- return /* @__PURE__ */ a(
206
- O,
207
+ return /* @__PURE__ */ r(
208
+ $,
207
209
  {
208
- position: t,
210
+ position: o,
211
+ containerAriaLabel: "Notifications",
212
+ ...a,
209
213
  toastOptions: {
210
214
  ...e,
211
215
  classNames: {
212
216
  ...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,
217
+ toast: f(
218
+ "bg-white/90 border-zinc-200 text-zinc-900 shadow-xl backdrop-blur-md",
219
+ "dark:bg-zinc-950/80 dark:border-zinc-800 dark:text-zinc-50 dark:shadow-2xl",
220
+ t?.fontFamily,
218
221
  e?.classNames?.toast
219
222
  ),
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",
223
+ title: f("font-medium text-sm text-zinc-900 dark:text-zinc-50", e?.classNames?.title),
224
+ description: f("mt-0.5 text-xs text-zinc-500 dark:text-zinc-400 line-clamp-2", e?.classNames?.description),
225
+ actionButton: f(
226
+ "font-medium rounded-lg transition-all px-3 py-1.5 border text-xs",
227
+ "bg-zinc-900 text-white border-transparent hover:scale-[1.02] active:scale-95",
228
+ "dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-white",
232
229
  e?.classNames?.actionButton
233
230
  )
234
231
  },
235
232
  style: {
236
- backgroundColor: r?.backgroundColor,
237
- color: r?.textColor,
238
- borderColor: r?.primaryColor ? `${r.primaryColor}40` : void 0,
233
+ borderRadius: t?.borderRadius || "0.75rem",
234
+ backgroundColor: t?.backgroundColor,
235
+ color: t?.textColor,
236
+ fontFamily: t?.fontFamily,
239
237
  ...e?.style
240
238
  }
241
239
  }
242
240
  }
243
241
  );
244
242
  }
245
- function A(r, e, t, o) {
246
- l(r, {
243
+ function E(t, e, o, a, s = "medium") {
244
+ return h(t, {
247
245
  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
- }
246
+ icon: {
247
+ low: /* @__PURE__ */ r(O, { className: "w-5 h-5 text-blue-500" }),
248
+ medium: /* @__PURE__ */ r(C, { className: "w-5 h-5 text-amber-500" }),
249
+ high: /* @__PURE__ */ r(y, { className: "w-5 h-5 text-red-500" })
250
+ }[s],
251
+ duration: s === "high" ? 8e3 : 5e3,
252
+ action: o ? {
253
+ label: o,
254
+ onClick: () => a?.()
254
255
  } : void 0
255
256
  });
256
257
  }
257
- const Y = {
258
- success: (r, e) => l(r, {
259
- description: e,
260
- icon: /* @__PURE__ */ a(I, { className: "w-5 h-5 text-emerald-500 dark:text-emerald-400" })
261
- }),
262
- error: (r, e) => l(r, {
258
+ const ee = {
259
+ success: (t, e) => h(t, {
263
260
  description: e,
264
- icon: /* @__PURE__ */ a(C, { className: "w-5 h-5 text-red-500 dark:text-red-400" })
261
+ icon: /* @__PURE__ */ r(U, { className: "w-5 h-5 text-emerald-500" })
265
262
  }),
266
- warning: (r, e) => l(r, {
263
+ error: (t, e) => h(t, {
267
264
  description: e,
268
- icon: /* @__PURE__ */ a(z, { className: "w-5 h-5 text-amber-500 dark:text-amber-400" })
265
+ icon: /* @__PURE__ */ r(y, { className: "w-5 h-5 text-red-500" })
269
266
  }),
270
- info: (r, e) => l(r, {
267
+ warning: (t, e) => h(t, {
271
268
  description: e,
272
- icon: /* @__PURE__ */ a(T, { className: "w-5 h-5 text-blue-500 dark:text-blue-400" })
269
+ icon: /* @__PURE__ */ r(C, { className: "w-5 h-5 text-amber-500 dark:text-amber-400" })
273
270
  }),
274
- message: (r, e) => l(r, { description: e }),
275
- customTheme: (r, e, t) => {
276
- l.custom((o) => /* @__PURE__ */ d(
271
+ loading: (t, e) => h.loading(t, { description: e }),
272
+ custom: (t, e, o) => {
273
+ h.custom((a) => /* @__PURE__ */ r(
277
274
  "div",
278
275
  {
279
- className: c("w-full flex gap-3 p-4 shadow-2xl transition-all", t.fontFamily),
276
+ className: f("flex gap-3 p-4 shadow-2xl border", o.fontFamily),
280
277
  style: {
281
- backgroundColor: t.backgroundColor || "#ffffff",
282
- color: t.textColor || "#000000",
283
- border: `1px solid ${t.primaryColor || "#e4e4e7"}`,
284
- borderRadius: t.borderRadius || "12px"
278
+ backgroundColor: o.backgroundColor || "var(--bg-card)",
279
+ color: o.textColor || "var(--text-card)",
280
+ borderColor: o.primaryColor || "#e4e4e7",
281
+ borderRadius: o.borderRadius || "12px"
285
282
  },
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
- ]
283
+ children: /* @__PURE__ */ u("div", { className: "flex flex-col gap-1", children: [
284
+ /* @__PURE__ */ r("span", { className: "font-semibold text-sm", children: t }),
285
+ /* @__PURE__ */ r("span", { className: "text-xs opacity-70", children: e })
286
+ ] })
299
287
  }
300
288
  ));
301
289
  }
302
- }, g = E(void 0);
303
- function q({
304
- apiKey: r,
290
+ }, w = S(void 0);
291
+ function te({
292
+ apiKey: t,
305
293
  apiUrl: e,
306
- language: t,
307
- children: o
294
+ language: o,
295
+ children: a
308
296
  }) {
309
- const i = async (n) => {
310
- const m = n instanceof Error ? n : new Error(String(n)), s = l.loading("Analyzing error context...", {
297
+ const s = P(async (i) => {
298
+ const d = i instanceof Error ? i : new Error(String(i)), c = h.loading("Analyzing error context...", {
311
299
  description: "Applying AI recovery heuristics..."
312
300
  });
301
+ if (t === "sk_test_mock") {
302
+ setTimeout(() => {
303
+ h.info("Mock Mode Analysis", {
304
+ id: c,
305
+ description: "This is a mocked async recovery because sk_test_mock was used."
306
+ });
307
+ }, 1500);
308
+ return;
309
+ }
313
310
  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, {
311
+ const l = {
312
+ message: d.message,
313
+ componentStack: d.stack,
314
+ url: typeof window < "u" ? window.location.href : void 0
315
+ }, m = _(l), b = e || "https://api.cognicatch.dev/v1/analyze-error", p = typeof navigator < "u" ? navigator.language : "en-US", v = o || p, g = await fetch(b, {
315
316
  method: "POST",
316
317
  headers: {
317
- Authorization: `Bearer ${r}`,
318
+ Authorization: `Bearer ${t}`,
318
319
  "Content-Type": "application/json"
319
320
  },
320
- body: JSON.stringify({ error: p, stack: v, language: N })
321
+ body: JSON.stringify({
322
+ error: m.message,
323
+ stack: m.componentName ? `Component: ${m.componentName}` : m.errorCode || "Async Error",
324
+ routePath: m.routePath,
325
+ language: v
326
+ })
321
327
  });
322
- 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,
328
+ if (!g.ok) throw new Error("SaaS API Error");
329
+ const x = await g.json();
330
+ x && ((x.severity || x.level) === "low" ? h.info(x.title, { id: c, description: x.description }) : h.error(x.title, { id: c, description: x.description }));
331
+ } catch (l) {
332
+ console.error("AdaptiveUI API Request failed:", l), h.error("Analysis Failed", {
333
+ id: c,
328
334
  description: "We couldn't reach the AI servers. Please try again later."
329
335
  });
330
336
  }
331
- };
332
- return /* @__PURE__ */ a(g.Provider, { value: { apiKey: r, apiUrl: e, language: t, captureAsyncError: i }, children: o });
337
+ }, [t, e, o]), n = T(() => ({
338
+ apiKey: t,
339
+ apiUrl: e,
340
+ language: o,
341
+ captureAsyncError: s
342
+ }), [t, e, o, s]);
343
+ return /* @__PURE__ */ r(w.Provider, { value: n, children: a });
333
344
  }
334
- function H() {
335
- const r = D(g);
336
- if (!r)
345
+ function re() {
346
+ const t = M(w);
347
+ if (!t)
337
348
  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'>"
349
+ "❌ 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
350
  );
340
- return r;
351
+ return t;
341
352
  }
342
- class V extends R {
343
- static contextType = g;
353
+ const K = ({ 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__ */ u("div", { className: "flex flex-col items-center text-center gap-4", children: [
354
+ /* @__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" }) }) }),
355
+ /* @__PURE__ */ u("div", { children: [
356
+ /* @__PURE__ */ r("h3", { className: "text-sm font-semibold text-zinc-900 dark:text-zinc-100", children: "Component Unavailable" }),
357
+ /* @__PURE__ */ r("p", { className: "text-xs text-zinc-500 dark:text-zinc-400 mt-1", children: "An unexpected error occurred in the interface." })
358
+ ] }),
359
+ /* @__PURE__ */ r(
360
+ "button",
361
+ {
362
+ onClick: t,
363
+ style: {
364
+ backgroundColor: e?.primaryColor || void 0
365
+ },
366
+ 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",
367
+ children: "Try Reloading"
368
+ }
369
+ )
370
+ ] }) });
371
+ class oe extends I {
372
+ static contextType = w;
373
+ _isMounted = !1;
344
374
  constructor(e) {
345
375
  super(e), this.state = {
346
376
  hasError: !1,
347
377
  error: null,
348
378
  aiData: null,
349
- isProcessingAuto: !1
379
+ isProcessingAuto: !1,
380
+ hasCrashedFallback: !1
350
381
  };
351
382
  }
383
+ componentDidMount() {
384
+ this._isMounted = !0;
385
+ }
386
+ componentWillUnmount() {
387
+ this._isMounted = !1;
388
+ }
352
389
  static getDerivedStateFromError(e) {
353
390
  return { hasError: !0, error: e };
354
391
  }
355
- componentDidCatch(e, t) {
356
- const { mode: o } = this.props;
357
- o === "manual" && this.props.severity === "low" && A(
392
+ componentDidCatch(e, o) {
393
+ if (this.state.hasCrashedFallback) return;
394
+ const { mode: a } = this.props;
395
+ a === "manual" && this.props.severity === "low" && E(
358
396
  this.props.title,
359
397
  this.props.description,
360
398
  this.props.actionLabel ?? void 0,
361
399
  this.handleRecover
362
- ), o === "auto" && (this.setState({ isProcessingAuto: !0 }), this.processAutoMode(e));
400
+ ), a === "auto" && this._isMounted && (this.setState({ isProcessingAuto: !0 }), this.processAutoMode(e, o));
363
401
  }
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 });
402
+ processAutoMode = async (e, o) => {
403
+ const a = this.props, s = a.apiKey || this.context?.apiKey, n = a.apiUrl || this.context?.apiUrl, i = typeof navigator < "u" ? navigator.language : "en-US", d = a.language || this.context?.language || i;
404
+ if (!s) {
405
+ console.error("AdaptiveUI: Missing API Key for auto mode. Provide it via props or <AdaptiveProvider>."), this._isMounted && this.setState({ isProcessingAuto: !1 });
368
406
  return;
369
407
  }
370
- if (o === "sk_test_mock") {
408
+ if (s === "sk_test_mock") {
371
409
  setTimeout(() => {
372
- this.setState({
410
+ this._isMounted && this.setState({
373
411
  isProcessingAuto: !1,
374
412
  aiData: {
375
413
  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"
414
+ title: "Mock Mode Error",
415
+ description: "This is a mocked response because sk_test_mock was used.",
416
+ actionLabel: "Reload Component"
379
417
  }
380
418
  });
381
419
  }, 1500);
382
420
  return;
383
421
  }
384
422
  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", {
423
+ const c = {
424
+ message: e.message,
425
+ componentStack: o.componentStack || void 0,
426
+ url: typeof window < "u" ? window.location.href : void 0
427
+ }, l = _(c), b = await fetch(n || "https://api.cognicatch.dev/v1/analyze-error", {
386
428
  method: "POST",
387
429
  headers: {
388
- Authorization: `Bearer ${o}`,
430
+ Authorization: `Bearer ${s}`,
389
431
  "Content-Type": "application/json"
390
432
  },
391
433
  body: JSON.stringify({
392
- error: s,
393
- stack: p,
394
- language: m
434
+ error: l.message,
435
+ stack: l.componentName ? `Component: ${l.componentName}` : "No stack",
436
+ routePath: l.routePath,
437
+ language: d
395
438
  })
396
439
  });
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,
440
+ if (!b.ok)
441
+ throw new Error(`SaaS API returned ${b.status}`);
442
+ const p = await b.json();
443
+ p && this._isMounted && (p.severity === "low" ? (E(
444
+ p.title,
445
+ p.description,
446
+ p.actionLabel ?? void 0,
404
447
  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({
448
+ ), this.setState({ isProcessingAuto: !1, aiData: p })) : this.setState({ isProcessingAuto: !1, aiData: p }));
449
+ } catch (c) {
450
+ console.error("AdaptiveUI AI Request failed:", c), this._isMounted && this.setState({
408
451
  isProcessingAuto: !1,
409
452
  aiData: {
410
453
  severity: "medium",
@@ -416,43 +459,84 @@ class V extends R {
416
459
  }
417
460
  };
418
461
  handleRecover = () => {
419
- this.setState({ hasError: !1, error: null, aiData: null }), this.props.onRecover && this.props.onRecover();
462
+ this._isMounted && this.setState({ hasError: !1, error: null, aiData: null, hasCrashedFallback: !1 }), this.props.onRecover && this.props.onRecover();
420
463
  };
421
464
  render() {
465
+ if (this.state.hasCrashedFallback)
466
+ return /* @__PURE__ */ r(
467
+ K,
468
+ {
469
+ onRecover: this.handleRecover,
470
+ theme: this.props.theme
471
+ }
472
+ );
422
473
  if (!this.state.hasError)
423
474
  return this.props.children;
424
- const { mode: e, theme: t, className: o } = this.props;
475
+ const { mode: e, theme: o, className: a, showRefresh: s, statusUrl: n } = this.props;
425
476
  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;
477
+ const { severity: i, title: d, description: c, actionLabel: l } = this.props;
478
+ try {
479
+ if (i === "high")
480
+ return /* @__PURE__ */ r(
481
+ N,
482
+ {
483
+ isOpen: !0,
484
+ onOpenChange: (m) => {
485
+ m || this.handleRecover();
486
+ },
487
+ title: d,
488
+ description: c,
489
+ theme: o,
490
+ showRefresh: s,
491
+ statusUrl: n
492
+ }
493
+ );
494
+ if (i === "medium") return /* @__PURE__ */ r(A, { title: d, description: c, primaryAction: l ? { label: l, onClick: this.handleRecover } : void 0, theme: o, className: a });
495
+ if (i === "low") return null;
496
+ } catch {
497
+ return this.setState({ hasCrashedFallback: !0 }), null;
498
+ }
432
499
  }
433
500
  if (e === "auto") {
434
501
  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..." })
502
+ return /* @__PURE__ */ u("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: [
503
+ /* @__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" }),
504
+ /* @__PURE__ */ r("p", { className: "text-xs font-medium text-zinc-500 dark:text-zinc-400", children: "Analyzing error context..." })
438
505
  ] });
439
506
  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 });
507
+ const { severity: i, title: d, description: c, actionLabel: l } = this.state.aiData;
508
+ try {
509
+ if (i === "high")
510
+ return /* @__PURE__ */ r(
511
+ N,
512
+ {
513
+ isOpen: !0,
514
+ onOpenChange: (m) => {
515
+ m || this.handleRecover();
516
+ },
517
+ title: d,
518
+ description: c,
519
+ theme: o,
520
+ showRefresh: s,
521
+ statusUrl: n
522
+ }
523
+ );
524
+ if (i === "medium")
525
+ return /* @__PURE__ */ r(A, { title: d, description: c, primaryAction: l ? { label: l, onClick: this.handleRecover } : void 0, theme: o, className: a });
526
+ if (i === "low")
527
+ return null;
528
+ } catch {
529
+ return this.setState({ hasCrashedFallback: !0 }), null;
530
+ }
447
531
  }
448
532
  }
449
533
  return null;
450
534
  }
451
535
  }
452
536
  export {
453
- V as AdaptiveErrorBoundary,
454
- q as AdaptiveProvider,
455
- W as AdaptiveToastProvider,
456
- Y as adaptiveToast,
457
- H as useAdaptive
537
+ oe as AdaptiveErrorBoundary,
538
+ te as AdaptiveProvider,
539
+ X as AdaptiveToastProvider,
540
+ ee as adaptiveToast,
541
+ re as useAdaptive
458
542
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cognicatch/react",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
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
+ }