@centive/aria-sdk 0.5.8 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +244 -775
- package/dist/AriaStandaloneUI-CIDTW7l1.js +251 -0
- package/dist/AriaStandaloneUI-CIDTW7l1.js.map +1 -0
- package/dist/client-BUsckJex.js +27245 -0
- package/dist/client-BUsckJex.js.map +1 -0
- package/dist/components/AriaAssistant.d.ts.map +1 -1
- package/dist/components/AriaStandaloneUI.d.ts +17 -0
- package/dist/components/AriaStandaloneUI.d.ts.map +1 -0
- package/dist/components/AriaTriggerButton.d.ts.map +1 -1
- package/dist/components/AriaWidget.d.ts +1 -0
- package/dist/components/AriaWidget.d.ts.map +1 -1
- package/dist/{index-BpDdJaiZ.js → index-DU-J6kZV.js} +3 -3
- package/dist/{index-BpDdJaiZ.js.map → index-DU-J6kZV.js.map} +1 -1
- package/dist/{index-B38Hq3AH.js → index-DfhP6F6y.js} +7119 -6733
- package/dist/index-DfhP6F6y.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -30
- package/dist/lib/AriaCore.d.ts +147 -0
- package/dist/lib/AriaCore.d.ts.map +1 -0
- package/dist/lib/AriaSessionManager.d.ts +29 -0
- package/dist/lib/AriaSessionManager.d.ts.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/index.d.ts +60 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/index-B38Hq3AH.js.map +0 -1
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { jsxs as P, Fragment as B, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { useState as r, useRef as H, useCallback as n, useEffect as T } from "react";
|
|
3
|
+
import { A as $, S as q, g as G, a as ue } from "./index-DfhP6F6y.js";
|
|
4
|
+
const ve = ({
|
|
5
|
+
theme: u,
|
|
6
|
+
triggerLabel: h,
|
|
7
|
+
container: S
|
|
8
|
+
}) => {
|
|
9
|
+
const [l, R] = r(!1), [F, v] = r(!1), [w, c] = r(!1), [J, a] = r(!1), [K, p] = r([]), [Q, y] = r(""), [X, Y] = r(!1), [Z, N] = r(!1), [ee, f] = r(null), [te, se] = r("user"), [ne, re] = r("bottom-right"), [ae, W] = r({
|
|
10
|
+
isActive: !1,
|
|
11
|
+
toolName: null,
|
|
12
|
+
toolData: null
|
|
13
|
+
}), [ie, g] = r({
|
|
14
|
+
session_id: null,
|
|
15
|
+
token: null,
|
|
16
|
+
expires_at: null,
|
|
17
|
+
isSessionReady: !1,
|
|
18
|
+
lastError: null,
|
|
19
|
+
isPreloaded: !1,
|
|
20
|
+
isRefreshing: !1
|
|
21
|
+
}), [, D] = r("idle"), [, E] = r(!1), t = H(null), m = H(null), C = n((e) => {
|
|
22
|
+
const { newStatus: s } = e.data;
|
|
23
|
+
D(s), s === "preloading" || s === "connecting" ? l && a(!0) : s === "ready" ? (a(!1), c(!0)) : s === "error" && a(!1);
|
|
24
|
+
}, [l]), M = n((e) => {
|
|
25
|
+
if (console.log("[AriaStandaloneUI] Session ready event:", e.data), t.current) {
|
|
26
|
+
const s = t.current.getSessionState();
|
|
27
|
+
g(s);
|
|
28
|
+
}
|
|
29
|
+
c(!0), a(!1), f(null);
|
|
30
|
+
}, []), x = n((e) => {
|
|
31
|
+
const s = e.error?.message || "Session error";
|
|
32
|
+
if (console.error("[AriaStandaloneUI] Session error:", s), f(s), a(!1), t.current) {
|
|
33
|
+
const d = t.current.getSessionState();
|
|
34
|
+
g(d);
|
|
35
|
+
}
|
|
36
|
+
}, []), L = n((e) => {
|
|
37
|
+
const { connected: s } = e.data;
|
|
38
|
+
if (c(s), !s && t.current) {
|
|
39
|
+
const d = t.current.getSessionState();
|
|
40
|
+
g(d);
|
|
41
|
+
}
|
|
42
|
+
}, []), A = n((e) => {
|
|
43
|
+
const { messages: s } = e.data;
|
|
44
|
+
s && p(s);
|
|
45
|
+
}, []), k = n((e) => {
|
|
46
|
+
const { liveTranscript: s } = e.data;
|
|
47
|
+
s !== void 0 && y(s);
|
|
48
|
+
}, []), V = n((e) => {
|
|
49
|
+
console.log("[AriaStandaloneUI] WebSocket trigger event"), _("websocket");
|
|
50
|
+
}, []), z = n((e) => {
|
|
51
|
+
const s = e.data;
|
|
52
|
+
W({
|
|
53
|
+
isActive: s.isActive,
|
|
54
|
+
toolName: s.toolName,
|
|
55
|
+
toolData: s.toolData
|
|
56
|
+
});
|
|
57
|
+
}, []);
|
|
58
|
+
T(() => {
|
|
59
|
+
if (!$.hasInstance()) {
|
|
60
|
+
console.error("[AriaStandaloneUI] AriaSessionManager not initialized");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const e = $.getInstance({});
|
|
64
|
+
t.current = e, e.addEventListener("status_change", C), e.addEventListener("session_ready", M), e.addEventListener("session_error", x), e.addEventListener("connection_change", L), e.addEventListener("message_history", A), e.addEventListener("message_stream", k), e.addEventListener("tool_call", z), e.setWebSocketTriggerCallback(V), g(e.getSessionState()), D(e.getStatus()), c(e.isConnected()), p(e.getChatMessages()), y(e.getLiveTranscript()), N(e.isMuted()), E(e.isSessionPaused());
|
|
65
|
+
const s = e.getToolCallState();
|
|
66
|
+
return W(s), () => {
|
|
67
|
+
e.removeEventListener("status_change", C), e.removeEventListener("session_ready", M), e.removeEventListener("session_error", x), e.removeEventListener("connection_change", L), e.removeEventListener("message_history", A), e.removeEventListener("message_stream", k), e.removeEventListener("tool_call", z), e.setWebSocketTriggerCallback(null);
|
|
68
|
+
};
|
|
69
|
+
}, [
|
|
70
|
+
C,
|
|
71
|
+
M,
|
|
72
|
+
x,
|
|
73
|
+
L,
|
|
74
|
+
A,
|
|
75
|
+
k,
|
|
76
|
+
z,
|
|
77
|
+
V
|
|
78
|
+
]), T(() => {
|
|
79
|
+
const e = (I) => {
|
|
80
|
+
_(I.detail?.mode || "user");
|
|
81
|
+
}, s = () => {
|
|
82
|
+
j();
|
|
83
|
+
}, d = () => {
|
|
84
|
+
U();
|
|
85
|
+
}, b = () => {
|
|
86
|
+
O();
|
|
87
|
+
};
|
|
88
|
+
return window.addEventListener("aria:open", e), window.addEventListener("aria:close", s), window.addEventListener("aria:minimize", d), window.addEventListener("aria:maximize", b), () => {
|
|
89
|
+
window.removeEventListener("aria:open", e), window.removeEventListener("aria:close", s), window.removeEventListener("aria:minimize", d), window.removeEventListener("aria:maximize", b);
|
|
90
|
+
};
|
|
91
|
+
}, []), T(() => {
|
|
92
|
+
S.setAttribute("data-aria-open", String(l));
|
|
93
|
+
}, [l, S]);
|
|
94
|
+
const oe = n((e) => {
|
|
95
|
+
m.current = e, e && t.current ? t.current.attachToVideoElement(e) : !e && m.current && t.current && t.current.detachFromVideoElement(m.current);
|
|
96
|
+
}, []), _ = n((e = "user") => {
|
|
97
|
+
if (se(e), re(e === "websocket" ? "center" : "bottom-right"), R(!0), v(!1), f(null), !t.current) return;
|
|
98
|
+
if (t.current.isSessionPaused()) {
|
|
99
|
+
a(!0), t.current.resumeSession().then(() => {
|
|
100
|
+
a(!1), c(!0), E(!1);
|
|
101
|
+
const i = t.current.getSessionState();
|
|
102
|
+
g(i), p(t.current.getChatMessages());
|
|
103
|
+
}).catch((i) => {
|
|
104
|
+
a(!1), E(!1), f(i instanceof Error ? i.message : "Failed to resume session");
|
|
105
|
+
});
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const d = t.current.isAnamClientInitialized(), b = t.current.hasSessionToken(), I = t.current.getStatus();
|
|
109
|
+
d && I === "ready" ? (a(!1), c(!0)) : b ? (a(!0), t.current.initializeSessionOnDemand().then(() => {
|
|
110
|
+
a(!1), c(!0);
|
|
111
|
+
const i = t.current.getSessionState();
|
|
112
|
+
g(i);
|
|
113
|
+
}).catch((i) => {
|
|
114
|
+
a(!1), f(i instanceof Error ? i.message : "Failed to initialize session");
|
|
115
|
+
})) : (a(!0), t.current.isConnected() || t.current.connect());
|
|
116
|
+
}, []), U = n(() => {
|
|
117
|
+
v(!0);
|
|
118
|
+
}, []), O = n(() => {
|
|
119
|
+
v(!1);
|
|
120
|
+
}, []), j = n(() => {
|
|
121
|
+
if (R(!1), v(!1), !t.current) return;
|
|
122
|
+
m.current && t.current.detachFromVideoElement(m.current), y(""), t.current.clearLiveTranscript(), t.current.isPersistSessionEnabled() ? (t.current.pauseSession(), E(!0)) : (t.current.sendSessionEnd(), t.current.stopStreaming(), g({
|
|
123
|
+
session_id: null,
|
|
124
|
+
token: null,
|
|
125
|
+
expires_at: null,
|
|
126
|
+
isSessionReady: !1,
|
|
127
|
+
lastError: null,
|
|
128
|
+
isPreloaded: !1,
|
|
129
|
+
isRefreshing: !1
|
|
130
|
+
}), c(!1), p([]));
|
|
131
|
+
}, []), le = n(() => {
|
|
132
|
+
Y((e) => !e);
|
|
133
|
+
}, []), ce = n(async (e) => {
|
|
134
|
+
if (!t.current || !w)
|
|
135
|
+
throw new Error("Not connected to Aria");
|
|
136
|
+
await t.current.sendMessage(e);
|
|
137
|
+
}, [w]), de = n(() => {
|
|
138
|
+
if (!t.current) return;
|
|
139
|
+
const e = t.current.toggleMute();
|
|
140
|
+
N(e);
|
|
141
|
+
}, []);
|
|
142
|
+
return /* @__PURE__ */ P(B, { children: [
|
|
143
|
+
!l && /* @__PURE__ */ o(
|
|
144
|
+
ge,
|
|
145
|
+
{
|
|
146
|
+
showAvatar: !0,
|
|
147
|
+
label: h,
|
|
148
|
+
theme: u,
|
|
149
|
+
onClick: () => _("user")
|
|
150
|
+
}
|
|
151
|
+
),
|
|
152
|
+
l && /* @__PURE__ */ P(B, { children: [
|
|
153
|
+
!F && /* @__PURE__ */ o(
|
|
154
|
+
"div",
|
|
155
|
+
{
|
|
156
|
+
onClick: (e) => {
|
|
157
|
+
e.preventDefault(), e.stopPropagation(), U();
|
|
158
|
+
},
|
|
159
|
+
style: {
|
|
160
|
+
position: "fixed",
|
|
161
|
+
inset: 0,
|
|
162
|
+
backgroundColor: "rgba(0, 0, 0, 0.1)",
|
|
163
|
+
backdropFilter: "blur(1px)",
|
|
164
|
+
WebkitBackdropFilter: "blur(1px)",
|
|
165
|
+
zIndex: 9998,
|
|
166
|
+
cursor: "pointer"
|
|
167
|
+
},
|
|
168
|
+
"aria-hidden": "true"
|
|
169
|
+
}
|
|
170
|
+
),
|
|
171
|
+
/* @__PURE__ */ o(
|
|
172
|
+
q,
|
|
173
|
+
{
|
|
174
|
+
styles: G(),
|
|
175
|
+
style: {
|
|
176
|
+
position: "fixed",
|
|
177
|
+
zIndex: 9999,
|
|
178
|
+
inset: 0,
|
|
179
|
+
pointerEvents: "none"
|
|
180
|
+
},
|
|
181
|
+
children: /* @__PURE__ */ o("div", { style: { pointerEvents: "auto" }, children: /* @__PURE__ */ o(
|
|
182
|
+
fe,
|
|
183
|
+
{
|
|
184
|
+
onClose: j,
|
|
185
|
+
isMinimized: F,
|
|
186
|
+
onMaximize: O,
|
|
187
|
+
theme: u,
|
|
188
|
+
displayMode: ne,
|
|
189
|
+
triggerMode: te,
|
|
190
|
+
isConnected: w,
|
|
191
|
+
isLoading: J,
|
|
192
|
+
chatMessages: K,
|
|
193
|
+
liveTranscript: Q,
|
|
194
|
+
isChatVisible: X,
|
|
195
|
+
isMuted: Z,
|
|
196
|
+
error: ee,
|
|
197
|
+
toolCallState: ae,
|
|
198
|
+
sessionState: ie,
|
|
199
|
+
setVideoElement: oe,
|
|
200
|
+
toggleChat: le,
|
|
201
|
+
sendMessage: ce,
|
|
202
|
+
toggleMute: de
|
|
203
|
+
}
|
|
204
|
+
) })
|
|
205
|
+
}
|
|
206
|
+
)
|
|
207
|
+
] })
|
|
208
|
+
] });
|
|
209
|
+
}, ge = ({
|
|
210
|
+
showAvatar: u = !0,
|
|
211
|
+
label: h,
|
|
212
|
+
theme: S,
|
|
213
|
+
onClick: l
|
|
214
|
+
}) => /* @__PURE__ */ o(
|
|
215
|
+
q,
|
|
216
|
+
{
|
|
217
|
+
styles: G(),
|
|
218
|
+
style: {
|
|
219
|
+
position: "fixed",
|
|
220
|
+
bottom: "24px",
|
|
221
|
+
right: "24px",
|
|
222
|
+
zIndex: 9997
|
|
223
|
+
},
|
|
224
|
+
children: /* @__PURE__ */ P(
|
|
225
|
+
"button",
|
|
226
|
+
{
|
|
227
|
+
onClick: l,
|
|
228
|
+
className: `
|
|
229
|
+
flex items-center gap-2 px-4 py-3 rounded-full shadow-lg
|
|
230
|
+
transition-all duration-200 hover:scale-105 hover:shadow-xl
|
|
231
|
+
${S === "dark" ? "bg-gray-800 text-white hover:bg-gray-700" : "bg-white text-gray-900 hover:bg-gray-50 border border-gray-200"}
|
|
232
|
+
`,
|
|
233
|
+
children: [
|
|
234
|
+
u && /* @__PURE__ */ o("div", { className: "w-8 h-8 rounded-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center text-white text-sm font-bold", children: "A" }),
|
|
235
|
+
h && /* @__PURE__ */ o("span", { className: "font-medium", children: h })
|
|
236
|
+
]
|
|
237
|
+
}
|
|
238
|
+
)
|
|
239
|
+
}
|
|
240
|
+
), fe = (u) => /* @__PURE__ */ o(
|
|
241
|
+
ue,
|
|
242
|
+
{
|
|
243
|
+
onClose: u.onClose,
|
|
244
|
+
isMinimized: u.isMinimized
|
|
245
|
+
}
|
|
246
|
+
);
|
|
247
|
+
export {
|
|
248
|
+
ve as AriaStandaloneUI,
|
|
249
|
+
ve as default
|
|
250
|
+
};
|
|
251
|
+
//# sourceMappingURL=AriaStandaloneUI-CIDTW7l1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AriaStandaloneUI-CIDTW7l1.js","sources":["../src/components/AriaStandaloneUI.tsx"],"sourcesContent":["/**\n * AriaStandaloneUI - Standalone React component for Aria SDK\n * \n * This component is mounted by AriaCore.init() and manages its own state\n * independently of any parent React context. It listens to window events\n * dispatched by AriaCore for programmatic control.\n */\n\nimport { useState, useEffect, useCallback, useRef, type FC } from 'react';\nimport type { \n ChatMessage, \n TriggerMode, \n SessionState, \n SessionManagerStatus,\n SessionManagerEvent,\n WebSocketTriggerEvent,\n ToolCallState,\n Theme,\n} from '@/types';\nimport { AriaSessionManager } from '@/lib/AriaSessionManager';\nimport { AriaWidget } from './AriaWidget';\nimport { ShadowContainer } from './ShadowContainer';\nimport { getAriaStyles } from '@/lib/cssLoader';\n\ninterface AriaStandaloneUIProps {\n theme: Theme;\n triggerLabel?: string;\n container: HTMLElement;\n}\n\nexport const AriaStandaloneUI: FC<AriaStandaloneUIProps> = ({\n theme,\n triggerLabel,\n container,\n}) => {\n // UI State\n const [isOpen, setIsOpen] = useState(false);\n const [isMinimized, setIsMinimized] = useState(false);\n const [isConnected, setIsConnected] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [chatMessages, setChatMessages] = useState<ChatMessage[]>([]);\n const [liveTranscript, setLiveTranscript] = useState('');\n const [isChatVisible, setIsChatVisible] = useState(false);\n const [isMuted, setIsMuted] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [triggerMode, setTriggerMode] = useState<TriggerMode>('user');\n const [displayMode, setDisplayMode] = useState<'center' | 'bottom-right'>('bottom-right');\n \n // Tool call state\n const [toolCallState, setToolCallState] = useState<ToolCallState>({\n isActive: false,\n toolName: null,\n toolData: null,\n });\n \n // Session State\n const [sessionState, setSessionState] = useState<SessionState>({\n session_id: null,\n token: null,\n expires_at: null,\n isSessionReady: false,\n lastError: null,\n isPreloaded: false,\n isRefreshing: false,\n });\n const [, setSessionManagerStatus] = useState<SessionManagerStatus>('idle');\n const [, setIsSessionPaused] = useState(false);\n\n // Refs\n const managerRef = useRef<AriaSessionManager | null>(null);\n const videoElementRef = useRef<HTMLVideoElement | null>(null);\n\n // ============================================================================\n // Session Manager Event Handlers\n // ============================================================================\n\n const handleStatusChange = useCallback((event: SessionManagerEvent) => {\n const { newStatus } = event.data as { oldStatus: SessionManagerStatus; newStatus: SessionManagerStatus };\n setSessionManagerStatus(newStatus);\n \n if (newStatus === 'preloading' || newStatus === 'connecting') {\n if (isOpen) {\n setIsLoading(true);\n }\n } else if (newStatus === 'ready') {\n setIsLoading(false);\n setIsConnected(true);\n } else if (newStatus === 'error') {\n setIsLoading(false);\n }\n }, [isOpen]);\n\n const handleSessionReady = useCallback((event: SessionManagerEvent) => {\n console.log('[AriaStandaloneUI] Session ready event:', event.data);\n \n if (managerRef.current) {\n const state = managerRef.current.getSessionState();\n setSessionState(state);\n }\n \n setIsConnected(true);\n setIsLoading(false);\n setError(null);\n }, []);\n\n const handleSessionError = useCallback((event: SessionManagerEvent) => {\n const errorMsg = event.error?.message || 'Session error';\n console.error('[AriaStandaloneUI] Session error:', errorMsg);\n setError(errorMsg);\n setIsLoading(false);\n \n if (managerRef.current) {\n const state = managerRef.current.getSessionState();\n setSessionState(state);\n }\n }, []);\n\n const handleConnectionChange = useCallback((event: SessionManagerEvent) => {\n const { connected } = event.data as { connected: boolean };\n setIsConnected(connected);\n \n if (!connected && managerRef.current) {\n const state = managerRef.current.getSessionState();\n setSessionState(state);\n }\n }, []);\n\n const handleMessageHistory = useCallback((event: SessionManagerEvent) => {\n const { messages } = event.data as { messages?: ChatMessage[] };\n if (messages) {\n setChatMessages(messages);\n }\n }, []);\n\n const handleMessageStream = useCallback((event: SessionManagerEvent) => {\n const { liveTranscript: transcript } = event.data as { liveTranscript?: string };\n if (transcript !== undefined) {\n setLiveTranscript(transcript);\n }\n }, []);\n\n const handleWebSocketTrigger = useCallback((_event: WebSocketTriggerEvent) => {\n console.log('[AriaStandaloneUI] WebSocket trigger event');\n openAssistant('websocket');\n }, []);\n\n const handleToolCall = useCallback((event: SessionManagerEvent) => {\n const data = event.data as { isActive: boolean; toolName: string | null; toolData: Record<string, unknown> | null };\n setToolCallState({\n isActive: data.isActive,\n toolName: data.toolName,\n toolData: data.toolData,\n });\n }, []);\n\n // ============================================================================\n // Initialize Session Manager\n // ============================================================================\n\n useEffect(() => {\n // Get the existing singleton instance (created by AriaCore.init)\n if (!AriaSessionManager.hasInstance()) {\n console.error('[AriaStandaloneUI] AriaSessionManager not initialized');\n return;\n }\n\n const manager = AriaSessionManager.getInstance({} as never); // Get existing instance\n managerRef.current = manager;\n\n // Set up event listeners\n manager.addEventListener('status_change', handleStatusChange);\n manager.addEventListener('session_ready', handleSessionReady);\n manager.addEventListener('session_error', handleSessionError);\n manager.addEventListener('connection_change', handleConnectionChange);\n manager.addEventListener('message_history', handleMessageHistory);\n manager.addEventListener('message_stream', handleMessageStream);\n manager.addEventListener('tool_call', handleToolCall);\n manager.setWebSocketTriggerCallback(handleWebSocketTrigger);\n\n // Sync initial state from manager\n setSessionState(manager.getSessionState());\n setSessionManagerStatus(manager.getStatus());\n setIsConnected(manager.isConnected());\n setChatMessages(manager.getChatMessages());\n setLiveTranscript(manager.getLiveTranscript());\n setIsMuted(manager.isMuted());\n setIsSessionPaused(manager.isSessionPaused());\n \n const toolState = manager.getToolCallState();\n setToolCallState(toolState);\n\n return () => {\n manager.removeEventListener('status_change', handleStatusChange);\n manager.removeEventListener('session_ready', handleSessionReady);\n manager.removeEventListener('session_error', handleSessionError);\n manager.removeEventListener('connection_change', handleConnectionChange);\n manager.removeEventListener('message_history', handleMessageHistory);\n manager.removeEventListener('message_stream', handleMessageStream);\n manager.removeEventListener('tool_call', handleToolCall);\n manager.setWebSocketTriggerCallback(null);\n };\n }, [\n handleStatusChange,\n handleSessionReady,\n handleSessionError,\n handleConnectionChange,\n handleMessageHistory,\n handleMessageStream,\n handleToolCall,\n handleWebSocketTrigger,\n ]);\n\n // ============================================================================\n // Window Event Listeners (for AriaCore programmatic control)\n // ============================================================================\n\n useEffect(() => {\n const handleOpen = (e: Event) => {\n const customEvent = e as CustomEvent<{ mode?: TriggerMode }>;\n openAssistant(customEvent.detail?.mode || 'user');\n };\n\n const handleClose = () => {\n closeAssistant();\n };\n\n const handleMinimize = () => {\n minimizeAssistant();\n };\n\n const handleMaximize = () => {\n maximizeAssistant();\n };\n\n window.addEventListener('aria:open', handleOpen);\n window.addEventListener('aria:close', handleClose);\n window.addEventListener('aria:minimize', handleMinimize);\n window.addEventListener('aria:maximize', handleMaximize);\n\n return () => {\n window.removeEventListener('aria:open', handleOpen);\n window.removeEventListener('aria:close', handleClose);\n window.removeEventListener('aria:minimize', handleMinimize);\n window.removeEventListener('aria:maximize', handleMaximize);\n };\n }, []);\n\n // Update container data attribute when open state changes\n useEffect(() => {\n container.setAttribute('data-aria-open', String(isOpen));\n }, [isOpen, container]);\n\n // ============================================================================\n // Video Element Management\n // ============================================================================\n\n const setVideoElement = useCallback((element: HTMLVideoElement | null) => {\n videoElementRef.current = element;\n \n if (element && managerRef.current) {\n managerRef.current.attachToVideoElement(element);\n } else if (!element && videoElementRef.current && managerRef.current) {\n managerRef.current.detachFromVideoElement(videoElementRef.current);\n }\n }, []);\n\n // ============================================================================\n // Assistant Actions\n // ============================================================================\n\n const openAssistant = useCallback((mode: TriggerMode = 'user') => {\n setTriggerMode(mode);\n setDisplayMode(mode === 'websocket' ? 'center' : 'bottom-right');\n setIsOpen(true);\n setIsMinimized(false);\n setError(null);\n\n if (!managerRef.current) return;\n\n const isPaused = managerRef.current.isSessionPaused();\n \n if (isPaused) {\n setIsLoading(true);\n managerRef.current.resumeSession().then(() => {\n setIsLoading(false);\n setIsConnected(true);\n setIsSessionPaused(false);\n const state = managerRef.current!.getSessionState();\n setSessionState(state);\n setChatMessages(managerRef.current!.getChatMessages());\n }).catch((err) => {\n setIsLoading(false);\n setIsSessionPaused(false);\n setError(err instanceof Error ? err.message : 'Failed to resume session');\n });\n return;\n }\n\n const isAnamReady = managerRef.current.isAnamClientInitialized();\n const hasToken = managerRef.current.hasSessionToken();\n const status = managerRef.current.getStatus();\n \n if (isAnamReady && status === 'ready') {\n setIsLoading(false);\n setIsConnected(true);\n } else if (hasToken) {\n setIsLoading(true);\n \n managerRef.current.initializeSessionOnDemand()\n .then(() => {\n setIsLoading(false);\n setIsConnected(true);\n const state = managerRef.current!.getSessionState();\n setSessionState(state);\n })\n .catch((err) => {\n setIsLoading(false);\n setError(err instanceof Error ? err.message : 'Failed to initialize session');\n });\n } else {\n setIsLoading(true);\n \n if (!managerRef.current.isConnected()) {\n managerRef.current.connect();\n }\n }\n }, []);\n\n const minimizeAssistant = useCallback(() => {\n setIsMinimized(true);\n }, []);\n\n const maximizeAssistant = useCallback(() => {\n setIsMinimized(false);\n }, []);\n\n const closeAssistant = useCallback(() => {\n setIsOpen(false);\n setIsMinimized(false);\n \n if (!managerRef.current) return;\n \n if (videoElementRef.current) {\n managerRef.current.detachFromVideoElement(videoElementRef.current);\n }\n \n setLiveTranscript('');\n managerRef.current.clearLiveTranscript();\n \n const isPersistEnabled = managerRef.current.isPersistSessionEnabled();\n \n if (isPersistEnabled) {\n managerRef.current.pauseSession();\n setIsSessionPaused(true);\n } else {\n managerRef.current.sendSessionEnd();\n managerRef.current.stopStreaming();\n \n setSessionState({\n session_id: null,\n token: null,\n expires_at: null,\n isSessionReady: false,\n lastError: null,\n isPreloaded: false,\n isRefreshing: false,\n });\n setIsConnected(false);\n setChatMessages([]);\n }\n }, []);\n\n // ============================================================================\n // Chat Actions\n // ============================================================================\n\n const toggleChat = useCallback(() => {\n setIsChatVisible(prev => !prev);\n }, []);\n\n const sendMessage = useCallback(async (message: string) => {\n if (!managerRef.current || !isConnected) {\n throw new Error('Not connected to Aria');\n }\n\n await managerRef.current.sendMessage(message);\n }, [isConnected]);\n\n const toggleMute = useCallback(() => {\n if (!managerRef.current) return;\n const newMuteState = managerRef.current.toggleMute();\n setIsMuted(newMuteState);\n }, []);\n\n // ============================================================================\n // Render\n // ============================================================================\n\n return (\n <>\n {/* Floating Trigger Button - shown when assistant is closed */}\n {!isOpen && (\n <AriaTriggerButtonStandalone \n showAvatar={true} \n label={triggerLabel}\n theme={theme}\n onClick={() => openAssistant('user')}\n />\n )}\n\n {/* Assistant Widget - render when open */}\n {isOpen && (\n <>\n {/* Backdrop overlay - only shown when widget is NOT minimized */}\n {!isMinimized && (\n <div \n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n minimizeAssistant();\n }}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n backdropFilter: 'blur(1px)',\n WebkitBackdropFilter: 'blur(1px)',\n zIndex: 9998,\n cursor: 'pointer',\n }}\n aria-hidden=\"true\"\n />\n )}\n \n {/* Aria Widget wrapped in Shadow DOM */}\n <ShadowContainer \n styles={getAriaStyles()}\n style={{ \n position: 'fixed',\n zIndex: 9999,\n inset: 0,\n pointerEvents: 'none',\n }}\n >\n <div style={{ pointerEvents: 'auto' }}>\n <AriaWidgetStandalone\n onClose={closeAssistant}\n isMinimized={isMinimized}\n onMaximize={maximizeAssistant}\n theme={theme}\n displayMode={displayMode}\n triggerMode={triggerMode}\n isConnected={isConnected}\n isLoading={isLoading}\n chatMessages={chatMessages}\n liveTranscript={liveTranscript}\n isChatVisible={isChatVisible}\n isMuted={isMuted}\n error={error}\n toolCallState={toolCallState}\n sessionState={sessionState}\n setVideoElement={setVideoElement}\n toggleChat={toggleChat}\n sendMessage={sendMessage}\n toggleMute={toggleMute}\n />\n </div>\n </ShadowContainer>\n </>\n )}\n </>\n );\n};\n\n// ============================================================================\n// Standalone Trigger Button (doesn't use context)\n// ============================================================================\n\ninterface AriaTriggerButtonStandaloneProps {\n showAvatar?: boolean;\n label?: string;\n theme: Theme;\n onClick: () => void;\n}\n\nconst AriaTriggerButtonStandalone: FC<AriaTriggerButtonStandaloneProps> = ({\n showAvatar = true,\n label,\n theme,\n onClick,\n}) => {\n return (\n <ShadowContainer \n styles={getAriaStyles()}\n style={{\n position: 'fixed',\n bottom: '24px',\n right: '24px',\n zIndex: 9997,\n }}\n >\n <button\n onClick={onClick}\n className={`\n flex items-center gap-2 px-4 py-3 rounded-full shadow-lg\n transition-all duration-200 hover:scale-105 hover:shadow-xl\n ${theme === 'dark' \n ? 'bg-gray-800 text-white hover:bg-gray-700' \n : 'bg-white text-gray-900 hover:bg-gray-50 border border-gray-200'\n }\n `}\n >\n {showAvatar && (\n <div className=\"w-8 h-8 rounded-full bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center text-white text-sm font-bold\">\n A\n </div>\n )}\n {label && <span className=\"font-medium\">{label}</span>}\n </button>\n </ShadowContainer>\n );\n};\n\n// ============================================================================\n// Standalone Widget (doesn't use context)\n// ============================================================================\n\ninterface AriaWidgetStandaloneProps {\n onClose: () => void;\n isMinimized: boolean;\n onMaximize: () => void;\n theme: Theme;\n displayMode: 'center' | 'bottom-right';\n triggerMode: TriggerMode;\n isConnected: boolean;\n isLoading: boolean;\n chatMessages: ChatMessage[];\n liveTranscript: string;\n isChatVisible: boolean;\n isMuted: boolean;\n error: string | null;\n toolCallState: ToolCallState;\n sessionState: SessionState;\n setVideoElement: (element: HTMLVideoElement | null) => void;\n toggleChat: () => void;\n sendMessage: (message: string) => Promise<void>;\n toggleMute: () => void;\n}\n\nconst AriaWidgetStandalone: FC<AriaWidgetStandaloneProps> = (props) => {\n // For now, delegate to the existing AriaWidget component\n // This passes all the props it needs without relying on context\n return (\n <AriaWidget \n onClose={props.onClose} \n isMinimized={props.isMinimized}\n // AriaWidget will use context internally, but we've set up the standalone UI\n // to manage state independently. The widget will work because we're within\n // the same React tree that has access to the session manager.\n />\n );\n};\n\nexport default AriaStandaloneUI;\n"],"names":["AriaStandaloneUI","theme","triggerLabel","container","isOpen","setIsOpen","useState","isMinimized","setIsMinimized","isConnected","setIsConnected","isLoading","setIsLoading","chatMessages","setChatMessages","liveTranscript","setLiveTranscript","isChatVisible","setIsChatVisible","isMuted","setIsMuted","error","setError","triggerMode","setTriggerMode","displayMode","setDisplayMode","toolCallState","setToolCallState","sessionState","setSessionState","setSessionManagerStatus","setIsSessionPaused","managerRef","useRef","videoElementRef","handleStatusChange","useCallback","event","newStatus","handleSessionReady","state","handleSessionError","errorMsg","handleConnectionChange","connected","handleMessageHistory","messages","handleMessageStream","transcript","handleWebSocketTrigger","_event","openAssistant","handleToolCall","data","useEffect","AriaSessionManager","manager","toolState","handleOpen","e","handleClose","closeAssistant","handleMinimize","minimizeAssistant","handleMaximize","maximizeAssistant","setVideoElement","element","mode","err","isAnamReady","hasToken","status","toggleChat","prev","sendMessage","message","toggleMute","newMuteState","jsxs","Fragment","jsx","AriaTriggerButtonStandalone","ShadowContainer","getAriaStyles","AriaWidgetStandalone","showAvatar","label","onClick","props","AriaWidget"],"mappings":"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"}
|