@zhin.js/adapter-sandbox 5.0.3 → 5.0.4
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/CHANGELOG.md +17 -0
- package/client/RichTextEditor.tsx +5 -2
- package/client/Sandbox.tsx +84 -7
- package/dist/index.js +8 -8
- package/lib/sandbox-ws.d.ts +2 -0
- package/lib/sandbox-ws.d.ts.map +1 -1
- package/lib/sandbox-ws.js +28 -4
- package/lib/sandbox-ws.js.map +1 -1
- package/lib/segment-mapper.d.ts +2 -0
- package/lib/segment-mapper.d.ts.map +1 -0
- package/lib/segment-mapper.js +2 -0
- package/lib/segment-mapper.js.map +1 -0
- package/package.json +14 -14
- package/src/sandbox-ws.ts +31 -4
- package/src/segment-mapper.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @zhin.js/adapter-process
|
|
2
2
|
|
|
3
|
+
## 5.0.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 5cc9c03: fix: ai 优化
|
|
8
|
+
- b9b3881: fix: 增加游戏引擎以及部分游戏
|
|
9
|
+
- Updated dependencies [5b08052]
|
|
10
|
+
- Updated dependencies [5cc9c03]
|
|
11
|
+
- Updated dependencies [36d6db2]
|
|
12
|
+
- Updated dependencies [b9b3881]
|
|
13
|
+
- Updated dependencies [7700903]
|
|
14
|
+
- @zhin.js/core@1.3.3
|
|
15
|
+
- @zhin.js/client@2.0.4
|
|
16
|
+
- @zhin.js/contract@1.0.2
|
|
17
|
+
- @zhin.js/host-api@2.0.4
|
|
18
|
+
- @zhin.js/host-router@2.0.2
|
|
19
|
+
|
|
3
20
|
## 5.0.3
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useRef, useEffect, forwardRef, useImperativeHandle } from 'react'
|
|
2
2
|
|
|
3
3
|
export interface MessageSegment {
|
|
4
|
-
type: 'text' | 'at' | 'face' | 'image' | 'video' | 'audio' | 'record' | 'file'
|
|
4
|
+
type: 'text' | 'mention' | 'at' | 'face' | 'image' | 'video' | 'audio' | 'record' | 'file'
|
|
5
5
|
data: Record<string, any>
|
|
6
6
|
}
|
|
7
7
|
|
|
@@ -69,7 +69,10 @@ const RichTextEditor = forwardRef<RichTextEditorRef, RichTextEditorProps>(
|
|
|
69
69
|
const name = el.dataset.name
|
|
70
70
|
const id = el.dataset.id
|
|
71
71
|
text += `[@${name}]`
|
|
72
|
-
segments.push({
|
|
72
|
+
segments.push({
|
|
73
|
+
type: 'mention',
|
|
74
|
+
data: id ? { target: id, name } : { target: name, name },
|
|
75
|
+
})
|
|
73
76
|
} else if (el.tagName === 'BR') {
|
|
74
77
|
text += '\n'
|
|
75
78
|
}
|
package/client/Sandbox.tsx
CHANGED
|
@@ -56,8 +56,17 @@ export default function Sandbox() {
|
|
|
56
56
|
useEffect(() => { fetchFaceList() }, [])
|
|
57
57
|
|
|
58
58
|
const handleInboundPayload = (data: {
|
|
59
|
-
type: string; id: string; content?: unknown; endpoint?: string; timestamp: number
|
|
59
|
+
type: string; id: string; content?: unknown; endpoint?: string; timestamp: number;
|
|
60
|
+
messageId?: string; bot?: string;
|
|
60
61
|
}) => {
|
|
62
|
+
if (data.type === 'edit' && data.messageId) {
|
|
63
|
+
const content: MessageSegment[] = Array.isArray(data.content)
|
|
64
|
+
? data.content as MessageSegment[]
|
|
65
|
+
: parseTextToSegments(String(data.content ?? ''))
|
|
66
|
+
setMessages((prev) => prev.map((m) => (m.id === data.messageId ? { ...m, content } : m)))
|
|
67
|
+
return
|
|
68
|
+
}
|
|
69
|
+
|
|
61
70
|
const content: MessageSegment[] = typeof data.content === 'string'
|
|
62
71
|
? parseTextToSegments(data.content)
|
|
63
72
|
: Array.isArray(data.content) ? data.content as MessageSegment[] : parseTextToSegments(String(data.content ?? ''))
|
|
@@ -77,12 +86,18 @@ export default function Sandbox() {
|
|
|
77
86
|
})
|
|
78
87
|
|
|
79
88
|
setMessages((prev) => [...prev, {
|
|
80
|
-
id: `bot_${data.timestamp}`, type: 'received', channelType,
|
|
89
|
+
id: data.messageId ?? `bot_${data.timestamp}`, type: 'received', channelType,
|
|
81
90
|
channelId: data.id, channelName, senderId: 'endpoint',
|
|
82
91
|
senderName: data.bot || endpointName, content, timestamp: data.timestamp,
|
|
83
92
|
}])
|
|
84
93
|
}
|
|
85
94
|
|
|
95
|
+
const sendInteractiveAction = (payload: string) => {
|
|
96
|
+
const segments: MessageSegment[] = [{ type: 'action', data: { id: payload, payload } }]
|
|
97
|
+
const payloadJson = JSON.stringify({ type: activeChannel.type, id: activeChannel.id, content: segments, timestamp: Date.now() })
|
|
98
|
+
wsRef.current?.send(payloadJson)
|
|
99
|
+
}
|
|
100
|
+
|
|
86
101
|
useEffect(() => {
|
|
87
102
|
const wsUrl = buildSandboxWebSocketUrl()
|
|
88
103
|
wsRef.current = new WebSocket(wsUrl)
|
|
@@ -113,7 +128,7 @@ export default function Sandbox() {
|
|
|
113
128
|
const t = text.substring(lastIndex, match.index)
|
|
114
129
|
if (t) segments.push({ type: 'text', data: { text: t } })
|
|
115
130
|
}
|
|
116
|
-
if (match[1]) segments.push({ type: '
|
|
131
|
+
if (match[1]) segments.push({ type: 'mention', data: { target: match[1], name: match[1] } })
|
|
117
132
|
else if (match[2]) segments.push({ type: 'face', data: { id: parseInt(match[2], 10) } })
|
|
118
133
|
else if (match[3]) segments.push({ type: 'image', data: { url: match[3] } })
|
|
119
134
|
else if (match[4]) segments.push({ type: 'video', data: { url: match[4] } })
|
|
@@ -131,6 +146,7 @@ export default function Sandbox() {
|
|
|
131
146
|
if (segments.length === 0) return false
|
|
132
147
|
return segments.some((s) => {
|
|
133
148
|
if (s.type === 'text') return Boolean(String(s.data?.text ?? '').trim())
|
|
149
|
+
if (s.type === 'keyboard') return true
|
|
134
150
|
return true
|
|
135
151
|
})
|
|
136
152
|
}
|
|
@@ -145,10 +161,15 @@ export default function Sandbox() {
|
|
|
145
161
|
switch (segment.type) {
|
|
146
162
|
case 'text':
|
|
147
163
|
return <span key={index}>{String(d.text ?? '').split('\n').map((part: string, i: number) => <React.Fragment key={i}>{part}{i < String(d.text ?? '').split('\n').length - 1 && <br />}</React.Fragment>)}</span>
|
|
164
|
+
case 'mention':
|
|
148
165
|
case 'at':
|
|
149
|
-
return <span key={index} className="inline-flex items-center px-1.5 py-0.5 rounded bg-accent text-accent-foreground text-xs mx-0.5">@{String(d.name ?? d.qq ?? '')}</span>
|
|
166
|
+
return <span key={index} className="inline-flex items-center px-1.5 py-0.5 rounded bg-accent text-accent-foreground text-xs mx-0.5">@{String(d.name ?? d.target ?? d.qq ?? '')}</span>
|
|
150
167
|
case 'face':
|
|
151
|
-
return <img key={index} src={`https://face.viki.moe/apng/${d.id}.png`} alt=
|
|
168
|
+
return <img key={index} src={`https://face.viki.moe/apng/${d.id}.png`} alt={String(d.name ?? '')} className="w-6 h-6 inline-block align-middle mx-0.5" title={String(d.name ?? d.id ?? '')} />
|
|
169
|
+
case 'dice':
|
|
170
|
+
return <span key={index} className="inline-flex items-center px-1.5 py-0.5 rounded bg-secondary text-xs mx-0.5">🎲 {d.result != null ? `点数 ${String(d.result)}` : '骰子'}</span>
|
|
171
|
+
case 'rps':
|
|
172
|
+
return <span key={index} className="inline-flex items-center px-1.5 py-0.5 rounded bg-secondary text-xs mx-0.5">✊ {d.result != null ? `结果 ${String(d.result)}` : '猜拳'}</span>
|
|
152
173
|
case 'image': {
|
|
153
174
|
const raw = pickMediaRawUrl(d)
|
|
154
175
|
const src = resolveMediaSrc(raw, 'image')
|
|
@@ -189,8 +210,64 @@ export default function Sandbox() {
|
|
|
189
210
|
/>
|
|
190
211
|
)
|
|
191
212
|
}
|
|
192
|
-
case '
|
|
193
|
-
return
|
|
213
|
+
case 'reply':
|
|
214
|
+
return (
|
|
215
|
+
<div key={index} className="mb-1 rounded-md border border-dashed px-2 py-1 text-xs opacity-90">
|
|
216
|
+
↩ 引用消息 #{String(d.message_id ?? d.id ?? '')}
|
|
217
|
+
</div>
|
|
218
|
+
)
|
|
219
|
+
case 'forward': {
|
|
220
|
+
const messages = d.messages as Array<Array<{ type?: string; data?: Record<string, unknown> }>> | undefined
|
|
221
|
+
const title = String(d.title ?? '聊天记录')
|
|
222
|
+
return (
|
|
223
|
+
<div key={index} className="my-1 rounded-md border bg-background/40 px-2 py-2 text-xs space-y-1">
|
|
224
|
+
<div className="font-medium">📨 {title}</div>
|
|
225
|
+
{Array.isArray(messages) && messages.length > 0 ? (
|
|
226
|
+
<div className="space-y-1 pl-2 border-l-2 border-muted">
|
|
227
|
+
{messages.slice(0, 3).map((batch, bi) => (
|
|
228
|
+
<div key={bi} className="opacity-90">
|
|
229
|
+
{batch.map((s, si) => (
|
|
230
|
+
<span key={si}>
|
|
231
|
+
{s.type === 'text' ? String(s.data?.text ?? '') : `[${s.type ?? 'seg'}]`}
|
|
232
|
+
</span>
|
|
233
|
+
))}
|
|
234
|
+
</div>
|
|
235
|
+
))}
|
|
236
|
+
{messages.length > 3 && <div className="opacity-60">…共 {messages.length} 条</div>}
|
|
237
|
+
</div>
|
|
238
|
+
) : (
|
|
239
|
+
<div className="opacity-70">[合并转发]</div>
|
|
240
|
+
)}
|
|
241
|
+
</div>
|
|
242
|
+
)
|
|
243
|
+
}
|
|
244
|
+
case 'keyboard': {
|
|
245
|
+
const rows = (d.rows as Array<Array<{ label: string; payload: string; disabled?: boolean }>>) ?? []
|
|
246
|
+
return (
|
|
247
|
+
<div key={index} className="inline-grid gap-1 my-1">
|
|
248
|
+
{rows.map((row, ri) => (
|
|
249
|
+
<div key={ri} className="flex gap-1">
|
|
250
|
+
{row.map((btn) => (
|
|
251
|
+
<button
|
|
252
|
+
key={btn.payload}
|
|
253
|
+
type="button"
|
|
254
|
+
disabled={btn.disabled || isSent}
|
|
255
|
+
onClick={() => sendInteractiveAction(btn.payload)}
|
|
256
|
+
className={cn(
|
|
257
|
+
'min-w-9 h-9 rounded-md border text-sm font-medium transition-colors',
|
|
258
|
+
btn.disabled
|
|
259
|
+
? 'opacity-50 cursor-not-allowed'
|
|
260
|
+
: 'hover:bg-accent active:scale-95',
|
|
261
|
+
)}
|
|
262
|
+
>
|
|
263
|
+
{btn.label}
|
|
264
|
+
</button>
|
|
265
|
+
))}
|
|
266
|
+
</div>
|
|
267
|
+
))}
|
|
268
|
+
</div>
|
|
269
|
+
)
|
|
270
|
+
}
|
|
194
271
|
default:
|
|
195
272
|
return <span key={index} className="text-xs opacity-70">[{segment.type}]</span>
|
|
196
273
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
`)}return{text:d,segments:
|
|
3
|
-
`)){
|
|
4
|
-
`).map((
|
|
5
|
-
`).length-1&&a("br",{})]},
|
|
6
|
-
`).map((
|
|
7
|
-
`).length-1&&a("br",{})]},P))},f);case"at":return o("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded bg-accent text-accent-foreground text-xs mx-0.5",children:["@",String(S.name??S.qq??"")]},f);case"face":return a("img",{src:`https://face.viki.moe/apng/${S.id}.png`,alt:"",className:"w-6 h-6 inline-block align-middle mx-0.5"},f);case"image":{let F=ye(S),P=Pe(F,"image");return P?a("a",{href:P,target:"_blank",rel:"noreferrer",className:"block my-1",children:a("img",{src:P,alt:"",className:A("max-w-[min(320px,88vw)] rounded-lg block",x,"ring-offset-0"),onError:aa=>{aa.target.style.display="none"}})},f):a("span",{className:"text-xs opacity-70",children:"[\u56FE\u7247]"},f)}case"video":{let F=ye(S),P=Pe(F,"video");return P?a("video",{src:P,controls:!0,playsInline:!0,preload:"metadata",className:A("max-w-[min(360px,92vw)] max-h-72 rounded-lg my-1 bg-black/10",x)},f):a("span",{className:"text-xs opacity-70",children:"[\u89C6\u9891\u65E0\u5730\u5740]"},f)}case"audio":case"record":{let F=ye(S),P=Pe(F,"audio");return P?a("audio",{src:P,controls:!0,preload:"metadata",className:A("w-full max-w-sm my-2 h-10",s&&"opacity-95")},f):a("span",{className:"text-xs opacity-70",children:"[\u97F3\u9891\u65E0\u5730\u5740]"},f)}case"file":return o("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded border text-xs mx-0.5",children:["\u{1F4CE} ",String(S.name||"\u6587\u4EF6")]},f);default:return o("span",{className:"text-xs opacity-70",children:["[",C.type,"]"]},f)}})},Fe=(e,s)=>{if(!Be(s))return;let x={id:`msg_${Date.now()}`,type:"sent",channelType:h.type,channelId:h.id,channelName:h.name,senderId:"test_user",senderName:"\u6D4B\u8BD5\u7528\u6237",content:s,timestamp:Date.now()};p(f=>[...f,x]),B(""),v([]),q.current?.clear();let C=JSON.stringify({type:h.type,id:h.id,content:s,timestamp:Date.now()});z.current?.send(C)},_e=()=>{confirm("\u786E\u5B9A\u6E05\u7A7A\u6240\u6709\u6D88\u606F\u8BB0\u5F55\uFF1F")&&p([])},Qe=e=>{ge("chat"),m(e),L(s=>s.map(x=>x.id===e.id?{...x,unread:0}:x)),window.innerWidth<768&&T(!1)},Je=()=>{let e=["private","group","channel"],s=e[Math.floor(Math.random()*e.length)],x=prompt("\u8BF7\u8F93\u5165\u9891\u9053\u540D\u79F0\uFF1A");if(x){let C={id:`${s}_${Date.now()}`,name:x,type:s,unread:0};L(f=>[...f,C]),m(C)}},De=e=>{switch(e){case"private":return a(Z,{size:16});case"group":return a(fe,{size:16});case"channel":return a(te,{size:16});default:return a(H,{size:16})}},je=e=>{q.current?.insertFace(e),M(!1)},be=()=>{let e=$.trim();!e||!w||(w==="image"?q.current?.insertImage(e):w==="video"?q.current?.insertVideo(e):q.current?.insertAudio(e),me(""),W(null))},va=()=>{l.trim()&&(q.current?.insertAt(l.trim()),n(""),Ce(!1))},$e=e=>{q.current?.replaceAtTrigger(e.name,e.id),Q(null),t("")},Ye=(e,s,x)=>{if(h.type==="private"){Q(null),t("");return}e&&x?(Q(x),t(s)):(Q(null),t(""))},Re=y.filter(e=>{if(!d.trim())return!0;let s=d.toLowerCase();return e.name.toLowerCase().includes(s)||e.id.toLowerCase().includes(s)}),ea=(e,s)=>{B(e),v(s)},ve=N.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())||e.describe.toLowerCase().includes(u.toLowerCase())),Se=i.filter(e=>e.channelId===h.id);return o("div",{className:"sandbox-container rounded-xl border border-border/70 bg-card/30 shadow-sm",children:[o("button",{className:"mobile-channel-toggle md:hidden",onClick:()=>T(!b),children:[a(H,{size:20})," \u9891\u9053\u5217\u8868"]}),o("div",{className:A("channel-sidebar rounded-lg border bg-card",b&&"show"),children:[a("div",{className:"p-3 border-b",children:o("div",{className:"flex justify-between items-center",children:[o("div",{className:"flex items-center gap-2",children:[a("div",{className:"p-1 rounded-md bg-secondary",children:a(H,{size:16,className:"text-muted-foreground"})}),a("h3",{className:"font-semibold",children:"\u9891\u9053\u5217\u8868"})]}),o("span",{className:A("inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium border",E?"bg-emerald-100 text-emerald-800 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:border-emerald-800":"bg-muted text-muted-foreground"),children:[E?a(ne,{size:12}):a(ce,{size:12}),E?"\u5DF2\u8FDE\u63A5":"\u672A\u8FDE\u63A5"]})]})}),o("div",{className:"flex-1 overflow-y-auto p-2 space-y-1",children:[I.map(e=>{let s=J==="chat"&&h.id===e.id;return o("div",{className:A("menu-item",s&&"active"),onClick:()=>Qe(e),children:[a("span",{className:"shrink-0",children:De(e.type)}),o("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium truncate",children:e.name}),a("div",{className:"text-xs text-muted-foreground",children:e.type==="private"?"\u79C1\u804A":e.type==="group"?"\u7FA4\u804A":"\u9891\u9053"})]}),e.unread>0&&a("span",{className:"inline-flex items-center justify-center h-5 min-w-5 rounded-full bg-destructive text-destructive-foreground text-[10px] font-medium px-1",children:e.unread})]},e.id)}),o("div",{className:"pt-2 mt-2 border-t space-y-1",children:[o("div",{className:A("menu-item",J==="requests"&&"active"),onClick:()=>{ge("requests"),window.innerWidth<768&&T(!1)},children:[a(K,{size:16,className:"shrink-0"}),o("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium",children:"\u8BF7\u6C42"}),a("div",{className:"text-xs text-muted-foreground",children:"\u597D\u53CB/\u7FA4\u9080\u8BF7\u7B49"})]})]}),o("div",{className:A("menu-item",J==="notices"&&"active"),onClick:()=>{ge("notices"),window.innerWidth<768&&T(!1)},children:[a(X,{size:16,className:"shrink-0"}),o("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium",children:"\u901A\u77E5"}),a("div",{className:"text-xs text-muted-foreground",children:"\u7FA4\u7BA1/\u64A4\u56DE\u7B49"})]})]})]})]}),a("div",{className:"p-2 border-t",children:a("button",{className:"w-full py-2 px-3 rounded-md border border-dashed text-sm text-muted-foreground hover:bg-accent transition-colors",onClick:Je,children:"+ \u6DFB\u52A0\u9891\u9053"})})]}),b&&a("div",{className:"channel-overlay md:hidden",onClick:()=>T(!1)}),o("div",{className:"chat-area",children:[J==="requests"&&o("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0 overflow-hidden",children:[a("div",{className:"p-3 border-b flex-shrink-0",children:o("h2",{className:"text-lg font-bold flex items-center gap-2",children:[a(K,{size:20})," \u8BF7\u6C42"]})}),o("div",{className:"flex-1 overflow-y-auto p-4 flex flex-col items-center justify-center gap-3 text-muted-foreground text-center",children:[a(K,{size:48,className:"opacity-30"}),a("span",{children:"\u6C99\u76D2\u4E3A\u6A21\u62DF\u73AF\u5883\uFF0C\u6682\u65E0\u8BF7\u6C42\u6570\u636E"}),o("span",{className:"text-sm",children:["\u5B9E\u9645\u597D\u53CB/\u7FA4\u9080\u8BF7\u7B49\u8BF7\u6C42\u8BF7\u5230\u4FA7\u8FB9\u680F ",a("strong",{children:"\u673A\u5668\u4EBA"})," \u9875\u9762\u8FDB\u5165\u5BF9\u5E94\u673A\u5668\u4EBA\u7BA1\u7406\u67E5\u770B"]})]})]}),J==="notices"&&o("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0 overflow-hidden",children:[a("div",{className:"p-3 border-b flex-shrink-0",children:o("h2",{className:"text-lg font-bold flex items-center gap-2",children:[a(X,{size:20})," \u901A\u77E5"]})}),o("div",{className:"flex-1 overflow-y-auto p-4 flex flex-col items-center justify-center gap-3 text-muted-foreground text-center",children:[a(X,{size:48,className:"opacity-30"}),a("span",{children:"\u6C99\u76D2\u4E3A\u6A21\u62DF\u73AF\u5883\uFF0C\u6682\u65E0\u901A\u77E5\u6570\u636E"}),o("span",{className:"text-sm",children:["\u5B9E\u9645\u7FA4\u7BA1\u3001\u64A4\u56DE\u7B49\u901A\u77E5\u8BF7\u5230\u4FA7\u8FB9\u680F ",a("strong",{children:"\u673A\u5668\u4EBA"})," \u9875\u9762\u8FDB\u5165\u5BF9\u5E94\u673A\u5668\u4EBA\u7BA1\u7406\u67E5\u770B"]})]})]}),J==="chat"&&o(Ra,{children:[a("div",{className:"rounded-lg border bg-card p-3 flex-shrink-0",children:o("div",{className:"flex justify-between items-center flex-wrap gap-2",children:[o("div",{className:"flex items-center gap-3",children:[a("div",{className:"p-2 rounded-lg bg-secondary",children:De(h.type)}),o("div",{children:[a("h2",{className:"text-lg font-bold",children:h.name}),o("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[a("span",{children:h.id}),a("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded border text-[10px]",children:Se.length}),a("span",{children:"\u6761\u6D88\u606F"})]})]}),a("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-secondary text-secondary-foreground",children:h.type==="private"?"\u79C1\u804A":h.type==="group"?"\u7FA4\u804A":"\u9891\u9053"})]}),o("div",{className:"flex items-center gap-2",children:[a("input",{value:U,onChange:e=>_(e.target.value),placeholder:"\u673A\u5668\u4EBA\u540D\u79F0",className:"h-8 w-28 rounded-md border bg-transparent px-2 text-sm"}),o("button",{className:"inline-flex items-center gap-1 h-8 px-3 rounded-md bg-secondary text-secondary-foreground text-sm hover:bg-secondary/80",onClick:_e,children:[a(se,{size:14})," \u6E05\u7A7A"]})]})]})}),a("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0",children:a("div",{className:"flex-1 overflow-y-auto p-4",children:Se.length===0?o("div",{className:"flex flex-col items-center justify-center h-full gap-3",children:[a(H,{size:64,className:"text-muted-foreground/20"}),a("span",{className:"text-muted-foreground",children:"\u6682\u65E0\u6D88\u606F\uFF0C\u5F00\u59CB\u5BF9\u8BDD\u5427\uFF01"})]}):o("div",{className:"space-y-2",children:[Se.map(e=>a("div",{className:A("flex",e.type==="sent"?"justify-end":"justify-start"),children:o("div",{className:A("max-w-[70%] p-3 rounded-2xl",e.type==="sent"?"bg-primary text-primary-foreground":"bg-muted"),children:[o("div",{className:"flex items-center gap-2 mb-1",children:[e.type==="received"&&a(ee,{size:14}),e.type==="sent"&&a(Z,{size:14}),a("span",{className:"text-xs font-medium opacity-90",children:e.senderName}),a("span",{className:"text-xs opacity-70",children:new Date(e.timestamp).toLocaleTimeString()})]}),a("div",{className:"text-sm space-y-1",children:Ze(e.content,e.type==="sent")})]})},e.id)),a("div",{ref:Me})]})})}),o("div",{className:"rounded-lg border bg-card p-3 flex-shrink-0 space-y-3",children:[o("div",{className:"flex gap-2 items-center flex-wrap",children:[a("button",{type:"button",className:A("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",O?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{M(!O),W(null)},title:"\u63D2\u5165\u8868\u60C5",children:a(re,{size:16})}),a("button",{type:"button",className:A("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",w==="image"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{W(e=>e==="image"?null:"image"),M(!1)},title:"\u63D2\u5165\u56FE\u7247 URL",children:a(oe,{size:16})}),a("button",{type:"button",className:A("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",w==="video"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{W(e=>e==="video"?null:"video"),M(!1)},title:"\u63D2\u5165\u89C6\u9891 URL",children:a(ie,{size:16})}),a("button",{type:"button",className:A("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",w==="audio"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{W(e=>e==="audio"?null:"audio"),M(!1)},title:"\u63D2\u5165\u97F3\u9891 URL",children:a(ue,{size:16})}),a("div",{className:"flex-1 min-w-[1rem]"}),k&&a("button",{className:"h-8 w-8 rounded-md flex items-center justify-center hover:bg-accent transition-colors",onClick:()=>{B(""),v([])},children:a(pe,{size:16})})]}),O&&o("div",{className:"p-3 rounded-md border bg-muted/30 max-h-64 overflow-y-auto space-y-2",children:[a("input",{value:u,onChange:e=>c(e.target.value),placeholder:"\u641C\u7D22\u8868\u60C5...",className:"w-full h-8 rounded-md border bg-transparent px-2 text-sm"}),a("div",{className:"grid grid-cols-8 gap-1",children:ve.slice(0,80).map(e=>a("button",{onClick:()=>je(e.id),title:e.name,className:"w-10 h-10 rounded-md border flex items-center justify-center hover:bg-accent transition-colors",children:a("img",{src:`https://face.viki.moe/apng/${e.id}.png`,alt:e.name,className:"w-8 h-8"})},e.id))}),ve.length===0&&o("div",{className:"flex flex-col items-center gap-2 py-4",children:[a(j,{size:32,className:"text-muted-foreground/30"}),a("span",{className:"text-sm text-muted-foreground",children:"\u672A\u627E\u5230\u5339\u914D\u7684\u8868\u60C5"})]})]}),w&&o("div",{className:"p-3 rounded-md border bg-muted/30 space-y-2",children:[o("p",{className:"text-xs text-muted-foreground",children:[w==="image"&&"\u652F\u6301 http(s) \u56FE\u7247\u94FE\u63A5\u6216 data URL",w==="video"&&"\u652F\u6301\u6D4F\u89C8\u5668\u53EF\u89E3\u7801\u7684\u89C6\u9891\u76F4\u94FE\uFF08\u5982 .mp4\u3001.webm\uFF09",w==="audio"&&"\u652F\u6301 .mp3\u3001.ogg\u3001.wav \u7B49\u97F3\u9891\u76F4\u94FE"]}),a("input",{value:$,onChange:e=>me(e.target.value),placeholder:w==="image"?"\u56FE\u7247 URL\u2026":w==="video"?"\u89C6\u9891 URL\u2026":"\u97F3\u9891 URL\u2026",className:"w-full h-8 rounded-md border border-input bg-background px-2 text-sm",onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),be())}}),o("button",{type:"button",className:"inline-flex items-center gap-1 h-8 px-3 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",onClick:be,disabled:!$.trim(),children:[a(ae,{size:14})," \u63D2\u5165\u5230\u8F93\u5165\u6846"]})]}),o("div",{className:"flex gap-2 items-start",children:[o("div",{className:"flex-1 relative",children:[a(Ve,{ref:q,placeholder:`\u5411 ${h.name} \u53D1\u9001\u6D88\u606F...`,onSend:Fe,onChange:ea,onAtTrigger:Ye,minHeight:"44px",maxHeight:"200px"}),Y&&a("div",{className:"absolute z-50 rounded-lg border bg-popover shadow-md min-w-60 max-h-72 overflow-y-auto p-1",style:{top:`${Y.top}px`,left:`${Y.left}px`},children:Re.length>0?Re.map(e=>o("div",{className:"flex items-center gap-2 p-2 rounded-md cursor-pointer hover:bg-accent transition-colors",onClick:()=>$e(e),children:[a(Z,{size:16,className:"text-muted-foreground"}),o("div",{className:"flex-1",children:[a("div",{className:"text-sm font-medium",children:e.name}),o("div",{className:"text-xs text-muted-foreground",children:["ID: ",e.id]})]})]},e.id)):o("div",{className:"flex flex-col items-center gap-2 p-4",children:[a(j,{size:20,className:"text-muted-foreground/50"}),a("span",{className:"text-xs text-muted-foreground",children:"\u672A\u627E\u5230\u5339\u914D\u7684\u7528\u6237"})]})})]}),o("button",{className:"inline-flex items-center gap-1.5 h-10 px-4 rounded-md bg-primary text-primary-foreground text-sm font-medium disabled:opacity-50 transition-colors hover:bg-primary/90",onClick:()=>{let e=q.current?.getContent();e&&Fe(e.text,e.segments)},disabled:!Be(V),children:[a(le,{size:16})," \u53D1\u9001"]})]}),o("div",{className:"flex items-center gap-2 flex-wrap text-xs text-muted-foreground",children:[a(de,{size:12})," \u5FEB\u6377\u64CD\u4F5C:",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"Enter"})," \u53D1\u9001",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"Shift+Enter"})," \u6362\u884C",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[@\u540D\u79F0]"})," @\u67D0\u4EBA",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[video:URL]"}),a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[audio:URL]"})]})]})]})]})]})}function Po(i){i.addRoute({path:"/console/sandbox",name:"\u6C99\u76D2",element:i.React.createElement(Ae,{hostReact:i.React})}),i.addTool({id:"sandbox",name:"\u6C99\u76D2",path:"/console/sandbox"})}export{Po as register};
|
|
1
|
+
import Ze,{useState as w,useEffect as he,useRef as Ae}from"react";import{cn as M,resolveMediaSrc as Me,pickMediaRawUrl as Be}from"@zhin.js/client";function la(){let c=localStorage.getItem("zhin_api_base")?.trim();return(c?c.replace(/\/$/,""):null)??window.location.origin}function sa(){return localStorage.getItem("zhin_api_token")?.trim()||localStorage.getItem("HTTP_TOKEN")?.trim()||localStorage.getItem("zhin_http_token")?.trim()||""}function Oe(c){let m=(c??la()).replace(/\/$/,""),g=new URL("/sandbox",`${m}/`);g.protocol=g.protocol==="https:"?"wss:":"ws:";let I=sa();return I&&g.searchParams.set("token",I),g.href}import{forwardRef as na,createElement as pa}from"react";var Ce=(...c)=>c.filter((m,g,I)=>!!m&&m.trim()!==""&&I.indexOf(m)===g).join(" ").trim();var He=c=>c.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var Ne=c=>c.replace(/^([A-Z])|[\s-_]+(\w)/g,(m,g,I)=>I?I.toUpperCase():g.toLowerCase());var ye=c=>{let m=Ne(c);return m.charAt(0).toUpperCase()+m.slice(1)};import{forwardRef as ca,createElement as We}from"react";var ge={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var Ee=c=>{for(let m in c)if(m.startsWith("aria-")||m==="role"||m==="title")return!0;return!1};import{createContext as ra,useContext as fa,useMemo as Za,createElement as _a}from"react";var ia=ra({});var Ge=()=>fa(ia);var Ve=ca(({color:c,size:m,strokeWidth:g,absoluteStrokeWidth:I,className:E="",children:F,iconNode:h,...L},P)=>{let{size:D=24,strokeWidth:U=2,absoluteStrokeWidth:Q=!1,color:G="currentColor",className:W=""}=Ge()??{},O=I??Q?Number(g??U)*24/Number(m??D):g??U;return We("svg",{ref:P,...ge,width:m??D??ge.width,height:m??D??ge.height,stroke:c??G,strokeWidth:O,className:Ce("lucide",W,E),...!F&&!Ee(L)&&{"aria-hidden":"true"},...L},[...h.map(([B,y])=>We(B,y)),...Array.isArray(F)?F:[F]])});var f=(c,m)=>{let g=na(({className:I,...E},F)=>pa(Ve,{ref:F,iconNode:m,className:Ce(`lucide-${He(ye(c))}`,`lucide-${c}`,I),...E}));return g.displayName=ye(c),g};var ma=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],K=f("bell",ma);var La=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],te=f("bot",La);var xa=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],oe=f("check",xa);var Ia=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],de=f("hash",Ia);var Ca=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],ue=f("image",Ca);var ga=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],le=f("info",ga);var ha=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],N=f("message-square",ha);var Sa=[["path",{d:"M9 18V5l12-2v13",key:"1jmyc2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["circle",{cx:"18",cy:"16",r:"3",key:"1hluhg"}]],se=f("music",Sa);var ka=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],$=f("search",ka);var wa=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],re=f("send",wa);var Pa=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]],fe=f("smile",Pa);var ya=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],ie=f("trash-2",ya);var Aa=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]],Z=f("user-plus",Aa);var Ma=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],_=f("user",Ma);var Ba=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],ce=f("users",Ba);var Da=[["path",{d:"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5",key:"ftymec"}],["rect",{x:"2",y:"6",width:"14",height:"12",rx:"2",key:"158x01"}]],ne=f("video",Da);var Fa=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],pe=f("wifi-off",Fa);var ba=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],me=f("wifi",ba);var Ra=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Le=f("x",Ra);import{useRef as ze,forwardRef as va,useImperativeHandle as Ta}from"react";import{jsx as qa}from"react/jsx-runtime";var Xe=va(({placeholder:c="\u8F93\u5165\u6D88\u606F...",onSend:m,onChange:g,onAtTrigger:I,minHeight:E="44px",maxHeight:F="200px"},h)=>{let L=ze(null),P=ze(null),D=()=>{if(!L.current)return{text:"",segments:[]};let d="",o=[],u=Array.from(L.current.childNodes);for(let p of u)if(p.nodeType===Node.TEXT_NODE){let r=p.textContent||"";r&&(d+=r,o.push({type:"text",data:{text:r}}))}else if(p.nodeType===Node.ELEMENT_NODE){let r=p;if(r.classList.contains("editor-face")){let n=r.dataset.id;d+=`[face:${n}]`,o.push({type:"face",data:{id:Number(n)}})}else if(r.classList.contains("editor-image")){let n=r.dataset.url;d+=`[image:${n}]`,o.push({type:"image",data:{url:n}})}else if(r.classList.contains("editor-video")){let n=r.dataset.url||"";d+=`[video:${n}]`,o.push({type:"video",data:{url:n}})}else if(r.classList.contains("editor-audio")){let n=r.dataset.url||"";d+=`[audio:${n}]`,o.push({type:"audio",data:{url:n}})}else if(r.classList.contains("editor-at")){let n=r.dataset.name,A=r.dataset.id;d+=`[@${n}]`,o.push({type:"mention",data:A?{target:A,name:n}:{target:n,name:n}})}else r.tagName==="BR"&&(d+=`
|
|
2
|
+
`)}return{text:d,segments:o}},U=d=>{if(!L.current)return;let o=document.createElement("img");o.src=`https://face.viki.moe/apng/${d}.png`,o.alt=`[face:${d}]`,o.dataset.type="face",o.dataset.id=String(d),o.className="editor-face",B(o),R()},Q=d=>{if(!L.current||!d.trim())return;let o=document.createElement("img");o.src=d.trim(),o.alt=`[image:${d.trim()}]`,o.dataset.type="image",o.dataset.url=d.trim(),o.className="editor-image",B(o),R()},G=d=>{if(!L.current||!d.trim())return;let o=d.trim(),u=document.createElement("span");u.className="editor-video",u.dataset.url=o,u.contentEditable="false",u.textContent="\u{1F4F9} \u89C6\u9891",B(u),R()},W=d=>{if(!L.current||!d.trim())return;let o=d.trim(),u=document.createElement("span");u.className="editor-audio",u.dataset.url=o,u.contentEditable="false",u.textContent="\u{1F3B5} \u97F3\u9891",B(u),R()},O=(d,o)=>{if(!L.current||!d.trim())return;let u=document.createElement("span");u.dataset.type="at",u.dataset.name=d,o&&(u.dataset.id=o),u.className="editor-at",u.contentEditable="false";let p=document.createElement("span");p.textContent="@",p.className="editor-at-symbol";let r=document.createElement("span");r.textContent=d,r.className="editor-at-name",u.appendChild(p),u.appendChild(r),B(u),R()},B=d=>{if(!L.current)return;L.current.focus();let o=window.getSelection();if(o&&o.rangeCount>0){let u=o.getRangeAt(0);if(L.current.contains(u.commonAncestorContainer))u.deleteContents(),u.insertNode(d),u.collapse(!1),o.removeAllRanges(),o.addRange(u);else{L.current.appendChild(d);let r=document.createRange();r.setStartAfter(d),r.collapse(!0),o.removeAllRanges(),o.addRange(r)}}else{L.current.appendChild(d);let u=window.getSelection();if(u){let p=document.createRange();p.setStartAfter(d),p.collapse(!0),u.removeAllRanges(),u.addRange(p)}}},y=()=>{L.current&&(L.current.innerHTML="",R())},V=()=>{L.current?.focus()},Y=()=>D(),xe=()=>{if(!L.current||!I)return;let d=window.getSelection();if(!d||d.rangeCount===0){I(!1,""),P.current=null;return}let o=d.getRangeAt(0);if(!L.current.contains(o.commonAncestorContainer)){I(!1,""),P.current=null;return}let u=o.startContainer;if(u.nodeType!==Node.TEXT_NODE){I(!1,""),P.current=null;return}let p=u,r=p.textContent?.substring(0,o.startOffset)||"",n=r.lastIndexOf("@");if(n!==-1){let A=r.substring(n+1);if(A.includes(" ")||A.includes(`
|
|
3
|
+
`)){I(!1,""),P.current=null;return}P.current=p;let z=document.createRange();z.setStart(p,n),z.setEnd(p,n+1);let v=z.getBoundingClientRect(),b=L.current.getBoundingClientRect();I(!0,A,{top:v.bottom-b.top,left:v.left-b.left})}else I(!1,""),P.current=null},R=()=>{if(xe(),g){let{text:d,segments:o}=D();g(d,o)}},Se=(d,o)=>{if(!P.current)return;let u=P.current,p=u.textContent||"",r=p.lastIndexOf("@");if(r!==-1){let n=p.substring(r+1),A=r+1+n.split(/[\s\n]/)[0].length,z=p.substring(0,r),v=p.substring(A);u.textContent=z+v;let b=window.getSelection();if(b){let T=document.createRange();T.setStart(u,r),T.collapse(!0),b.removeAllRanges(),b.addRange(T)}}P.current=null,O(d,o)},ee=d=>{d.preventDefault();let o=d.clipboardData,p=Array.from(o.items).find(n=>n.type.startsWith("image/"));if(p){let n=p.getAsFile();if(n){let A=new FileReader;A.onload=()=>{typeof A.result=="string"&&Q(A.result)},A.readAsDataURL(n)}return}let r=o.getData("text/plain");r&&(document.execCommand("insertText",!1,r),R())},J=d=>{if(d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),m)){let{text:o,segments:u}=D();m(o,u)}};return Ta(h,()=>({focus:V,clear:y,insertFace:U,insertImage:Q,insertVideo:G,insertAudio:W,insertAt:O,replaceAtTrigger:Se,getContent:Y})),qa("div",{ref:L,contentEditable:!0,suppressContentEditableWarning:!0,onInput:R,onKeyDown:J,onPaste:ee,"data-placeholder":c,className:"rich-text-editor",style:{width:"100%",minHeight:E,maxHeight:F,padding:"0.5rem 0.75rem",border:"1px solid var(--gray-6)",borderRadius:"6px",backgroundColor:"var(--gray-1)",fontSize:"var(--font-size-2)",outline:"none",overflowY:"auto",lineHeight:"1.5",wordWrap:"break-word",color:"var(--gray-12)"}})});Xe.displayName="RichTextEditor";var Ke=Xe;import{Fragment as Ua,jsx as a,jsxs as t}from"react/jsx-runtime";function De(){let[c,m]=w([]),[g,I]=w([{id:"user_1001",name:"\u6D4B\u8BD5\u7528\u6237",type:"private",unread:0},{id:"group_2001",name:"\u6D4B\u8BD5\u7FA4\u7EC4",type:"group",unread:0},{id:"channel_3001",name:"\u6D4B\u8BD5\u9891\u9053",type:"channel",unread:0}]),[E,F]=w([]),[h,L]=w(g[0]),[P,D]=w(""),[U,Q]=w("ProcessEndpoint"),[G,W]=w(!1),[O,B]=w(!1),[y,V]=w(null),[Y,xe]=w(""),[R,Se]=w(!1),[ee,J]=w(null),[d,o]=w(""),[u,p]=w(""),[r,n]=w(""),[A]=w([{id:"10001",name:"\u5F20\u4E09"},{id:"10002",name:"\u674E\u56DB"},{id:"10003",name:"\u738B\u4E94"},{id:"10004",name:"\u8D75\u516D"},{id:"10005",name:"\u6D4B\u8BD5\u7528\u6237"},{id:"10086",name:"Admin"},{id:"10010",name:"Test User"}]),[z,v]=w([]),[b,T]=w(!1),[j,ke]=w("chat"),Fe=Ae(null),H=Ae(null),q=Ae(null),_e=async()=>{try{let e=await fetch("https://face.viki.moe/metadata.json");F(await e.json())}catch(e){console.error("[Sandbox] Failed to fetch face list:",e)}};he(()=>{_e()},[]);let Qe=e=>{if(e.type==="edit"&&e.messageId){let l=Array.isArray(e.content)?e.content:Ie(String(e.content??""));m(i=>i.map(C=>C.id===e.messageId?{...C,content:l}:C));return}let s=typeof e.content=="string"?Ie(e.content):Array.isArray(e.content)?e.content:Ie(String(e.content??"")),x=e.type==="private"?`\u79C1\u804A-${e.bot||U}`:e.type==="group"?`\u7FA4\u7EC4-${e.id}`:`\u9891\u9053-${e.id}`,S=e.type;I(l=>{if(l.some(C=>C.id===e.id))return l;let i={id:e.id,name:x,type:S,unread:0};return L(i),[...l,i]}),m(l=>[...l,{id:e.messageId??`bot_${e.timestamp}`,type:"received",channelType:S,channelId:e.id,channelName:x,senderId:"endpoint",senderName:e.bot||U,content:s,timestamp:e.timestamp}])},Je=e=>{let s=[{type:"action",data:{id:e,payload:e}}],x=JSON.stringify({type:h.type,id:h.id,content:s,timestamp:Date.now()});H.current?.send(x)};he(()=>{let e=Oe();return H.current=new WebSocket(e),H.current.onopen=()=>W(!0),H.current.onmessage=s=>{try{Qe(JSON.parse(s.data))}catch(x){console.error("[Sandbox] Failed to parse message:",x)}},H.current.onclose=()=>W(!1),()=>{H.current?.close(),H.current=null,W(!1)}},[]),he(()=>{Fe.current?.scrollIntoView({behavior:"smooth"})},[c]),he(()=>{v(P.trim()?Ie(P):[])},[P]);let Ie=e=>{let s=[],x=/\[@([^\]]+)\]|\[face:(\d+)\]|\[image:([^\]]+)\]|\[video:([^\]]+)\]|\[audio:([^\]]+)\]/g,S=0,l;for(;(l=x.exec(e))!==null;){if(l.index>S){let i=e.substring(S,l.index);i&&s.push({type:"text",data:{text:i}})}l[1]?s.push({type:"mention",data:{target:l[1],name:l[1]}}):l[2]?s.push({type:"face",data:{id:parseInt(l[2],10)}}):l[3]?s.push({type:"image",data:{url:l[3]}}):l[4]?s.push({type:"video",data:{url:l[4]}}):l[5]&&s.push({type:"audio",data:{url:l[5]}}),S=x.lastIndex}if(S<e.length){let i=e.substring(S);i&&s.push({type:"text",data:{text:i}})}return s.length>0?s:[{type:"text",data:{text:e}}]},be=e=>e.length===0?!1:e.some(s=>s.type==="text"?!!String(s.data?.text??"").trim():(s.type==="keyboard",!0)),je=(e,s)=>{let x=s?"ring-1 ring-primary-foreground/25":"ring-1 ring-border/60";return e.map((S,l)=>{if(typeof S=="string")return a("span",{children:S.split(`
|
|
4
|
+
`).map((C,k)=>t(Ze.Fragment,{children:[C,k<S.split(`
|
|
5
|
+
`).length-1&&a("br",{})]},k))},l);let i=S.data;switch(S.type){case"text":return a("span",{children:String(i.text??"").split(`
|
|
6
|
+
`).map((C,k)=>t(Ze.Fragment,{children:[C,k<String(i.text??"").split(`
|
|
7
|
+
`).length-1&&a("br",{})]},k))},l);case"mention":case"at":return t("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded bg-accent text-accent-foreground text-xs mx-0.5",children:["@",String(i.name??i.target??i.qq??"")]},l);case"face":return a("img",{src:`https://face.viki.moe/apng/${i.id}.png`,alt:String(i.name??""),className:"w-6 h-6 inline-block align-middle mx-0.5",title:String(i.name??i.id??"")},l);case"dice":return t("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded bg-secondary text-xs mx-0.5",children:["\u{1F3B2} ",i.result!=null?`\u70B9\u6570 ${String(i.result)}`:"\u9AB0\u5B50"]},l);case"rps":return t("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded bg-secondary text-xs mx-0.5",children:["\u270A ",i.result!=null?`\u7ED3\u679C ${String(i.result)}`:"\u731C\u62F3"]},l);case"image":{let C=Be(i),k=Me(C,"image");return k?a("a",{href:k,target:"_blank",rel:"noreferrer",className:"block my-1",children:a("img",{src:k,alt:"",className:M("max-w-[min(320px,88vw)] rounded-lg block",x,"ring-offset-0"),onError:ae=>{ae.target.style.display="none"}})},l):a("span",{className:"text-xs opacity-70",children:"[\u56FE\u7247]"},l)}case"video":{let C=Be(i),k=Me(C,"video");return k?a("video",{src:k,controls:!0,playsInline:!0,preload:"metadata",className:M("max-w-[min(360px,92vw)] max-h-72 rounded-lg my-1 bg-black/10",x)},l):a("span",{className:"text-xs opacity-70",children:"[\u89C6\u9891\u65E0\u5730\u5740]"},l)}case"audio":case"record":{let C=Be(i),k=Me(C,"audio");return k?a("audio",{src:k,controls:!0,preload:"metadata",className:M("w-full max-w-sm my-2 h-10",s&&"opacity-95")},l):a("span",{className:"text-xs opacity-70",children:"[\u97F3\u9891\u65E0\u5730\u5740]"},l)}case"reply":return t("div",{className:"mb-1 rounded-md border border-dashed px-2 py-1 text-xs opacity-90",children:["\u21A9 \u5F15\u7528\u6D88\u606F #",String(i.message_id??i.id??"")]},l);case"forward":{let C=i.messages,k=String(i.title??"\u804A\u5929\u8BB0\u5F55");return t("div",{className:"my-1 rounded-md border bg-background/40 px-2 py-2 text-xs space-y-1",children:[t("div",{className:"font-medium",children:["\u{1F4E8} ",k]}),Array.isArray(C)&&C.length>0?t("div",{className:"space-y-1 pl-2 border-l-2 border-muted",children:[C.slice(0,3).map((ae,X)=>a("div",{className:"opacity-90",children:ae.map((Pe,ua)=>a("span",{children:Pe.type==="text"?String(Pe.data?.text??""):`[${Pe.type??"seg"}]`},ua))},X)),C.length>3&&t("div",{className:"opacity-60",children:["\u2026\u5171 ",C.length," \u6761"]})]}):a("div",{className:"opacity-70",children:"[\u5408\u5E76\u8F6C\u53D1]"})]},l)}case"keyboard":{let C=i.rows??[];return a("div",{className:"inline-grid gap-1 my-1",children:C.map((k,ae)=>a("div",{className:"flex gap-1",children:k.map(X=>a("button",{type:"button",disabled:X.disabled||s,onClick:()=>Je(X.payload),className:M("min-w-9 h-9 rounded-md border text-sm font-medium transition-colors",X.disabled?"opacity-50 cursor-not-allowed":"hover:bg-accent active:scale-95"),children:X.label},X.payload))},ae))},l)}default:return t("span",{className:"text-xs opacity-70",children:["[",S.type,"]"]},l)}})},Re=(e,s)=>{if(!be(s))return;let x={id:`msg_${Date.now()}`,type:"sent",channelType:h.type,channelId:h.id,channelName:h.name,senderId:"test_user",senderName:"\u6D4B\u8BD5\u7528\u6237",content:s,timestamp:Date.now()};m(l=>[...l,x]),D(""),v([]),q.current?.clear();let S=JSON.stringify({type:h.type,id:h.id,content:s,timestamp:Date.now()});H.current?.send(S)},$e=()=>{confirm("\u786E\u5B9A\u6E05\u7A7A\u6240\u6709\u6D88\u606F\u8BB0\u5F55\uFF1F")&&m([])},Ye=e=>{ke("chat"),L(e),I(s=>s.map(x=>x.id===e.id?{...x,unread:0}:x)),window.innerWidth<768&&T(!1)},ea=()=>{let e=["private","group","channel"],s=e[Math.floor(Math.random()*e.length)],x=prompt("\u8BF7\u8F93\u5165\u9891\u9053\u540D\u79F0\uFF1A");if(x){let S={id:`${s}_${Date.now()}`,name:x,type:s,unread:0};I(l=>[...l,S]),L(S)}},ve=e=>{switch(e){case"private":return a(_,{size:16});case"group":return a(ce,{size:16});case"channel":return a(de,{size:16});default:return a(N,{size:16})}},aa=e=>{q.current?.insertFace(e),B(!1)},Te=()=>{let e=Y.trim();!e||!y||(y==="image"?q.current?.insertImage(e):y==="video"?q.current?.insertVideo(e):q.current?.insertAudio(e),xe(""),V(null))},Oa=()=>{r.trim()&&(q.current?.insertAt(r.trim()),n(""),Se(!1))},ta=e=>{q.current?.replaceAtTrigger(e.name,e.id),J(null),o("")},oa=(e,s,x)=>{if(h.type==="private"){J(null),o("");return}e&&x?(J(x),o(s)):(J(null),o(""))},qe=A.filter(e=>{if(!d.trim())return!0;let s=d.toLowerCase();return e.name.toLowerCase().includes(s)||e.id.toLowerCase().includes(s)}),da=(e,s)=>{D(e),v(s)},Ue=E.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())||e.describe.toLowerCase().includes(u.toLowerCase())),we=c.filter(e=>e.channelId===h.id);return t("div",{className:"sandbox-container rounded-xl border border-border/70 bg-card/30 shadow-sm",children:[t("button",{className:"mobile-channel-toggle md:hidden",onClick:()=>T(!b),children:[a(N,{size:20})," \u9891\u9053\u5217\u8868"]}),t("div",{className:M("channel-sidebar rounded-lg border bg-card",b&&"show"),children:[a("div",{className:"p-3 border-b",children:t("div",{className:"flex justify-between items-center",children:[t("div",{className:"flex items-center gap-2",children:[a("div",{className:"p-1 rounded-md bg-secondary",children:a(N,{size:16,className:"text-muted-foreground"})}),a("h3",{className:"font-semibold",children:"\u9891\u9053\u5217\u8868"})]}),t("span",{className:M("inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium border",G?"bg-emerald-100 text-emerald-800 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:border-emerald-800":"bg-muted text-muted-foreground"),children:[G?a(me,{size:12}):a(pe,{size:12}),G?"\u5DF2\u8FDE\u63A5":"\u672A\u8FDE\u63A5"]})]})}),t("div",{className:"flex-1 overflow-y-auto p-2 space-y-1",children:[g.map(e=>{let s=j==="chat"&&h.id===e.id;return t("div",{className:M("menu-item",s&&"active"),onClick:()=>Ye(e),children:[a("span",{className:"shrink-0",children:ve(e.type)}),t("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium truncate",children:e.name}),a("div",{className:"text-xs text-muted-foreground",children:e.type==="private"?"\u79C1\u804A":e.type==="group"?"\u7FA4\u804A":"\u9891\u9053"})]}),e.unread>0&&a("span",{className:"inline-flex items-center justify-center h-5 min-w-5 rounded-full bg-destructive text-destructive-foreground text-[10px] font-medium px-1",children:e.unread})]},e.id)}),t("div",{className:"pt-2 mt-2 border-t space-y-1",children:[t("div",{className:M("menu-item",j==="requests"&&"active"),onClick:()=>{ke("requests"),window.innerWidth<768&&T(!1)},children:[a(Z,{size:16,className:"shrink-0"}),t("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium",children:"\u8BF7\u6C42"}),a("div",{className:"text-xs text-muted-foreground",children:"\u597D\u53CB/\u7FA4\u9080\u8BF7\u7B49"})]})]}),t("div",{className:M("menu-item",j==="notices"&&"active"),onClick:()=>{ke("notices"),window.innerWidth<768&&T(!1)},children:[a(K,{size:16,className:"shrink-0"}),t("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium",children:"\u901A\u77E5"}),a("div",{className:"text-xs text-muted-foreground",children:"\u7FA4\u7BA1/\u64A4\u56DE\u7B49"})]})]})]})]}),a("div",{className:"p-2 border-t",children:a("button",{className:"w-full py-2 px-3 rounded-md border border-dashed text-sm text-muted-foreground hover:bg-accent transition-colors",onClick:ea,children:"+ \u6DFB\u52A0\u9891\u9053"})})]}),b&&a("div",{className:"channel-overlay md:hidden",onClick:()=>T(!1)}),t("div",{className:"chat-area",children:[j==="requests"&&t("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0 overflow-hidden",children:[a("div",{className:"p-3 border-b flex-shrink-0",children:t("h2",{className:"text-lg font-bold flex items-center gap-2",children:[a(Z,{size:20})," \u8BF7\u6C42"]})}),t("div",{className:"flex-1 overflow-y-auto p-4 flex flex-col items-center justify-center gap-3 text-muted-foreground text-center",children:[a(Z,{size:48,className:"opacity-30"}),a("span",{children:"\u6C99\u76D2\u4E3A\u6A21\u62DF\u73AF\u5883\uFF0C\u6682\u65E0\u8BF7\u6C42\u6570\u636E"}),t("span",{className:"text-sm",children:["\u5B9E\u9645\u597D\u53CB/\u7FA4\u9080\u8BF7\u7B49\u8BF7\u6C42\u8BF7\u5230\u4FA7\u8FB9\u680F ",a("strong",{children:"\u673A\u5668\u4EBA"})," \u9875\u9762\u8FDB\u5165\u5BF9\u5E94\u673A\u5668\u4EBA\u7BA1\u7406\u67E5\u770B"]})]})]}),j==="notices"&&t("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0 overflow-hidden",children:[a("div",{className:"p-3 border-b flex-shrink-0",children:t("h2",{className:"text-lg font-bold flex items-center gap-2",children:[a(K,{size:20})," \u901A\u77E5"]})}),t("div",{className:"flex-1 overflow-y-auto p-4 flex flex-col items-center justify-center gap-3 text-muted-foreground text-center",children:[a(K,{size:48,className:"opacity-30"}),a("span",{children:"\u6C99\u76D2\u4E3A\u6A21\u62DF\u73AF\u5883\uFF0C\u6682\u65E0\u901A\u77E5\u6570\u636E"}),t("span",{className:"text-sm",children:["\u5B9E\u9645\u7FA4\u7BA1\u3001\u64A4\u56DE\u7B49\u901A\u77E5\u8BF7\u5230\u4FA7\u8FB9\u680F ",a("strong",{children:"\u673A\u5668\u4EBA"})," \u9875\u9762\u8FDB\u5165\u5BF9\u5E94\u673A\u5668\u4EBA\u7BA1\u7406\u67E5\u770B"]})]})]}),j==="chat"&&t(Ua,{children:[a("div",{className:"rounded-lg border bg-card p-3 flex-shrink-0",children:t("div",{className:"flex justify-between items-center flex-wrap gap-2",children:[t("div",{className:"flex items-center gap-3",children:[a("div",{className:"p-2 rounded-lg bg-secondary",children:ve(h.type)}),t("div",{children:[a("h2",{className:"text-lg font-bold",children:h.name}),t("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[a("span",{children:h.id}),a("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded border text-[10px]",children:we.length}),a("span",{children:"\u6761\u6D88\u606F"})]})]}),a("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-secondary text-secondary-foreground",children:h.type==="private"?"\u79C1\u804A":h.type==="group"?"\u7FA4\u804A":"\u9891\u9053"})]}),t("div",{className:"flex items-center gap-2",children:[a("input",{value:U,onChange:e=>Q(e.target.value),placeholder:"\u673A\u5668\u4EBA\u540D\u79F0",className:"h-8 w-28 rounded-md border bg-transparent px-2 text-sm"}),t("button",{className:"inline-flex items-center gap-1 h-8 px-3 rounded-md bg-secondary text-secondary-foreground text-sm hover:bg-secondary/80",onClick:$e,children:[a(ie,{size:14})," \u6E05\u7A7A"]})]})]})}),a("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0",children:a("div",{className:"flex-1 overflow-y-auto p-4",children:we.length===0?t("div",{className:"flex flex-col items-center justify-center h-full gap-3",children:[a(N,{size:64,className:"text-muted-foreground/20"}),a("span",{className:"text-muted-foreground",children:"\u6682\u65E0\u6D88\u606F\uFF0C\u5F00\u59CB\u5BF9\u8BDD\u5427\uFF01"})]}):t("div",{className:"space-y-2",children:[we.map(e=>a("div",{className:M("flex",e.type==="sent"?"justify-end":"justify-start"),children:t("div",{className:M("max-w-[70%] p-3 rounded-2xl",e.type==="sent"?"bg-primary text-primary-foreground":"bg-muted"),children:[t("div",{className:"flex items-center gap-2 mb-1",children:[e.type==="received"&&a(te,{size:14}),e.type==="sent"&&a(_,{size:14}),a("span",{className:"text-xs font-medium opacity-90",children:e.senderName}),a("span",{className:"text-xs opacity-70",children:new Date(e.timestamp).toLocaleTimeString()})]}),a("div",{className:"text-sm space-y-1",children:je(e.content,e.type==="sent")})]})},e.id)),a("div",{ref:Fe})]})})}),t("div",{className:"rounded-lg border bg-card p-3 flex-shrink-0 space-y-3",children:[t("div",{className:"flex gap-2 items-center flex-wrap",children:[a("button",{type:"button",className:M("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",O?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{B(!O),V(null)},title:"\u63D2\u5165\u8868\u60C5",children:a(fe,{size:16})}),a("button",{type:"button",className:M("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",y==="image"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{V(e=>e==="image"?null:"image"),B(!1)},title:"\u63D2\u5165\u56FE\u7247 URL",children:a(ue,{size:16})}),a("button",{type:"button",className:M("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",y==="video"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{V(e=>e==="video"?null:"video"),B(!1)},title:"\u63D2\u5165\u89C6\u9891 URL",children:a(ne,{size:16})}),a("button",{type:"button",className:M("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",y==="audio"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{V(e=>e==="audio"?null:"audio"),B(!1)},title:"\u63D2\u5165\u97F3\u9891 URL",children:a(se,{size:16})}),a("div",{className:"flex-1 min-w-[1rem]"}),P&&a("button",{className:"h-8 w-8 rounded-md flex items-center justify-center hover:bg-accent transition-colors",onClick:()=>{D(""),v([])},children:a(Le,{size:16})})]}),O&&t("div",{className:"p-3 rounded-md border bg-muted/30 max-h-64 overflow-y-auto space-y-2",children:[a("input",{value:u,onChange:e=>p(e.target.value),placeholder:"\u641C\u7D22\u8868\u60C5...",className:"w-full h-8 rounded-md border bg-transparent px-2 text-sm"}),a("div",{className:"grid grid-cols-8 gap-1",children:Ue.slice(0,80).map(e=>a("button",{onClick:()=>aa(e.id),title:e.name,className:"w-10 h-10 rounded-md border flex items-center justify-center hover:bg-accent transition-colors",children:a("img",{src:`https://face.viki.moe/apng/${e.id}.png`,alt:e.name,className:"w-8 h-8"})},e.id))}),Ue.length===0&&t("div",{className:"flex flex-col items-center gap-2 py-4",children:[a($,{size:32,className:"text-muted-foreground/30"}),a("span",{className:"text-sm text-muted-foreground",children:"\u672A\u627E\u5230\u5339\u914D\u7684\u8868\u60C5"})]})]}),y&&t("div",{className:"p-3 rounded-md border bg-muted/30 space-y-2",children:[t("p",{className:"text-xs text-muted-foreground",children:[y==="image"&&"\u652F\u6301 http(s) \u56FE\u7247\u94FE\u63A5\u6216 data URL",y==="video"&&"\u652F\u6301\u6D4F\u89C8\u5668\u53EF\u89E3\u7801\u7684\u89C6\u9891\u76F4\u94FE\uFF08\u5982 .mp4\u3001.webm\uFF09",y==="audio"&&"\u652F\u6301 .mp3\u3001.ogg\u3001.wav \u7B49\u97F3\u9891\u76F4\u94FE"]}),a("input",{value:Y,onChange:e=>xe(e.target.value),placeholder:y==="image"?"\u56FE\u7247 URL\u2026":y==="video"?"\u89C6\u9891 URL\u2026":"\u97F3\u9891 URL\u2026",className:"w-full h-8 rounded-md border border-input bg-background px-2 text-sm",onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),Te())}}),t("button",{type:"button",className:"inline-flex items-center gap-1 h-8 px-3 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",onClick:Te,disabled:!Y.trim(),children:[a(oe,{size:14})," \u63D2\u5165\u5230\u8F93\u5165\u6846"]})]}),t("div",{className:"flex gap-2 items-start",children:[t("div",{className:"flex-1 relative",children:[a(Ke,{ref:q,placeholder:`\u5411 ${h.name} \u53D1\u9001\u6D88\u606F...`,onSend:Re,onChange:da,onAtTrigger:oa,minHeight:"44px",maxHeight:"200px"}),ee&&a("div",{className:"absolute z-50 rounded-lg border bg-popover shadow-md min-w-60 max-h-72 overflow-y-auto p-1",style:{top:`${ee.top}px`,left:`${ee.left}px`},children:qe.length>0?qe.map(e=>t("div",{className:"flex items-center gap-2 p-2 rounded-md cursor-pointer hover:bg-accent transition-colors",onClick:()=>ta(e),children:[a(_,{size:16,className:"text-muted-foreground"}),t("div",{className:"flex-1",children:[a("div",{className:"text-sm font-medium",children:e.name}),t("div",{className:"text-xs text-muted-foreground",children:["ID: ",e.id]})]})]},e.id)):t("div",{className:"flex flex-col items-center gap-2 p-4",children:[a($,{size:20,className:"text-muted-foreground/50"}),a("span",{className:"text-xs text-muted-foreground",children:"\u672A\u627E\u5230\u5339\u914D\u7684\u7528\u6237"})]})})]}),t("button",{className:"inline-flex items-center gap-1.5 h-10 px-4 rounded-md bg-primary text-primary-foreground text-sm font-medium disabled:opacity-50 transition-colors hover:bg-primary/90",onClick:()=>{let e=q.current?.getContent();e&&Re(e.text,e.segments)},disabled:!be(z),children:[a(re,{size:16})," \u53D1\u9001"]})]}),t("div",{className:"flex items-center gap-2 flex-wrap text-xs text-muted-foreground",children:[a(le,{size:12})," \u5FEB\u6377\u64CD\u4F5C:",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"Enter"})," \u53D1\u9001",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"Shift+Enter"})," \u6362\u884C",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[@\u540D\u79F0]"})," @\u67D0\u4EBA",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[video:URL]"}),a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[audio:URL]"})]})]})]})]})]})}function Bo(c){c.addRoute({path:"/console/sandbox",name:"\u6C99\u76D2",element:c.React.createElement(De,{hostReact:c.React})}),c.addTool({id:"sandbox",name:"\u6C99\u76D2",path:"/console/sandbox"})}export{Bo as register};
|
|
8
8
|
/*! Bundled license information:
|
|
9
9
|
|
|
10
10
|
lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs:
|
|
@@ -37,7 +37,7 @@ lucide-react/dist/esm/icons/wifi.mjs:
|
|
|
37
37
|
lucide-react/dist/esm/icons/x.mjs:
|
|
38
38
|
lucide-react/dist/esm/lucide-react.mjs:
|
|
39
39
|
(**
|
|
40
|
-
* @license lucide-react v1.
|
|
40
|
+
* @license lucide-react v1.23.0 - ISC
|
|
41
41
|
*
|
|
42
42
|
* This source code is licensed under the ISC license.
|
|
43
43
|
* See the LICENSE file in the root directory of this source tree.
|
package/lib/sandbox-ws.d.ts
CHANGED
|
@@ -61,11 +61,13 @@ export declare class SandboxWsEndpoint extends EventEmitter implements Endpoint<
|
|
|
61
61
|
$disconnect(): Promise<void>;
|
|
62
62
|
$formatMessage({ content, type, id, ts }: EndpointEvent): Message<EndpointEvent>;
|
|
63
63
|
$sendMessage(options: SendOptions): Promise<string>;
|
|
64
|
+
$editMessage(options: import('zhin.js').EditMessageOptions): Promise<void>;
|
|
64
65
|
$recallMessage(_id: string): Promise<void>;
|
|
65
66
|
}
|
|
66
67
|
export declare class SandboxWsHostAdapter extends Adapter<SandboxWsEndpoint> {
|
|
67
68
|
protected readonly defaults: ResolvedSandboxBot;
|
|
68
69
|
static readonly capabilities: readonly ["inbound", "outbound"];
|
|
70
|
+
static interactivePolicy: "native";
|
|
69
71
|
constructor(plugin: Plugin, defaults: ResolvedSandboxBot);
|
|
70
72
|
getOutboundMediaCapabilities(): {
|
|
71
73
|
image: boolean;
|
package/lib/sandbox-ws.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-ws.d.ts","sourceRoot":"","sources":["../src/sandbox-ws.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,OAAO,EAEP,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,MAAM,EAEX,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sandbox-ws.d.ts","sourceRoot":"","sources":["../src/sandbox-ws.ts"],"names":[],"mappings":"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"}
|
package/lib/sandbox-ws.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** Sandbox 传输 — Node WebSocket。 */
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
3
|
import { Adapter, Message, segment, } from 'zhin.js';
|
|
4
|
+
import { fromCanonicalSegments, toCanonicalSegments } from './segment-mapper.js';
|
|
4
5
|
/** 无 WS 时的占位 socket(仅用于 endpoint:list,不可收发) */
|
|
5
6
|
export function createOfflineSandboxWs() {
|
|
6
7
|
return { send: () => { }, close: () => { } };
|
|
@@ -95,7 +96,7 @@ export function parseSandboxWsPayload(raw) {
|
|
|
95
96
|
const content = typeof payload.content === "string"
|
|
96
97
|
? [{ type: "text", data: { text: payload.content } }]
|
|
97
98
|
: Array.isArray(payload.content)
|
|
98
|
-
? payload.content
|
|
99
|
+
? toCanonicalSegments(payload.content)
|
|
99
100
|
: [{ type: "text", data: { text: payload.text ?? raw } }];
|
|
100
101
|
return { type, id, content, timestamp: payload.timestamp ?? Date.now() };
|
|
101
102
|
}
|
|
@@ -146,14 +147,15 @@ export class SandboxWsEndpoint extends EventEmitter {
|
|
|
146
147
|
$formatMessage({ content, type, id, ts }) {
|
|
147
148
|
if (!this.$config.owner)
|
|
148
149
|
this.$config.owner = id;
|
|
150
|
+
const canonical = toCanonicalSegments(content);
|
|
149
151
|
const message = Message.from({ content, type, id, ts }, {
|
|
150
152
|
$id: `${ts}`,
|
|
151
153
|
$adapter: "sandbox",
|
|
152
154
|
$endpoint: this.$config.name,
|
|
153
155
|
$sender: { id, name: "mock" },
|
|
154
156
|
$channel: { id, type },
|
|
155
|
-
$content:
|
|
156
|
-
$raw: segment.raw(
|
|
157
|
+
$content: canonical,
|
|
158
|
+
$raw: segment.raw(canonical),
|
|
157
159
|
$timestamp: ts,
|
|
158
160
|
$recall: async () => { },
|
|
159
161
|
$reply: async (replyContent, quote) => {
|
|
@@ -186,18 +188,40 @@ export class SandboxWsEndpoint extends EventEmitter {
|
|
|
186
188
|
const ws = this.$config.ws;
|
|
187
189
|
if (!ws)
|
|
188
190
|
return "";
|
|
191
|
+
const messageId = `sb_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
192
|
+
const normalized = (Array.isArray(options.content) ? options.content : [options.content]).map((s) => typeof s === 'string' ? { type: 'text', data: { text: s } } : s);
|
|
193
|
+
const wire = fromCanonicalSegments(toCanonicalSegments(normalized));
|
|
189
194
|
ws.send(JSON.stringify({
|
|
190
195
|
...options,
|
|
196
|
+
messageId,
|
|
197
|
+
content: wire,
|
|
198
|
+
timestamp: Date.now(),
|
|
199
|
+
}));
|
|
200
|
+
return messageId;
|
|
201
|
+
}
|
|
202
|
+
async $editMessage(options) {
|
|
203
|
+
if (!this.$connected)
|
|
204
|
+
return;
|
|
205
|
+
const ws = this.$config.ws;
|
|
206
|
+
if (!ws)
|
|
207
|
+
return;
|
|
208
|
+
ws.send(JSON.stringify({
|
|
209
|
+
type: 'edit',
|
|
210
|
+
messageId: options.messageId,
|
|
211
|
+
context: options.context,
|
|
212
|
+
endpoint: options.endpoint,
|
|
213
|
+
id: options.id,
|
|
214
|
+
channelType: options.type,
|
|
191
215
|
content: options.content,
|
|
192
216
|
timestamp: Date.now(),
|
|
193
217
|
}));
|
|
194
|
-
return "";
|
|
195
218
|
}
|
|
196
219
|
async $recallMessage(_id) { }
|
|
197
220
|
}
|
|
198
221
|
export class SandboxWsHostAdapter extends Adapter {
|
|
199
222
|
defaults;
|
|
200
223
|
static capabilities = ['inbound', 'outbound'];
|
|
224
|
+
static interactivePolicy = 'native';
|
|
201
225
|
constructor(plugin, defaults) {
|
|
202
226
|
super(plugin, "sandbox", []);
|
|
203
227
|
this.defaults = defaults;
|
package/lib/sandbox-ws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-ws.js","sourceRoot":"","sources":["../src/sandbox-ws.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sandbox-ws.js","sourceRoot":"","sources":["../src/sandbox-ws.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-mapper.d.ts","sourceRoot":"","sources":["../src/segment-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-mapper.js","sourceRoot":"","sources":["../src/segment-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/adapter-sandbox",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.4",
|
|
4
4
|
"description": "Zhin.js adapter for local testing and development",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -43,26 +43,26 @@
|
|
|
43
43
|
"directory": "plugins/adapters/sandbox"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"lucide-react": "^1.
|
|
46
|
+
"lucide-react": "^1.22.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/react": "^19.2.17",
|
|
50
50
|
"@types/react-dom": "^19.2.3",
|
|
51
51
|
"typescript": "^6.0.3",
|
|
52
|
-
"@zhin.js/cli": "1.0.
|
|
53
|
-
"@zhin.js/
|
|
54
|
-
"@zhin.js/
|
|
55
|
-
"@zhin.js/
|
|
56
|
-
"@zhin.js/host-api": "2.0.
|
|
57
|
-
"@zhin.js/host-router": "2.0.
|
|
58
|
-
"zhin.js": "4.1.
|
|
52
|
+
"@zhin.js/cli": "1.0.92",
|
|
53
|
+
"@zhin.js/contract": "1.0.2",
|
|
54
|
+
"@zhin.js/client": "2.0.4",
|
|
55
|
+
"@zhin.js/core": "1.3.3",
|
|
56
|
+
"@zhin.js/host-api": "2.0.4",
|
|
57
|
+
"@zhin.js/host-router": "2.0.2",
|
|
58
|
+
"zhin.js": "4.1.1"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
|
-
"@zhin.js/
|
|
62
|
-
"@zhin.js/
|
|
63
|
-
"@zhin.js/host-
|
|
64
|
-
"@zhin.js/
|
|
65
|
-
"@zhin.js/contract": "1.0.
|
|
61
|
+
"@zhin.js/core": "1.3.3",
|
|
62
|
+
"@zhin.js/client": "2.0.4",
|
|
63
|
+
"@zhin.js/host-router": "2.0.2",
|
|
64
|
+
"@zhin.js/host-api": "2.0.4",
|
|
65
|
+
"@zhin.js/contract": "1.0.2"
|
|
66
66
|
},
|
|
67
67
|
"peerDependenciesMeta": {
|
|
68
68
|
"@zhin.js/host-router": {
|
package/src/sandbox-ws.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
type Plugin,
|
|
11
11
|
type SendContent,
|
|
12
12
|
type SendOptions,} from 'zhin.js';
|
|
13
|
+
import { fromCanonicalSegments, toCanonicalSegments } from './segment-mapper.js';
|
|
13
14
|
|
|
14
15
|
export interface SandboxWsConfig {
|
|
15
16
|
context: "sandbox";
|
|
@@ -172,7 +173,7 @@ export function parseSandboxWsPayload(raw: string): {
|
|
|
172
173
|
const content: MessageElement[] = typeof payload.content === "string"
|
|
173
174
|
? [{ type: "text", data: { text: payload.content } }]
|
|
174
175
|
: Array.isArray(payload.content)
|
|
175
|
-
? payload.content
|
|
176
|
+
? toCanonicalSegments(payload.content)
|
|
176
177
|
: [{ type: "text", data: { text: payload.text ?? raw } }];
|
|
177
178
|
return { type, id, content, timestamp: payload.timestamp ?? Date.now() };
|
|
178
179
|
}
|
|
@@ -238,6 +239,7 @@ export class SandboxWsEndpoint extends EventEmitter implements Endpoint<SandboxW
|
|
|
238
239
|
|
|
239
240
|
$formatMessage({ content, type, id, ts }: EndpointEvent) {
|
|
240
241
|
if (!this.$config.owner) this.$config.owner = id;
|
|
242
|
+
const canonical = toCanonicalSegments(content);
|
|
241
243
|
const message = Message.from<EndpointEvent>(
|
|
242
244
|
{ content, type, id, ts },
|
|
243
245
|
{
|
|
@@ -246,8 +248,8 @@ export class SandboxWsEndpoint extends EventEmitter implements Endpoint<SandboxW
|
|
|
246
248
|
$endpoint: this.$config.name,
|
|
247
249
|
$sender: { id, name: "mock" },
|
|
248
250
|
$channel: { id, type },
|
|
249
|
-
$content:
|
|
250
|
-
$raw: segment.raw(
|
|
251
|
+
$content: canonical,
|
|
252
|
+
$raw: segment.raw(canonical),
|
|
251
253
|
$timestamp: ts,
|
|
252
254
|
$recall: async () => {},
|
|
253
255
|
$reply: async (replyContent: SendContent, quote?: boolean | string) => {
|
|
@@ -281,14 +283,38 @@ export class SandboxWsEndpoint extends EventEmitter implements Endpoint<SandboxW
|
|
|
281
283
|
if (!this.$connected) return "";
|
|
282
284
|
const ws = this.$config.ws;
|
|
283
285
|
if (!ws) return "";
|
|
286
|
+
const messageId = `sb_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
287
|
+
const normalized = (Array.isArray(options.content) ? options.content : [options.content]).map((s) =>
|
|
288
|
+
typeof s === 'string' ? { type: 'text' as const, data: { text: s } } : s,
|
|
289
|
+
);
|
|
290
|
+
const wire = fromCanonicalSegments(toCanonicalSegments(normalized));
|
|
284
291
|
ws.send(
|
|
285
292
|
JSON.stringify({
|
|
286
293
|
...options,
|
|
294
|
+
messageId,
|
|
295
|
+
content: wire,
|
|
296
|
+
timestamp: Date.now(),
|
|
297
|
+
}),
|
|
298
|
+
);
|
|
299
|
+
return messageId;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
async $editMessage(options: import('zhin.js').EditMessageOptions): Promise<void> {
|
|
303
|
+
if (!this.$connected) return;
|
|
304
|
+
const ws = this.$config.ws;
|
|
305
|
+
if (!ws) return;
|
|
306
|
+
ws.send(
|
|
307
|
+
JSON.stringify({
|
|
308
|
+
type: 'edit',
|
|
309
|
+
messageId: options.messageId,
|
|
310
|
+
context: options.context,
|
|
311
|
+
endpoint: options.endpoint,
|
|
312
|
+
id: options.id,
|
|
313
|
+
channelType: options.type,
|
|
287
314
|
content: options.content,
|
|
288
315
|
timestamp: Date.now(),
|
|
289
316
|
}),
|
|
290
317
|
);
|
|
291
|
-
return "";
|
|
292
318
|
}
|
|
293
319
|
|
|
294
320
|
async $recallMessage(_id: string): Promise<void> {}
|
|
@@ -296,6 +322,7 @@ export class SandboxWsEndpoint extends EventEmitter implements Endpoint<SandboxW
|
|
|
296
322
|
|
|
297
323
|
export class SandboxWsHostAdapter extends Adapter<SandboxWsEndpoint> {
|
|
298
324
|
static override readonly capabilities = ['inbound', 'outbound'] as const;
|
|
325
|
+
static override interactivePolicy = 'native' as const;
|
|
299
326
|
|
|
300
327
|
constructor(
|
|
301
328
|
plugin: Plugin,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { toCanonicalSegments, fromCanonicalSegments } from 'zhin.js';
|