@cognicatch/react 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,160 +1,56 @@
1
- # 🧠 CogniCatch React
1
+ # CogniCatch React
2
2
 
3
- **Premium B2B React Error Boundaries & API Fallbacks powered by GenUI.**
3
+ <img width="1920" height="1080" alt="image" src="https://github.com/user-attachments/assets/7973b59c-257c-4994-9e65-4416bf6d8167" />
4
4
 
5
- Stop losing users to the dreaded "White Screen of Death" (WSOD) or scaring them away with raw, technical stack traces. **CogniCatch React** is a React library that intercepts runtime crashes and API failures, gracefully degrading them into elegant, accessible, and user-friendly recovery interfaces.
6
5
 
7
- Powered by a **GenUI** (Generative UI) engine, it automatically analyzes error logs, sanitizes sensitive data, and generates the perfect UI fallback—all in real-time, automatically translated to your user's native language.
6
+ [![npm version](https://img.shields.io/npm/v/@cognicatch/react.svg?style=flat-square&color=f59e0b)](https://www.npmjs.com/package/@cognicatch/react)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-zinc.svg?style=flat-square)](https://opensource.org/licenses/MIT)
8
8
 
9
- ---
10
-
11
- ## 🔒 Enterprise-Grade Security & Privacy (Zero-PII)
12
-
13
- When selling to or building for enterprises, security is non-negotiable. Our library was architected from the ground up to be fully compliant with strict data privacy laws like **GDPR, LGPD, HIPAA, and SOC2**.
14
-
15
- We guarantee that **no user data or sensitive values ever leave the browser**:
16
-
17
- * **Sandboxed by Design:** React Error Boundaries natively only catch the `Error` object and the component tree. They physically cannot read form inputs, component `state`, or `props`.
18
- * **Client-Side Zero-PII Sanitizer:** Before any error log is transmitted to the AI or your backend, our aggressive redaction engine scrubs the payload directly in the browser's memory.
19
- * **What gets redacted?** Emails, JWTs, API Keys, Bearer Tokens, Phone Numbers, Credit Cards, SSNs, and IP Addresses are instantly replaced with tags like `[EMAIL_REDACTED]` or `[JWT_REDACTED]`.
20
- * **The Result:** The AI and your servers only receive the structural skeleton of the crash (e.g., *"Payment failed for user [EMAIL_REDACTED] using [JWT_REDACTED]"*), keeping your company safe from data leaks.
9
+ **Stop losing users to the White Screen of Death.** CogniCatch is a production-grade library that intercepts runtime crashes and API failures, transforming them into elegant, user-friendly recovery interfaces.
21
10
 
22
11
  ---
23
12
 
24
- ## The GenUI Engine (Auto Mode)
25
-
26
- In traditional development, you have to manually map every possible error with a `try/catch` and hardcode generic fallback messages.
27
-
28
- With our Auto Mode, Artificial Intelligence takes the wheel:
29
-
30
- 1. The boundary or hook catches the crash/API failure.
31
- 2. The Zero-PII Sanitizer scrubs the payload.
32
- 3. The anonymized log is sent to the API, where an LLM analyzes the technical context.
33
- 4. The AI generates an empathetic title, description, and action button **in the user's native language**.
34
- 5. The perfectly sized interface (Banner, Toast, or Modal) is rendered dynamically to the user.
35
-
36
- ## 🛠️ Tech Stack
37
-
38
- * **Core:** React 18 / 19
39
- * **Styling:** Tailwind CSS v4 (Isolated styles, won't clash with your app)
40
- * **Accessibility:** Radix UI (100% accessible and screen-reader friendly Modals)
41
- * **Notifications:** Sonner (High-performance, beautiful Toasts)
42
- * **Type Safety:** TypeScript (Strict Mode)
13
+ ## Quick Start (Zero-Config)
43
14
 
44
- ---
45
-
46
- ## 📦 Installation
15
+ CogniCatch works out-of-the-box for local and open-source projects. **No API Key is required** for Manual Mode.
47
16
 
17
+ ### 1. Install
48
18
  ```bash
49
19
  npm install @cognicatch/react
50
20
  # or
51
- pnpm add @cognicatch/react
52
- # or
53
21
  yarn add @cognicatch/react
22
+ # or
23
+ pnpm add @cognicatch/react
54
24
  ```
55
25
 
56
- Import the global styles at the root of your application (e.g., main.tsx, app.tsx, or layout.tsx):
57
-
58
- ```typescript
59
- import '@cognicatch/react/style.css';
60
- ```
61
-
62
- ## 💻 Usage
63
-
64
- The library is designed to scale from indie open-source projects to enterprise SaaS platforms.
65
-
66
- ### 1. Pro / SaaS Tier (Auto Mode via GenUI)
67
-
68
- To unlock the full potential of GenUI, set up the AdaptiveProvider at the root of your application. This prevents you from prop-drilling your API key and automatically handles internationalization (i18n).
69
-
70
- * A. Global Setup:
71
-
72
- ```typescript
73
- import { AdaptiveProvider, AdaptiveToastProvider } from '@cognicatch/react';
74
-
75
- export default function App() {
76
- return (
77
- // Automatically detects navigator.language, or you can force a locale via the `language` prop.
78
- <AdaptiveProvider apiKey="your_api_key_here">
79
- <AdaptiveToastProvider />
80
- <YourAppRoutes />
81
- </AdaptiveProvider>
82
- );
83
- }
84
- ```
85
-
86
- * B. Catching UI Crashes (Component Errors):
87
-
88
- Wrap fragile components. The boundary will automatically inherit the API key from the Provider.
89
-
90
- ```typescript
91
- import { AdaptiveErrorBoundary } from '@cognicatch/react';
92
-
93
- export function CheckoutPage() {
94
- return (
95
- <AdaptiveErrorBoundary
96
- mode="auto"
97
- onRecover={() => console.log("User clicked to recover")}
98
- >
99
- <ComplexWidget />
100
- </AdaptiveErrorBoundary>
101
- );
102
- }
103
- ```
104
-
105
- * C. Catching API Failures (Async Errors):
26
+ ### 2. Setup Styles
106
27
 
107
- Use our hook to gracefully handle backend failures (e.g., `400 Bad Request` or `500 Server Error`). It sanitizes the error, sends it to the AI, and renders a Premium Toast.
28
+ Import the global CSS at your root (main.tsx or app.tsx):
108
29
 
109
30
  ```typescript
110
- import { useAdaptive } from '@cognicatch/react';
111
-
112
- export function PaymentForm() {
113
- const { captureAsyncError } = useAdaptive();
114
-
115
- const handlePayment = async () => {
116
- try {
117
- await api.post('/checkout', data);
118
- } catch (error) {
119
- // Magically turns raw backend errors into empathetic UI Toasts
120
- captureAsyncError(error);
121
- }
122
- };
123
-
124
- return <button onClick={handlePayment}>Pay Now</button>;
125
- }
31
+ import '@cognicatch/react/style.css';
126
32
  ```
127
33
 
128
- ### 2. Open Source Tier (Manual Mode)
129
-
130
- Don't have an API key? You can still wrap fragile components to prevent a localized error from taking down the entire page. You define the severity, and the UI adapts automatically:
131
-
132
- * low: Triggers a Toast and allows the component to attempt a re-render.
34
+ ### 3. Usage (Manual Mode)
133
35
 
134
- * medium: Replaces the broken component with an elegant inline Banner.
36
+ #### Adaptive Error Boundary
135
37
 
136
- * high: Locks the screen with a Critical Modal (ideal for root-level routing errors).
38
+ Wrap any fragile component. If it crashes, CogniCatch renders a beautiful fallback.
137
39
 
138
40
  ```typescript
139
41
  import { AdaptiveErrorBoundary } from '@cognicatch/react';
140
42
 
141
- export function Dashboard() {
142
- return (
143
- <AdaptiveErrorBoundary
144
- mode="manual"
145
- severity="medium"
146
- title="Widget Failed"
147
- description="We couldn't load the financial data at this moment."
148
- actionLabel="Try Again"
149
- onRecover={() => window.location.reload()}
150
- >
151
- <ComplexWidget />
152
- </AdaptiveErrorBoundary>
153
- );
154
- }
43
+ <AdaptiveErrorBoundary
44
+ mode="manual"
45
+ severity="medium"
46
+ title="Component Error"
47
+ onRecover={() => window.location.reload()}
48
+ >
49
+ <YourFragileComponent />
50
+ </AdaptiveErrorBoundary>
155
51
  ```
156
52
 
157
- ### 3. The Free Swiss Army Knife (Generic Toasts)
53
+ #### Generic Toasts
158
54
 
159
55
  Even if you don't use the Error Boundaries, you get a premium, white-label notification system out of the box. Assuming you added the `AdaptiveToastProvider` to your root, you can trigger beautiful toasts anywhere.
160
56
 
@@ -187,3 +83,54 @@ function handleSave() {
187
83
  // adaptiveToast.info("Update Available", "A new version is ready to be installed.");
188
84
  }
189
85
  ```
86
+
87
+ ## 🔒 Enterprise-Grade Security (Zero-PII)
88
+
89
+ Built for GDPR/HIPAA compliance, our **Client-Side Sanitizer** ensures sensitive data never leaves the browser.
90
+
91
+ * **Sandboxed:** Error Boundaries cannot read your component's internal state or props.
92
+ * **Aggressive Redaction:** Emails, JWTs, API Keys, and Credit Cards are instantly replaced with `[REDACTED]` tags in the browser's memory before any log is processed.
93
+ * **The Result:** The AI and your servers only receive the structural skeleton of the crash (e.g., *"Payment failed for user [EMAIL_REDACTED] using [JWT_REDACTED]"*), keeping your company safe from data leaks.
94
+
95
+ ## 🛠️ Tech Stack
96
+ - **Core:** React 18 / 19 (Strict Mode Ready)
97
+ - **Styling:** Tailwind CSS v4 (Isolated/Zero-conflict)
98
+ - **Primitives:** Radix UI & Sonner (Accessible & High-performance)
99
+
100
+ ---
101
+
102
+ ## ✨ The GenUI Engine (Auto Mode - Coming Soon)
103
+
104
+ In the Pro Tier, Artificial Intelligence takes the wheel. The library analyzes the technical stack trace and generates an empathetic recovery UI, automatically translated to the user's native language.
105
+
106
+ ### Upcoming Pro Features:
107
+ - **Cloud Telemetry:** Track crashes in real-time on your CogniCatch Dashboard.
108
+ - **Async Capture:** `captureAsyncError(error)` hook for seamless API failure handling.
109
+ - **Domain Whitelisting:** Secure your production environment.
110
+
111
+ 👉 **[Join the Early Adopter Waitlist](https://cognicatch.dev/dashboard)**.
112
+
113
+ ---
114
+
115
+ ## 📖 API Reference
116
+
117
+ ### `<AdaptiveErrorBoundary />` Props
118
+
119
+ | Prop | Type | Default | Description |
120
+ | :--- | :--- | :--- | :--- |
121
+ | `mode` | `'manual' \| 'auto'` | `'manual'` | Use 'manual' for local/free tier. |
122
+ | `severity` | `'low' \| 'medium' \| 'high'` | `'medium'` | Defines the UI type (Toast, Banner, or Modal). |
123
+ | `title` | `string` | `undefined` | Fallback title (Manual mode only). |
124
+ | `onRecover` | `() => void` | `undefined` | Callback triggered by the action button. |
125
+
126
+ ### `<AdaptiveToastProvider />` Props
127
+
128
+ The provider accepts all standard [Sonner](https://sonner.emilkowal.ski/) configurations to customize the behavior globally.
129
+
130
+ | Prop | Type | Default | Description |
131
+ | :--- | :--- | :--- | :--- |
132
+ | `position` | `string` | `'top-right'` | Position of the toasts (top-left, top-center, etc). |
133
+ | `expand` | `boolean` | `false` | Whether toasts should expand on hover. |
134
+ | `richColors` | `boolean` | `true` | Enables colored backgrounds for success/error/w |
135
+
136
+ *Built with precision by the CogniCatch team.*
@@ -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-red-900:oklch(39.6% .141 25.723);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-purple-500:oklch(62.7% .265 303.9);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.fixed{position:fixed}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-\[99999\]{z-index:99999}.z-\[999999\]{z-index:999999}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.inline{display:inline}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-16{height:calc(var(--spacing)*16)}.h-full{height:100%}.min-h-\[70vh\]{min-height:70vh}.min-h-\[100px\]{min-height:100px}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[280px\]{max-width:280px}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-200\/60{border-color:#fee68599}@supports (color:color-mix(in lab,red,red)){.border-amber-200\/60{border-color:color-mix(in oklab,var(--color-amber-200)60%,transparent)}}.border-red-100{border-color:var(--color-red-100)}.border-red-200{border-color:var(--color-red-200)}.border-transparent{border-color:#0000}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-200\/50{border-color:#e4e4e780}@supports (color:color-mix(in lab,red,red)){.border-zinc-200\/50{border-color:color-mix(in oklab,var(--color-zinc-200)50%,transparent)}}.border-zinc-300{border-color:var(--color-zinc-300)}.border-zinc-400\/30{border-color:#9f9fa94d}@supports (color:color-mix(in lab,red,red)){.border-zinc-400\/30{border-color:color-mix(in oklab,var(--color-zinc-400)30%,transparent)}}.border-t-zinc-900{border-top-color:var(--color-zinc-900)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white)90%,transparent)}}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-50\/50{background-color:#fafafa80}@supports (color:color-mix(in lab,red,red)){.bg-zinc-50\/50{background-color:color-mix(in oklab,var(--color-zinc-50)50%,transparent)}}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-900\/20{background-color:#18181b33}@supports (color:color-mix(in lab,red,red)){.bg-zinc-900\/20{background-color:color-mix(in oklab,var(--color-zinc-900)20%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-indigo-500\/20{--tw-gradient-from:#625fff33}@supports (color:color-mix(in lab,red,red)){.from-indigo-500\/20{--tw-gradient-from:color-mix(in oklab,var(--color-indigo-500)20%,transparent)}}.from-indigo-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-500\/20{--tw-gradient-to:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.to-purple-500\/20{--tw-gradient-to:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.to-purple-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-10{padding-bottom:calc(var(--spacing)*10)}.pb-12{padding-bottom:calc(var(--spacing)*12)}.text-center{text-align:center}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-amber-500{color:var(--color-amber-500)}.text-amber-700{color:var(--color-amber-700)}.text-amber-900{color:var(--color-amber-900)}.text-blue-500{color:var(--color-blue-500)}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-700{color:var(--color-emerald-700)}.text-indigo-500{color:var(--color-indigo-500)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-white{color:var(--color-white)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-900{color:var(--color-zinc-900)}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-indigo-500\/20{--tw-shadow-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.shadow-indigo-500\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-indigo-500)20%,transparent)var(--tw-shadow-alpha),transparent)}}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-500{--tw-duration:.5s;transition-duration:.5s}@media(hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:bg-amber-200:hover{background-color:var(--color-amber-200)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-300:hover{background-color:var(--color-zinc-300)}.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-indigo-500\/50:focus{--tw-ring-color:#625fff80}@supports (color:color-mix(in lab,red,red)){.focus\:ring-indigo-500\/50:focus{--tw-ring-color:color-mix(in oklab,var(--color-indigo-500)50%,transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}@media(min-width:40rem){.sm\:top-1\/2{top:50%}.sm\:bottom-auto{bottom:auto}.sm\:left-1\/2{left:50%}.sm\:hidden{display:none}.sm\:w-full{width:100%}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-none{max-width:none}.sm\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:rounded-2xl{border-radius:var(--radius-2xl)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}}.dark\:border-amber-800\/50:where(.dark,.dark *){border-color:#953d0080}@supports (color:color-mix(in lab,red,red)){.dark\:border-amber-800\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-amber-800)50%,transparent)}}.dark\:border-amber-900\/40:where(.dark,.dark *){border-color:#7b330666}@supports (color:color-mix(in lab,red,red)){.dark\:border-amber-900\/40:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-amber-900)40%,transparent)}}.dark\:border-red-500\/20:where(.dark,.dark *){border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.dark\:border-red-500\/20:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.dark\:border-zinc-500\/30:where(.dark,.dark *){border-color:#71717b4d}@supports (color:color-mix(in lab,red,red)){.dark\:border-zinc-500\/30:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-zinc-500)30%,transparent)}}.dark\:border-zinc-700:where(.dark,.dark *){border-color:var(--color-zinc-700)}.dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)}.dark\:border-zinc-800\/50:where(.dark,.dark *){border-color:#27272a80}@supports (color:color-mix(in lab,red,red)){.dark\:border-zinc-800\/50:where(.dark,.dark *){border-color:color-mix(in oklab,var(--color-zinc-800)50%,transparent)}}.dark\:border-t-zinc-100:where(.dark,.dark *){border-top-color:var(--color-zinc-100)}.dark\:bg-amber-500\/10:where(.dark,.dark *){background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.dark\:bg-amber-950\/20:where(.dark,.dark *){background-color:#46190133}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-950)20%,transparent)}}.dark\:bg-amber-950\/50:where(.dark,.dark *){background-color:#46190180}@supports (color:color-mix(in lab,red,red)){.dark\:bg-amber-950\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-amber-950)50%,transparent)}}.dark\:bg-black\/80:where(.dark,.dark *){background-color:#000c}@supports (color:color-mix(in lab,red,red)){.dark\:bg-black\/80:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.dark\:bg-emerald-500\/10:where(.dark,.dark *){background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-emerald-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-emerald-500)10%,transparent)}}.dark\:bg-red-500\/10:where(.dark,.dark *){background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-500\/10:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.dark\:bg-zinc-100:where(.dark,.dark *){background-color:var(--color-zinc-100)}.dark\:bg-zinc-800:where(.dark,.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-900\/20:where(.dark,.dark *){background-color:#18181b33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-zinc-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-900)20%,transparent)}}.dark\:bg-zinc-900\/50:where(.dark,.dark *){background-color:#18181b80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-zinc-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-900)50%,transparent)}}.dark\:bg-zinc-950:where(.dark,.dark *){background-color:var(--color-zinc-950)}.dark\:bg-zinc-950\/80:where(.dark,.dark *){background-color:#09090bcc}@supports (color:color-mix(in lab,red,red)){.dark\:bg-zinc-950\/80:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-zinc-950)80%,transparent)}}.dark\:text-amber-100:where(.dark,.dark *){color:var(--color-amber-100)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-emerald-400:where(.dark,.dark *){color:var(--color-emerald-400)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-red-500:where(.dark,.dark *){color:var(--color-red-500)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-zinc-50:where(.dark,.dark *){color:var(--color-zinc-50)}.dark\:text-zinc-100:where(.dark,.dark *){color:var(--color-zinc-100)}.dark\:text-zinc-300:where(.dark,.dark *){color:var(--color-zinc-300)}.dark\:text-zinc-400:where(.dark,.dark *){color:var(--color-zinc-400)}.dark\:text-zinc-900:where(.dark,.dark *){color:var(--color-zinc-900)}.dark\:shadow-2xl:where(.dark,.dark *){--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.dark\:hover\:border-zinc-800:where(.dark,.dark *):hover{border-color:var(--color-zinc-800)}.dark\:hover\:bg-white:where(.dark,.dark *):hover{background-color:var(--color-white)}.dark\:hover\:bg-zinc-700:where(.dark,.dark *):hover{background-color:var(--color-zinc-700)}.dark\:hover\:bg-zinc-900:where(.dark,.dark *):hover{background-color:var(--color-zinc-900)}.dark\:hover\:text-zinc-200:where(.dark,.dark *):hover{color:var(--color-zinc-200)}}}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}@keyframes overlayShow{0%{opacity:0}to{opacity:1}}@keyframes overlayHide{0%{opacity:1}to{opacity:0}}@keyframes contentShowDesktop{0%{opacity:0;transform:translateY(8px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes contentHideDesktop{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(8px)scale(.96)}}@keyframes contentShowMobile{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes contentHideMobile{0%{transform:translateY(0)}to{transform:translateY(100%)}}.radix-overlay[data-state=open]{animation:.4s cubic-bezier(.16,1,.3,1) overlayShow}.radix-overlay[data-state=closed]{animation:.3s cubic-bezier(.16,1,.3,1) overlayHide}.radix-content[data-state=open]{animation:.4s cubic-bezier(.16,1,.3,1) contentShowMobile}.radix-content[data-state=closed]{animation:.3s cubic-bezier(.16,1,.3,1) contentHideMobile}@media(min-width:640px){.radix-content[data-state=open]{animation:.5s cubic-bezier(.16,1,.3,1) contentShowDesktop}.radix-content[data-state=closed]{animation:.4s cubic-bezier(.16,1,.3,1) contentHideDesktop}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
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}.contents{display:contents}.flex{display:flex}.grid{display:grid}.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,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),g=require("react"),p=require("lucide-react"),E=require("clsx"),_=require("tailwind-merge"),D=require("react-dom"),R=require("@radix-ui/react-dialog"),u=require("sonner");function P(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const a in t)if(a!=="default"){const o=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(r,a,o.get?o:{enumerable:!0,get:()=>t[a]})}}return r.default=t,Object.freeze(r)}const v=P(R),S=[{name:"email",pattern:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,replacement:"[EMAIL_REDACTED]"},{name:"bearer_token",pattern:/Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,replacement:"Bearer [TOKEN_REDACTED]"},{name:"jwt",pattern:/eyJ[A-Za-z0-9\-_]+\.eyJ[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+/g,replacement:"[JWT_REDACTED]"},{name:"api_key",pattern:/\b(?:sk|pk|key|api|sec)_[a-zA-Z0-9]{20,}\b|\b[A-Za-z0-9]{32,48}\b/g,replacement:"[KEY_REDACTED]"},{name:"phone",pattern:/(?:\+?\d{1,3}[-.\s]?)?\(?\d{2,4}\)?[-.\s]?\d{3,5}[-.\s]?\d{4}\b/g,replacement:"[PHONE_REDACTED]"},{name:"ipv4",pattern:/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,replacement:"[IP_REDACTED]"},{name:"url_query_params",pattern:/([?&](?:token|key|secret|auth|email|user|access_token|refresh_token|api_key|apikey|password|passwd|pwd)=[^&\s]+)/gi,replacement:"[PARAM_REDACTED]"},{name:"ssn",pattern:/\b\d{3}[-\s]?\d{2}[-\s]?\d{4}\b/g,replacement:"[SSN_REDACTED]"},{name:"credit_card",pattern:/\b(?:\d[ -]?){12,18}\d\b/g,replacement:"[CC_REDACTED]"}];function w(t,r=1e3){if(!t)return"";let a=String(t);return a.length>r&&(a=a.slice(0,r)+"... [TRUNCATED]"),S.reduce((o,{pattern:s,replacement:n})=>o.replace(s,n),a)}function N(t){let r;if(t.url)try{r=new URL(t.url,"http://dummy.com").pathname}catch{r=void 0}let a=t.componentName;if(!a&&t.componentStack){const o=t.componentStack.split(`
2
- `)[1]??"";a=/at (\w+)/.exec(o)?.[1]}return{message:w(t.message,500),httpStatus:t.httpStatus,errorCode:t.errorCode?w(t.errorCode,100):void 0,routePath:r,componentName:a}}function x(...t){return _.twMerge(E.clsx(t))}function z({title:t,description:r,severity:a="medium",primaryAction:o,secondaryAction:s,theme:n,className:i}){const l=a==="high";return e.jsx("div",{role:"alert","aria-live":"polite",className:x("rounded-xl border p-4 transition-all shadow-sm",!n?.backgroundColor&&"bg-amber-50 border-amber-200/60 dark:bg-amber-950/20 dark:border-amber-900/40",n?.fontFamily,i),style:{backgroundColor:n?.backgroundColor,color:n?.textColor,borderColor:n?.primaryColor?`${n.primaryColor}40`:void 0},children:e.jsxs("div",{className:"flex gap-3",children:[e.jsx("div",{className:"shrink-0 mt-0.5",children:l?e.jsx(p.AlertCircle,{className:"h-5 w-5 text-red-500"}):e.jsx(p.AlertTriangle,{className:"h-5 w-5 text-amber-500"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:"text-sm font-medium leading-none text-amber-900 dark:text-amber-100",style:{color:n?.textColor},children:t}),e.jsx("p",{className:"mt-2 text-sm leading-relaxed opacity-90",style:{color:n?.textColor},children:r}),(o||s)&&e.jsxs("div",{className:"mt-4 flex flex-wrap items-center gap-3",children:[o&&e.jsx("button",{onClick:o.onClick,style:n?.primaryColor?{backgroundColor:n.primaryColor,color:"#fff"}:{},className:x("text-xs font-medium px-3 py-1.5 rounded-lg transition-all active:scale-95","bg-amber-100 border border-amber-200 text-amber-900 hover:bg-amber-200","dark:bg-amber-950/50 dark:border-amber-800/50 dark:text-amber-100"),children:o.label}),s&&e.jsx("button",{onClick:s.onClick,className:"text-xs font-medium opacity-70 hover:opacity-100 transition-opacity underline-offset-4 hover:underline",style:{color:n?.textColor},children:s.label})]})]})]})})}function A({title:t,description:r,statusUrl:a,showRefresh:o=!0,isOpen:s,onOpenChange:n,theme:i,onPrimaryAction:l,primaryActionLabel:c="Atualizar a página"}){const[h,b]=g.useState(!1);g.useEffect(()=>{b(!0)},[]);const f=i==="dark"||typeof i=="object"&&i?.backgroundColor==="dark",d=typeof i=="object"?i.primaryColor:void 0,y=typeof i=="object"?i.fontFamily:void 0;if(!h)return null;const k=e.jsx(v.Root,{open:s,onOpenChange:n,children:e.jsx(v.Portal,{children:e.jsxs("div",{className:`cognicatch-ui-wrapper ${f?"dark":""} ${y||""}`,children:[e.jsx(v.Overlay,{className:"radix-overlay fixed inset-0 z-[99999] bg-zinc-900/20 dark:bg-black/80 backdrop-blur-sm"}),e.jsxs(v.Content,{onInteractOutside:m=>m.preventDefault(),onEscapeKeyDown:m=>m.preventDefault(),className:x("radix-content fixed z-[999999] flex flex-col items-center text-center shadow-2xl transition-all","bg-white border-zinc-200 dark:bg-zinc-950 dark:border-zinc-800","bottom-0 left-0 right-0 border-t rounded-t-3xl p-8 pb-10","sm:bottom-auto sm:top-1/2 sm:left-1/2 sm:-translate-x-1/2 sm:-translate-y-1/2 sm:w-full sm:max-w-md sm:rounded-2xl sm:border"),style:{boxSizing:"border-box"},children:[e.jsx("div",{className:"mx-auto w-12 h-1.5 rounded-full bg-zinc-200 dark:bg-zinc-800 mb-6 sm:hidden"}),e.jsx("div",{className:"w-16 h-16 rounded-full flex items-center justify-center mb-6 border bg-red-50 border-red-100 dark:bg-red-500/10 dark:border-red-500/20",children:e.jsx(p.AlertOctagon,{className:"w-8 h-8 text-red-600 dark:text-red-500"})}),e.jsx(v.Title,{className:"text-xl font-semibold text-zinc-900 dark:text-zinc-50 mb-3 tracking-tight",children:t}),e.jsx(v.Description,{className:"text-sm leading-relaxed mb-8 max-w-[280px] sm:max-w-none text-zinc-600 dark:text-zinc-400",children:r}),e.jsxs("div",{className:"flex flex-col w-full gap-3",children:[o&&e.jsxs("button",{onClick:()=>l?l():window.location.reload(),style:d?{backgroundColor:d,borderColor:d}:{},className:x("flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-all shadow-sm",d?"text-white hover:opacity-90 hover:scale-[1.02] active:scale-95":"bg-zinc-900 text-white hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-white hover:scale-[1.02] active:scale-95"),children:[e.jsx(p.RefreshCcw,{className:"w-4 h-4"}),c]}),a&&e.jsxs("a",{href:a,target:"_blank",rel:"noopener noreferrer",className:x("flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-colors border border-transparent","text-zinc-500 hover:text-zinc-900 hover:bg-zinc-100 dark:text-zinc-400 dark:hover:text-zinc-200 dark:hover:bg-zinc-900 dark:hover:border-zinc-800"),children:["Check system status",e.jsx(p.ExternalLink,{className:"w-4 h-4 opacity-70"})]})]})]})]})})});return D.createPortal(k,document.body)}function T({customTheme:t,toastOptions:r,position:a="top-right",...o}){return e.jsx(u.Toaster,{position:a,containerAriaLabel:"Notifications",...o,toastOptions:{...r,classNames:{...r?.classNames,toast:x("bg-white/90 border-zinc-200 text-zinc-900 shadow-xl backdrop-blur-md","dark:bg-zinc-950/80 dark:border-zinc-800 dark:text-zinc-50 dark:shadow-2xl",t?.fontFamily,r?.classNames?.toast),title:x("font-medium text-sm text-zinc-900 dark:text-zinc-50",r?.classNames?.title),description:x("mt-0.5 text-xs text-zinc-500 dark:text-zinc-400 line-clamp-2",r?.classNames?.description),actionButton:x("font-medium rounded-lg transition-all px-3 py-1.5 border text-xs","bg-zinc-900 text-white border-transparent hover:scale-[1.02] active:scale-95","dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-white",r?.classNames?.actionButton)},style:{borderRadius:t?.borderRadius||"0.75rem",backgroundColor:t?.backgroundColor,color:t?.textColor,fontFamily:t?.fontFamily,...r?.style}}})}function j(t,r,a,o,s="medium"){const n={low:e.jsx(p.Info,{className:"w-5 h-5 text-blue-500"}),medium:e.jsx(p.AlertTriangle,{className:"w-5 h-5 text-amber-500"}),high:e.jsx(p.AlertCircle,{className:"w-5 h-5 text-red-500"})};return u.toast(t,{description:r,icon:n[s],duration:s==="high"?8e3:5e3,action:a?{label:a,onClick:()=>o?.()}:void 0})}const M={success:(t,r)=>u.toast(t,{description:r,icon:e.jsx(p.CheckCircle2,{className:"w-5 h-5 text-emerald-500"})}),error:(t,r)=>u.toast(t,{description:r,icon:e.jsx(p.AlertCircle,{className:"w-5 h-5 text-red-500"})}),warning:(t,r)=>u.toast(t,{description:r,icon:e.jsx(p.AlertTriangle,{className:"w-5 h-5 text-amber-500 dark:text-amber-400"})}),loading:(t,r)=>u.toast.loading(t,{description:r}),custom:(t,r,a)=>{u.toast.custom(o=>e.jsx("div",{className:x("flex gap-3 p-4 shadow-2xl border",a.fontFamily),style:{backgroundColor:a.backgroundColor||"var(--bg-card)",color:a.textColor||"var(--text-card)",borderColor:a.primaryColor||"#e4e4e7",borderRadius:a.borderRadius||"12px"},children:e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("span",{className:"font-semibold text-sm",children:t}),e.jsx("span",{className:"text-xs opacity-70",children:r})]})}))}},C=g.createContext(void 0);function I({apiKey:t,apiUrl:r,language:a,children:o}){const s=g.useCallback(async i=>{const l=i instanceof Error?i:new Error(String(i)),c=u.toast.loading("Analyzing error context...",{description:"Applying AI recovery heuristics..."});if(t==="sk_test_mock"){setTimeout(()=>{u.toast.info("Mock Mode Analysis",{id:c,description:"This is a mocked async recovery because sk_test_mock was used."})},1500);return}try{const h={message:l.message,componentStack:l.stack,url:typeof window<"u"?window.location.href:void 0},b=N(h),f=r||"https://api.cognicatch.dev/v1/analyze-error",d=typeof navigator<"u"?navigator.language:"en-US",y=a||d,k=await fetch(f,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({error:b.message,stack:b.componentName?`Component: ${b.componentName}`:b.errorCode||"Async Error",routePath:b.routePath,language:y})});if(!k.ok)throw new Error("SaaS API Error");const m=await k.json();m&&((m.severity||m.level)==="low"?u.toast.info(m.title,{id:c,description:m.description}):u.toast.error(m.title,{id:c,description:m.description}))}catch(h){console.error("AdaptiveUI API Request failed:",h),u.toast.error("Analysis Failed",{id:c,description:"We couldn't reach the AI servers. Please try again later."})}},[t,r,a]),n=g.useMemo(()=>({apiKey:t,apiUrl:r,language:a,captureAsyncError:s}),[t,r,a,s]);return e.jsx(C.Provider,{value:n,children:o})}function F(){const t=g.useContext(C);if(!t)throw new Error("❌ AdaptiveUI Developer Error: You tried to use the 'useAdaptive' hook outside of an <AdaptiveProvider>. Please wrap the root of your application (e.g., App.tsx or layout.tsx) with <AdaptiveProvider apiKey='YOUR_KEY'>");return t}const L=({onRecover:t,theme:r})=>{const a=r==="dark";return e.jsx("div",{className:`p-6 rounded-xl border border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-950 shadow-sm ${a?"dark":""}`,children:e.jsxs("div",{className:"flex flex-col items-center text-center gap-4",children:[e.jsx("div",{className:"p-3 rounded-full bg-red-50 dark:bg-red-900/20",children:e.jsx("svg",{className:"w-6 h-6 text-red-600 dark:text-red-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"})})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-semibold text-zinc-900 dark:text-zinc-100",children:"Component Unavailable"}),e.jsx("p",{className:"text-xs text-zinc-500 dark:text-zinc-400 mt-1",children:"An unexpected error occurred in the interface."})]}),e.jsx("button",{onClick:t,style:{backgroundColor:r?.primaryColor||void 0},className:"px-4 py-2 text-xs font-medium bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-900 rounded-lg hover:opacity-90 transition-opacity",children:"Try Reloading"})]})})};class O extends g.Component{static contextType=C;_isMounted=!1;constructor(r){super(r),this.state={hasError:!1,error:null,aiData:null,isProcessingAuto:!1,hasCrashedFallback:!1}}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,a){if(this.state.hasCrashedFallback)return;const{mode:o}=this.props;o==="manual"&&this.props.severity==="low"&&j(this.props.title,this.props.description,this.props.actionLabel??void 0,this.handleRecover),o==="auto"&&this._isMounted&&(this.setState({isProcessingAuto:!0}),this.processAutoMode(r,a))}processAutoMode=async(r,a)=>{const o=this.props,s=o.apiKey||this.context?.apiKey,n=o.apiUrl||this.context?.apiUrl,i=typeof navigator<"u"?navigator.language:"en-US",l=o.language||this.context?.language||i;if(!s){console.error("AdaptiveUI: Missing API Key for auto mode. Provide it via props or <AdaptiveProvider>."),this._isMounted&&this.setState({isProcessingAuto:!1});return}if(s==="sk_test_mock"){setTimeout(()=>{this._isMounted&&this.setState({isProcessingAuto:!1,aiData:{severity:"medium",title:"Mock Mode Error",description:"This is a mocked response because sk_test_mock was used.",actionLabel:"Reload Component"}})},1500);return}try{const c={message:r.message,componentStack:a.componentStack||void 0,url:typeof window<"u"?window.location.href:void 0},h=N(c),f=await fetch(n||"https://api.cognicatch.dev/v1/analyze-error",{method:"POST",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},body:JSON.stringify({error:h.message,stack:h.componentName?`Component: ${h.componentName}`:"No stack",routePath:h.routePath,language:l})});if(!f.ok)throw new Error(`SaaS API returned ${f.status}`);const d=await f.json();d&&this._isMounted&&(d.severity==="low"?(j(d.title,d.description,d.actionLabel??void 0,this.handleRecover),this.setState({isProcessingAuto:!1,aiData:d})):this.setState({isProcessingAuto:!1,aiData:d}))}catch(c){console.error("AdaptiveUI AI Request failed:",c),this._isMounted&&this.setState({isProcessingAuto:!1,aiData:{severity:"medium",title:"Communication Error",description:"We were unable to connect to the analytics servers at this time. Our team has already been notified.",actionLabel:"Reload Component"}})}};handleRecover=()=>{this._isMounted&&this.setState({hasError:!1,error:null,aiData:null,hasCrashedFallback:!1}),this.props.onRecover&&this.props.onRecover()};render(){if(this.state.hasCrashedFallback)return e.jsx(L,{onRecover:this.handleRecover,theme:this.props.theme});if(!this.state.hasError)return this.props.children;const{mode:r,theme:a,className:o}=this.props;if(r==="manual"){const{severity:s,title:n,description:i,actionLabel:l}=this.props;try{if(s==="high")return e.jsx(A,{isOpen:!0,onOpenChange:c=>{c||this.handleRecover()},title:n,description:i,theme:a});if(s==="medium")return e.jsx(z,{title:n,description:i,primaryAction:l?{label:l,onClick:this.handleRecover}:void 0,theme:a,className:o});if(s==="low")return null}catch{return this.setState({hasCrashedFallback:!0}),null}}if(r==="auto"){if(this.state.isProcessingAuto)return e.jsxs("div",{className:"w-full h-full min-h-[100px] rounded-xl border border-zinc-200/50 dark:border-zinc-800/50 bg-zinc-50/50 dark:bg-zinc-900/20 flex flex-col items-center justify-center p-6 animate-pulse",children:[e.jsx("div",{className:"w-5 h-5 border-2 border-zinc-400/30 dark:border-zinc-500/30 border-t-zinc-900 dark:border-t-zinc-100 rounded-full animate-spin mb-3"}),e.jsx("p",{className:"text-xs font-medium text-zinc-500 dark:text-zinc-400",children:"Analyzing error context..."})]});if(this.state.aiData){const{severity:s,title:n,description:i,actionLabel:l}=this.state.aiData;try{if(s==="high")return e.jsx(A,{isOpen:!0,onOpenChange:c=>{c||this.handleRecover()},title:n,description:i,theme:a});if(s==="medium")return e.jsx(z,{title:n,description:i,primaryAction:l?{label:l,onClick:this.handleRecover}:void 0,theme:a,className:o});if(s==="low")return null}catch{return this.setState({hasCrashedFallback:!0}),null}}}return null}}exports.AdaptiveErrorBoundary=O;exports.AdaptiveProvider=I;exports.AdaptiveToastProvider=T;exports.adaptiveToast=M;exports.useAdaptive=F;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),g=require("react"),h=require("lucide-react"),D=require("clsx"),S=require("tailwind-merge"),P=require("@radix-ui/react-dialog"),m=require("sonner");function T(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const a in t)if(a!=="default"){const o=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(r,a,o.get?o:{enumerable:!0,get:()=>t[a]})}}return r.default=t,Object.freeze(r)}const v=T(P),M=[{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 z(t,r=1e3){if(!t)return"";let a=String(t);return a.length>r&&(a=`${a.slice(0,r)}... [TRUNCATED]`),M.reduce((o,{pattern:n,replacement:s})=>o.replace(n,s),a)}function E(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:z(t.message,500),httpStatus:t.httpStatus,errorCode:t.errorCode?z(t.errorCode,100):void 0,routePath:r,componentName:a}}function x(...t){return S.twMerge(D.clsx(t))}function j({title:t,description:r,severity:a="medium",primaryAction:o,secondaryAction:n,theme:s,className:i}){const l=a==="high";return e.jsx("div",{role:"alert","aria-live":"polite",className:x("rounded-xl border p-4 transition-all shadow-sm",!s?.backgroundColor&&"bg-amber-50 border-amber-200/60 dark:bg-amber-950/20 dark:border-amber-900/40",s?.fontFamily,i),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:l?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||n)&&e.jsxs("div",{className:"mt-4 flex flex-wrap items-center gap-3",children:[o&&e.jsx("button",{onClick:o.onClick,type:"button",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}),n&&e.jsx("button",{type:"button",onClick:n.onClick,className:"text-xs font-medium opacity-70 hover:opacity-100 transition-opacity underline-offset-4 hover:underline",style:{color:s?.textColor},children:n.label})]})]})]})})}function A({title:t,description:r,statusUrl:a,showRefresh:o=!0,isOpen:n,onOpenChange:s,theme:i,onPrimaryAction:l,primaryActionLabel:u="Refresh the page"}){const[d,p]=g.useState(!1);g.useEffect(()=>{p(!0)},[]);const b=i==="dark"||typeof i=="object"&&i?.backgroundColor==="dark",c=typeof i=="object"?i.primaryColor:void 0,y=typeof i=="object"?i.fontFamily:void 0;return d?e.jsx(v.Root,{open:n,onOpenChange:s,children:e.jsx(v.Portal,{children:e.jsxs("div",{className:`cognicatch-ui-wrapper ${b?"dark":""} ${y||""}`,children:[e.jsx(v.Overlay,{className:"radix-overlay fixed inset-0 z-[99999] bg-zinc-900/20 dark:bg-black/80 backdrop-blur-sm"}),e.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(v.Content,{onInteractOutside:k=>k.preventDefault(),onEscapeKeyDown:k=>k.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(v.Title,{className:"text-xl font-semibold text-zinc-900 dark:text-zinc-50 mb-3 tracking-tight",children:t}),e.jsx(v.Description,{className:"text-sm leading-relaxed mb-8 max-w-[280px] 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:()=>l?l():window.location.reload(),type:"button",style:c?{backgroundColor:c,borderColor:c}:{},className:x("flex items-center justify-center gap-2 w-full py-3 px-4 rounded-xl font-medium transition-all shadow-sm",c?"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"}),u]}),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}const C=g.createContext(void 0);function I({apiKey:t,apiUrl:r,language:a,handleUserBilling:o=!1,children:n}){const s=g.useCallback(async(l,u)=>{const d=l instanceof Error?l:new Error(String(l)),p=m.toast.loading("Analyzing error context...",{description:"Applying AI recovery heuristics..."});if(t==="sk_test_mock"){setTimeout(()=>{m.toast.info("Mock Mode Analysis",{id:p,description:"This is a mocked async recovery because sk_test_mock was used."})},1500);return}try{const b={message:d.message,componentStack:d.stack,url:typeof window<"u"?window.location.href:void 0},c=E(b),y=r||"https://api.cognicatch.dev/v1/analyze-error",k=typeof navigator<"u"?navigator.language:"en-US",_=a||k,R=u?.handleUserBilling!==void 0?u.handleUserBilling:o,w=await fetch(y,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify({error:c.message,stack:c.componentName?`Component: ${c.componentName}`:c.errorCode||"Async Error",routePath:c.routePath,language:_,handleUserBilling:R})});if(!w.ok)throw new Error("SaaS API Error");const f=await w.json();f&&((f.severity||f.level)==="low"?m.toast.info(f.title,{id:p,description:f.description}):m.toast.error(f.title,{id:p,description:f.description}))}catch(b){console.error("AdaptiveUI API Request failed:",b),m.toast.error("Analysis Failed",{id:p,description:"We couldn't reach the AI servers. Please try again later."})}},[t,r,a,o]),i=g.useMemo(()=>({apiKey:t,apiUrl:r,language:a,handleUserBilling:o,captureAsyncError:s}),[t,r,a,o,s]);return e.jsx(C.Provider,{value:i,children:n})}function F(){const t=g.useContext(C);if(!t)throw new Error("❌ AdaptiveUI Developer Error: You tried to use the 'useAdaptive' hook outside of an <AdaptiveProvider>. Please wrap the root of your application (e.g., App.tsx or layout.tsx) with <AdaptiveProvider apiKey='YOUR_KEY'>");return t}function L({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 N(t,r,a,o,n="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[n],duration:n==="high"?8e3:5e3,action:a?{label:a,onClick:()=>o?.()}:void 0})}const O={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(()=>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})]})}))}},U=({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",role:"img","aria-label":"error icon",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,type:"button",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 B 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"&&N(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,n=o.apiKey||this.context?.apiKey,s=o.apiUrl||this.context?.apiUrl,i=typeof navigator<"u"?navigator.language:"en-US",l=o.language||this.context?.language||i;if(!n){console.error("AdaptiveUI: Missing API Key for auto mode. Provide it via props or <AdaptiveProvider>."),this._isMounted&&this.setState({isProcessingAuto:!1});return}if(n==="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 u={message:r.message,componentStack:a.componentStack||void 0,url:typeof window<"u"?window.location.href:void 0},d=E(u),b=await fetch(s||"https://api.cognicatch.dev/v1/analyze-error",{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json"},body:JSON.stringify({error:d.message,stack:d.componentName?`Component: ${d.componentName}`:"No stack",routePath:d.routePath,language:l})});if(!b.ok)throw new Error(`SaaS API returned ${b.status}`);const c=await b.json();c&&this._isMounted&&(c.severity==="low"?(N(c.title,c.description,c.actionLabel??void 0,this.handleRecover),this.setState({isProcessingAuto:!1,aiData:c})):this.setState({isProcessingAuto:!1,aiData:c}))}catch(u){console.error("AdaptiveUI AI Request failed:",u),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(U,{onRecover:this.handleRecover,theme:this.props.theme});if(!this.state.hasError)return this.props.children;const{mode:r,theme:a,className:o,showRefresh:n,statusUrl:s}=this.props;if(r==="manual"){const{severity:i,title:l,description:u,actionLabel:d}=this.props;try{if(i==="high")return e.jsx(A,{isOpen:!0,onOpenChange:p=>{p||this.handleRecover()},title:l,description:u,theme:a,showRefresh:n,statusUrl:s});if(i==="medium")return e.jsx(j,{title:l,description:u,primaryAction:d?{label:d,onClick:this.handleRecover}:void 0,theme:a,className:o});if(i==="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:i,title:l,description:u,actionLabel:d}=this.state.aiData;try{if(i==="high")return e.jsx(A,{isOpen:!0,onOpenChange:p=>{p||this.handleRecover()},title:l,description:u,theme:a,showRefresh:n,statusUrl:s});if(i==="medium")return e.jsx(j,{title:l,description:u,primaryAction:d?{label:d,onClick:this.handleRecover}:void 0,theme:a,className:o});if(i==="low")return null}catch{return this.setState({hasCrashedFallback:!0}),null}}}return null}}exports.AdaptiveErrorBoundary=B;exports.AdaptiveProvider=I;exports.AdaptiveToastProvider=L;exports.adaptiveToast=O;exports.useAdaptive=F;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Component } from 'react';
2
+ import { Context } from 'react';
2
3
  import { default as default_2 } from 'react';
3
4
  import { ErrorInfo } from 'react';
4
5
  import { JSX } from 'react/jsx-runtime';
@@ -6,13 +7,14 @@ import { ReactNode } from 'react';
6
7
  import { Toaster } from 'sonner';
7
8
  import { z } from 'zod';
8
9
 
9
- declare const AdaptiveContext: default_2.Context<AdaptiveContextType | undefined>;
10
+ declare const AdaptiveContext: Context<AdaptiveContextType | undefined>;
10
11
 
11
12
  declare interface AdaptiveContextType {
12
13
  apiKey: string;
13
14
  apiUrl?: string;
14
15
  language?: string;
15
- captureAsyncError: (error: Error | unknown) => Promise<void>;
16
+ handleUserBilling?: boolean;
17
+ captureAsyncError: (error: Error | unknown, options?: CaptureAsyncOptions) => Promise<void>;
16
18
  }
17
19
 
18
20
  export declare class AdaptiveErrorBoundary extends Component<Props, State> {
@@ -31,10 +33,11 @@ export declare class AdaptiveErrorBoundary extends Component<Props, State> {
31
33
 
32
34
  export declare type AdaptiveErrorProps = ManualModeProps | AutoModeProps;
33
35
 
34
- export declare function AdaptiveProvider({ apiKey, apiUrl, language, children }: {
36
+ export declare function AdaptiveProvider({ apiKey, apiUrl, language, handleUserBilling, children, }: {
35
37
  apiKey: string;
36
38
  apiUrl?: string;
37
39
  language?: string;
40
+ handleUserBilling?: boolean;
38
41
  children: ReactNode;
39
42
  }): JSX.Element;
40
43
 
@@ -53,11 +56,12 @@ declare type AdaptiveToastProviderProps = default_2.ComponentProps<typeof Toaste
53
56
  };
54
57
 
55
58
  export declare interface AutoModeProps extends BaseAdaptiveProps {
56
- mode: 'auto';
59
+ mode: "auto";
57
60
  apiKey?: string;
58
61
  apiUrl?: string;
59
62
  error?: Error;
60
63
  language?: string;
64
+ handleUserBilling?: boolean;
61
65
  }
62
66
 
63
67
  export declare interface BaseAdaptiveProps {
@@ -66,6 +70,10 @@ export declare interface BaseAdaptiveProps {
66
70
  className?: string;
67
71
  }
68
72
 
73
+ declare interface CaptureAsyncOptions {
74
+ handleUserBilling?: boolean;
75
+ }
76
+
69
77
  declare type GenUIResponse = z.infer<typeof GenUIResponseSchema>;
70
78
 
71
79
  declare const GenUIResponseSchema: z.ZodObject<{
@@ -80,7 +88,7 @@ declare const GenUIResponseSchema: z.ZodObject<{
80
88
  }, z.core.$strip>;
81
89
 
82
90
  export declare interface ManualModeProps extends BaseAdaptiveProps {
83
- mode: 'manual';
91
+ mode: "manual";
84
92
  severity: SeverityLevel;
85
93
  title: string;
86
94
  description: string;
@@ -89,9 +97,11 @@ export declare interface ManualModeProps extends BaseAdaptiveProps {
89
97
 
90
98
  declare type Props = AdaptiveErrorProps & {
91
99
  children: ReactNode;
100
+ showRefresh?: boolean;
101
+ statusUrl?: string;
92
102
  };
93
103
 
94
- declare type SeverityLevel = 'low' | 'medium' | 'high';
104
+ declare type SeverityLevel = "low" | "medium" | "high";
95
105
 
96
106
  declare interface State {
97
107
  hasError: boolean;
@@ -114,7 +124,7 @@ export declare function useAdaptive(): AdaptiveContextType;
114
124
  export { }
115
125
 
116
126
 
117
- declare module '@tanstack/react-router' {
127
+ declare module "@tanstack/react-router" {
118
128
  interface Register {
119
129
  router: ReturnType<typeof getRouter>;
120
130
  }