awel 0.1.0 → 0.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 +17 -0
- package/README.zh-CN.md +115 -0
- package/dist/cli/agent.js +11 -0
- package/dist/cli/awel-config.d.ts +6 -0
- package/dist/cli/awel-config.js +20 -0
- package/dist/cli/babel-setup.js +2 -19
- package/dist/cli/comment-popup.js +50 -26
- package/dist/cli/index.js +2 -0
- package/dist/cli/onboarding.d.ts +1 -0
- package/dist/cli/onboarding.js +58 -0
- package/dist/cli/providers/registry.d.ts +12 -0
- package/dist/cli/providers/registry.js +41 -0
- package/dist/cli/providers/vercel.js +18 -4
- package/dist/cli/subprocess.js +76 -14
- package/dist/dashboard/assets/index-B374_cjZ.css +1 -0
- package/dist/dashboard/assets/{index-Bk--q3wu.js → index-BJ6wUfxa.js} +89 -84
- package/dist/dashboard/index.html +2 -2
- package/dist/host/host.js +61 -52
- package/package.json +1 -2
- package/dist/dashboard/assets/index-DkWV03So.css +0 -1
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta charset="UTF-8" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Awel - Mission Control</title>
|
|
8
|
-
<script type="module" crossorigin src="/_awel/dashboard/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/_awel/dashboard/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/_awel/dashboard/assets/index-BJ6wUfxa.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/_awel/dashboard/assets/index-B374_cjZ.css">
|
|
10
10
|
</head>
|
|
11
11
|
|
|
12
12
|
<body>
|
package/dist/host/host.js
CHANGED
|
@@ -1,9 +1,25 @@
|
|
|
1
|
-
"use strict";(()=>{var
|
|
2
|
-
`)){if(n.length>=e)break;if(!o.includes("at ")||o.includes("/_awel/")||o.includes("<anonymous>"))continue;let r=o.match(/at\s+(.+?)\s+\((.+?):(\d+):(\d+)\)/);if(r){n.push({methodName:r[1],file:r[2],line:+r[3],column:+r[4]});continue}let i=o.match(/at\s+(.+?):(\d+):(\d+)/);if(i){n.push({methodName:"",file:i[1],line:+i[2],column:+i[3]});continue}}return n}async function
|
|
1
|
+
"use strict";(()=>{var Pe="http://localhost:3001/_awel/dashboard",N="awel-sidebar-open";function at(){try{let e=localStorage.getItem("awel-theme");if(e==="light"||e==="dark")return e}catch{}return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}var Q=at();function We(e){Q=e;let t=document.getElementById("awel-host");t&&(t.dataset.theme=e)}function ie(e){for(;e;){let t=e.id;if(t==="awel-host"||t==="awel-sidebar")return!0;e=e.parentElement}return!1}var b=[],he=!1,ee=null;function ze(e){ee=e}function ye(e){b=e}function be(e){he=e}function Fe(e,t){return e+":"+t.trim().slice(0,200)}function Ue(){let e=document.getElementById("awel-sidebar");if(!e)return;let t=e.querySelector("iframe");t?.contentWindow&&t.contentWindow.postMessage({type:"AWEL_CONSOLE_ENTRIES",entries:b},"*")}function te(){ee&&(ee.classList.remove("error","warning"),!(!he||b.length===0)&&(b.some(e=>e.level==="error")?ee.classList.add("error"):b.some(e=>e.level==="warning")&&ee.classList.add("warning")))}function se(e,t){let n=Fe(e.level,e.message),o=b.find(r=>Fe(r.level,r.message)===n);if(o)o.count++,o.timestamp=e.timestamp;else{let r={...e,id:Math.random().toString(36).slice(2)+Date.now().toString(36),count:1};b.push(r),b.length>50&&(b=b.slice(-50)),t&&t().then(i=>{i&&i.length>0&&(r.source=i[0].source,r.line=i[0].line,r.column=i[0].column,r.sourceTrace=i,Ue())}).catch(()=>{})}he=!0,te(),Ue()}function ge(e=15){let t=new Error;if(!t.stack)return[];let n=[];for(let o of t.stack.split(`
|
|
2
|
+
`)){if(n.length>=e)break;if(!o.includes("at ")||o.includes("/_awel/")||o.includes("<anonymous>"))continue;let r=o.match(/at\s+(.+?)\s+\((.+?):(\d+):(\d+)\)/);if(r){n.push({methodName:r[1],file:r[2],line:+r[3],column:+r[4]});continue}let i=o.match(/at\s+(.+?):(\d+):(\d+)/);if(i){n.push({methodName:"",file:i[1],line:+i[2],column:+i[3]});continue}}return n}async function ae(e){let t=window.__AWEL_PROJECT_CWD__;if(t&&e.length>0)try{let r=e.map(s=>{let l=s.file,a=s.file.match(/^https?:\/\/[^/]+\/_next\/(.+)$/);return a&&(l=`file://${t}/.next/dev/${a[1]}`),{file:l,line1:s.line,column1:s.column,methodName:s.methodName,arguments:[]}}),i=await fetch("/__nextjs_original-stack-frames",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({frames:r,isServer:!1,isEdgeServer:!1,isAppDirectory:!0})});if(i.ok){let s=await i.json(),l=Array.isArray(s)?s:[],a=[];for(let g of l){if(g?.status!=="fulfilled")continue;let u=g.value?.originalStackFrame;if(!u?.file||u.ignored)continue;let c=String(u.file);c=c.replace(/^file:\/\//,""),c.startsWith(t)&&(c=c.slice(t.length).replace(/^\//,"")),c=c.replace(/^\.\//,""),!(c.startsWith("node_modules/")||c.includes("/node_modules/"))&&a.push({source:c,line:u.line1??void 0,column:u.column1??void 0})}if(a.length>0)return a}}catch{}let n=e[0];if(!n)return null;let o=n.file;return o=o.replace(/^webpack-internal:\/\/\/(\.\/?)?/,""),o=o.replace(/^\[project\]\//,""),o=o.replace(/^https?:\/\/[^/]+\//,""),o.includes("_next/static/")||!o||o.startsWith("native")?null:[{source:o,line:n.line,column:n.column}]}function je(e){return e.map(t=>{if(t instanceof Error)return t.stack||t.message;if(typeof t=="string")return t;try{return JSON.stringify(t,null,2)}catch{return String(t)}}).join(" ")}function Ke(){let e=console.error,t=console.warn;console.error=function(...n){e.apply(console,n);let o=je(n).slice(0,500);if(o.startsWith("[Awel"))return;let r;n[0]instanceof Error&&n[0].stack&&(r=n[0].stack.slice(0,1e3));let i=ge();se({level:"error",message:o,stack:r,timestamp:Date.now()},i.length>0?()=>ae(i):void 0)},console.warn=function(...n){t.apply(console,n);let o=je(n).slice(0,500);if(o.startsWith("[Awel"))return;let r=ge();se({level:"warning",message:o,timestamp:Date.now()},r.length>0?()=>ae(r):void 0)},window.addEventListener("error",n=>{if(n.filename?.includes("/_awel/"))return;let o=(n.message||"Unknown error").slice(0,500);if(o.startsWith("[Awel"))return;let r;n.error instanceof Error&&n.error.stack&&(r=n.error.stack.slice(0,1e3));let i=n.filename?[{file:n.filename,methodName:"",line:n.lineno||0,column:n.colno||0}]:[];se({level:"error",message:o,stack:r,timestamp:Date.now()},i.length>0?()=>ae(i):void 0)}),window.addEventListener("unhandledrejection",n=>{let o=n.reason,r,i;if(o instanceof Error)r=(o.message||"Unhandled promise rejection").slice(0,500),o.stack&&(i=o.stack.slice(0,1e3));else if(typeof o=="string")r=o.slice(0,500);else try{r=JSON.stringify(o).slice(0,500)}catch{r="Unhandled promise rejection"}if(r.startsWith("[Awel"))return;let s=ge();se({level:"error",message:`Unhandled rejection: ${r}`,stack:i,timestamp:Date.now()},s.length>0?()=>ae(s):void 0)})}var h=null,lt=`
|
|
3
3
|
:host {
|
|
4
4
|
all: initial;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
+
:host([data-theme="dark"]) {
|
|
8
|
+
--bg: #18181b; --border: #27272a; --fg: #fafafa;
|
|
9
|
+
--hover-bg: #27272a; --hover-border: #3f3f46;
|
|
10
|
+
--active-bg: #3f3f46; --active-border: #a1a1aa;
|
|
11
|
+
--shadow: rgba(0, 0, 0, 0.4);
|
|
12
|
+
--dot-ring: #18181b;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
:host([data-theme="light"]) {
|
|
16
|
+
--bg: #ffffff; --border: #d4d4d8; --fg: #18181b;
|
|
17
|
+
--hover-bg: #f4f4f5; --hover-border: #a1a1aa;
|
|
18
|
+
--active-bg: #e4e4e7; --active-border: #71717a;
|
|
19
|
+
--shadow: rgba(0, 0, 0, 0.1);
|
|
20
|
+
--dot-ring: #ffffff;
|
|
21
|
+
}
|
|
22
|
+
|
|
7
23
|
.awel-controls {
|
|
8
24
|
position: fixed;
|
|
9
25
|
bottom: 24px;
|
|
@@ -20,37 +36,32 @@
|
|
|
20
36
|
align-items: center;
|
|
21
37
|
justify-content: center;
|
|
22
38
|
gap: 8px;
|
|
23
|
-
background:
|
|
24
|
-
border:
|
|
25
|
-
|
|
39
|
+
background: var(--bg);
|
|
40
|
+
border: none;
|
|
41
|
+
border-radius: 8px;
|
|
42
|
+
color: var(--fg);
|
|
26
43
|
font-family: inherit;
|
|
27
44
|
font-size: 13px;
|
|
28
45
|
font-weight: 500;
|
|
29
46
|
cursor: pointer;
|
|
30
|
-
box-shadow: 0 4px 12px
|
|
47
|
+
box-shadow: 0 4px 12px var(--shadow);
|
|
31
48
|
transition: all 0.15s ease;
|
|
32
49
|
}
|
|
33
50
|
|
|
34
51
|
.awel-trigger {
|
|
35
52
|
padding: 10px 16px;
|
|
36
|
-
border-radius: 8px 0 0 8px;
|
|
37
53
|
}
|
|
38
54
|
|
|
39
55
|
.awel-inspector-btn {
|
|
40
56
|
padding: 10px 12px;
|
|
41
|
-
border-radius: 0;
|
|
42
|
-
border-left: none;
|
|
43
57
|
}
|
|
44
58
|
|
|
45
59
|
.awel-screenshot-btn {
|
|
46
60
|
padding: 10px 12px;
|
|
47
|
-
border-radius: 0 8px 8px 0;
|
|
48
|
-
border-left: none;
|
|
49
61
|
}
|
|
50
62
|
|
|
51
63
|
.awel-trigger:hover, .awel-inspector-btn:hover, .awel-screenshot-btn:hover {
|
|
52
|
-
background:
|
|
53
|
-
border-color: #3f3f46;
|
|
64
|
+
background: var(--hover-bg);
|
|
54
65
|
}
|
|
55
66
|
|
|
56
67
|
.awel-trigger:active, .awel-inspector-btn:active, .awel-screenshot-btn:active {
|
|
@@ -58,9 +69,8 @@
|
|
|
58
69
|
}
|
|
59
70
|
|
|
60
71
|
.awel-inspector-btn.active {
|
|
61
|
-
background:
|
|
62
|
-
|
|
63
|
-
color: #fafafa;
|
|
72
|
+
background: var(--active-bg);
|
|
73
|
+
color: var(--fg);
|
|
64
74
|
}
|
|
65
75
|
|
|
66
76
|
.awel-icon {
|
|
@@ -79,7 +89,7 @@
|
|
|
79
89
|
width: 8px;
|
|
80
90
|
height: 8px;
|
|
81
91
|
border-radius: 50%;
|
|
82
|
-
border: 2px solid
|
|
92
|
+
border: 2px solid var(--dot-ring);
|
|
83
93
|
pointer-events: none;
|
|
84
94
|
transition: background 0.15s ease;
|
|
85
95
|
display: none;
|
|
@@ -94,17 +104,17 @@
|
|
|
94
104
|
background: #eab308;
|
|
95
105
|
display: block;
|
|
96
106
|
}
|
|
97
|
-
`,
|
|
107
|
+
`,ct='<span class="awel-icon" style="font-size:14px;line-height:1">\u{1F338}</span>',dt=`
|
|
98
108
|
<svg class="awel-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
99
109
|
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"/>
|
|
100
110
|
<circle cx="12" cy="12" r="3"/>
|
|
101
111
|
</svg>
|
|
102
|
-
`,
|
|
112
|
+
`,ut=`
|
|
103
113
|
<svg class="awel-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
104
114
|
<path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z"/>
|
|
105
115
|
<circle cx="12" cy="13" r="4"/>
|
|
106
116
|
</svg>
|
|
107
|
-
`;function
|
|
117
|
+
`;function O(){return!!h&&h.isConnected&&h.style.display!=="none"}function mt(){O()?ve():R()}function R(e=!1){if(h&&h.isConnected){h.style.display="",e||(h.style.animation="awel-fade-in 0.2s ease");try{sessionStorage.setItem(N,"true")}catch{}return}if(h&&!h.isConnected&&(h=null),h=document.createElement("div"),h.id="awel-sidebar",h.style.cssText=`
|
|
108
118
|
position: fixed;
|
|
109
119
|
inset: 0;
|
|
110
120
|
z-index: 999999;
|
|
@@ -115,12 +125,12 @@
|
|
|
115
125
|
from { opacity: 0; transform: translateY(8px); }
|
|
116
126
|
to { opacity: 1; transform: translateY(0); }
|
|
117
127
|
}
|
|
118
|
-
`,document.head.appendChild(n)}let t=document.createElement("iframe");t.src=
|
|
128
|
+
`,document.head.appendChild(n)}let t=document.createElement("iframe");t.src=Pe,t.setAttribute("allowtransparency","true"),t.style.cssText=`
|
|
119
129
|
width: 100%;
|
|
120
130
|
height: 100%;
|
|
121
131
|
border: none;
|
|
122
132
|
background: transparent;
|
|
123
|
-
`,t.addEventListener("load",()=>{b.length>0&&t.contentWindow&&t.contentWindow.postMessage({type:"AWEL_CONSOLE_ENTRIES",entries:b},"*")}),
|
|
133
|
+
`,t.addEventListener("load",()=>{b.length>0&&t.contentWindow&&t.contentWindow.postMessage({type:"AWEL_CONSOLE_ENTRIES",entries:b},"*")}),h.appendChild(t),document.documentElement.appendChild(h);try{sessionStorage.setItem(N,"true")}catch{}}function ve(){h&&(h.style.display="none");try{sessionStorage.removeItem(N)}catch{}}function Ee(){return h}function we(e){if(document.getElementById("awel-host"))return;let t=document.createElement("div");t.id="awel-host",t.dataset.theme=Q,document.documentElement.appendChild(t);let n=t.attachShadow({mode:"closed"});t._shadow=n;let o=document.createElement("style");o.textContent=lt,n.appendChild(o);let r=document.createElement("div");r.className="awel-controls";let i=document.createElement("button");i.className="awel-trigger",i.innerHTML=`${ct} <span>Awel</span>`,i.addEventListener("click",mt);let s=document.createElement("div");s.className="awel-console-dot",i.appendChild(s),ze(s);let l=document.createElement("button");l.className="awel-inspector-btn",l.innerHTML=dt,l.title="Inspector mode (\u2325\u21E7)",l.addEventListener("click",e.onInspectorToggle);let a=document.createElement("button");a.className="awel-screenshot-btn",a.innerHTML=ut,a.title="Screenshot annotation",a.addEventListener("click",e.onScreenshot),r.appendChild(i),r.appendChild(l),r.appendChild(a),n.appendChild(r)}var D=!1,v=null,F=null,U=null,xe=!1,E=null,I=0,K=null,T=null,y=null,$=0,X=!1,Y=!1,le=!1,j=null,V=null,ne=null,z=null;function Me(){return D}function Xe(e){le=e}function Ie(e){F=e}function Ye(e){V=e}function gt(e){let t=e.getAttribute("data-source-loc");if(!t)return null;let n=t.split(":");if(n.length<2)return null;let o=n.length>=3?parseInt(n[n.length-1],10):0,r=parseInt(n[n.length-2],10),i=n.slice(0,n.length-2).join(":");return i&&!isNaN(r)?{fileName:i,line:r,column:isNaN(o)?0:o}:null}function Ve(e){return e.getAttribute("data-source-component")||null}function ht(e){let t=Ve(e),n=[],o=new Set;t&&o.add(t);let r=e.parentElement;for(;r&&n.length<10;){let i=r.getAttribute("data-source-component");i&&!o.has(i)&&(o.add(i),n.push(i)),r=r.parentElement}return n.length>0?n:null}function de(e){for(let t of Object.keys(e))if(t.startsWith("__reactFiber")||t.startsWith("__reactInternalInstance"))return e[t];return null}function yt(e){let t=de(e);if(!t)return null;for(;t;){if(typeof t.type=="function"){let n=t.memoizedProps;if(!n||typeof n!="object")return null;let o={},r=0;for(let[i,s]of Object.entries(n))if(i!=="children"){if(r>=15)break;s===void 0?o[i]="undefined":s===null?o[i]="null":typeof s=="function"?o[i]="function":typeof s=="object"?o[i]="object":typeof s=="string"?o[i]=`string: ${s.length>50?s.slice(0,50)+"...":s}`:typeof s=="number"||typeof s=="boolean"?o[i]=String(s):o[i]=typeof s,r++}return Object.keys(o).length>0?o:null}t=t.return}return null}function bt(e){let t=de(e);for(;t;){let n=t._debugSource;if(n&&n.fileName&&typeof n.lineNumber=="number")return{fileName:n.fileName,line:n.lineNumber,column:typeof n.columnNumber=="number"?n.columnNumber:0};t=t.return}return null}function vt(e){return/^[A-Z][a-zA-Z0-9]*$/.test(e)}function Ge(e){if(typeof e.type!="function")return null;let t=e.type,n=t.displayName||t.name;if(!n||!vt(n))return null;let o=e._debugSource;return!o?.fileName||/node_modules/.test(o.fileName)?null:n}function Ce(e){let t=de(e);for(;t;){let n=Ge(t);if(n)return n;t=t.return}return null}function Et(e){let t=Ce(e),n=[],o=new Set;t&&o.add(t);let r=de(e),i=!1;for(;r&&n.length<10;){let s=Ge(r);s&&(i?o.has(s)||(o.add(s),n.push(s)):i=!0),r=r.return}return n.length>0?n:null}function w(e){let t=parseFloat(e);return isNaN(t)?0:t}function Ae(e){let t=document.createElement("div");t.id=e||"awel-highlight",t.style.cssText=`
|
|
124
134
|
position: fixed;
|
|
125
135
|
pointer-events: none;
|
|
126
136
|
z-index: 999998;
|
|
@@ -130,7 +140,7 @@
|
|
|
130
140
|
`;let n=[{name:"margin",color:"rgba(246, 178, 107, 0.66)"},{name:"border",color:"rgba(255, 229, 153, 0.66)"},{name:"padding",color:"rgba(147, 196, 125, 0.55)"},{name:"content",color:"rgba(111, 168, 220, 0.66)"}],o=t;for(let r of n){let i=document.createElement("div");i.dataset.boxLayer=r.name,i.style.cssText=`
|
|
131
141
|
position: absolute;
|
|
132
142
|
background: ${r.color};
|
|
133
|
-
`,o.appendChild(i),o=i}return document.body.appendChild(t),t}function
|
|
143
|
+
`,o.appendChild(i),o=i}return document.body.appendChild(t),t}function _e(e,t){let n=e.getBoundingClientRect(),o=getComputedStyle(e),r=w(o.marginTop),i=w(o.marginRight),s=w(o.marginBottom),l=w(o.marginLeft),a=w(o.borderTopWidth),g=w(o.borderRightWidth),u=w(o.borderBottomWidth),c=w(o.borderLeftWidth),d=w(o.paddingTop),m=w(o.paddingRight),A=w(o.paddingBottom),_=w(o.paddingLeft),M=n.top-r,pe=n.left-l,H=l+n.width+i,st=r+n.height+s;t.style.top=`${M}px`,t.style.left=`${pe}px`,t.style.width=`${H}px`,t.style.height=`${st}px`,t.style.display="block";let Be=t.firstElementChild;Be.style.inset="0";let q=Be.firstElementChild;q.style.top=`${r}px`,q.style.left=`${l}px`,q.style.right=`${i}px`,q.style.bottom=`${s}px`;let Z=q.firstElementChild;Z.style.top=`${a}px`,Z.style.left=`${c}px`,Z.style.right=`${g}px`,Z.style.bottom=`${u}px`;let re=Z.firstElementChild;return re.style.top=`${d}px`,re.style.left=`${_}px`,re.style.right=`${m}px`,re.style.bottom=`${A}px`,n}function Je(e,t){let n=e;for(let o=0;o<t;o++){let r=n.parentElement;for(;r&&ie(r);)r=r.parentElement;if(!r)break;n=r}return n}function wt(e){let t=`<${e.tagName.toLowerCase()}>`,n=e.getAttribute("data-source-component");return n?`${n} \xB7 ${t}`:t}function qe(e){if(!T)return;y||(y=document.createElement("div"),y.id="awel-inspector-label",y.style.cssText=`
|
|
134
144
|
position: fixed;
|
|
135
145
|
pointer-events: none;
|
|
136
146
|
z-index: 999999;
|
|
@@ -143,7 +153,7 @@
|
|
|
143
153
|
padding: 3px 8px;
|
|
144
154
|
border-radius: 4px;
|
|
145
155
|
white-space: nowrap;
|
|
146
|
-
`,document.body.appendChild(y)),y.textContent=
|
|
156
|
+
`,document.body.appendChild(y)),y.textContent=wt(T);let t=e.top-24,n=e.left;t<4&&(t=e.bottom+4),n=Math.max(4,n),y.style.top=`${t}px`,y.style.left=`${n}px`,y.style.display="block"}function Le(e){if(!D)return;let t=e.target;if(!t||ie(t)){v&&(v.style.display="none"),y&&(y.style.display="none");return}t!==K&&(I=0,$=0,K=t),T=Je(t,I),v||(v=Ae());let n=_e(T,v);qe(n)}function Te(e){if(!D||!K||(e.preventDefault(),$+=e.deltaY,Math.abs($)<80))return;$<0?I++:I=Math.max(0,I-1),$=0,T=Je(K,I),v||(v=Ae());let t=_e(T,v);qe(t)}function ke(e){if(!D)return;let t=T||e.target;if(!t||ie(t))return;e.preventDefault(),e.stopPropagation(),Y=!0;let n=gt(t),o=n?null:bt(t),r=n||o,i=Ve(t),s=i||Ce(t),a=ht(t)||Et(t),g=yt(t),u={};for(let H of Array.from(t.attributes))H.name.startsWith("data-source-")||(u[H.name]=H.value.slice(0,200));let c={tag:t.tagName.toLowerCase(),component:s,source:r?.fileName||null,line:r?.line||null,column:r?.column||null,text:t.innerText?.slice(0,100)||"",className:t.className||"",props:g,componentChain:a,attributes:u};if(console.group("[Awel Inspector] Selected element"),console.log("DOM element:",t),console.log("tag:",t.tagName.toLowerCase()),console.log("data-source-loc:",t.getAttribute("data-source-loc")),console.log("data-source-component:",t.getAttribute("data-source-component")),console.log("attrSource:",n),console.log("fiberSource:",o),console.log("attrComponent:",i),console.log("fiberComponent:",i?"(skipped)":Ce(t)),console.log("resolved source:",r),console.log("resolved component:",s),console.log("componentChain:",a),console.log("payload:",c),console.groupEnd(),le){le=!1;let H={...c,mode:"attach"};fetch("/api/inspector/select",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(H)}).catch(()=>{}),k(!1);return}F=t,V=c;let d=t.getBoundingClientRect();D=!1;let m=document.getElementById("awel-host"),A=document.getElementById("awel-sidebar");m&&(m.style.display=""),document.body.style.cursor="",document.removeEventListener("mousemove",Le,!0),document.removeEventListener("click",ke,!0),document.removeEventListener("keydown",Se,!0),document.removeEventListener("wheel",Te,!0),I=0,$=0,K=null,T=null,y&&(y.remove(),y=null);let _=`<${c.tag}>`,M=c.source?.split("/").pop()||null,pe=M?c.line?`${M}:${c.line}`:M:null;Ct(d,_,pe)}function Se(e){e.key==="Escape"&&k(!1)}function Ze(e){if(!e.altKey||!e.shiftKey||D)return;let t=document.activeElement;t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable)||(X=!0,Y=!1,k(!0))}function Qe(e){X&&(e.key==="Alt"||e.key==="Shift")&&(Y||k(!1),X=!1,Y=!1)}function et(){X&&(k(!1),X=!1,Y=!1)}function xt(){E||(E=document.createElement("div"),E.id="awel-inspector-toast",E.textContent="Click to select \xB7 Scroll to change depth \xB7 Esc to cancel",E.style.cssText=`
|
|
147
157
|
position: fixed;
|
|
148
158
|
top: 16px;
|
|
149
159
|
left: 50%;
|
|
@@ -161,19 +171,18 @@
|
|
|
161
171
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
|
|
162
172
|
opacity: 0;
|
|
163
173
|
transition: opacity 0.15s ease, transform 0.15s ease;
|
|
164
|
-
`,document.body.appendChild(
|
|
174
|
+
`,document.body.appendChild(E),requestAnimationFrame(()=>{E&&(E.style.opacity="1",E.style.transform="translateX(-50%) translateY(0)")}),setTimeout(()=>{if(!E)return;let e=E;E=null,e.style.opacity="0",e.style.transform="translateX(-50%) translateY(-4px)",setTimeout(()=>e.remove(),150)},5e3))}function Ct(e,t,n){ue();let o=navigator.language.startsWith("zh")?"zh":"en",r=Q,i=new URLSearchParams({name:t,lang:o,theme:r});n&&i.set("file",n);let s=document.createElement("iframe");s.src=`http://localhost:${3001}/_awel/comment-popup?${i.toString()}`,s.id="awel-comment-popup";let l=300,a=180,g=8,u=e.top,c=e.right+g;c+l>window.innerWidth&&(c=e.left-l-g),c<0&&(c=e.left,u=e.bottom+g),c=Math.max(4,Math.min(c,window.innerWidth-l-4)),u=Math.max(4,Math.min(u,window.innerHeight-a-4));let d=r==="dark";s.style.cssText=`
|
|
165
175
|
position: fixed;
|
|
166
|
-
top: ${
|
|
176
|
+
top: ${u}px;
|
|
167
177
|
left: ${c}px;
|
|
168
|
-
width: ${
|
|
169
|
-
height: ${
|
|
178
|
+
width: ${l}px;
|
|
179
|
+
height: ${a}px;
|
|
170
180
|
z-index: 999999;
|
|
171
|
-
border: 1px solid #27272a;
|
|
181
|
+
border: 1px solid ${d?"#27272a":"#d4d4d8"};
|
|
172
182
|
border-radius: 10px;
|
|
173
|
-
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
|
|
174
|
-
background: #18181b;
|
|
175
|
-
`,ce=d=>{d.key==="Escape"&&we()},document.addEventListener("keydown",ce,!0),K=r,document.body.appendChild(r),X=d=>{K&&d.target!==K&&we()},setTimeout(()=>{X&&document.addEventListener("mousedown",X,!0)},0)}function Ee(){K&&(K.remove(),K=null),ce&&(document.removeEventListener("keydown",ce,!0),ce=null),X&&(document.removeEventListener("mousedown",X,!0),X=null),E&&(E.remove(),E=null)}function we(){Ee(),J=null,z=null;let e=document.getElementById("awel-sidebar");e&&_e&&(e.style.display="")}function wt(){!z||!document.body.contains(z)||(V||(V=Ue("awel-hover-highlight")),je(z,V))}function ze(){V&&(V.remove(),V=null)}function I(e){W=e;let t=document.getElementById("awel-host"),n=document.getElementById("awel-sidebar");e?(_e=$(),t&&(t.style.display="none"),n&&(n.style.display="none"),rn(),document.body.style.cursor="crosshair",document.addEventListener("mousemove",De,!0),document.addEventListener("click",Be,!0),document.addEventListener("keydown",We,!0),document.addEventListener("wheel",$e,{passive:!1,capture:!0})):(t&&(t.style.display=""),n&&_e&&(n.style.display=""),document.body.style.cursor="",document.removeEventListener("mousemove",De,!0),document.removeEventListener("click",Be,!0),document.removeEventListener("keydown",We,!0),document.removeEventListener("wheel",$e,!0),P=0,q=null,R=null,y&&(y.remove(),y=null),E&&(E.remove(),E=null),G=!1,Y=!1,ye=!1)}function bt(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i))return e;let n=document.implementation.createHTMLDocument(),o=n.createElement("base"),r=n.createElement("a");return n.head.appendChild(o),n.body.appendChild(r),t&&(o.href=t),r.href=e,r.href}var Et=(()=>{let e=0,t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)})();function L(e){let t=[];for(let n=0,o=e.length;n<o;n++)t.push(e[n]);return t}var Z=null;function ve(e={}){return Z||(e.includeStyleProperties?(Z=e.includeStyleProperties,Z):(Z=L(window.getComputedStyle(document.documentElement)),Z))}function xe(e,t){let o=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return o?parseFloat(o.replace("px","")):0}function an(e){let t=xe(e,"border-left-width"),n=xe(e,"border-right-width");return e.clientWidth+t+n}function ln(e){let t=xe(e,"border-top-width"),n=xe(e,"border-bottom-width");return e.clientHeight+t+n}function Ve(e,t={}){let n=t.width||an(e),o=t.height||ln(e);return{width:n,height:o}}function xt(){let e,t;try{t=process}catch{}let n=t&&t.env?t.env.devicePixelRatio:null;return n&&(e=parseInt(n,10),Number.isNaN(e)&&(e=1)),e||window.devicePixelRatio||1}var x=16384;function vt(e){(e.width>x||e.height>x)&&(e.width>x&&e.height>x?e.width>e.height?(e.height*=x/e.width,e.width=x):(e.width*=x/e.height,e.height=x):e.width>x?(e.height*=x/e.width,e.width=x):(e.width*=x/e.height,e.height=x))}function Q(e){return new Promise((t,n)=>{let o=new Image;o.onload=()=>{o.decode().then(()=>{requestAnimationFrame(()=>t(o))})},o.onerror=n,o.crossOrigin="anonymous",o.decoding="async",o.src=e})}async function cn(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function Ct(e,t,n){let o="http://www.w3.org/2000/svg",r=document.createElementNS(o,"svg"),i=document.createElementNS(o,"foreignObject");return r.setAttribute("width",`${t}`),r.setAttribute("height",`${n}`),r.setAttribute("viewBox",`0 0 ${t} ${n}`),i.setAttribute("width","100%"),i.setAttribute("height","100%"),i.setAttribute("x","0"),i.setAttribute("y","0"),i.setAttribute("externalResourcesRequired","true"),r.appendChild(i),i.appendChild(e),cn(r)}var w=(e,t)=>{if(e instanceof t)return!0;let n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||w(n,t)};function un(e){let t=e.getPropertyValue("content");return`${e.cssText} content: '${t.replace(/'|"/g,"")}';`}function dn(e,t){return ve(t).map(n=>{let o=e.getPropertyValue(n),r=e.getPropertyPriority(n);return`${n}: ${o}${r?" !important":""};`}).join(" ")}function mn(e,t,n,o){let r=`.${e}:${t}`,i=n.cssText?un(n):dn(n,o);return document.createTextNode(`${r}{${i}}`)}function St(e,t,n,o){let r=window.getComputedStyle(e,n),i=r.getPropertyValue("content");if(i===""||i==="none")return;let s=Et();try{t.className=`${t.className} ${s}`}catch{return}let a=document.createElement("style");a.appendChild(mn(s,n,r,o)),t.appendChild(a)}function Lt(e,t,n){St(e,t,":before",n),St(e,t,":after",n)}var Tt="application/font-woff",kt="image/jpeg",fn={woff:Tt,woff2:Tt,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:kt,jpeg:kt,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function pn(e){let t=/\.([^./]*?)$/g.exec(e);return t?t[1]:""}function ee(e){let t=pn(e).toLowerCase();return fn[t]||""}function hn(e){return e.split(/,/)[1]}function ue(e){return e.search(/^(data:)/)!==-1}function Xe(e,t){return`data:${t};base64,${e}`}async function qe(e,t,n){let o=await fetch(e,t);if(o.status===404)throw new Error(`Resource "${o.url}" not found`);let r=await o.blob();return new Promise((i,s)=>{let a=new FileReader;a.onerror=s,a.onloadend=()=>{try{i(n({res:o,result:a.result}))}catch(l){s(l)}},a.readAsDataURL(r)})}var Ke={};function gn(e,t,n){let o=e.replace(/\?.*/,"");return n&&(o=e),/ttf|otf|eot|woff2?/i.test(o)&&(o=o.replace(/.*\//,"")),t?`[${t}]${o}`:o}async function te(e,t,n){let o=gn(e,t,n.includeQueryParams);if(Ke[o]!=null)return Ke[o];n.cacheBust&&(e+=(/\?/.test(e)?"&":"?")+new Date().getTime());let r;try{let i=await qe(e,n.fetchRequestInit,({res:s,result:a})=>(t||(t=s.headers.get("Content-Type")||""),hn(a)));r=Xe(i,t)}catch(i){r=n.imagePlaceholder||"";let s=`Failed to fetch resource: ${e}`;i&&(s=typeof i=="string"?i:i.message),s&&console.warn(s)}return Ke[o]=r,r}async function yn(e){let t=e.toDataURL();return t==="data:,"?e.cloneNode(!1):Q(t)}async function wn(e,t){if(e.currentSrc){let i=document.createElement("canvas"),s=i.getContext("2d");i.width=e.clientWidth,i.height=e.clientHeight,s?.drawImage(e,0,0,i.width,i.height);let a=i.toDataURL();return Q(a)}let n=e.poster,o=ee(n),r=await te(n,o,t);return Q(r)}async function bn(e,t){var n;try{if(!((n=e?.contentDocument)===null||n===void 0)&&n.body)return await de(e.contentDocument.body,t,!0)}catch{}return e.cloneNode(!1)}async function En(e,t){return w(e,HTMLCanvasElement)?yn(e):w(e,HTMLVideoElement)?wn(e,t):w(e,HTMLIFrameElement)?bn(e,t):e.cloneNode(Rt(e))}var xn=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SLOT",Rt=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SVG";async function vn(e,t,n){var o,r;if(Rt(t))return t;let i=[];return xn(e)&&e.assignedNodes?i=L(e.assignedNodes()):w(e,HTMLIFrameElement)&&(!((o=e.contentDocument)===null||o===void 0)&&o.body)?i=L(e.contentDocument.body.childNodes):i=L(((r=e.shadowRoot)!==null&&r!==void 0?r:e).childNodes),i.length===0||w(e,HTMLVideoElement)||await i.reduce((s,a)=>s.then(()=>de(a,n)).then(l=>{l&&t.appendChild(l)}),Promise.resolve()),t}function Cn(e,t,n){let o=t.style;if(!o)return;let r=window.getComputedStyle(e);r.cssText?(o.cssText=r.cssText,o.transformOrigin=r.transformOrigin):ve(n).forEach(i=>{let s=r.getPropertyValue(i);i==="font-size"&&s.endsWith("px")&&(s=`${Math.floor(parseFloat(s.substring(0,s.length-2)))-.1}px`),w(e,HTMLIFrameElement)&&i==="display"&&s==="inline"&&(s="block"),i==="d"&&t.getAttribute("d")&&(s=`path(${t.getAttribute("d")})`),o.setProperty(i,s,r.getPropertyPriority(i))})}function Sn(e,t){w(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),w(e,HTMLInputElement)&&t.setAttribute("value",e.value)}function Ln(e,t){if(w(e,HTMLSelectElement)){let n=t,o=Array.from(n.children).find(r=>e.value===r.getAttribute("value"));o&&o.setAttribute("selected","")}}function Tn(e,t,n){return w(t,Element)&&(Cn(e,t,n),Lt(e,t,n),Sn(e,t),Ln(e,t)),t}async function kn(e,t){let n=e.querySelectorAll?e.querySelectorAll("use"):[];if(n.length===0)return e;let o={};for(let i=0;i<n.length;i++){let a=n[i].getAttribute("xlink:href");if(a){let l=e.querySelector(a),c=document.querySelector(a);!l&&c&&!o[a]&&(o[a]=await de(c,t,!0))}}let r=Object.values(o);if(r.length){let i="http://www.w3.org/1999/xhtml",s=document.createElementNS(i,"svg");s.setAttribute("xmlns",i),s.style.position="absolute",s.style.width="0",s.style.height="0",s.style.overflow="hidden",s.style.display="none";let a=document.createElementNS(i,"defs");s.appendChild(a);for(let l=0;l<r.length;l++)a.appendChild(r[l]);e.appendChild(s)}return e}async function de(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(o=>En(o,t)).then(o=>vn(e,o,t)).then(o=>Tn(e,o,t)).then(o=>kn(o,t))}var It=/url\((['"]?)([^'"]+?)\1\)/g,Rn=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,In=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function Mn(e){let t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function An(e){let t=[];return e.replace(It,(n,o,r)=>(t.push(r),n)),t.filter(n=>!ue(n))}async function Pn(e,t,n,o,r){try{let i=n?bt(t,n):t,s=ee(t),a;if(r){let l=await r(i);a=Xe(l,s)}else a=await te(i,s,o);return e.replace(Mn(t),`$1${a}$3`)}catch{}return e}function Hn(e,{preferredFontFormat:t}){return t?e.replace(In,n=>{for(;;){let[o,,r]=Rn.exec(n)||[];if(!r)return"";if(r===t)return`src: ${o};`}}):e}function Ge(e){return e.search(It)!==-1}async function Ce(e,t,n){if(!Ge(e))return e;let o=Hn(e,n);return An(o).reduce((i,s)=>i.then(a=>Pn(a,s,t,n)),Promise.resolve(o))}async function ne(e,t,n){var o;let r=(o=t.style)===null||o===void 0?void 0:o.getPropertyValue(e);if(r){let i=await Ce(r,null,n);return t.style.setProperty(e,i,t.style.getPropertyPriority(e)),!0}return!1}async function _n(e,t){await ne("background",e,t)||await ne("background-image",e,t),await ne("mask",e,t)||await ne("-webkit-mask",e,t)||await ne("mask-image",e,t)||await ne("-webkit-mask-image",e,t)}async function On(e,t){let n=w(e,HTMLImageElement);if(!(n&&!ue(e.src))&&!(w(e,SVGImageElement)&&!ue(e.href.baseVal)))return;let o=n?e.src:e.href.baseVal,r=await te(o,ee(o),t);await new Promise((i,s)=>{e.onload=i,e.onerror=t.onImageErrorHandler?(...l)=>{try{i(t.onImageErrorHandler(...l))}catch(c){s(c)}}:s;let a=e;a.decode&&(a.decode=i),a.loading==="lazy"&&(a.loading="eager"),n?(e.srcset="",e.src=r):e.href.baseVal=r})}async function Dn(e,t){let o=L(e.childNodes).map(r=>Ye(r,t));await Promise.all(o).then(()=>e)}async function Ye(e,t){w(e,Element)&&(await _n(e,t),await On(e,t),await Dn(e,t))}function Mt(e,t){let{style:n}=e;t.backgroundColor&&(n.backgroundColor=t.backgroundColor),t.width&&(n.width=`${t.width}px`),t.height&&(n.height=`${t.height}px`);let o=t.style;return o!=null&&Object.keys(o).forEach(r=>{n[r]=o[r]}),e}var At={};async function Pt(e){let t=At[e];if(t!=null)return t;let o=await(await fetch(e)).text();return t={url:e,cssText:o},At[e]=t,t}async function Ht(e,t){let n=e.cssText,o=/url\(["']?([^"')]+)["']?\)/g,i=(n.match(/url\([^)]+\)/g)||[]).map(async s=>{let a=s.replace(o,"$1");return a.startsWith("https://")||(a=new URL(a,e.url).href),qe(a,t.fetchRequestInit,({result:l})=>(n=n.replace(s,`url(${l})`),[s,l]))});return Promise.all(i).then(()=>n)}function _t(e){if(e==null)return[];let t=[],n=/(\/\*[\s\S]*?\*\/)/gi,o=e.replace(n,""),r=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){let l=r.exec(o);if(l===null)break;t.push(l[0])}o=o.replace(r,"");let i=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,s="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",a=new RegExp(s,"gi");for(;;){let l=i.exec(o);if(l===null){if(l=a.exec(o),l===null)break;i.lastIndex=a.lastIndex}else a.lastIndex=i.lastIndex;t.push(l[0])}return t}async function $n(e,t){let n=[],o=[];return e.forEach(r=>{if("cssRules"in r)try{L(r.cssRules||[]).forEach((i,s)=>{if(i.type===CSSRule.IMPORT_RULE){let a=s+1,l=i.href,c=Pt(l).then(d=>Ht(d,t)).then(d=>_t(d).forEach(u=>{try{r.insertRule(u,u.startsWith("@import")?a+=1:r.cssRules.length)}catch(f){console.error("Error inserting rule from remote css",{rule:u,error:f})}})).catch(d=>{console.error("Error loading remote css",d.toString())});o.push(c)}})}catch(i){let s=e.find(a=>a.href==null)||document.styleSheets[0];r.href!=null&&o.push(Pt(r.href).then(a=>Ht(a,t)).then(a=>_t(a).forEach(l=>{s.insertRule(l,s.cssRules.length)})).catch(a=>{console.error("Error loading remote stylesheet",a)})),console.error("Error inlining remote css file",i)}}),Promise.all(o).then(()=>(e.forEach(r=>{if("cssRules"in r)try{L(r.cssRules||[]).forEach(i=>{n.push(i)})}catch(i){console.error(`Error while reading CSS rules from ${r.href}`,i)}}),n))}function Bn(e){return e.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>Ge(t.style.getPropertyValue("src")))}async function Wn(e,t){if(e.ownerDocument==null)throw new Error("Provided element is not within a Document");let n=L(e.ownerDocument.styleSheets),o=await $n(n,t);return Bn(o)}function Ot(e){return e.trim().replace(/["']/g,"")}function Fn(e){let t=new Set;function n(o){(o.style.fontFamily||getComputedStyle(o).fontFamily).split(",").forEach(i=>{t.add(Ot(i))}),Array.from(o.children).forEach(i=>{i instanceof HTMLElement&&n(i)})}return n(e),t}async function Dt(e,t){let n=await Wn(e,t),o=Fn(e);return(await Promise.all(n.filter(i=>o.has(Ot(i.style.fontFamily))).map(i=>{let s=i.parentStyleSheet?i.parentStyleSheet.href:null;return Ce(i.cssText,s,t)}))).join(`
|
|
176
|
-
`)}async function $t(e,t){let n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await Dt(e,t);if(n){let o=document.createElement("style"),r=document.createTextNode(n);o.appendChild(r),e.firstChild?e.insertBefore(o,e.firstChild):e.appendChild(o)}}async function Nn(e,t={}){let{width:n,height:o}=Ve(e,t),r=await de(e,t,!0);return await $t(r,t),await Ye(r,t),Mt(r,t),await Ct(r,n,o)}async function Un(e,t={}){let{width:n,height:o}=Ve(e,t),r=await Nn(e,t),i=await Q(r),s=document.createElement("canvas"),a=s.getContext("2d"),l=t.pixelRatio||xt(),c=t.canvasWidth||n,d=t.canvasHeight||o;return s.width=c*l,s.height=d*l,t.skipAutoScale||vt(s),s.style.width=`${c}`,s.style.height=`${d}`,t.backgroundColor&&(a.fillStyle=t.backgroundColor,a.fillRect(0,0,s.width,s.height)),a.drawImage(i,0,0,s.width,s.height),s}async function Bt(e,t={}){return(await Un(e,t)).toDataURL()}var T=null,p=null,m=null,k=null,F="arrow",N="#ef4444",me=!1,oe=0,re=0,M=[],S=null;function Ze(){let e=document.getElementById("awel-host"),t=document.getElementById("awel-sidebar");e&&(e.style.display="none"),t&&(t.style.display="none"),setTimeout(()=>{Bt(document.body,{cacheBust:!0,pixelRatio:window.devicePixelRatio,filter:n=>{if(!(n instanceof HTMLElement))return!0;let o=n.id;return o!=="awel-host"&&o!=="awel-sidebar"}}).then(n=>{let o=new Image;o.onload=()=>{jn(n,o.naturalWidth,o.naturalHeight)},o.src=n}).catch(n=>{console.error("[Awel] Screenshot capture failed:",n),e&&(e.style.display=""),t&&(t.style.display="")})},100)}function jn(e,t,n){T=document.createElement("div"),T.id="awel-annotation-overlay",T.style.cssText=`
|
|
183
|
+
box-shadow: 0 8px 32px ${d?"rgba(0, 0, 0, 0.5)":"rgba(0, 0, 0, 0.15)"};
|
|
184
|
+
background: ${d?"#18181b":"#ffffff"};
|
|
185
|
+
`,ne=m=>{m.key==="Escape"&&ce()},document.addEventListener("keydown",ne,!0),j=s,document.body.appendChild(s),z=m=>{j&&m.target!==j&&ce()},setTimeout(()=>{z&&document.addEventListener("mousedown",z,!0)},0)}function ue(){j&&(j.remove(),j=null),ne&&(document.removeEventListener("keydown",ne,!0),ne=null),z&&(document.removeEventListener("mousedown",z,!0),z=null),v&&(v.remove(),v=null)}function ce(){ue(),V=null,F=null;let e=document.getElementById("awel-sidebar");e&&xe&&(e.style.display="")}function tt(){!F||!document.body.contains(F)||(U||(U=Ae("awel-hover-highlight")),_e(F,U))}function He(){U&&(U.remove(),U=null)}function k(e){D=e;let t=document.getElementById("awel-host"),n=document.getElementById("awel-sidebar");e?(xe=O(),t&&(t.style.display="none"),n&&(n.style.display="none"),xt(),document.body.style.cursor="crosshair",document.addEventListener("mousemove",Le,!0),document.addEventListener("click",ke,!0),document.addEventListener("keydown",Se,!0),document.addEventListener("wheel",Te,{passive:!1,capture:!0})):(t&&(t.style.display=""),n&&xe&&(n.style.display=""),document.body.style.cursor="",document.removeEventListener("mousemove",Le,!0),document.removeEventListener("click",ke,!0),document.removeEventListener("keydown",Se,!0),document.removeEventListener("wheel",Te,!0),I=0,K=null,T=null,y&&(y.remove(),y=null),v&&(v.remove(),v=null),X=!1,Y=!1,le=!1)}var C=null,f=null,p=null,L=null,B="arrow",P="#ef4444",oe=!1,G=0,J=0,S=[],x=null;async function Lt(){let e=await navigator.mediaDevices.getDisplayMedia({preferCurrentTab:!0,video:{displaySurface:"browser"},audio:!1}),t=e.getVideoTracks()[0];try{if(await new Promise(i=>setTimeout(i,100)),typeof ImageCapture<"u"){let s=await new ImageCapture(t).grabFrame(),l=document.createElement("canvas");return l.width=s.width,l.height=s.height,l.getContext("2d").drawImage(s,0,0),s.close(),l.toDataURL("image/png")}let n=document.createElement("video");n.srcObject=e,n.muted=!0,await n.play();let o=document.createElement("canvas");return o.width=n.videoWidth,o.height=n.videoHeight,o.getContext("2d").drawImage(n,0,0),n.pause(),o.toDataURL("image/png")}finally{t.stop()}}async function Oe(){let e=document.getElementById("awel-host"),t=document.getElementById("awel-sidebar");e&&(e.style.display="none"),t&&(t.style.display="none");try{let n=await Lt(),o=new Image;o.onload=()=>{Tt(n,o.naturalWidth,o.naturalHeight)},o.src=n}catch(n){console.error("[Awel] Screenshot capture failed:",n),e&&(e.style.display=""),t&&(t.style.display="")}}function Tt(e,t,n){C=document.createElement("div"),C.id="awel-annotation-overlay",C.style.cssText=`
|
|
177
186
|
position: fixed;
|
|
178
187
|
inset: 0;
|
|
179
188
|
z-index: 999999;
|
|
@@ -183,28 +192,28 @@
|
|
|
183
192
|
align-items: center;
|
|
184
193
|
justify-content: center;
|
|
185
194
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
186
|
-
`;let o=
|
|
195
|
+
`;let o=kt();C.appendChild(o);let r=document.createElement("div");r.style.cssText=`
|
|
187
196
|
position: relative;
|
|
188
197
|
max-width: calc(100vw - 48px);
|
|
189
198
|
max-height: calc(100vh - 80px);
|
|
190
199
|
display: flex;
|
|
191
200
|
align-items: center;
|
|
192
201
|
justify-content: center;
|
|
193
|
-
`;let i=window.innerWidth-48,s=window.innerHeight-80,
|
|
194
|
-
width: ${
|
|
195
|
-
height: ${
|
|
202
|
+
`;let i=window.innerWidth-48,s=window.innerHeight-80,l=Math.min(1,i/t,s/n),a=Math.round(t*l),g=Math.round(n*l);L=document.createElement("img"),L.src=e,L.style.cssText=`
|
|
203
|
+
width: ${a}px;
|
|
204
|
+
height: ${g}px;
|
|
196
205
|
border-radius: 8px;
|
|
197
206
|
pointer-events: none;
|
|
198
207
|
user-select: none;
|
|
199
|
-
`,r.appendChild(
|
|
208
|
+
`,r.appendChild(L),f=document.createElement("canvas"),f.width=a*window.devicePixelRatio,f.height=g*window.devicePixelRatio,f.style.cssText=`
|
|
200
209
|
position: absolute;
|
|
201
210
|
top: 0;
|
|
202
211
|
left: 0;
|
|
203
|
-
width: ${
|
|
204
|
-
height: ${
|
|
212
|
+
width: ${a}px;
|
|
213
|
+
height: ${g}px;
|
|
205
214
|
border-radius: 8px;
|
|
206
215
|
cursor: crosshair;
|
|
207
|
-
`,
|
|
216
|
+
`,p=f.getContext("2d"),p.scale(window.devicePixelRatio,window.devicePixelRatio),p.lineCap="round",p.lineJoin="round",f.addEventListener("mousedown",St),f.addEventListener("mousemove",Mt),f.addEventListener("mouseup",It),r.appendChild(f),C.appendChild(r),document.body.appendChild(C),S=[],oe=!1,B="arrow",P="#ef4444",document.addEventListener("keydown",nt,!0)}function nt(e){e.key==="Escape"&&(x?(x.remove(),x=null):me())}function kt(){let e=document.createElement("div");e.style.cssText=`
|
|
208
217
|
display: flex;
|
|
209
218
|
align-items: center;
|
|
210
219
|
gap: 4px;
|
|
@@ -214,7 +223,7 @@
|
|
|
214
223
|
border: 1px solid #3f3f46;
|
|
215
224
|
border-radius: 10px;
|
|
216
225
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
|
|
217
|
-
`;let t=(
|
|
226
|
+
`;let t=(d=!1)=>`
|
|
218
227
|
display: flex;
|
|
219
228
|
align-items: center;
|
|
220
229
|
justify-content: center;
|
|
@@ -222,21 +231,21 @@
|
|
|
222
231
|
height: 32px;
|
|
223
232
|
border: none;
|
|
224
233
|
border-radius: 6px;
|
|
225
|
-
background: ${
|
|
226
|
-
color: ${
|
|
234
|
+
background: ${d?"#3f3f46":"transparent"};
|
|
235
|
+
color: ${d?"#fafafa":"#a1a1aa"};
|
|
227
236
|
cursor: pointer;
|
|
228
237
|
transition: background 0.1s, color 0.1s;
|
|
229
238
|
padding: 0;
|
|
230
|
-
`,n=[{name:"arrow",title:"Arrow",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="19" x2="19" y2="5"/><polyline points="10 5 19 5 19 14"/></svg>'},{name:"line",title:"Line",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="20" x2="20" y2="4"/></svg>'},{name:"circle",title:"Circle",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><ellipse cx="12" cy="12" rx="10" ry="8"/></svg>'},{name:"rectangle",title:"Rectangle",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/></svg>'},{name:"triangle",title:"Triangle",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="12 3 22 21 2 21"/></svg>'},{name:"text",title:"Text",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="4 7 4 4 20 4 20 7"/><line x1="12" y1="4" x2="12" y2="20"/><line x1="8" y1="20" x2="16" y2="20"/></svg>'}],o=[];n.forEach(
|
|
239
|
+
`,n=[{name:"arrow",title:"Arrow",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="5" y1="19" x2="19" y2="5"/><polyline points="10 5 19 5 19 14"/></svg>'},{name:"line",title:"Line",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="20" x2="20" y2="4"/></svg>'},{name:"circle",title:"Circle",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><ellipse cx="12" cy="12" rx="10" ry="8"/></svg>'},{name:"rectangle",title:"Rectangle",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2"/></svg>'},{name:"triangle",title:"Triangle",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="12 3 22 21 2 21"/></svg>'},{name:"text",title:"Text",icon:'<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="4 7 4 4 20 4 20 7"/><line x1="12" y1="4" x2="12" y2="20"/><line x1="8" y1="20" x2="16" y2="20"/></svg>'}],o=[];n.forEach(d=>{let m=document.createElement("button");m.innerHTML=d.icon,m.title=d.title,m.style.cssText=t(d.name===B),m.addEventListener("mouseenter",()=>{B!==d.name&&(m.style.background="#27272a")}),m.addEventListener("mouseleave",()=>{B!==d.name&&(m.style.background="transparent")}),m.addEventListener("click",()=>{B=d.name,o.forEach((A,_)=>{let M=n[_].name===d.name;A.style.background=M?"#3f3f46":"transparent",A.style.color=M?"#fafafa":"#a1a1aa"})}),o.push(m),e.appendChild(m)});let r=document.createElement("div");r.style.cssText="width: 1px; height: 20px; background: #3f3f46; margin: 0 4px;",e.appendChild(r);let i=["#ef4444","#3b82f6","#22c55e","#fafafa","#eab308"],s=[];i.forEach(d=>{let m=document.createElement("button");m.style.cssText=`
|
|
231
240
|
width: 20px;
|
|
232
241
|
height: 20px;
|
|
233
242
|
border-radius: 50%;
|
|
234
|
-
border: 2px solid ${
|
|
235
|
-
background: ${
|
|
243
|
+
border: 2px solid ${d===P?"#fafafa":"transparent"};
|
|
244
|
+
background: ${d};
|
|
236
245
|
cursor: pointer;
|
|
237
246
|
padding: 0;
|
|
238
247
|
transition: border-color 0.1s;
|
|
239
|
-
`,
|
|
248
|
+
`,m.addEventListener("click",()=>{P=d,s.forEach((A,_)=>{A.style.borderColor=i[_]===d?"#fafafa":"transparent"})}),s.push(m),e.appendChild(m)});let l=document.createElement("div");l.style.cssText="width: 1px; height: 20px; background: #3f3f46; margin: 0 4px;",e.appendChild(l);let a=document.createElement("button");a.innerHTML='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/></svg>',a.title="Undo",a.style.cssText=t(),a.addEventListener("mouseenter",()=>{a.style.background="#27272a"}),a.addEventListener("mouseleave",()=>{a.style.background="transparent"}),a.addEventListener("click",()=>{if(S.length>0&&p){let d=S.pop();p.putImageData(d,0,0)}}),e.appendChild(a);let g=document.createElement("div");g.style.cssText="width: 1px; height: 20px; background: #3f3f46; margin: 0 4px;",e.appendChild(g);let u=document.createElement("button");u.textContent="Cancel",u.style.cssText=`
|
|
240
249
|
padding: 4px 12px;
|
|
241
250
|
border: none;
|
|
242
251
|
border-radius: 6px;
|
|
@@ -246,7 +255,7 @@
|
|
|
246
255
|
font-weight: 500;
|
|
247
256
|
cursor: pointer;
|
|
248
257
|
font-family: inherit;
|
|
249
|
-
`,
|
|
258
|
+
`,u.addEventListener("mouseenter",()=>{u.style.background="#27272a"}),u.addEventListener("mouseleave",()=>{u.style.background="transparent"}),u.addEventListener("click",me),e.appendChild(u);let c=document.createElement("button");return c.textContent="Done",c.style.cssText=`
|
|
250
259
|
padding: 4px 12px;
|
|
251
260
|
border: none;
|
|
252
261
|
border-radius: 6px;
|
|
@@ -256,14 +265,14 @@
|
|
|
256
265
|
font-weight: 600;
|
|
257
266
|
cursor: pointer;
|
|
258
267
|
font-family: inherit;
|
|
259
|
-
`,
|
|
268
|
+
`,c.addEventListener("mouseenter",()=>{c.style.background="#fafafa"}),c.addEventListener("mouseleave",()=>{c.style.background="#e4e4e7"}),c.addEventListener("click",Dt),e.appendChild(c),e}function Ne(e){let t=f.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}function St(e){if(!p||!f)return;if(B==="text"){let{x:r,y:i}=Ne(e);Rt(r,i);return}oe=!0;let{x:t,y:n}=Ne(e);G=t,J=n;let o=p.getImageData(0,0,f.width,f.height);S.push(o)}function Mt(e){if(!oe||!p||!f)return;let{x:t,y:n}=Ne(e);switch(S.length>0&&p.putImageData(S[S.length-1],0,0),p.strokeStyle=P,p.lineWidth=2,p.fillStyle=P,B){case"arrow":At(p,G,J,t,n);break;case"line":_t(p,G,J,t,n);break;case"circle":Nt(p,G,J,t,n);break;case"rectangle":Ht(p,G,J,t,n);break;case"triangle":Ot(p,G,J,t,n);break}}function It(e){oe=!1}function At(e,t,n,o,r){let s=Math.atan2(r-n,o-t);e.beginPath(),e.moveTo(t,n),e.lineTo(o,r),e.stroke(),e.beginPath(),e.moveTo(o,r),e.lineTo(o-12*Math.cos(s-Math.PI/6),r-12*Math.sin(s-Math.PI/6)),e.lineTo(o-12*Math.cos(s+Math.PI/6),r-12*Math.sin(s+Math.PI/6)),e.closePath(),e.fill()}function _t(e,t,n,o,r){e.beginPath(),e.moveTo(t,n),e.lineTo(o,r),e.stroke()}function Ht(e,t,n,o,r){let i=Math.min(t,o),s=Math.min(n,r),l=Math.abs(o-t),a=Math.abs(r-n);l<1||a<1||(e.beginPath(),e.rect(i,s,l,a),e.stroke())}function Nt(e,t,n,o,r){let i=(t+o)/2,s=(n+r)/2,l=Math.abs(o-t)/2,a=Math.abs(r-n)/2;l<1||a<1||(e.beginPath(),e.ellipse(i,s,l,a,0,0,Math.PI*2),e.stroke())}function Ot(e,t,n,o,r){let i=(t+o)/2;e.beginPath(),e.moveTo(i,n),e.lineTo(o,r),e.lineTo(t,r),e.closePath(),e.stroke()}function Rt(e,t){if(x&&(x.remove(),x=null),!C||!f)return;let n=f.getBoundingClientRect(),o=document.createElement("input");o.type="text",o.placeholder="Type text...",o.style.cssText=`
|
|
260
269
|
position: fixed;
|
|
261
270
|
top: ${n.top+t}px;
|
|
262
271
|
left: ${n.left+e}px;
|
|
263
272
|
background: rgba(24, 24, 27, 0.9);
|
|
264
273
|
border: 1px solid #3f3f46;
|
|
265
274
|
border-radius: 4px;
|
|
266
|
-
color: ${
|
|
275
|
+
color: ${P};
|
|
267
276
|
font-size: 16px;
|
|
268
277
|
font-weight: 600;
|
|
269
278
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
@@ -271,4 +280,4 @@
|
|
|
271
280
|
outline: none;
|
|
272
281
|
z-index: 1000000;
|
|
273
282
|
min-width: 120px;
|
|
274
|
-
`;let r=
|
|
283
|
+
`;let r=P,i=e,s=t;o.addEventListener("keydown",l=>{if(l.key==="Enter"){let a=o.value.trim();if(a&&p&&f){let g=p.getImageData(0,0,f.width,f.height);S.push(g),p.fillStyle=r,p.font='600 16px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',p.fillText(a,i,s+16)}o.remove(),x=null}l.key==="Escape"&&(o.remove(),x=null)}),C.appendChild(o),x=o,o.focus()}function Dt(){if(!L||!f){me();return}let e=document.createElement("canvas"),t=L.naturalWidth||L.width,n=L.naturalHeight||L.height;e.width=t,e.height=n;let o=e.getContext("2d");o.drawImage(L,0,0,t,n),o.drawImage(f,0,0,t,n);let r=e.toDataURL("image/png");O()||R(),setTimeout(()=>{let i=document.getElementById("awel-sidebar");if(i){let s=i.querySelector("iframe");s?.contentWindow&&s.contentWindow.postMessage({type:"AWEL_SCREENSHOT_ANNOTATION",dataUrl:r},"*")}me()},300)}function me(){document.removeEventListener("keydown",nt,!0),x&&(x.remove(),x=null),C&&(C.remove(),C=null),f=null,p=null,L=null,S=[],oe=!1;let e=document.getElementById("awel-host"),t=document.getElementById("awel-sidebar");e&&(e.style.display=""),t&&(t.style.display="")}var Re=null;function De(){if(!Re)return;let e=document.getElementById("awel-sidebar");if(!e)return;let t=e.querySelector("iframe");t?.contentWindow&&t.contentWindow.postMessage({type:"AWEL_PAGE_CONTEXT",context:Re},"*")}function Bt(){let e=document.getElementById("__next")||document.getElementById("root");if(!e)return;let t;for(let o of Object.keys(e))if(o.startsWith("__reactFiber")||o.startsWith("__reactInternalInstance")){t=o;break}if(!t)return;let n=e[t];for(;n;){if(typeof n.type=="function"){let o=n.type,r=o.displayName||o.name;if(r&&/^[A-Z][a-zA-Z0-9]*$/.test(r)){let i=n._debugSource;if(i?.fileName&&!/node_modules/.test(i.fileName))return r}}n=n.child}}function ot(){Re={url:location.pathname+location.search,title:document.title,routeComponent:Bt()}}function rt(){ot();let e;function t(){clearTimeout(e),e=setTimeout(()=>{ot(),De()},100)}let n=history.pushState.bind(history);history.pushState=function(...r){n(...r),t()};let o=history.replaceState.bind(history);history.replaceState=function(...r){o(...r),t()},window.addEventListener("popstate",t)}window.addEventListener("message",e=>{if(e.data?.type==="AWEL_CLOSE"&&ve(),e.data?.type==="AWEL_HIGHLIGHT_ELEMENT"&&tt(),e.data?.type==="AWEL_UNHIGHLIGHT_ELEMENT"&&He(),e.data?.type==="AWEL_CLEAR_ELEMENT"&&(Ie(null),He()),e.data?.type==="AWEL_COMMENT_SUBMIT"&&V){let t=e.data.comment,n={...V,comment:t};O()||R(),fetch("/api/inspector/select",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}).catch(()=>{}),ue(),Ye(null),Ie(null)}if(e.data?.type==="AWEL_COMMENT_CLOSE"&&ce(),e.data?.type==="AWEL_CONSOLE_VIEWED"&&(be(!1),te()),e.data?.type==="AWEL_CONSOLE_DISMISS"&&(ye(b.filter(t=>t.id!==e.data.id)),te()),e.data?.type==="AWEL_CONSOLE_CLEAR"&&(ye([]),be(!1),te()),e.data?.type==="AWEL_HIDE_CONTROLS"){let t=document.getElementById("awel-host");t&&(t.style.display="none")}if(e.data?.type==="AWEL_SHOW_CONTROLS"){let t=document.getElementById("awel-host");t&&(t.style.display="")}e.data?.type==="AWEL_INSPECT_FOR_ATTACH"&&(Xe(!0),k(!0)),e.data?.type==="AWEL_REQUEST_PAGE_CONTEXT"&&De(),e.data?.type==="AWEL_THEME"&&We(e.data.theme)});function it(){Ke(),rt(),we({onInspectorToggle:()=>k(!Me()),onScreenshot:()=>Oe()}),document.addEventListener("keydown",Ze,!0),document.addEventListener("keyup",Qe,!0),window.addEventListener("blur",et);try{sessionStorage.getItem(N)==="true"&&!Ee()&&R(!0)}catch{}Pt()}function Pt(){new MutationObserver(()=>{if(!document.getElementById("awel-host")){we({onInspectorToggle:()=>k(!Me()),onScreenshot:()=>Oe()});try{sessionStorage.getItem(N)==="true"&&!Ee()&&R(!0)}catch{}}}).observe(document.documentElement,{childList:!0,subtree:!0})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",it):it();})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "awel",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
"execa": "^9.5.2",
|
|
35
35
|
"fast-glob": "^3.3.3",
|
|
36
36
|
"hono": "^4.6.14",
|
|
37
|
-
"html-to-image": "^1.11.11",
|
|
38
37
|
"http-proxy": "^1.18.1",
|
|
39
38
|
"i18next": "^25.8.0",
|
|
40
39
|
"lucide-react": "^0.469.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 0 0% 4%;--card: 0 0% 100%;--card-foreground: 0 0% 4%;--primary: 0 0% 9%;--primary-foreground: 0 0% 98%;--secondary: 0 0% 96%;--secondary-foreground: 0 0% 9%;--muted: 0 0% 96%;--muted-foreground: 0 0% 45%;--accent: 0 0% 96%;--accent-foreground: 0 0% 9%;--border: 0 0% 90%;--input: 0 0% 90%;--ring: 0 0% 64%;--radius: .5rem;--scrollbar-thumb: rgba(0, 0, 0, .15);--scrollbar-thumb-hover: rgba(0, 0, 0, .25)}.dark{--background: 0 0% 4%;--foreground: 0 0% 98%;--card: 0 0% 7%;--card-foreground: 0 0% 98%;--primary: 0 0% 98%;--primary-foreground: 0 0% 9%;--secondary: 0 0% 15%;--secondary-foreground: 0 0% 98%;--muted: 0 0% 15%;--muted-foreground: 0 0% 64%;--accent: 0 0% 15%;--accent-foreground: 0 0% 98%;--border: 0 0% 15%;--input: 0 0% 15%;--ring: 0 0% 80%;--scrollbar-thumb: rgba(255, 255, 255, .15);--scrollbar-thumb-hover: rgba(255, 255, 255, .25)}*{--tw-border-opacity: 1;border-color:hsl(var(--border) / var(--tw-border-opacity, 1))}html,body,#root{width:100%;height:100%;margin:0;padding:0;overflow:hidden}body{background-color:transparent;--tw-text-opacity: 1;color:hsl(var(--foreground) / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover)}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.-right-1\.5{right:-.375rem}.-top-1\.5{top:-.375rem}.bottom-20{bottom:5rem}.bottom-4{bottom:1rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-4{left:1rem}.left-6{left:1.5rem}.right-0{right:0}.right-2{right:.5rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:.5rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-full{top:100%}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[9999\]{z-index:9999}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.ml-0\.5{margin-left:.125rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mr-4{margin-right:1rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.hidden{display:none}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-full{height:100%}.max-h-32{max-height:8rem}.max-h-48{max-height:12rem}.max-h-64{max-height:16rem}.max-h-\[140px\]{max-height:140px}.max-h-\[200px\]{max-height:200px}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0px}.min-h-\[36px\]{min-height:36px}.min-h-full{min-height:100%}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-\[380px\]{width:380px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0px}.max-w-2xl{max-width:42rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[250px\]{max-width:250px}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.self-end{align-self:flex-end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-amber-500\/50{border-color:#f59e0b80}.border-blue-500\/50{border-color:#3b82f680}.border-border{--tw-border-opacity: 1;border-color:hsl(var(--border) / var(--tw-border-opacity, 1))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-cyan-500\/50{border-color:#06b6d480}.border-input{--tw-border-opacity: 1;border-color:hsl(var(--input) / var(--tw-border-opacity, 1))}.border-muted\/50{border-color:hsl(var(--muted) / .5)}.border-orange-500\/50{border-color:#f9731680}.border-purple-500\/50{border-color:#a855f780}.border-red-300\/60{border-color:#fca5a599}.border-red-500\/50{border-color:#ef444480}.border-violet-400{--tw-border-opacity: 1;border-color:rgb(167 139 250 / var(--tw-border-opacity, 1))}.border-violet-500{--tw-border-opacity: 1;border-color:rgb(139 92 246 / var(--tw-border-opacity, 1))}.border-violet-500\/70{border-color:#8b5cf6b3}.border-violet-600\/60{border-color:#7c3aed99}.border-violet-700\/50{border-color:#6d28d980}.border-yellow-300\/60{border-color:#fde04799}.bg-amber-100\/60{background-color:#fef3c799}.bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.bg-background{--tw-bg-opacity: 1;background-color:hsl(var(--background) / var(--tw-bg-opacity, 1))}.bg-black\/60{background-color:#0009}.bg-black\/80{background-color:#000c}.bg-blue-100\/60{background-color:#dbeafe99}.bg-card{--tw-bg-opacity: 1;background-color:hsl(var(--card) / var(--tw-bg-opacity, 1))}.bg-card\/50{background-color:hsl(var(--card) / .5)}.bg-card\/60{background-color:hsl(var(--card) / .6)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-green-100\/50{background-color:#dcfce780}.bg-green-100\/60{background-color:#dcfce799}.bg-muted{--tw-bg-opacity: 1;background-color:hsl(var(--muted) / var(--tw-bg-opacity, 1))}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-muted\/80{background-color:hsl(var(--muted) / .8)}.bg-primary{--tw-bg-opacity: 1;background-color:hsl(var(--primary) / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-100\/50{background-color:#fee2e280}.bg-red-100\/60{background-color:#fee2e299}.bg-red-200\/60{background-color:#fecaca99}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-rose-100{--tw-bg-opacity: 1;background-color:rgb(255 228 230 / var(--tw-bg-opacity, 1))}.bg-secondary{--tw-bg-opacity: 1;background-color:hsl(var(--secondary) / var(--tw-bg-opacity, 1))}.bg-violet-500{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.bg-violet-600{--tw-bg-opacity: 1;background-color:rgb(124 58 237 / var(--tw-bg-opacity, 1))}.bg-violet-900\/50{background-color:#4c1d9580}.bg-violet-950\/40{background-color:#2e106566}.bg-violet-950\/50{background-color:#2e106580}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-100{--tw-bg-opacity: 1;background-color:rgb(254 249 195 / var(--tw-bg-opacity, 1))}.bg-yellow-100\/60{background-color:#fef9c399}.bg-yellow-200\/60{background-color:#fef08a99}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pr-1{padding-right:.25rem}.pr-7{padding-right:1.75rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-baseline{vertical-align:baseline}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-card-foreground{--tw-text-opacity: 1;color:hsl(var(--card-foreground) / var(--tw-text-opacity, 1))}.text-current{color:currentColor}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-foreground{--tw-text-opacity: 1;color:hsl(var(--foreground) / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-muted-foreground{--tw-text-opacity: 1;color:hsl(var(--muted-foreground) / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-orange-600{--tw-text-opacity: 1;color:rgb(234 88 12 / var(--tw-text-opacity, 1))}.text-pink-600{--tw-text-opacity: 1;color:rgb(219 39 119 / var(--tw-text-opacity, 1))}.text-primary{--tw-text-opacity: 1;color:hsl(var(--primary) / var(--tw-text-opacity, 1))}.text-primary-foreground{--tw-text-opacity: 1;color:hsl(var(--primary-foreground) / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-600\/60{color:#dc262699}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-rose-800{--tw-text-opacity: 1;color:rgb(159 18 57 / var(--tw-text-opacity, 1))}.text-secondary-foreground{--tw-text-opacity: 1;color:hsl(var(--secondary-foreground) / var(--tw-text-opacity, 1))}.text-violet-200{--tw-text-opacity: 1;color:rgb(221 214 254 / var(--tw-text-opacity, 1))}.text-violet-300{--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.text-violet-400{--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/70{color:#ffffffb3}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity, 1))}.text-yellow-800{--tw-text-opacity: 1;color:rgb(133 77 14 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.placeholder-muted-foreground::-moz-placeholder{--tw-placeholder-opacity: 1;color:hsl(var(--muted-foreground) / var(--tw-placeholder-opacity, 1))}.placeholder-muted-foreground::placeholder{--tw-placeholder-opacity: 1;color:hsl(var(--muted-foreground) / var(--tw-placeholder-opacity, 1))}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background) / 1)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.placeholder\:text-muted-foreground::-moz-placeholder{--tw-text-opacity: 1;color:hsl(var(--muted-foreground) / var(--tw-text-opacity, 1))}.placeholder\:text-muted-foreground::placeholder{--tw-text-opacity: 1;color:hsl(var(--muted-foreground) / var(--tw-text-opacity, 1))}.focus-within\:border-ring:focus-within{--tw-border-opacity: 1;border-color:hsl(var(--ring) / var(--tw-border-opacity, 1))}.focus-within\:ring-2:focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-within\:ring-ring\/50:focus-within{--tw-ring-color: hsl(var(--ring) / .5)}.hover\:border-ring:hover{--tw-border-opacity: 1;border-color:hsl(var(--ring) / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{--tw-bg-opacity: 1;background-color:hsl(var(--accent) / var(--tw-bg-opacity, 1))}.hover\:bg-accent\/80:hover{background-color:hsl(var(--accent) / .8)}.hover\:bg-amber-200\/60:hover{background-color:#fde68a99}.hover\:bg-amber-500:hover{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-200\/60:hover{background-color:#bfdbfe99}.hover\:bg-card:hover{--tw-bg-opacity: 1;background-color:hsl(var(--card) / var(--tw-bg-opacity, 1))}.hover\:bg-muted:hover{--tw-bg-opacity: 1;background-color:hsl(var(--muted) / var(--tw-bg-opacity, 1))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-muted\/60:hover{background-color:hsl(var(--muted) / .6)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 202 202 / var(--tw-bg-opacity, 1))}.hover\:bg-red-200\/60:hover{background-color:#fecaca99}.hover\:bg-red-500:hover{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.hover\:bg-red-500\/90:hover{background-color:#ef4444e6}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-violet-500:hover{--tw-bg-opacity: 1;background-color:rgb(139 92 246 / var(--tw-bg-opacity, 1))}.hover\:bg-yellow-200:hover{--tw-bg-opacity: 1;background-color:rgb(254 240 138 / var(--tw-bg-opacity, 1))}.hover\:bg-yellow-200\/60:hover{background-color:#fef08a99}.hover\:text-accent-foreground:hover{--tw-text-opacity: 1;color:hsl(var(--accent-foreground) / var(--tw-text-opacity, 1))}.hover\:text-amber-800:hover{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.hover\:text-blue-800:hover{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{--tw-text-opacity: 1;color:hsl(var(--foreground) / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:brightness-125:hover{--tw-brightness: brightness(1.25);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-ring:focus{--tw-border-opacity: 1;border-color:hsl(var(--ring) / var(--tw-border-opacity, 1))}.focus\:border-violet-500\/70:focus{border-color:#8b5cf6b3}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: hsl(var(--ring) / var(--tw-ring-opacity, 1))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group\/tip:hover .group-hover\/tip\:visible{visibility:visible}.group:hover .group-hover\:flex{display:flex}.group\/tip:hover .group-hover\/tip\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.dark\:border-red-800\/60:is(.dark *){border-color:#991b1b99}.dark\:border-yellow-800\/60:is(.dark *){border-color:#854d0e99}.dark\:bg-amber-900\/40:is(.dark *){background-color:#78350f66}.dark\:bg-blue-900\/40:is(.dark *){background-color:#1e3a8a66}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/40:is(.dark *){background-color:#14532d66}.dark\:bg-red-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity, 1))}.dark\:bg-red-800\/60:is(.dark *){background-color:#991b1b99}.dark\:bg-red-800\/80:is(.dark *){background-color:#991b1bcc}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-red-950\/30:is(.dark *){background-color:#450a0a4d}.dark\:bg-red-950\/40:is(.dark *){background-color:#450a0a66}.dark\:bg-rose-800\/80:is(.dark *){background-color:#9f1239cc}.dark\:bg-yellow-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(133 77 14 / var(--tw-bg-opacity, 1))}.dark\:bg-yellow-800\/60:is(.dark *){background-color:#854d0e99}.dark\:bg-yellow-800\/80:is(.dark *){background-color:#854d0ecc}.dark\:bg-yellow-950\/40:is(.dark *){background-color:#42200666}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is(.dark *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is(.dark *){--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-orange-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.dark\:text-pink-400:is(.dark *){--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-100:is(.dark *){--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-red-400\/60:is(.dark *){color:#f8717199}.dark\:text-rose-100:is(.dark *){--tw-text-opacity: 1;color:rgb(255 228 230 / var(--tw-text-opacity, 1))}.dark\:text-rose-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-yellow-100:is(.dark *){--tw-text-opacity: 1;color:rgb(254 249 195 / var(--tw-text-opacity, 1))}.dark\:text-yellow-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 240 138 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.dark\:text-yellow-400\/60:is(.dark *){color:#facc1599}.dark\:hover\:bg-amber-800\/50:hover:is(.dark *){background-color:#92400e80}.dark\:hover\:bg-blue-800\/50:hover:is(.dark *){background-color:#1e40af80}.dark\:hover\:bg-red-700\/80:hover:is(.dark *){background-color:#b91c1ccc}.dark\:hover\:bg-red-900\/40:hover:is(.dark *){background-color:#7f1d1d66}.dark\:hover\:bg-yellow-700\/80:hover:is(.dark *){background-color:#a16207cc}.dark\:hover\:bg-yellow-900\/40:hover:is(.dark *){background-color:#713f1266}.dark\:hover\:text-amber-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:hover\:text-blue-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-300:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}
|