@skippr/live-agent-sdk 0.78.0 → 0.80.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/dist/esm/lib-exports.js +683 -475
- package/dist/skippr-sdk.css +1 -1
- package/dist/skippr-sdk.js +132 -132
- package/dist/types/components/AutoStartMedia.d.ts +2 -2
- package/dist/types/components/DomCapture.d.ts +2 -2
- package/dist/types/components/PushToTalkHint.d.ts +1 -0
- package/dist/types/components/PushToTalkMic.d.ts +8 -0
- package/dist/types/context/LiveAgentContext.d.ts +3 -3
- package/dist/types/context/VoiceTurnContext.d.ts +6 -0
- package/dist/types/hooks/useKeyboardPushToTalk.d.ts +8 -0
- package/dist/types/hooks/useVoiceTurn.d.ts +7 -0
- package/dist/types/lib/constants.d.ts +11 -1
- package/package.json +2 -1
- package/dist/types/context/TapToTalkContext.d.ts +0 -6
- package/dist/types/hooks/useTapToTalk.d.ts +0 -5
package/dist/esm/lib-exports.js
CHANGED
|
@@ -8,7 +8,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
8
8
|
|
|
9
9
|
// src/components/LiveAgent.tsx
|
|
10
10
|
import { LiveKitRoom, RoomAudioRenderer } from "@livekit/components-react";
|
|
11
|
-
import { useCallback as
|
|
11
|
+
import { useCallback as useCallback18, useEffect as useEffect29, useMemo as useMemo7, useRef as useRef23, useState as useState21 } from "react";
|
|
12
12
|
|
|
13
13
|
// src/capture/useAgentCursor.ts
|
|
14
14
|
import { useEffect, useState } from "react";
|
|
@@ -68,7 +68,17 @@ var PAGE_ACTIONS_TOPIC = "skippr.page-actions";
|
|
|
68
68
|
var TEXT_MODE_TOPIC = "skippr.text-mode";
|
|
69
69
|
var ACTION_CONTROL_TOPIC = "skippr.action-control";
|
|
70
70
|
var SESSION_HOLD_TOPIC = "skippr.session-hold";
|
|
71
|
-
var
|
|
71
|
+
var MIC_MODE_TURN_TOPIC = "skippr.mic-mode-turn";
|
|
72
|
+
var MIC_MODE = {
|
|
73
|
+
Live: "live",
|
|
74
|
+
PushToTalk: "pushToTalk",
|
|
75
|
+
TapToTalk: "tapToTalk"
|
|
76
|
+
};
|
|
77
|
+
var DEFAULT_MIC_MODE = MIC_MODE.Live;
|
|
78
|
+
function isRequestResponseMicMode(micMode) {
|
|
79
|
+
return micMode === MIC_MODE.PushToTalk || micMode === MIC_MODE.TapToTalk;
|
|
80
|
+
}
|
|
81
|
+
var PUSH_TO_TALK_KEY = "Backquote";
|
|
72
82
|
var IDLE_AUTO_PAUSE_MS = 3 * 60 * 1000;
|
|
73
83
|
var PLAN_ATTR = "skippr.action-plan";
|
|
74
84
|
var NAME_MAX_CHARS = 80;
|
|
@@ -196,81 +206,95 @@ function useSessionHoldContext() {
|
|
|
196
206
|
return useContext2(SessionHoldContext);
|
|
197
207
|
}
|
|
198
208
|
|
|
199
|
-
// src/context/
|
|
209
|
+
// src/context/TranscriptionsContext.tsx
|
|
210
|
+
import { useTranscriptions } from "@livekit/components-react/hooks";
|
|
200
211
|
import { createContext as createContext3, useContext as useContext3 } from "react";
|
|
212
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
213
|
+
var TranscriptionsContext = createContext3([]);
|
|
214
|
+
function TranscriptionsProvider({ children }) {
|
|
215
|
+
const transcriptions = useTranscriptions();
|
|
216
|
+
return /* @__PURE__ */ jsx2(TranscriptionsContext.Provider, {
|
|
217
|
+
value: transcriptions,
|
|
218
|
+
children
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
function useSharedTranscriptions() {
|
|
222
|
+
return useContext3(TranscriptionsContext);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// src/context/VoiceTurnContext.tsx
|
|
226
|
+
import { createContext as createContext4, useContext as useContext4 } from "react";
|
|
201
227
|
|
|
202
|
-
// src/hooks/
|
|
228
|
+
// src/hooks/useVoiceTurn.ts
|
|
203
229
|
import { useLocalParticipant as useLocalParticipant2 } from "@livekit/components-react/hooks";
|
|
204
|
-
import { useCallback as useCallback2, useState as useState3 } from "react";
|
|
230
|
+
import { useCallback as useCallback2, useRef, useState as useState3 } from "react";
|
|
205
231
|
var textEncoder2 = new TextEncoder;
|
|
206
|
-
function
|
|
232
|
+
function useVoiceTurn() {
|
|
207
233
|
const { localParticipant } = useLocalParticipant2();
|
|
208
234
|
const [isCapturingSpeech, setIsCapturingSpeech] = useState3(false);
|
|
235
|
+
const capturingRef = useRef(false);
|
|
209
236
|
const publish = useCallback2(async (type) => {
|
|
210
237
|
await localParticipant.publishData(textEncoder2.encode(JSON.stringify({ type })), {
|
|
211
238
|
reliable: true,
|
|
212
|
-
topic:
|
|
239
|
+
topic: MIC_MODE_TURN_TOPIC
|
|
213
240
|
});
|
|
214
241
|
}, [localParticipant]);
|
|
215
242
|
const startRecording = useCallback2(async () => {
|
|
216
243
|
try {
|
|
217
244
|
await localParticipant.setMicrophoneEnabled(true);
|
|
218
245
|
await publish("start");
|
|
219
|
-
setIsCapturingSpeech(true);
|
|
220
246
|
} catch (error) {
|
|
221
|
-
console.error("Failed to start
|
|
247
|
+
console.error("Failed to start voice turn:", error);
|
|
222
248
|
}
|
|
223
249
|
}, [localParticipant, publish]);
|
|
224
250
|
const commitRecording = useCallback2(async () => {
|
|
225
251
|
try {
|
|
226
252
|
await localParticipant.setMicrophoneEnabled(false);
|
|
227
253
|
await publish("commit");
|
|
228
|
-
setIsCapturingSpeech(false);
|
|
229
254
|
} catch (error) {
|
|
230
|
-
console.error("Failed to commit
|
|
255
|
+
console.error("Failed to commit voice turn:", error);
|
|
231
256
|
}
|
|
232
257
|
}, [localParticipant, publish]);
|
|
258
|
+
const start = useCallback2(() => {
|
|
259
|
+
if (capturingRef.current)
|
|
260
|
+
return;
|
|
261
|
+
capturingRef.current = true;
|
|
262
|
+
setIsCapturingSpeech(true);
|
|
263
|
+
startRecording();
|
|
264
|
+
}, [startRecording]);
|
|
265
|
+
const commit = useCallback2(() => {
|
|
266
|
+
if (!capturingRef.current)
|
|
267
|
+
return;
|
|
268
|
+
capturingRef.current = false;
|
|
269
|
+
setIsCapturingSpeech(false);
|
|
270
|
+
commitRecording();
|
|
271
|
+
}, [commitRecording]);
|
|
233
272
|
const toggle = useCallback2(() => {
|
|
234
|
-
if (
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
return { isCapturingSpeech, toggle };
|
|
273
|
+
if (capturingRef.current)
|
|
274
|
+
commit();
|
|
275
|
+
else
|
|
276
|
+
start();
|
|
277
|
+
}, [start, commit]);
|
|
278
|
+
return { isCapturingSpeech, toggle, start, commit };
|
|
241
279
|
}
|
|
242
280
|
|
|
243
|
-
// src/context/
|
|
244
|
-
import { jsx as
|
|
245
|
-
var
|
|
281
|
+
// src/context/VoiceTurnContext.tsx
|
|
282
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
283
|
+
var VoiceTurnContext = createContext4({
|
|
246
284
|
isCapturingSpeech: false,
|
|
247
|
-
toggle: () => {}
|
|
285
|
+
toggle: () => {},
|
|
286
|
+
start: () => {},
|
|
287
|
+
commit: () => {}
|
|
248
288
|
});
|
|
249
|
-
function
|
|
250
|
-
const
|
|
251
|
-
return /* @__PURE__ */
|
|
252
|
-
value:
|
|
289
|
+
function VoiceTurnProvider({ children }) {
|
|
290
|
+
const voiceTurn = useVoiceTurn();
|
|
291
|
+
return /* @__PURE__ */ jsx3(VoiceTurnContext.Provider, {
|
|
292
|
+
value: voiceTurn,
|
|
253
293
|
children
|
|
254
294
|
});
|
|
255
295
|
}
|
|
256
|
-
function
|
|
257
|
-
return
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// src/context/TranscriptionsContext.tsx
|
|
261
|
-
import { useTranscriptions } from "@livekit/components-react/hooks";
|
|
262
|
-
import { createContext as createContext4, useContext as useContext4 } from "react";
|
|
263
|
-
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
264
|
-
var TranscriptionsContext = createContext4([]);
|
|
265
|
-
function TranscriptionsProvider({ children }) {
|
|
266
|
-
const transcriptions = useTranscriptions();
|
|
267
|
-
return /* @__PURE__ */ jsx3(TranscriptionsContext.Provider, {
|
|
268
|
-
value: transcriptions,
|
|
269
|
-
children
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
function useSharedTranscriptions() {
|
|
273
|
-
return useContext4(TranscriptionsContext);
|
|
296
|
+
function useVoiceTurnContext() {
|
|
297
|
+
return useContext4(VoiceTurnContext);
|
|
274
298
|
}
|
|
275
299
|
|
|
276
300
|
// src/hooks/useAdoptionGoals.ts
|
|
@@ -561,7 +585,7 @@ function useAuth({ appKey }) {
|
|
|
561
585
|
}
|
|
562
586
|
|
|
563
587
|
// src/hooks/useAutoStart.ts
|
|
564
|
-
import { useEffect as useEffect5, useMemo as useMemo2, useRef } from "react";
|
|
588
|
+
import { useEffect as useEffect5, useMemo as useMemo2, useRef as useRef2 } from "react";
|
|
565
589
|
|
|
566
590
|
// src/lib/agentMode.ts
|
|
567
591
|
var AGENT_MODE = {
|
|
@@ -641,7 +665,7 @@ function useAutoStart({
|
|
|
641
665
|
bearerToken,
|
|
642
666
|
selectModule
|
|
643
667
|
}) {
|
|
644
|
-
const hasAutoStartedRef =
|
|
668
|
+
const hasAutoStartedRef = useRef2(false);
|
|
645
669
|
const autoStartModule = useMemo2(() => availableModules.find((m) => {
|
|
646
670
|
if (!m.uiPreferences?.autoStart)
|
|
647
671
|
return false;
|
|
@@ -790,7 +814,7 @@ function usePlanUpdates() {
|
|
|
790
814
|
}
|
|
791
815
|
|
|
792
816
|
// src/hooks/useSession.ts
|
|
793
|
-
import { useCallback as useCallback7, useEffect as useEffect8, useRef as
|
|
817
|
+
import { useCallback as useCallback7, useEffect as useEffect8, useRef as useRef3, useState as useState8 } from "react";
|
|
794
818
|
var API_URL4 = "https://specialist.skippr.ai/api";
|
|
795
819
|
async function fetchSessionMessages(sessionId, authedFetch) {
|
|
796
820
|
try {
|
|
@@ -856,11 +880,11 @@ function useSession({
|
|
|
856
880
|
const [pauseTimeoutSeconds, setPauseTimeoutSeconds] = useState8(null);
|
|
857
881
|
const [historyMessages, setHistoryMessages] = useState8([]);
|
|
858
882
|
const [authFailed, setAuthFailed] = useState8(false);
|
|
859
|
-
const tokenRef =
|
|
860
|
-
const getUserTokenRef =
|
|
883
|
+
const tokenRef = useRef3(authToken ? { token: authToken, expiresAt: null } : null);
|
|
884
|
+
const getUserTokenRef = useRef3(getUserToken);
|
|
861
885
|
getUserTokenRef.current = getUserToken ?? (userToken ? () => Promise.resolve(userToken) : undefined);
|
|
862
|
-
const failedBearerRef =
|
|
863
|
-
const inFlightExchangeRef =
|
|
886
|
+
const failedBearerRef = useRef3(null);
|
|
887
|
+
const inFlightExchangeRef = useRef3(null);
|
|
864
888
|
const canExchange = useCallback7(() => !!appKey && !!getUserTokenRef.current, [appKey]);
|
|
865
889
|
const reExchange = useCallback7(async () => {
|
|
866
890
|
if (inFlightExchangeRef.current)
|
|
@@ -955,8 +979,8 @@ function useSession({
|
|
|
955
979
|
stale = true;
|
|
956
980
|
};
|
|
957
981
|
}, [authToken, canExchange, reExchange]);
|
|
958
|
-
const isStartingRef =
|
|
959
|
-
const pauseOnUnloadRef =
|
|
982
|
+
const isStartingRef = useRef3(false);
|
|
983
|
+
const pauseOnUnloadRef = useRef3(null);
|
|
960
984
|
pauseOnUnloadRef.current = connection !== null && !isPaused && sessionId && bearerToken ? { sessionId, bearerToken } : null;
|
|
961
985
|
useEffect8(() => {
|
|
962
986
|
const onPageHide = () => {
|
|
@@ -1004,8 +1028,9 @@ function useSession({
|
|
|
1004
1028
|
enabledControls.highlight = true;
|
|
1005
1029
|
if (agentControls?.actions === true)
|
|
1006
1030
|
enabledControls.actions = true;
|
|
1007
|
-
|
|
1008
|
-
|
|
1031
|
+
const micMode = agentControls?.micMode;
|
|
1032
|
+
if (isRequestResponseMicMode(micMode))
|
|
1033
|
+
enabledControls.micMode = micMode;
|
|
1009
1034
|
const requestAgentControls = Object.keys(enabledControls).length > 0 ? enabledControls : undefined;
|
|
1010
1035
|
try {
|
|
1011
1036
|
let resolvedSessionId = existingSessionId;
|
|
@@ -1465,8 +1490,17 @@ var __iconNode20 = [
|
|
|
1465
1490
|
]
|
|
1466
1491
|
];
|
|
1467
1492
|
var Play = createLucideIcon("play", __iconNode20);
|
|
1468
|
-
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/
|
|
1493
|
+
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/radio.js
|
|
1469
1494
|
var __iconNode21 = [
|
|
1495
|
+
["path", { d: "M16.247 7.761a6 6 0 0 1 0 8.478", key: "1fwjs5" }],
|
|
1496
|
+
["path", { d: "M19.075 4.933a10 10 0 0 1 0 14.134", key: "ehdyv1" }],
|
|
1497
|
+
["path", { d: "M4.925 19.067a10 10 0 0 1 0-14.134", key: "1q22gi" }],
|
|
1498
|
+
["path", { d: "M7.753 16.239a6 6 0 0 1 0-8.478", key: "r2q7qm" }],
|
|
1499
|
+
["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }]
|
|
1500
|
+
];
|
|
1501
|
+
var Radio = createLucideIcon("radio", __iconNode21);
|
|
1502
|
+
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/send.js
|
|
1503
|
+
var __iconNode22 = [
|
|
1470
1504
|
[
|
|
1471
1505
|
"path",
|
|
1472
1506
|
{
|
|
@@ -1476,20 +1510,20 @@ var __iconNode21 = [
|
|
|
1476
1510
|
],
|
|
1477
1511
|
["path", { d: "m21.854 2.147-10.94 10.939", key: "12cjpa" }]
|
|
1478
1512
|
];
|
|
1479
|
-
var Send = createLucideIcon("send",
|
|
1513
|
+
var Send = createLucideIcon("send", __iconNode22);
|
|
1480
1514
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/square.js
|
|
1481
|
-
var
|
|
1515
|
+
var __iconNode23 = [
|
|
1482
1516
|
["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }]
|
|
1483
1517
|
];
|
|
1484
|
-
var Square = createLucideIcon("square",
|
|
1518
|
+
var Square = createLucideIcon("square", __iconNode23);
|
|
1485
1519
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/x.js
|
|
1486
|
-
var
|
|
1520
|
+
var __iconNode24 = [
|
|
1487
1521
|
["path", { d: "M18 6 6 18", key: "1bl5f8" }],
|
|
1488
1522
|
["path", { d: "m6 6 12 12", key: "d8bk6v" }]
|
|
1489
1523
|
];
|
|
1490
|
-
var X = createLucideIcon("x",
|
|
1524
|
+
var X = createLucideIcon("x", __iconNode24);
|
|
1491
1525
|
// src/components/AgentCursor.tsx
|
|
1492
|
-
import { useContext as useContext6, useEffect as useEffect10, useLayoutEffect, useRef as
|
|
1526
|
+
import { useContext as useContext6, useEffect as useEffect10, useLayoutEffect, useRef as useRef4, useState as useState10 } from "react";
|
|
1493
1527
|
|
|
1494
1528
|
// src/capture/elementRef.ts
|
|
1495
1529
|
function safeGetIframeDocument(iframe) {
|
|
@@ -1677,13 +1711,13 @@ function AgentCursor({
|
|
|
1677
1711
|
const [phase, setPhase] = useState10("idle");
|
|
1678
1712
|
const [ringBox, setRingBox] = useState10(null);
|
|
1679
1713
|
const [clickPulse, setClickPulse] = useState10(0);
|
|
1680
|
-
const cursorElRef =
|
|
1681
|
-
const pathRef =
|
|
1682
|
-
const prevCursorRef =
|
|
1683
|
-
const traceRef =
|
|
1684
|
-
const timersRef =
|
|
1685
|
-
const trackFrameRef =
|
|
1686
|
-
const glideFrameRef =
|
|
1714
|
+
const cursorElRef = useRef4(null);
|
|
1715
|
+
const pathRef = useRef4(null);
|
|
1716
|
+
const prevCursorRef = useRef4(null);
|
|
1717
|
+
const traceRef = useRef4(null);
|
|
1718
|
+
const timersRef = useRef4(new Set);
|
|
1719
|
+
const trackFrameRef = useRef4(null);
|
|
1720
|
+
const glideFrameRef = useRef4(null);
|
|
1687
1721
|
const clearTimers = () => {
|
|
1688
1722
|
for (const t of timersRef.current)
|
|
1689
1723
|
clearTimeout(t);
|
|
@@ -1924,18 +1958,21 @@ function AgentCursor({
|
|
|
1924
1958
|
// src/components/AutoStartMedia.tsx
|
|
1925
1959
|
import { useConnectionState, useLocalParticipant as useLocalParticipant3 } from "@livekit/components-react/hooks";
|
|
1926
1960
|
import { ConnectionState, Track } from "livekit-client";
|
|
1927
|
-
import { useEffect as useEffect11, useRef as
|
|
1928
|
-
function AutoStartMedia({
|
|
1961
|
+
import { useEffect as useEffect11, useRef as useRef5 } from "react";
|
|
1962
|
+
function AutoStartMedia({
|
|
1963
|
+
pendingScreenStream,
|
|
1964
|
+
pushOrTapMicMode = false
|
|
1965
|
+
}) {
|
|
1929
1966
|
const { localParticipant } = useLocalParticipant3();
|
|
1930
1967
|
const connectionState = useConnectionState();
|
|
1931
|
-
const didStartRef =
|
|
1968
|
+
const didStartRef = useRef5(false);
|
|
1932
1969
|
useEffect11(() => {
|
|
1933
1970
|
if (didStartRef.current)
|
|
1934
1971
|
return;
|
|
1935
1972
|
if (connectionState !== ConnectionState.Connected)
|
|
1936
1973
|
return;
|
|
1937
1974
|
didStartRef.current = true;
|
|
1938
|
-
if (!
|
|
1975
|
+
if (!pushOrTapMicMode) {
|
|
1939
1976
|
localParticipant.setMicrophoneEnabled(true).catch((error) => console.error("Failed to enable microphone:", error));
|
|
1940
1977
|
}
|
|
1941
1978
|
if (pendingScreenStream) {
|
|
@@ -1949,14 +1986,14 @@ function AutoStartMedia({ pendingScreenStream, tapToTalk = false }) {
|
|
|
1949
1986
|
});
|
|
1950
1987
|
}
|
|
1951
1988
|
}
|
|
1952
|
-
}, [connectionState, localParticipant, pendingScreenStream,
|
|
1989
|
+
}, [connectionState, localParticipant, pendingScreenStream, pushOrTapMicMode]);
|
|
1953
1990
|
return null;
|
|
1954
1991
|
}
|
|
1955
1992
|
|
|
1956
1993
|
// src/components/DomCapture.tsx
|
|
1957
1994
|
import { useConnectionState as useConnectionState2, useLocalParticipant as useLocalParticipant4 } from "@livekit/components-react/hooks";
|
|
1958
1995
|
import { ConnectionState as ConnectionState2, ScreenSharePresets, Track as Track2 } from "livekit-client";
|
|
1959
|
-
import { useEffect as useEffect12, useRef as
|
|
1996
|
+
import { useEffect as useEffect12, useRef as useRef6 } from "react";
|
|
1960
1997
|
|
|
1961
1998
|
// src/capture/a11yUtils.ts
|
|
1962
1999
|
var ROLE_BY_TAG = {
|
|
@@ -2861,10 +2898,10 @@ async function unpublishAndStopTrack(localParticipant, videoTrack) {
|
|
|
2861
2898
|
} catch {}
|
|
2862
2899
|
videoTrack.stop();
|
|
2863
2900
|
}
|
|
2864
|
-
function DomCapture({
|
|
2901
|
+
function DomCapture({ pushOrTapMicMode = false }) {
|
|
2865
2902
|
const { localParticipant } = useLocalParticipant4();
|
|
2866
2903
|
const connectionState = useConnectionState2();
|
|
2867
|
-
const didStartRef =
|
|
2904
|
+
const didStartRef = useRef6(false);
|
|
2868
2905
|
useEffect12(() => {
|
|
2869
2906
|
if (didStartRef.current)
|
|
2870
2907
|
return;
|
|
@@ -2886,7 +2923,7 @@ function DomCapture({ tapToTalk = false }) {
|
|
|
2886
2923
|
let snapshotInFlight = false;
|
|
2887
2924
|
let a11yPublishInFlight = false;
|
|
2888
2925
|
let consecutiveCaptureFailures = 0;
|
|
2889
|
-
if (!
|
|
2926
|
+
if (!pushOrTapMicMode) {
|
|
2890
2927
|
localParticipant.setMicrophoneEnabled(true).catch((error) => console.error("Failed to enable microphone:", error));
|
|
2891
2928
|
}
|
|
2892
2929
|
localParticipant.publishTrack(videoTrack, {
|
|
@@ -2971,13 +3008,13 @@ function DomCapture({ tapToTalk = false }) {
|
|
|
2971
3008
|
for (const track of canvasStream.getTracks())
|
|
2972
3009
|
track.stop();
|
|
2973
3010
|
};
|
|
2974
|
-
}, [connectionState, localParticipant,
|
|
3011
|
+
}, [connectionState, localParticipant, pushOrTapMicMode]);
|
|
2975
3012
|
return null;
|
|
2976
3013
|
}
|
|
2977
3014
|
|
|
2978
3015
|
// src/components/HighlightOverlay.tsx
|
|
2979
3016
|
import { useDataChannel } from "@livekit/components-react/hooks";
|
|
2980
|
-
import { useCallback as useCallback8, useEffect as useEffect13, useRef as
|
|
3017
|
+
import { useCallback as useCallback8, useEffect as useEffect13, useRef as useRef7 } from "react";
|
|
2981
3018
|
var HIGHLIGHT_AUTO_CLEAR_MS = 25000;
|
|
2982
3019
|
var textDecoder = new TextDecoder;
|
|
2983
3020
|
function parseHighlightMessage(payload) {
|
|
@@ -3000,8 +3037,8 @@ function parseHighlightMessage(payload) {
|
|
|
3000
3037
|
}
|
|
3001
3038
|
}
|
|
3002
3039
|
function HighlightOverlay() {
|
|
3003
|
-
const targetRef =
|
|
3004
|
-
const autoClearRef =
|
|
3040
|
+
const targetRef = useRef7(null);
|
|
3041
|
+
const autoClearRef = useRef7(null);
|
|
3005
3042
|
const clear = useCallback8(() => {
|
|
3006
3043
|
if (autoClearRef.current)
|
|
3007
3044
|
clearTimeout(autoClearRef.current);
|
|
@@ -3048,19 +3085,19 @@ function HighlightOverlay() {
|
|
|
3048
3085
|
}
|
|
3049
3086
|
|
|
3050
3087
|
// src/components/MinimizedBubble.tsx
|
|
3051
|
-
import { useContext as useContext7, useEffect as useEffect15, useRef as
|
|
3088
|
+
import { useContext as useContext7, useEffect as useEffect15, useRef as useRef9, useState as useState11 } from "react";
|
|
3052
3089
|
|
|
3053
3090
|
// src/hooks/useLauncherDrag.ts
|
|
3054
|
-
import { useEffect as useEffect14, useRef as
|
|
3091
|
+
import { useEffect as useEffect14, useRef as useRef8 } from "react";
|
|
3055
3092
|
import { flushSync } from "react-dom";
|
|
3056
3093
|
var DRAG_THRESHOLD_PX = 5;
|
|
3057
3094
|
function useLauncherDrag(containerRef, onDrop, followRefs, reportDragging) {
|
|
3058
|
-
const wasDraggedRef =
|
|
3059
|
-
const onDropRef =
|
|
3095
|
+
const wasDraggedRef = useRef8(false);
|
|
3096
|
+
const onDropRef = useRef8(onDrop);
|
|
3060
3097
|
onDropRef.current = onDrop;
|
|
3061
|
-
const followTargetsRef =
|
|
3098
|
+
const followTargetsRef = useRef8(followRefs);
|
|
3062
3099
|
followTargetsRef.current = followRefs;
|
|
3063
|
-
const reportDraggingRef =
|
|
3100
|
+
const reportDraggingRef = useRef8(reportDragging);
|
|
3064
3101
|
reportDraggingRef.current = reportDragging;
|
|
3065
3102
|
useEffect14(() => {
|
|
3066
3103
|
const el = containerRef.current;
|
|
@@ -3442,8 +3479,8 @@ function MinimizedBubble({
|
|
|
3442
3479
|
const [goalsAutoHidden, setGoalsAutoHidden] = useState11(false);
|
|
3443
3480
|
const [isLauncherHovered, setIsLauncherHovered] = useState11(false);
|
|
3444
3481
|
const [visitHref, setVisitHref] = useState11(() => window.location.href);
|
|
3445
|
-
const revealedHrefRef =
|
|
3446
|
-
const hoverContainerRef =
|
|
3482
|
+
const revealedHrefRef = useRef9(null);
|
|
3483
|
+
const hoverContainerRef = useRef9(null);
|
|
3447
3484
|
useEffect15(() => subscribeToLocationChange(() => setVisitHref(window.location.href)), []);
|
|
3448
3485
|
useEffect15(() => {
|
|
3449
3486
|
const el = hoverContainerRef.current;
|
|
@@ -3557,7 +3594,7 @@ function MinimizedBubble({
|
|
|
3557
3594
|
|
|
3558
3595
|
// src/components/PageActionHandler.tsx
|
|
3559
3596
|
import { useDataChannel as useDataChannel2 } from "@livekit/components-react/hooks";
|
|
3560
|
-
import { useCallback as useCallback9, useEffect as useEffect16, useRef as
|
|
3597
|
+
import { useCallback as useCallback9, useEffect as useEffect16, useRef as useRef10 } from "react";
|
|
3561
3598
|
var STEP_MAX_WAIT_MS = 5000;
|
|
3562
3599
|
var POST_ACTION_SETTLE_SNAPSHOT_MS = 300;
|
|
3563
3600
|
var textDecoder2 = new TextDecoder;
|
|
@@ -3774,11 +3811,11 @@ function labelFor(action) {
|
|
|
3774
3811
|
}
|
|
3775
3812
|
}
|
|
3776
3813
|
function PageActionHandler() {
|
|
3777
|
-
const mountedRef =
|
|
3778
|
-
const queueRef =
|
|
3779
|
-
const drainingRef =
|
|
3780
|
-
const settleTimerRef =
|
|
3781
|
-
const endStepRef =
|
|
3814
|
+
const mountedRef = useRef10(true);
|
|
3815
|
+
const queueRef = useRef10([]);
|
|
3816
|
+
const drainingRef = useRef10(false);
|
|
3817
|
+
const settleTimerRef = useRef10(null);
|
|
3818
|
+
const endStepRef = useRef10(null);
|
|
3782
3819
|
const runStep = useCallback9((action) => {
|
|
3783
3820
|
return new Promise((resolve) => {
|
|
3784
3821
|
if (action.type === "scroll_page") {
|
|
@@ -3914,7 +3951,7 @@ function PageActionHandler() {
|
|
|
3914
3951
|
}
|
|
3915
3952
|
|
|
3916
3953
|
// src/components/SessionControlBar.tsx
|
|
3917
|
-
import { useContext as useContext8, useEffect as
|
|
3954
|
+
import { useCallback as useCallback13, useContext as useContext8, useEffect as useEffect21, useState as useState14 } from "react";
|
|
3918
3955
|
|
|
3919
3956
|
// src/hooks/useActionControl.ts
|
|
3920
3957
|
import { useLocalParticipant as useLocalParticipant5 } from "@livekit/components-react/hooks";
|
|
@@ -3953,11 +3990,11 @@ function useAgentVoiceState() {
|
|
|
3953
3990
|
}
|
|
3954
3991
|
|
|
3955
3992
|
// src/hooks/useAudioLevelBars.ts
|
|
3956
|
-
import { useEffect as useEffect18, useRef as
|
|
3993
|
+
import { useEffect as useEffect18, useRef as useRef11, useState as useState13 } from "react";
|
|
3957
3994
|
var TALKING_LEVEL_THRESHOLD = 0.2;
|
|
3958
3995
|
var TALKING_HOLD_MS = 400;
|
|
3959
3996
|
function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowthPx, noiseGate }) {
|
|
3960
|
-
const barRefs =
|
|
3997
|
+
const barRefs = useRef11([]);
|
|
3961
3998
|
const [isTalking, setIsTalking] = useState13(false);
|
|
3962
3999
|
useEffect18(() => {
|
|
3963
4000
|
if (!mediaStreamTrack) {
|
|
@@ -4010,15 +4047,15 @@ function useAudioLevelBars(mediaStreamTrack, { barCount, idleHeightPx, maxGrowth
|
|
|
4010
4047
|
}
|
|
4011
4048
|
|
|
4012
4049
|
// src/hooks/useIdleAutoPause.ts
|
|
4013
|
-
import { useCallback as useCallback11, useEffect as useEffect19, useRef as
|
|
4050
|
+
import { useCallback as useCallback11, useEffect as useEffect19, useRef as useRef12 } from "react";
|
|
4014
4051
|
function useIdleAutoPause({
|
|
4015
4052
|
enabled,
|
|
4016
4053
|
active,
|
|
4017
4054
|
isHeld,
|
|
4018
4055
|
pause
|
|
4019
4056
|
}) {
|
|
4020
|
-
const timerRef =
|
|
4021
|
-
const pauseRef =
|
|
4057
|
+
const timerRef = useRef12(null);
|
|
4058
|
+
const pauseRef = useRef12(pause);
|
|
4022
4059
|
pauseRef.current = pause;
|
|
4023
4060
|
const clearTimer = useCallback11(() => {
|
|
4024
4061
|
if (timerRef.current) {
|
|
@@ -4045,15 +4082,79 @@ function useIdleAutoPause({
|
|
|
4045
4082
|
return { reportActivity };
|
|
4046
4083
|
}
|
|
4047
4084
|
|
|
4085
|
+
// src/hooks/useKeyboardPushToTalk.ts
|
|
4086
|
+
import { useEffect as useEffect20, useRef as useRef13 } from "react";
|
|
4087
|
+
function isEditableTarget() {
|
|
4088
|
+
const el = document.activeElement;
|
|
4089
|
+
if (!el)
|
|
4090
|
+
return false;
|
|
4091
|
+
const tag = el.tagName;
|
|
4092
|
+
return tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT" || el.isContentEditable;
|
|
4093
|
+
}
|
|
4094
|
+
function useKeyboardPushToTalk({
|
|
4095
|
+
enabled,
|
|
4096
|
+
onStart,
|
|
4097
|
+
onCommit,
|
|
4098
|
+
onKeyUsed
|
|
4099
|
+
}) {
|
|
4100
|
+
const handlers = useRef13({ onStart, onCommit, onKeyUsed });
|
|
4101
|
+
handlers.current = { onStart, onCommit, onKeyUsed };
|
|
4102
|
+
useEffect20(() => {
|
|
4103
|
+
if (!enabled)
|
|
4104
|
+
return;
|
|
4105
|
+
let keyHeld = false;
|
|
4106
|
+
const release = () => {
|
|
4107
|
+
if (!keyHeld)
|
|
4108
|
+
return;
|
|
4109
|
+
keyHeld = false;
|
|
4110
|
+
handlers.current.onCommit();
|
|
4111
|
+
};
|
|
4112
|
+
const onKeyDown = (event) => {
|
|
4113
|
+
if (event.code !== PUSH_TO_TALK_KEY || event.repeat)
|
|
4114
|
+
return;
|
|
4115
|
+
if (isEditableTarget())
|
|
4116
|
+
return;
|
|
4117
|
+
event.preventDefault();
|
|
4118
|
+
if (keyHeld)
|
|
4119
|
+
return;
|
|
4120
|
+
keyHeld = true;
|
|
4121
|
+
handlers.current.onKeyUsed?.();
|
|
4122
|
+
handlers.current.onStart();
|
|
4123
|
+
};
|
|
4124
|
+
const onKeyUp = (event) => {
|
|
4125
|
+
if (event.code !== PUSH_TO_TALK_KEY)
|
|
4126
|
+
return;
|
|
4127
|
+
event.preventDefault();
|
|
4128
|
+
release();
|
|
4129
|
+
};
|
|
4130
|
+
const onWindowBlur = () => release();
|
|
4131
|
+
const onVisibilityChange = () => {
|
|
4132
|
+
if (document.hidden)
|
|
4133
|
+
release();
|
|
4134
|
+
};
|
|
4135
|
+
document.addEventListener("keydown", onKeyDown);
|
|
4136
|
+
document.addEventListener("keyup", onKeyUp);
|
|
4137
|
+
window.addEventListener("blur", onWindowBlur);
|
|
4138
|
+
document.addEventListener("visibilitychange", onVisibilityChange);
|
|
4139
|
+
return () => {
|
|
4140
|
+
release();
|
|
4141
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
4142
|
+
document.removeEventListener("keyup", onKeyUp);
|
|
4143
|
+
window.removeEventListener("blur", onWindowBlur);
|
|
4144
|
+
document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
4145
|
+
};
|
|
4146
|
+
}, [enabled]);
|
|
4147
|
+
}
|
|
4148
|
+
|
|
4048
4149
|
// src/hooks/useLiveUserTranscript.ts
|
|
4049
4150
|
import { useLocalParticipant as useLocalParticipant6 } from "@livekit/components-react/hooks";
|
|
4050
|
-
import { useRef as
|
|
4151
|
+
import { useRef as useRef14 } from "react";
|
|
4051
4152
|
function useLiveUserTranscript(active) {
|
|
4052
4153
|
const transcriptions = useSharedTranscriptions();
|
|
4053
4154
|
const { localParticipant } = useLocalParticipant6();
|
|
4054
4155
|
const localIdentity = localParticipant.identity;
|
|
4055
|
-
const priorStreamIdsRef =
|
|
4056
|
-
const wasActiveRef =
|
|
4156
|
+
const priorStreamIdsRef = useRef14(new Set);
|
|
4157
|
+
const wasActiveRef = useRef14(false);
|
|
4057
4158
|
const userStreams = transcriptions.filter((stream) => stream.participantInfo.identity === localIdentity);
|
|
4058
4159
|
if (active && !wasActiveRef.current) {
|
|
4059
4160
|
priorStreamIdsRef.current = new Set(userStreams.map((s) => s.streamInfo.id));
|
|
@@ -4134,13 +4235,93 @@ function PausedCountdown({ secondsRemaining }) {
|
|
|
4134
4235
|
});
|
|
4135
4236
|
}
|
|
4136
4237
|
|
|
4137
|
-
// src/components/
|
|
4238
|
+
// src/components/PushToTalkHint.tsx
|
|
4138
4239
|
import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
4240
|
+
function PushToTalkHint() {
|
|
4241
|
+
return /* @__PURE__ */ jsxs6("div", {
|
|
4242
|
+
className: cn("skippr:absolute skippr:top-full skippr:left-2 skippr:mt-2 skippr:flex skippr:w-fit skippr:items-center skippr:gap-1.5 skippr:whitespace-nowrap skippr:rounded-full skippr:bg-[#f4ecd8] skippr:px-2.5 skippr:py-1 skippr:text-[10px] skippr:font-medium skippr:text-black skippr:shadow-[0_4px_14px_rgba(0,0,0,0.12)] skippr:[animation:skippr-agent-in_200ms_ease-out]"),
|
|
4243
|
+
children: [
|
|
4244
|
+
/* @__PURE__ */ jsx8("span", {
|
|
4245
|
+
children: "Hold the"
|
|
4246
|
+
}),
|
|
4247
|
+
/* @__PURE__ */ jsxs6("kbd", {
|
|
4248
|
+
className: "skippr:flex skippr:items-center skippr:gap-0.5 skippr:rounded skippr:border skippr:border-black/25 skippr:bg-white/70 skippr:px-1.5 skippr:py-0.5 skippr:font-mono skippr:text-[11px] skippr:leading-none skippr:text-black",
|
|
4249
|
+
children: [
|
|
4250
|
+
/* @__PURE__ */ jsx8("span", {
|
|
4251
|
+
children: "~"
|
|
4252
|
+
}),
|
|
4253
|
+
/* @__PURE__ */ jsx8("span", {
|
|
4254
|
+
className: "skippr:text-black/40",
|
|
4255
|
+
children: "/"
|
|
4256
|
+
}),
|
|
4257
|
+
/* @__PURE__ */ jsx8("span", {
|
|
4258
|
+
children: "`"
|
|
4259
|
+
})
|
|
4260
|
+
]
|
|
4261
|
+
}),
|
|
4262
|
+
/* @__PURE__ */ jsx8("span", {
|
|
4263
|
+
children: "tilde / backquote key to talk"
|
|
4264
|
+
})
|
|
4265
|
+
]
|
|
4266
|
+
});
|
|
4267
|
+
}
|
|
4268
|
+
|
|
4269
|
+
// src/components/PushToTalkMic.tsx
|
|
4270
|
+
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
4271
|
+
function PushToTalkMic({
|
|
4272
|
+
isCapturingSpeech,
|
|
4273
|
+
showLabel,
|
|
4274
|
+
onStart,
|
|
4275
|
+
onCommit
|
|
4276
|
+
}) {
|
|
4277
|
+
const { barRefs, isTalking } = useMicLevel(isCapturingSpeech);
|
|
4278
|
+
const label = isCapturingSpeech ? "Release to send" : "Hold to talk";
|
|
4279
|
+
const withLabel = isCapturingSpeech || showLabel;
|
|
4280
|
+
return /* @__PURE__ */ jsxs7("button", {
|
|
4281
|
+
type: "button",
|
|
4282
|
+
onPointerDown: onStart,
|
|
4283
|
+
onPointerUp: onCommit,
|
|
4284
|
+
onPointerLeave: onCommit,
|
|
4285
|
+
onPointerCancel: onCommit,
|
|
4286
|
+
"aria-label": "Hold to talk",
|
|
4287
|
+
"aria-pressed": isCapturingSpeech,
|
|
4288
|
+
title: label,
|
|
4289
|
+
"data-holding": isCapturingSpeech,
|
|
4290
|
+
className: cn("skippr:relative skippr:flex skippr:h-[38px] skippr:shrink-0 skippr:items-center skippr:justify-center skippr:gap-2 skippr:rounded-full skippr:bg-bubble skippr:text-white skippr:cursor-pointer skippr:touch-none skippr:select-none", withLabel ? "skippr:px-3.5" : "skippr:w-[38px]", isCapturingSpeech ? "skippr:scale-[0.94] skippr:shadow-inner skippr:animate-skippr-ptt-transmit skippr:transition-transform skippr:duration-100 skippr:ease-out skippr:motion-reduce:animate-none skippr:motion-reduce:scale-100" : "skippr:shadow-[0_2px_6px_rgba(0,0,0,0.28)] skippr:ring-1 skippr:ring-white/15 skippr:transition-transform skippr:duration-200 skippr:ease-[cubic-bezier(0.34,1.56,0.64,1)] skippr:hover:bg-[#3a384b]"),
|
|
4291
|
+
children: [
|
|
4292
|
+
/* @__PURE__ */ jsx9("span", {
|
|
4293
|
+
className: "skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-center",
|
|
4294
|
+
children: isCapturingSpeech ? /* @__PURE__ */ jsx9(Radio, {
|
|
4295
|
+
className: "skippr:size-5 skippr:text-brand"
|
|
4296
|
+
}) : /* @__PURE__ */ jsx9(Mic, {
|
|
4297
|
+
className: "skippr:size-5"
|
|
4298
|
+
})
|
|
4299
|
+
}),
|
|
4300
|
+
withLabel && /* @__PURE__ */ jsx9("span", {
|
|
4301
|
+
className: "skippr:whitespace-nowrap skippr:text-[13px] skippr:font-medium",
|
|
4302
|
+
children: label
|
|
4303
|
+
}),
|
|
4304
|
+
isCapturingSpeech && isTalking && /* @__PURE__ */ jsx9("span", {
|
|
4305
|
+
className: "skippr:flex skippr:h-6 skippr:shrink-0 skippr:items-center skippr:gap-[3px]",
|
|
4306
|
+
children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx9("span", {
|
|
4307
|
+
ref: (el) => {
|
|
4308
|
+
barRefs.current[index2] = el;
|
|
4309
|
+
},
|
|
4310
|
+
className: "skippr:w-[3px] skippr:rounded-full skippr:bg-white skippr:transition-[height] skippr:duration-75",
|
|
4311
|
+
style: { height: 5 }
|
|
4312
|
+
}, index2))
|
|
4313
|
+
})
|
|
4314
|
+
]
|
|
4315
|
+
});
|
|
4316
|
+
}
|
|
4317
|
+
|
|
4318
|
+
// src/components/TapToTalkMic.tsx
|
|
4319
|
+
import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
4139
4320
|
function TapToTalkMic({ isCapturingSpeech, showLabel, onToggle }) {
|
|
4140
4321
|
const { barRefs, isTalking } = useMicLevel(isCapturingSpeech);
|
|
4141
4322
|
const label = isCapturingSpeech ? "Tap to send" : "Tap to talk";
|
|
4142
4323
|
const withLabel = isCapturingSpeech || showLabel;
|
|
4143
|
-
return /* @__PURE__ */
|
|
4324
|
+
return /* @__PURE__ */ jsxs8("button", {
|
|
4144
4325
|
type: "button",
|
|
4145
4326
|
onClick: onToggle,
|
|
4146
4327
|
"aria-label": "Tap to talk",
|
|
@@ -4148,22 +4329,22 @@ function TapToTalkMic({ isCapturingSpeech, showLabel, onToggle }) {
|
|
|
4148
4329
|
title: label,
|
|
4149
4330
|
className: cn("skippr:flex skippr:h-[38px] skippr:shrink-0 skippr:items-center skippr:justify-center skippr:gap-2 skippr:rounded-full skippr:bg-bubble skippr:text-white skippr:cursor-pointer", withLabel ? "skippr:px-3.5" : "skippr:w-[38px]", isCapturingSpeech ? "skippr:animate-skippr-rec-ring skippr:motion-reduce:animate-none" : "skippr:hover:bg-[#3a384b]"),
|
|
4150
4331
|
children: [
|
|
4151
|
-
/* @__PURE__ */
|
|
4332
|
+
/* @__PURE__ */ jsx10("span", {
|
|
4152
4333
|
className: "skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-center",
|
|
4153
|
-
children: isCapturingSpeech ? /* @__PURE__ */
|
|
4334
|
+
children: isCapturingSpeech ? /* @__PURE__ */ jsx10(Square, {
|
|
4154
4335
|
className: "skippr:size-4 skippr:text-brand",
|
|
4155
4336
|
fill: "currentColor"
|
|
4156
|
-
}) : /* @__PURE__ */
|
|
4337
|
+
}) : /* @__PURE__ */ jsx10(Mic, {
|
|
4157
4338
|
className: "skippr:size-5"
|
|
4158
4339
|
})
|
|
4159
4340
|
}),
|
|
4160
|
-
withLabel && /* @__PURE__ */
|
|
4341
|
+
withLabel && /* @__PURE__ */ jsx10("span", {
|
|
4161
4342
|
className: "skippr:whitespace-nowrap skippr:text-[13px] skippr:font-medium",
|
|
4162
4343
|
children: label
|
|
4163
4344
|
}),
|
|
4164
|
-
isCapturingSpeech && isTalking && /* @__PURE__ */
|
|
4345
|
+
isCapturingSpeech && isTalking && /* @__PURE__ */ jsx10("span", {
|
|
4165
4346
|
className: "skippr:flex skippr:h-6 skippr:shrink-0 skippr:items-center skippr:gap-[3px]",
|
|
4166
|
-
children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */
|
|
4347
|
+
children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx10("span", {
|
|
4167
4348
|
ref: (el) => {
|
|
4168
4349
|
barRefs.current[index2] = el;
|
|
4169
4350
|
},
|
|
@@ -4176,7 +4357,7 @@ function TapToTalkMic({ isCapturingSpeech, showLabel, onToggle }) {
|
|
|
4176
4357
|
}
|
|
4177
4358
|
|
|
4178
4359
|
// src/components/SessionControlBar.tsx
|
|
4179
|
-
import { jsx as
|
|
4360
|
+
import { jsx as jsx11, jsxs as jsxs9, Fragment } from "react/jsx-runtime";
|
|
4180
4361
|
var STANDBY_BAR_WIDTH = 168;
|
|
4181
4362
|
var READY_BAR_WIDTH = 238;
|
|
4182
4363
|
var PAUSED_BAR_WIDTH = 248;
|
|
@@ -4209,21 +4390,21 @@ function AgentActivity({
|
|
|
4209
4390
|
noiseGate: AGENT_NOISE_GATE
|
|
4210
4391
|
});
|
|
4211
4392
|
const label = isActing ? "Working" : AGENT_STATE_LABELS[state] ?? "";
|
|
4212
|
-
return /* @__PURE__ */
|
|
4393
|
+
return /* @__PURE__ */ jsxs9("span", {
|
|
4213
4394
|
role: "status",
|
|
4214
4395
|
className: "skippr:flex skippr:items-center skippr:gap-1.5 skippr:text-bubble",
|
|
4215
4396
|
"aria-label": isActing ? "Agent is acting" : `Agent is ${state}`,
|
|
4216
4397
|
children: [
|
|
4217
|
-
/* @__PURE__ */
|
|
4398
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4218
4399
|
className: "skippr:flex skippr:size-5 skippr:shrink-0 skippr:items-center skippr:justify-center",
|
|
4219
|
-
children: isActing ? /* @__PURE__ */
|
|
4400
|
+
children: isActing ? /* @__PURE__ */ jsx11(MousePointerClick, {
|
|
4220
4401
|
strokeWidth: 2,
|
|
4221
4402
|
className: "skippr:size-5 skippr:[animation:skippr-finger-tap_1.1s_ease-in-out_infinite]"
|
|
4222
|
-
}) : /* @__PURE__ */
|
|
4403
|
+
}) : /* @__PURE__ */ jsxs9(Fragment, {
|
|
4223
4404
|
children: [
|
|
4224
|
-
state === "speaking" && /* @__PURE__ */
|
|
4405
|
+
state === "speaking" && /* @__PURE__ */ jsx11("span", {
|
|
4225
4406
|
className: "skippr:flex skippr:h-5 skippr:items-center skippr:gap-[2px]",
|
|
4226
|
-
children: Array.from({ length: AGENT_BARS }).map((_, index2) => /* @__PURE__ */
|
|
4407
|
+
children: Array.from({ length: AGENT_BARS }).map((_, index2) => /* @__PURE__ */ jsx11("span", {
|
|
4227
4408
|
ref: (el) => {
|
|
4228
4409
|
barRefs.current[index2] = el;
|
|
4229
4410
|
},
|
|
@@ -4231,21 +4412,21 @@ function AgentActivity({
|
|
|
4231
4412
|
style: { height: AGENT_BAR_IDLE_HEIGHT_PX }
|
|
4232
4413
|
}, index2))
|
|
4233
4414
|
}),
|
|
4234
|
-
state === "thinking" && /* @__PURE__ */
|
|
4415
|
+
state === "thinking" && /* @__PURE__ */ jsxs9("span", {
|
|
4235
4416
|
className: "skippr:flex skippr:items-center skippr:gap-[3px]",
|
|
4236
4417
|
children: [
|
|
4237
|
-
/* @__PURE__ */
|
|
4418
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4238
4419
|
className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:0ms]"
|
|
4239
4420
|
}),
|
|
4240
|
-
/* @__PURE__ */
|
|
4421
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4241
4422
|
className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:150ms]"
|
|
4242
4423
|
}),
|
|
4243
|
-
/* @__PURE__ */
|
|
4424
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4244
4425
|
className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:300ms]"
|
|
4245
4426
|
})
|
|
4246
4427
|
]
|
|
4247
4428
|
}),
|
|
4248
|
-
state === "listening" && /* @__PURE__ */
|
|
4429
|
+
state === "listening" && /* @__PURE__ */ jsxs9("svg", {
|
|
4249
4430
|
viewBox: "0 0 24 24",
|
|
4250
4431
|
className: "skippr:size-5",
|
|
4251
4432
|
fill: "none",
|
|
@@ -4255,10 +4436,10 @@ function AgentActivity({
|
|
|
4255
4436
|
strokeLinejoin: "round",
|
|
4256
4437
|
"aria-hidden": "true",
|
|
4257
4438
|
children: [
|
|
4258
|
-
/* @__PURE__ */
|
|
4439
|
+
/* @__PURE__ */ jsx11("path", {
|
|
4259
4440
|
d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"
|
|
4260
4441
|
}),
|
|
4261
|
-
/* @__PURE__ */
|
|
4442
|
+
/* @__PURE__ */ jsx11("circle", {
|
|
4262
4443
|
cx: "12",
|
|
4263
4444
|
cy: "12",
|
|
4264
4445
|
r: "2.5",
|
|
@@ -4271,7 +4452,7 @@ function AgentActivity({
|
|
|
4271
4452
|
]
|
|
4272
4453
|
})
|
|
4273
4454
|
}),
|
|
4274
|
-
/* @__PURE__ */
|
|
4455
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4275
4456
|
className: "skippr:text-[11px] skippr:font-medium skippr:capitalize",
|
|
4276
4457
|
children: label
|
|
4277
4458
|
})
|
|
@@ -4312,12 +4493,14 @@ function SessionControlBar() {
|
|
|
4312
4493
|
const { state, mediaStreamTrack: agentMediaStreamTrack } = useAgentVoiceState();
|
|
4313
4494
|
const { actionsActive, actionsPaused: actionsPaused2, togglePaused } = useActionControl();
|
|
4314
4495
|
const { isHeld, countdown, toggle: togglePause } = useSessionHoldContext();
|
|
4315
|
-
const
|
|
4496
|
+
const micMode = agentControls?.micMode;
|
|
4497
|
+
const pushOrTapMicMode = isRequestResponseMicMode(micMode);
|
|
4498
|
+
const isPushToTalk = micMode === MIC_MODE.PushToTalk;
|
|
4316
4499
|
const agentActive = state === "speaking" || state === "thinking";
|
|
4317
|
-
const { isCapturingSpeech, toggle: toggleTapToTalk } =
|
|
4500
|
+
const { isCapturingSpeech, toggle: toggleTapToTalk, start, commit } = useVoiceTurnContext();
|
|
4318
4501
|
const liveUserTranscript = useLiveUserTranscript(isCapturingSpeech);
|
|
4319
4502
|
const { reportActivity } = useIdleAutoPause({
|
|
4320
|
-
enabled:
|
|
4503
|
+
enabled: pushOrTapMicMode,
|
|
4321
4504
|
active: agentActive || isCapturingSpeech,
|
|
4322
4505
|
isHeld,
|
|
4323
4506
|
pause: () => {
|
|
@@ -4325,15 +4508,34 @@ function SessionControlBar() {
|
|
|
4325
4508
|
togglePause();
|
|
4326
4509
|
}
|
|
4327
4510
|
});
|
|
4328
|
-
|
|
4511
|
+
const [pushToTalkHintSeen, setPushToTalkHintSeen] = useState14(false);
|
|
4512
|
+
const startPushToTalk = useCallback13(() => {
|
|
4513
|
+
start();
|
|
4514
|
+
reportActivity();
|
|
4515
|
+
}, [start, reportActivity]);
|
|
4516
|
+
const commitPushToTalk = useCallback13(() => {
|
|
4517
|
+
commit();
|
|
4518
|
+
reportActivity();
|
|
4519
|
+
}, [commit, reportActivity]);
|
|
4520
|
+
const dismissPushToTalkHint = useCallback13(() => {
|
|
4521
|
+
setPushToTalkHintSeen(true);
|
|
4522
|
+
}, []);
|
|
4523
|
+
useKeyboardPushToTalk({
|
|
4524
|
+
enabled: isPushToTalk,
|
|
4525
|
+
onStart: startPushToTalk,
|
|
4526
|
+
onCommit: commitPushToTalk,
|
|
4527
|
+
onKeyUsed: dismissPushToTalkHint
|
|
4528
|
+
});
|
|
4529
|
+
useEffect21(() => {
|
|
4329
4530
|
if (isHeld)
|
|
4330
4531
|
minimizePanel();
|
|
4331
4532
|
}, [isHeld, minimizePanel]);
|
|
4332
4533
|
const isReady = state === "listening" || state === "thinking" || state === "speaking";
|
|
4333
4534
|
const { barRefs, isTalking } = useMicLevel(isReady && !isMuted && !textMode && !isHeld);
|
|
4535
|
+
const showPushToTalkHint = isPushToTalk && isReady && !isHeld && !isCapturingSpeech && !isPanelOpen && !pushToTalkHintSeen;
|
|
4334
4536
|
const showScreenShareToggle = captureMode === CAPTURE_MODE.Screenshare;
|
|
4335
4537
|
const showActionControl = captureMode === CAPTURE_MODE.Auto && actionsActive;
|
|
4336
|
-
const
|
|
4538
|
+
const voiceTurnAgentBusy = agentActive || showActionControl && !actionsPaused2;
|
|
4337
4539
|
const screenShareExtra = showScreenShareToggle ? SCREEN_SHARE_EXTRA_WIDTH : 0;
|
|
4338
4540
|
const actionControlExtra = showActionControl ? ACTION_CONTROL_EXTRA_WIDTH : 0;
|
|
4339
4541
|
let barWidth = STANDBY_BAR_WIDTH;
|
|
@@ -4360,93 +4562,98 @@ function SessionControlBar() {
|
|
|
4360
4562
|
return;
|
|
4361
4563
|
action();
|
|
4362
4564
|
};
|
|
4363
|
-
const panelToggleButton = /* @__PURE__ */
|
|
4565
|
+
const panelToggleButton = /* @__PURE__ */ jsx11("button", {
|
|
4364
4566
|
type: "button",
|
|
4365
4567
|
onClick: ifNotDragged(togglePanel),
|
|
4366
4568
|
"aria-label": isPanelOpen ? "Close panel" : agendaModule && !textMode ? "Open agenda" : "Open chat",
|
|
4367
4569
|
className: cn(SQUARE_BUTTON, "skippr:text-neutral-700", textMode ? "skippr:hover:bg-neutral-100" : "skippr:bg-neutral-100 skippr:hover:bg-neutral-200"),
|
|
4368
|
-
children: /* @__PURE__ */
|
|
4570
|
+
children: /* @__PURE__ */ jsx11(MessageSquare, {
|
|
4369
4571
|
className: "skippr:size-5"
|
|
4370
4572
|
})
|
|
4371
4573
|
});
|
|
4372
|
-
return /* @__PURE__ */
|
|
4574
|
+
return /* @__PURE__ */ jsxs9("div", {
|
|
4373
4575
|
ref: controlBarRef,
|
|
4374
4576
|
style: { bottom: launcherBottomPx },
|
|
4375
4577
|
className: cn("skippr:fixed skippr:z-[9999] skippr:touch-none skippr:cursor-grab", position === "right" ? "skippr:right-3" : "skippr:left-3"),
|
|
4376
4578
|
children: [
|
|
4377
|
-
isCapturingSpeech && !isPanelOpen && /* @__PURE__ */
|
|
4579
|
+
isCapturingSpeech && !isPanelOpen && /* @__PURE__ */ jsx11("div", {
|
|
4378
4580
|
className: cn("skippr:absolute skippr:bottom-full skippr:z-[10000] skippr:mb-2 skippr:max-w-[280px] skippr:rounded-[14px] skippr:bg-bubble skippr:px-3.5 skippr:py-2 skippr:text-[13px] skippr:text-white skippr:shadow-[0_10px_32px_rgba(0,0,0,0.18)] skippr:[animation:skippr-agent-in_200ms_ease-out]", position === "right" ? "skippr:right-0" : "skippr:left-0"),
|
|
4379
|
-
children: liveUserTranscript ? liveUserTranscript : /* @__PURE__ */
|
|
4581
|
+
children: liveUserTranscript ? liveUserTranscript : /* @__PURE__ */ jsx11("span", {
|
|
4380
4582
|
className: "skippr:text-white/60",
|
|
4381
4583
|
children: "Listening…"
|
|
4382
4584
|
})
|
|
4383
4585
|
}),
|
|
4384
|
-
/* @__PURE__ */
|
|
4385
|
-
style: { width: isReady &&
|
|
4586
|
+
/* @__PURE__ */ jsxs9("div", {
|
|
4587
|
+
style: { width: isReady && pushOrTapMicMode ? "auto" : barWidth },
|
|
4386
4588
|
className: cn("skippr:group skippr:relative skippr:flex skippr:h-[54px] skippr:items-center skippr:justify-center skippr:gap-2", "skippr:rounded-[20px] skippr:bg-white skippr:p-2", "skippr:shadow-[0_10px_32px_rgba(0,0,0,0.18)] skippr:ring-1 skippr:ring-black/5", "skippr:transition-[width,margin] skippr:duration-300 skippr:ease-out", "skippr:[animation:skippr-toolset-pop_440ms_cubic-bezier(0.22,1,0.36,1)]", isReady && (position === "right" ? "skippr:mr-7" : "skippr:ml-7")),
|
|
4387
4589
|
children: [
|
|
4388
|
-
!isReady && /* @__PURE__ */
|
|
4590
|
+
!isReady && /* @__PURE__ */ jsxs9("span", {
|
|
4389
4591
|
className: "skippr:flex skippr:h-[38px] skippr:items-center skippr:justify-center skippr:gap-2 skippr:text-[13px] skippr:font-medium skippr:text-bubble skippr:[animation:skippr-stage-fade_240ms_ease-out]",
|
|
4390
4592
|
children: [
|
|
4391
|
-
/* @__PURE__ */
|
|
4593
|
+
/* @__PURE__ */ jsxs9("span", {
|
|
4392
4594
|
className: "skippr:flex skippr:items-center skippr:gap-[3px]",
|
|
4393
4595
|
children: [
|
|
4394
|
-
/* @__PURE__ */
|
|
4596
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4395
4597
|
className: "skippr:size-1.5 skippr:rounded-full skippr:bg-bubble skippr:animate-bounce skippr:[animation-delay:0ms]"
|
|
4396
4598
|
}),
|
|
4397
|
-
/* @__PURE__ */
|
|
4599
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4398
4600
|
className: "skippr:size-1.5 skippr:rounded-full skippr:bg-bubble skippr:animate-bounce skippr:[animation-delay:150ms]"
|
|
4399
4601
|
}),
|
|
4400
|
-
/* @__PURE__ */
|
|
4602
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4401
4603
|
className: "skippr:size-1.5 skippr:rounded-full skippr:bg-bubble skippr:animate-bounce skippr:[animation-delay:300ms]"
|
|
4402
4604
|
})
|
|
4403
4605
|
]
|
|
4404
4606
|
}),
|
|
4405
|
-
/* @__PURE__ */
|
|
4607
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4406
4608
|
children: "Standing by…"
|
|
4407
4609
|
})
|
|
4408
4610
|
]
|
|
4409
4611
|
}),
|
|
4410
|
-
isReady && /* @__PURE__ */
|
|
4612
|
+
isReady && /* @__PURE__ */ jsxs9("div", {
|
|
4411
4613
|
className: cn("skippr:flex skippr:items-center skippr:gap-2 skippr:[animation:skippr-stage-fade_240ms_ease-out]", isHeld && "skippr:w-full skippr:justify-start"),
|
|
4412
4614
|
children: [
|
|
4413
|
-
/* @__PURE__ */
|
|
4615
|
+
/* @__PURE__ */ jsx11("button", {
|
|
4414
4616
|
type: "button",
|
|
4415
4617
|
onClick: ifNotDragged(togglePause),
|
|
4416
4618
|
"aria-label": isHeld ? "Resume" : "Pause",
|
|
4417
4619
|
title: isHeld ? "Resume" : "Pause",
|
|
4418
4620
|
className: cn(SQUARE_BUTTON, isHeld ? "skippr:bg-bubble skippr:text-white skippr:hover:bg-[#3a384b]" : "skippr:bg-neutral-100 skippr:text-neutral-700 skippr:hover:bg-neutral-200"),
|
|
4419
|
-
children: isHeld ? /* @__PURE__ */
|
|
4621
|
+
children: isHeld ? /* @__PURE__ */ jsx11(Play, {
|
|
4420
4622
|
className: "skippr:size-5",
|
|
4421
4623
|
fill: "currentColor"
|
|
4422
|
-
}) : /* @__PURE__ */
|
|
4624
|
+
}) : /* @__PURE__ */ jsx11(Pause, {
|
|
4423
4625
|
className: "skippr:size-5",
|
|
4424
4626
|
fill: "currentColor"
|
|
4425
4627
|
})
|
|
4426
4628
|
}),
|
|
4427
|
-
isHeld ? /* @__PURE__ */
|
|
4629
|
+
isHeld ? /* @__PURE__ */ jsxs9(Fragment, {
|
|
4428
4630
|
children: [
|
|
4429
|
-
/* @__PURE__ */
|
|
4631
|
+
/* @__PURE__ */ jsx11(PausedCountdown, {
|
|
4430
4632
|
secondsRemaining: countdown
|
|
4431
4633
|
}),
|
|
4432
4634
|
panelToggleButton
|
|
4433
4635
|
]
|
|
4434
|
-
}) : /* @__PURE__ */
|
|
4636
|
+
}) : /* @__PURE__ */ jsxs9(Fragment, {
|
|
4435
4637
|
children: [
|
|
4436
|
-
!textMode &&
|
|
4638
|
+
!textMode && pushOrTapMicMode && /* @__PURE__ */ jsxs9("div", {
|
|
4437
4639
|
className: "skippr:flex skippr:h-[38px] skippr:items-center skippr:gap-2",
|
|
4438
4640
|
children: [
|
|
4439
|
-
/* @__PURE__ */
|
|
4641
|
+
micMode === MIC_MODE.PushToTalk ? /* @__PURE__ */ jsx11(PushToTalkMic, {
|
|
4642
|
+
isCapturingSpeech,
|
|
4643
|
+
showLabel: !voiceTurnAgentBusy,
|
|
4644
|
+
onStart: startPushToTalk,
|
|
4645
|
+
onCommit: commitPushToTalk
|
|
4646
|
+
}) : /* @__PURE__ */ jsx11(TapToTalkMic, {
|
|
4440
4647
|
isCapturingSpeech,
|
|
4441
|
-
showLabel: !
|
|
4648
|
+
showLabel: !voiceTurnAgentBusy,
|
|
4442
4649
|
onToggle: () => {
|
|
4443
4650
|
toggleTapToTalk();
|
|
4444
4651
|
reportActivity();
|
|
4445
4652
|
}
|
|
4446
4653
|
}),
|
|
4447
|
-
|
|
4654
|
+
voiceTurnAgentBusy && /* @__PURE__ */ jsx11("span", {
|
|
4448
4655
|
className: "skippr:flex skippr:items-center skippr:[animation:skippr-agent-in_200ms_ease-out_240ms_both]",
|
|
4449
|
-
children: /* @__PURE__ */
|
|
4656
|
+
children: /* @__PURE__ */ jsx11(AgentActivity, {
|
|
4450
4657
|
state,
|
|
4451
4658
|
isActing: showActionControl && !actionsPaused2,
|
|
4452
4659
|
mediaStreamTrack: agentMediaStreamTrack
|
|
@@ -4454,37 +4661,37 @@ function SessionControlBar() {
|
|
|
4454
4661
|
})
|
|
4455
4662
|
]
|
|
4456
4663
|
}),
|
|
4457
|
-
!textMode && !
|
|
4664
|
+
!textMode && !pushOrTapMicMode && /* @__PURE__ */ jsxs9("div", {
|
|
4458
4665
|
className: "skippr:relative skippr:h-[38px]",
|
|
4459
4666
|
style: { width: MIC_REGION_WIDTH },
|
|
4460
4667
|
children: [
|
|
4461
|
-
!isTalking && /* @__PURE__ */
|
|
4668
|
+
!isTalking && /* @__PURE__ */ jsx11("span", {
|
|
4462
4669
|
className: "skippr:absolute skippr:inset-y-0 skippr:right-0 skippr:flex skippr:items-center skippr:justify-center skippr:[animation:skippr-agent-in_200ms_ease-out_240ms_both]",
|
|
4463
4670
|
style: { width: AGENT_ACTIVITY_WIDTH },
|
|
4464
|
-
children: /* @__PURE__ */
|
|
4671
|
+
children: /* @__PURE__ */ jsx11(AgentActivity, {
|
|
4465
4672
|
state,
|
|
4466
4673
|
isActing: showActionControl && !actionsPaused2,
|
|
4467
4674
|
mediaStreamTrack: agentMediaStreamTrack
|
|
4468
4675
|
})
|
|
4469
4676
|
}),
|
|
4470
|
-
/* @__PURE__ */
|
|
4677
|
+
/* @__PURE__ */ jsxs9("button", {
|
|
4471
4678
|
type: "button",
|
|
4472
4679
|
onClick: ifNotDragged(() => void toggleMute()),
|
|
4473
4680
|
"aria-label": isMuted ? "Unmute" : "Mute",
|
|
4474
4681
|
className: cn("skippr:group skippr:absolute skippr:top-0 skippr:left-0 skippr:z-10 skippr:flex skippr:h-[38px] skippr:items-center skippr:gap-2.5 skippr:overflow-hidden skippr:rounded-[12px] skippr:bg-bubble skippr:text-white skippr:cursor-pointer skippr:transition-[width] skippr:duration-300 skippr:ease-out", isTalking ? "skippr:justify-start skippr:pl-3.5" : "skippr:justify-center"),
|
|
4475
4682
|
style: { width: isTalking ? MIC_REGION_WIDTH : MIC_SQUARE_WIDTH },
|
|
4476
4683
|
children: [
|
|
4477
|
-
/* @__PURE__ */
|
|
4684
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4478
4685
|
className: cn("skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-center skippr:transition-colors", isMuted ? "skippr:text-red-400 skippr:group-hover:text-red-300" : "skippr:text-white skippr:group-hover:text-white/80"),
|
|
4479
|
-
children: isMuted ? /* @__PURE__ */
|
|
4686
|
+
children: isMuted ? /* @__PURE__ */ jsx11(MicOff, {
|
|
4480
4687
|
className: "skippr:size-5"
|
|
4481
|
-
}) : /* @__PURE__ */
|
|
4688
|
+
}) : /* @__PURE__ */ jsx11(Mic, {
|
|
4482
4689
|
className: "skippr:size-5"
|
|
4483
4690
|
})
|
|
4484
4691
|
}),
|
|
4485
|
-
/* @__PURE__ */
|
|
4692
|
+
/* @__PURE__ */ jsx11("span", {
|
|
4486
4693
|
className: cn("skippr:h-6 skippr:flex-1 skippr:items-center skippr:justify-center skippr:gap-[3px] skippr:transition-opacity skippr:duration-200", isTalking ? "skippr:flex skippr:opacity-100" : "skippr:hidden"),
|
|
4487
|
-
children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */
|
|
4694
|
+
children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx11("span", {
|
|
4488
4695
|
ref: (el) => {
|
|
4489
4696
|
barRefs.current[index2] = el;
|
|
4490
4697
|
},
|
|
@@ -4496,28 +4703,28 @@ function SessionControlBar() {
|
|
|
4496
4703
|
})
|
|
4497
4704
|
]
|
|
4498
4705
|
}),
|
|
4499
|
-
showScreenShareToggle && /* @__PURE__ */
|
|
4706
|
+
showScreenShareToggle && /* @__PURE__ */ jsx11("button", {
|
|
4500
4707
|
type: "button",
|
|
4501
4708
|
onClick: ifNotDragged(() => void toggleScreenShare()),
|
|
4502
4709
|
"aria-label": isScreenSharing ? "Stop sharing screen" : "Share screen",
|
|
4503
4710
|
className: cn(SQUARE_BUTTON, isScreenSharing ? "skippr:bg-bubble skippr:text-white skippr:hover:bg-[#3a384b]" : "skippr:bg-neutral-100 skippr:text-neutral-700 skippr:hover:bg-neutral-200"),
|
|
4504
|
-
children: isScreenSharing ? /* @__PURE__ */
|
|
4711
|
+
children: isScreenSharing ? /* @__PURE__ */ jsx11(MonitorOff, {
|
|
4505
4712
|
className: "skippr:size-5"
|
|
4506
|
-
}) : /* @__PURE__ */
|
|
4713
|
+
}) : /* @__PURE__ */ jsx11(Monitor, {
|
|
4507
4714
|
className: "skippr:size-5"
|
|
4508
4715
|
})
|
|
4509
4716
|
}),
|
|
4510
4717
|
panelToggleButton,
|
|
4511
|
-
showActionControl && /* @__PURE__ */
|
|
4718
|
+
showActionControl && /* @__PURE__ */ jsx11("button", {
|
|
4512
4719
|
type: "button",
|
|
4513
4720
|
onClick: ifNotDragged(() => void togglePaused()),
|
|
4514
4721
|
"aria-label": actionsPaused2 ? "Resume actions" : "Stop actions",
|
|
4515
4722
|
title: actionsPaused2 ? "Resume" : "Stop",
|
|
4516
4723
|
className: cn(SQUARE_BUTTON, actionsPaused2 ? "skippr:bg-green-100 skippr:text-green-700 skippr:hover:bg-green-200" : "skippr:bg-red-100 skippr:text-red-600 skippr:hover:bg-red-200"),
|
|
4517
|
-
children: actionsPaused2 ? /* @__PURE__ */
|
|
4724
|
+
children: actionsPaused2 ? /* @__PURE__ */ jsx11(Play, {
|
|
4518
4725
|
className: "skippr:size-5",
|
|
4519
4726
|
fill: "currentColor"
|
|
4520
|
-
}) : /* @__PURE__ */
|
|
4727
|
+
}) : /* @__PURE__ */ jsx11(Square, {
|
|
4521
4728
|
className: "skippr:size-5",
|
|
4522
4729
|
fill: "currentColor"
|
|
4523
4730
|
})
|
|
@@ -4528,27 +4735,28 @@ function SessionControlBar() {
|
|
|
4528
4735
|
}, textMode ? "ready-text" : "ready")
|
|
4529
4736
|
]
|
|
4530
4737
|
}),
|
|
4531
|
-
|
|
4738
|
+
showPushToTalkHint && /* @__PURE__ */ jsx11(PushToTalkHint, {}),
|
|
4739
|
+
isReady && !isDragging && /* @__PURE__ */ jsx11("button", {
|
|
4532
4740
|
type: "button",
|
|
4533
4741
|
onClick: ifNotDragged(() => void pauseSession()),
|
|
4534
4742
|
disabled: isPausing,
|
|
4535
4743
|
"aria-label": "End session",
|
|
4536
4744
|
"aria-busy": isPausing,
|
|
4537
4745
|
className: cn("skippr:absolute skippr:top-1/2 skippr:z-20 skippr:flex skippr:h-[54px] skippr:w-[50px] skippr:-mt-[27px] skippr:items-center", position === "right" ? "skippr:-right-8 skippr:justify-start skippr:pl-2.5" : "skippr:-left-8 skippr:justify-end skippr:pr-2.5", "skippr:rounded-[16px] skippr:bg-red-500 skippr:text-white", "skippr:shadow-[0_4px_14px_rgba(239,68,68,0.45)]", "skippr:transition-colors skippr:duration-150", "skippr:[animation:skippr-toolset-pop_280ms_cubic-bezier(0.22,1,0.36,1)]", isPausing ? "skippr:cursor-default" : "skippr:cursor-pointer skippr:hover:bg-red-600"),
|
|
4538
|
-
children: /* @__PURE__ */
|
|
4746
|
+
children: /* @__PURE__ */ jsxs9("span", {
|
|
4539
4747
|
className: "skippr:relative skippr:flex skippr:size-5 skippr:items-center skippr:justify-center",
|
|
4540
4748
|
children: [
|
|
4541
|
-
/* @__PURE__ */
|
|
4749
|
+
/* @__PURE__ */ jsx11(X, {
|
|
4542
4750
|
className: cn("skippr:size-4 skippr:transition-opacity skippr:duration-200", isPausing && "skippr:opacity-40"),
|
|
4543
4751
|
strokeWidth: 2.5
|
|
4544
4752
|
}),
|
|
4545
|
-
isPausing && /* @__PURE__ */
|
|
4753
|
+
isPausing && /* @__PURE__ */ jsxs9("svg", {
|
|
4546
4754
|
viewBox: "0 0 24 24",
|
|
4547
4755
|
fill: "none",
|
|
4548
4756
|
"aria-hidden": "true",
|
|
4549
4757
|
className: "skippr:absolute skippr:inset-0 skippr:size-full skippr:animate-spin skippr:motion-reduce:hidden",
|
|
4550
4758
|
children: [
|
|
4551
|
-
/* @__PURE__ */
|
|
4759
|
+
/* @__PURE__ */ jsx11("circle", {
|
|
4552
4760
|
cx: "12",
|
|
4553
4761
|
cy: "12",
|
|
4554
4762
|
r: "10.5",
|
|
@@ -4556,7 +4764,7 @@ function SessionControlBar() {
|
|
|
4556
4764
|
strokeOpacity: "0.2",
|
|
4557
4765
|
strokeWidth: "1.5"
|
|
4558
4766
|
}),
|
|
4559
|
-
/* @__PURE__ */
|
|
4767
|
+
/* @__PURE__ */ jsx11("circle", {
|
|
4560
4768
|
cx: "12",
|
|
4561
4769
|
cy: "12",
|
|
4562
4770
|
r: "10.5",
|
|
@@ -4575,9 +4783,9 @@ function SessionControlBar() {
|
|
|
4575
4783
|
}
|
|
4576
4784
|
|
|
4577
4785
|
// src/components/ShadowHost.tsx
|
|
4578
|
-
import { useLayoutEffect as useLayoutEffect2, useRef as
|
|
4786
|
+
import { useLayoutEffect as useLayoutEffect2, useRef as useRef15, useState as useState15 } from "react";
|
|
4579
4787
|
import { createPortal } from "react-dom";
|
|
4580
|
-
import { jsx as
|
|
4788
|
+
import { jsx as jsx12, Fragment as Fragment2 } from "react/jsx-runtime";
|
|
4581
4789
|
var PROPERTIES_STYLE_ID = "skippr-tw-properties";
|
|
4582
4790
|
var PROPERTY_RULE = /@property\s+[^{]+\{[^}]*\}/g;
|
|
4583
4791
|
function hoistTailwindProperties(css) {
|
|
@@ -4592,10 +4800,10 @@ function hoistTailwindProperties(css) {
|
|
|
4592
4800
|
return css.replace(PROPERTY_RULE, "");
|
|
4593
4801
|
}
|
|
4594
4802
|
function ShadowHost({ children }) {
|
|
4595
|
-
const hostRef =
|
|
4596
|
-
const [shadowRoot, setShadowRoot] =
|
|
4803
|
+
const hostRef = useRef15(null);
|
|
4804
|
+
const [shadowRoot, setShadowRoot] = useState15(null);
|
|
4597
4805
|
const css = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
|
|
4598
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--skippr-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--skippr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--skippr-color-red-50:oklch(97.1% .013 17.38);--skippr-color-red-100:oklch(93.6% .032 17.717);--skippr-color-red-200:oklch(88.5% .062 18.334);--skippr-color-red-300:oklch(80.8% .114 19.571);--skippr-color-red-400:oklch(70.4% .191 22.216);--skippr-color-red-500:oklch(63.7% .237 25.331);--skippr-color-red-600:oklch(57.7% .245 27.325);--skippr-color-red-700:oklch(50.5% .213 27.518);--skippr-color-amber-50:oklch(98.7% .022 95.277);--skippr-color-amber-100:oklch(96.2% .059 95.617);--skippr-color-amber-400:oklch(82.8% .189 84.429);--skippr-color-amber-700:oklch(55.5% .163 48.998);--skippr-color-amber-950:oklch(27.9% .077 45.635);--skippr-color-green-100:oklch(96.2% .044 156.743);--skippr-color-green-200:oklch(92.5% .084 155.995);--skippr-color-green-700:oklch(52.7% .154 150.069);--skippr-color-emerald-400:oklch(76.5% .177 163.223);--skippr-color-neutral-100:oklch(97% 0 0);--skippr-color-neutral-200:oklch(92.2% 0 0);--skippr-color-neutral-500:oklch(55.6% 0 0);--skippr-color-neutral-700:oklch(37.1% 0 0);--skippr-color-black:#000;--skippr-color-white:#fff;--skippr-spacing:.25rem;--skippr-text-xs:.75rem;--skippr-text-xs--line-height:calc(1/.75);--skippr-text-sm:.875rem;--skippr-text-sm--line-height:calc(1.25/.875);--skippr-font-weight-medium:500;--skippr-font-weight-semibold:600;--skippr-leading-tight:1.25;--skippr-leading-snug:1.375;--skippr-leading-relaxed:1.625;--skippr-ease-out:cubic-bezier(0,0,.2,1);--skippr-ease-in-out:cubic-bezier(.4,0,.2,1);--skippr-animate-spin:spin 1s linear infinite;--skippr-animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--skippr-animate-bounce:bounce 1s infinite;--skippr-blur-sm:8px;--skippr-default-transition-duration:.15s;--skippr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--skippr-default-font-family:var(--skippr-font-sans);--skippr-default-mono-font-family:var(--skippr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--skippr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--skippr-default-font-feature-settings,normal);font-variation-settings:var(--skippr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--skippr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--skippr-default-mono-font-feature-settings,normal);font-variation-settings:var(--skippr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.skippr\\:pointer-events-none{pointer-events:none}.skippr\\:absolute{position:absolute}.skippr\\:fixed{position:fixed}.skippr\\:relative{position:relative}.skippr\\:sticky{position:sticky}.skippr\\:inset-0{inset:calc(var(--skippr-spacing)*0)}.skippr\\:inset-y-0{inset-block:calc(var(--skippr-spacing)*0)}.skippr\\:top-0{top:calc(var(--skippr-spacing)*0)}.skippr\\:top-1\\/2{top:50%}.skippr\\:top-full{top:100%}.skippr\\:-right-8{right:calc(var(--skippr-spacing)*-8)}.skippr\\:right-0{right:calc(var(--skippr-spacing)*0)}.skippr\\:right-3{right:calc(var(--skippr-spacing)*3)}.skippr\\:right-5{right:calc(var(--skippr-spacing)*5)}.skippr\\:right-6{right:calc(var(--skippr-spacing)*6)}.skippr\\:-bottom-1{bottom:calc(var(--skippr-spacing)*-1)}.skippr\\:-bottom-9{bottom:calc(var(--skippr-spacing)*-9)}.skippr\\:bottom-3{bottom:calc(var(--skippr-spacing)*3)}.skippr\\:bottom-20{bottom:calc(var(--skippr-spacing)*20)}.skippr\\:bottom-full{bottom:100%}.skippr\\:-left-8{left:calc(var(--skippr-spacing)*-8)}.skippr\\:left-0{left:calc(var(--skippr-spacing)*0)}.skippr\\:left-1\\/2{left:50%}.skippr\\:left-3{left:calc(var(--skippr-spacing)*3)}.skippr\\:left-5{left:calc(var(--skippr-spacing)*5)}.skippr\\:left-6{left:calc(var(--skippr-spacing)*6)}.skippr\\:z-10{z-index:10}.skippr\\:z-20{z-index:20}.skippr\\:z-\\[9998\\]{z-index:9998}.skippr\\:z-\\[9999\\]{z-index:9999}.skippr\\:z-\\[10000\\]{z-index:10000}.skippr\\:order-first{order:-9999}.skippr\\:order-last{order:9999}.skippr\\:mx-auto{margin-inline:auto}.skippr\\:-mt-\\[5px\\]{margin-top:-5px}.skippr\\:-mt-\\[27px\\]{margin-top:-27px}.skippr\\:mt-0\\.5{margin-top:calc(var(--skippr-spacing)*.5)}.skippr\\:mt-1{margin-top:calc(var(--skippr-spacing)*1)}.skippr\\:mt-1\\.5{margin-top:calc(var(--skippr-spacing)*1.5)}.skippr\\:mt-2{margin-top:calc(var(--skippr-spacing)*2)}.skippr\\:mt-3{margin-top:calc(var(--skippr-spacing)*3)}.skippr\\:mt-3\\.5{margin-top:calc(var(--skippr-spacing)*3.5)}.skippr\\:mr-7{margin-right:calc(var(--skippr-spacing)*7)}.skippr\\:-mb-\\[5px\\]{margin-bottom:-5px}.skippr\\:mb-1\\.5{margin-bottom:calc(var(--skippr-spacing)*1.5)}.skippr\\:mb-2{margin-bottom:calc(var(--skippr-spacing)*2)}.skippr\\:mb-3{margin-bottom:calc(var(--skippr-spacing)*3)}.skippr\\:mb-4{margin-bottom:calc(var(--skippr-spacing)*4)}.skippr\\:ml-0\\.5{margin-left:calc(var(--skippr-spacing)*.5)}.skippr\\:ml-1{margin-left:calc(var(--skippr-spacing)*1)}.skippr\\:ml-7{margin-left:calc(var(--skippr-spacing)*7)}.skippr\\:flex{display:flex}.skippr\\:hidden{display:none}.skippr\\:inline-flex{display:inline-flex}.skippr\\:size-1{width:calc(var(--skippr-spacing)*1);height:calc(var(--skippr-spacing)*1)}.skippr\\:size-1\\.5{width:calc(var(--skippr-spacing)*1.5);height:calc(var(--skippr-spacing)*1.5)}.skippr\\:size-2{width:calc(var(--skippr-spacing)*2);height:calc(var(--skippr-spacing)*2)}.skippr\\:size-2\\.5{width:calc(var(--skippr-spacing)*2.5);height:calc(var(--skippr-spacing)*2.5)}.skippr\\:size-3{width:calc(var(--skippr-spacing)*3);height:calc(var(--skippr-spacing)*3)}.skippr\\:size-3\\.5{width:calc(var(--skippr-spacing)*3.5);height:calc(var(--skippr-spacing)*3.5)}.skippr\\:size-4{width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}.skippr\\:size-5{width:calc(var(--skippr-spacing)*5);height:calc(var(--skippr-spacing)*5)}.skippr\\:size-6{width:calc(var(--skippr-spacing)*6);height:calc(var(--skippr-spacing)*6)}.skippr\\:size-7{width:calc(var(--skippr-spacing)*7);height:calc(var(--skippr-spacing)*7)}.skippr\\:size-8{width:calc(var(--skippr-spacing)*8);height:calc(var(--skippr-spacing)*8)}.skippr\\:size-9{width:calc(var(--skippr-spacing)*9);height:calc(var(--skippr-spacing)*9)}.skippr\\:size-10{width:calc(var(--skippr-spacing)*10);height:calc(var(--skippr-spacing)*10)}.skippr\\:size-12{width:calc(var(--skippr-spacing)*12);height:calc(var(--skippr-spacing)*12)}.skippr\\:size-\\[5px\\]{width:5px;height:5px}.skippr\\:size-\\[38px\\]{width:38px;height:38px}.skippr\\:size-full{width:100%;height:100%}.skippr\\:h-0{height:calc(var(--skippr-spacing)*0)}.skippr\\:h-0\\.5{height:calc(var(--skippr-spacing)*.5)}.skippr\\:h-1{height:calc(var(--skippr-spacing)*1)}.skippr\\:h-1\\.5{height:calc(var(--skippr-spacing)*1.5)}.skippr\\:h-2{height:calc(var(--skippr-spacing)*2)}.skippr\\:h-3{height:calc(var(--skippr-spacing)*3)}.skippr\\:h-3\\.5{height:calc(var(--skippr-spacing)*3.5)}.skippr\\:h-4{height:calc(var(--skippr-spacing)*4)}.skippr\\:h-5{height:calc(var(--skippr-spacing)*5)}.skippr\\:h-6{height:calc(var(--skippr-spacing)*6)}.skippr\\:h-7{height:calc(var(--skippr-spacing)*7)}.skippr\\:h-8{height:calc(var(--skippr-spacing)*8)}.skippr\\:h-9{height:calc(var(--skippr-spacing)*9)}.skippr\\:h-10{height:calc(var(--skippr-spacing)*10)}.skippr\\:h-\\[18\\.5px\\]{height:18.5px}.skippr\\:h-\\[36px\\]{height:36px}.skippr\\:h-\\[38px\\]{height:38px}.skippr\\:h-\\[48px\\]{height:48px}.skippr\\:h-\\[54px\\]{height:54px}.skippr\\:h-full{height:100%}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.skippr\\:min-h-11{min-height:calc(var(--skippr-spacing)*11)}.skippr\\:w-0{width:calc(var(--skippr-spacing)*0)}.skippr\\:w-3\\.5{width:calc(var(--skippr-spacing)*3.5)}.skippr\\:w-4{width:calc(var(--skippr-spacing)*4)}.skippr\\:w-5{width:calc(var(--skippr-spacing)*5)}.skippr\\:w-6{width:calc(var(--skippr-spacing)*6)}.skippr\\:w-7{width:calc(var(--skippr-spacing)*7)}.skippr\\:w-8{width:calc(var(--skippr-spacing)*8)}.skippr\\:w-10{width:calc(var(--skippr-spacing)*10)}.skippr\\:w-40{width:calc(var(--skippr-spacing)*40)}.skippr\\:w-\\[2px\\]{width:2px}.skippr\\:w-\\[3px\\]{width:3px}.skippr\\:w-\\[15\\.4px\\]{width:15.4px}.skippr\\:w-\\[36px\\]{width:36px}.skippr\\:w-\\[38px\\]{width:38px}.skippr\\:w-\\[50px\\]{width:50px}.skippr\\:w-full{width:100%}.skippr\\:max-w-64{max-width:calc(var(--skippr-spacing)*64)}.skippr\\:max-w-72{max-width:calc(var(--skippr-spacing)*72)}.skippr\\:max-w-\\[80\\%\\]{max-width:80%}.skippr\\:max-w-\\[280px\\]{max-width:280px}.skippr\\:min-w-0{min-width:calc(var(--skippr-spacing)*0)}.skippr\\:min-w-11{min-width:calc(var(--skippr-spacing)*11)}.skippr\\:flex-1{flex:1}.skippr\\:shrink-0{flex-shrink:0}.skippr\\:origin-bottom-left{transform-origin:0 100%}.skippr\\:origin-bottom-right{transform-origin:100% 100%}.skippr\\:origin-center{transform-origin:50%}.skippr\\:origin-left{transform-origin:0}.skippr\\:origin-right{transform-origin:100%}.skippr\\:origin-top-left{transform-origin:0 0}.skippr\\:origin-top-right{transform-origin:100% 0}.skippr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:-translate-x-3{--tw-translate-x:calc(var(--skippr-spacing)*-3);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:-translate-x-7{--tw-translate-x:calc(var(--skippr-spacing)*-7);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:translate-x-3{--tw-translate-x:calc(var(--skippr-spacing)*3);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:translate-x-7{--tw-translate-x:calc(var(--skippr-spacing)*7);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:-rotate-90{rotate:-90deg}.skippr\\:rotate-45{rotate:45deg}.skippr\\:rotate-\\[225deg\\]{rotate:225deg}.skippr\\:\\[animation\\:skippr-agent-in_200ms_ease-out\\]{animation:.2s ease-out skippr-agent-in}.skippr\\:\\[animation\\:skippr-agent-in_200ms_ease-out_240ms_both\\]{animation:.2s ease-out .24s both skippr-agent-in}.skippr\\:\\[animation\\:skippr-banner-look_2\\.4s_ease-in-out_infinite\\]{animation:2.4s ease-in-out infinite skippr-banner-look}.skippr\\:\\[animation\\:skippr-finger-tap_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-finger-tap}.skippr\\:\\[animation\\:skippr-orb-in_320ms_cubic-bezier\\(0\\.34\\,1\\.3\\,0\\.64\\,1\\)\\]{animation:.32s cubic-bezier(.34,1.3,.64,1) skippr-orb-in}.skippr\\:\\[animation\\:skippr-stage-fade_240ms_ease-out\\]{animation:.24s ease-out skippr-stage-fade}.skippr\\:\\[animation\\:skippr-tip-in_360ms_cubic-bezier\\(0\\.34\\,1\\.3\\,0\\.64\\,1\\)_backwards\\]{animation:.36s cubic-bezier(.34,1.3,.64,1) backwards skippr-tip-in}.skippr\\:\\[animation\\:skippr-toolset-pop_280ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.28s cubic-bezier(.22,1,.36,1) skippr-toolset-pop}.skippr\\:\\[animation\\:skippr-toolset-pop_440ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.44s cubic-bezier(.22,1,.36,1) skippr-toolset-pop}.skippr\\:animate-\\[skippr-banner-look_2\\.4s_ease-in-out_infinite\\]{animation:2.4s ease-in-out infinite skippr-banner-look}.skippr\\:animate-\\[skippr-bubble-in_0\\.28s_ease-out\\]{animation:.28s ease-out skippr-bubble-in}.skippr\\:animate-\\[skippr-fade-in_0\\.3s_ease-out\\]{animation:.3s ease-out skippr-fade-in}.skippr\\:animate-\\[skippr-pill-content_0\\.22s_ease-out\\]{animation:.22s ease-out skippr-pill-content}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.3s_infinite\\]{animation:1.1s ease-in-out .3s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.6s_infinite\\]{animation:1.1s ease-in-out .6s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.15s_infinite\\]{animation:1.1s ease-in-out .15s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.45s_infinite\\]{animation:1.1s ease-in-out .45s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-speak}.skippr\\:animate-bounce{animation:var(--skippr-animate-bounce)}.skippr\\:animate-ping{animation:var(--skippr-animate-ping)}.skippr\\:animate-skippr-annotation-pulse{animation:1.8s ease-in-out infinite skippr-annotation-pulse}.skippr\\:animate-skippr-click-ping{animation:.5s ease-out forwards skippr-click-ping}.skippr\\:animate-skippr-cursor-pop{animation:.22s ease-out skippr-cursor-pop}.skippr\\:animate-skippr-press{animation:.5s ease-in-out skippr-press}.skippr\\:animate-skippr-rec-ring{animation:2s ease-out infinite skippr-rec-ring}.skippr\\:animate-skippr-tab-fade{animation:.2s ease-out skippr-tab-fade}.skippr\\:animate-skippr-thinking-dot{animation:1.2s ease-in-out infinite skippr-thinking-dot}.skippr\\:animate-spin{animation:var(--skippr-animate-spin)}.skippr\\:cursor-default{cursor:default}.skippr\\:cursor-grab{cursor:grab}.skippr\\:cursor-not-allowed{cursor:not-allowed}.skippr\\:cursor-pointer{cursor:pointer}.skippr\\:touch-none{touch-action:none}.skippr\\:resize-none{resize:none}.skippr\\:flex-col{flex-direction:column}.skippr\\:flex-col-reverse{flex-direction:column-reverse}.skippr\\:items-center{align-items:center}.skippr\\:items-end{align-items:flex-end}.skippr\\:items-start{align-items:flex-start}.skippr\\:justify-between{justify-content:space-between}.skippr\\:justify-center{justify-content:center}.skippr\\:justify-end{justify-content:flex-end}.skippr\\:justify-start{justify-content:flex-start}.skippr\\:gap-0\\.5{gap:calc(var(--skippr-spacing)*.5)}.skippr\\:gap-1{gap:calc(var(--skippr-spacing)*1)}.skippr\\:gap-1\\.5{gap:calc(var(--skippr-spacing)*1.5)}.skippr\\:gap-2{gap:calc(var(--skippr-spacing)*2)}.skippr\\:gap-2\\.5{gap:calc(var(--skippr-spacing)*2.5)}.skippr\\:gap-3{gap:calc(var(--skippr-spacing)*3)}.skippr\\:gap-\\[2px\\]{gap:2px}.skippr\\:gap-\\[3px\\]{gap:3px}:where(.skippr\\:space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.skippr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.skippr\\:overflow-hidden{overflow:hidden}.skippr\\:overflow-y-auto{overflow-y:auto}.skippr\\:rounded-2xl{border-radius:1.125rem}.skippr\\:rounded-\\[1rem\\]{border-radius:1rem}.skippr\\:rounded-\\[10px\\]{border-radius:10px}.skippr\\:rounded-\\[11px\\]{border-radius:11px}.skippr\\:rounded-\\[12px\\]{border-radius:12px}.skippr\\:rounded-\\[14px\\]{border-radius:14px}.skippr\\:rounded-\\[16px\\]{border-radius:16px}.skippr\\:rounded-\\[20px\\]{border-radius:20px}.skippr\\:rounded-full{border-radius:3.40282e38px}.skippr\\:rounded-lg{border-radius:.625rem}.skippr\\:rounded-md{border-radius:.5rem}.skippr\\:rounded-sm{border-radius:.375rem}.skippr\\:rounded-xl{border-radius:.875rem}.skippr\\:rounded-l-\\[18px\\]{border-top-left-radius:18px;border-bottom-left-radius:18px}.skippr\\:rounded-tl-md{border-top-left-radius:.5rem}.skippr\\:rounded-r-\\[18px\\]{border-top-right-radius:18px;border-bottom-right-radius:18px}.skippr\\:border{border-style:var(--tw-border-style);border-width:1px}.skippr\\:border-0{border-style:var(--tw-border-style);border-width:0}.skippr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.skippr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.skippr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.skippr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.skippr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.skippr\\:border-\\[\\#2bc0ae\\]{border-color:#2bc0ae}.skippr\\:border-border,.skippr\\:border-input{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-primary\\/20{border-color:oklab(29.9244% .0107414 -.0305411/.2)}.skippr\\:border-r-border{border-right-color:oklch(92.3% .003 48.717)}.skippr\\:border-l-border{border-left-color:oklch(92.3% .003 48.717)}.skippr\\:bg-\\[\\#2bc0ae\\]{background-color:#2bc0ae}.skippr\\:bg-\\[\\#2bc0ae\\]\\/50{background-color:oklab(72.9347% -.121518 -.00545585/.5)}.skippr\\:bg-amber-50{background-color:var(--skippr-color-amber-50)}.skippr\\:bg-amber-400{background-color:var(--skippr-color-amber-400)}.skippr\\:bg-background{background-color:oklch(100% 0 0)}.skippr\\:bg-black\\/\\[0\\.07\\]{background-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-black\\/\\[0\\.07\\]{background-color:color-mix(in oklab,var(--skippr-color-black)7.0%,transparent)}}.skippr\\:bg-bubble{background-color:#2d2b3d}.skippr\\:bg-bubble\\/95{background-color:oklab(29.9244% .0107414 -.0305411/.95)}.skippr\\:bg-card{background-color:oklch(100% 0 0)}.skippr\\:bg-current{background-color:currentColor}.skippr\\:bg-destructive{background-color:#d94f4f}.skippr\\:bg-emerald-400{background-color:var(--skippr-color-emerald-400)}.skippr\\:bg-foreground{background-color:oklch(14.7% .004 49.25)}.skippr\\:bg-green-100{background-color:var(--skippr-color-green-100)}.skippr\\:bg-launcher{background-color:#2d2d3f}.skippr\\:bg-muted-foreground\\/20{background-color:oklab(55.3% .00687528 .0110332/.2)}.skippr\\:bg-muted-foreground\\/40{background-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:bg-muted\\/50{background-color:oklab(97% -.000282743 .000959196/.5)}.skippr\\:bg-neutral-100{background-color:var(--skippr-color-neutral-100)}.skippr\\:bg-primary{background-color:#2d2b3d}.skippr\\:bg-primary-foreground\\/20{background-color:oklab(100% 0 5.96046e-8/.2)}.skippr\\:bg-primary\\/10{background-color:oklab(29.9244% .0107414 -.0305411/.1)}.skippr\\:bg-red-50{background-color:var(--skippr-color-red-50)}.skippr\\:bg-red-100{background-color:var(--skippr-color-red-100)}.skippr\\:bg-red-400{background-color:var(--skippr-color-red-400)}.skippr\\:bg-red-500{background-color:var(--skippr-color-red-500)}.skippr\\:bg-secondary{background-color:#ffdfb5}.skippr\\:bg-transparent{background-color:#0000}.skippr\\:bg-white,.skippr\\:bg-white\\/15{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/15{background-color:color-mix(in oklab,var(--skippr-color-white)15%,transparent)}}.skippr\\:fill-brand{fill:#2bc0ae}.skippr\\:fill-primary\\/30{fill:oklab(29.9244% .0107414 -.0305411/.3)}.skippr\\:stroke-black\\/15{stroke:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:stroke-black\\/15{stroke:color-mix(in oklab,var(--skippr-color-black)15%,transparent)}}.skippr\\:stroke-bubble{stroke:#2d2b3d}.skippr\\:p-0{padding:calc(var(--skippr-spacing)*0)}.skippr\\:p-0\\.5{padding:calc(var(--skippr-spacing)*.5)}.skippr\\:p-1\\.5{padding:calc(var(--skippr-spacing)*1.5)}.skippr\\:p-2{padding:calc(var(--skippr-spacing)*2)}.skippr\\:p-3{padding:calc(var(--skippr-spacing)*3)}.skippr\\:p-3\\.5{padding:calc(var(--skippr-spacing)*3.5)}.skippr\\:p-4{padding:calc(var(--skippr-spacing)*4)}.skippr\\:px-1{padding-inline:calc(var(--skippr-spacing)*1)}.skippr\\:px-1\\.5{padding-inline:calc(var(--skippr-spacing)*1.5)}.skippr\\:px-2{padding-inline:calc(var(--skippr-spacing)*2)}.skippr\\:px-2\\.5{padding-inline:calc(var(--skippr-spacing)*2.5)}.skippr\\:px-3{padding-inline:calc(var(--skippr-spacing)*3)}.skippr\\:px-3\\.5{padding-inline:calc(var(--skippr-spacing)*3.5)}.skippr\\:px-4{padding-inline:calc(var(--skippr-spacing)*4)}.skippr\\:px-6{padding-inline:calc(var(--skippr-spacing)*6)}.skippr\\:px-8{padding-inline:calc(var(--skippr-spacing)*8)}.skippr\\:py-0\\.5{padding-block:calc(var(--skippr-spacing)*.5)}.skippr\\:py-1{padding-block:calc(var(--skippr-spacing)*1)}.skippr\\:py-1\\.5{padding-block:calc(var(--skippr-spacing)*1.5)}.skippr\\:py-2{padding-block:calc(var(--skippr-spacing)*2)}.skippr\\:py-2\\.5{padding-block:calc(var(--skippr-spacing)*2.5)}.skippr\\:py-3{padding-block:calc(var(--skippr-spacing)*3)}.skippr\\:py-4{padding-block:calc(var(--skippr-spacing)*4)}.skippr\\:py-6{padding-block:calc(var(--skippr-spacing)*6)}.skippr\\:pt-1\\.5{padding-top:calc(var(--skippr-spacing)*1.5)}.skippr\\:pr-2\\.5{padding-right:calc(var(--skippr-spacing)*2.5)}.skippr\\:pr-3{padding-right:calc(var(--skippr-spacing)*3)}.skippr\\:pb-2{padding-bottom:calc(var(--skippr-spacing)*2)}.skippr\\:pl-1\\.5{padding-left:calc(var(--skippr-spacing)*1.5)}.skippr\\:pl-2\\.5{padding-left:calc(var(--skippr-spacing)*2.5)}.skippr\\:pl-3\\.5{padding-left:calc(var(--skippr-spacing)*3.5)}.skippr\\:text-center{text-align:center}.skippr\\:text-left{text-align:left}.skippr\\:font-mono{font-family:var(--skippr-font-mono)}.skippr\\:text-sm{font-size:var(--skippr-text-sm);line-height:var(--tw-leading,var(--skippr-text-sm--line-height))}.skippr\\:text-xs{font-size:var(--skippr-text-xs);line-height:var(--tw-leading,var(--skippr-text-xs--line-height))}.skippr\\:text-\\[10px\\]{font-size:10px}.skippr\\:text-\\[11px\\]{font-size:11px}.skippr\\:text-\\[13px\\]{font-size:13px}.skippr\\:leading-5{--tw-leading:calc(var(--skippr-spacing)*5);line-height:calc(var(--skippr-spacing)*5)}.skippr\\:leading-relaxed{--tw-leading:var(--skippr-leading-relaxed);line-height:var(--skippr-leading-relaxed)}.skippr\\:leading-snug{--tw-leading:var(--skippr-leading-snug);line-height:var(--skippr-leading-snug)}.skippr\\:leading-tight{--tw-leading:var(--skippr-leading-tight);line-height:var(--skippr-leading-tight)}.skippr\\:font-medium{--tw-font-weight:var(--skippr-font-weight-medium);font-weight:var(--skippr-font-weight-medium)}.skippr\\:font-semibold{--tw-font-weight:var(--skippr-font-weight-semibold);font-weight:var(--skippr-font-weight-semibold)}.skippr\\:whitespace-nowrap{white-space:nowrap}.skippr\\:text-\\[\\#2bc0ae\\]{color:#2bc0ae}.skippr\\:text-amber-700{color:var(--skippr-color-amber-700)}.skippr\\:text-amber-950{color:var(--skippr-color-amber-950)}.skippr\\:text-background{color:oklch(100% 0 0)}.skippr\\:text-black{color:var(--skippr-color-black)}.skippr\\:text-brand{color:#2bc0ae}.skippr\\:text-bubble{color:#2d2b3d}.skippr\\:text-chart-3{color:oklch(66.6% .179 58.318)}.skippr\\:text-destructive{color:#d94f4f}.skippr\\:text-foreground{color:oklch(14.7% .004 49.25)}.skippr\\:text-green-700{color:var(--skippr-color-green-700)}.skippr\\:text-muted-foreground{color:oklch(55.3% .013 58.071)}.skippr\\:text-muted-foreground\\/30{color:oklab(55.3% .00687528 .0110332/.3)}.skippr\\:text-muted-foreground\\/40{color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:text-muted-foreground\\/60{color:oklab(55.3% .00687528 .0110332/.6)}.skippr\\:text-muted-foreground\\/70{color:oklab(55.3% .00687528 .0110332/.7)}.skippr\\:text-neutral-500{color:var(--skippr-color-neutral-500)}.skippr\\:text-neutral-700{color:var(--skippr-color-neutral-700)}.skippr\\:text-primary{color:#2d2b3d}.skippr\\:text-primary-foreground{color:#fff}.skippr\\:text-primary-foreground\\/70{color:oklab(100% 0 5.96046e-8/.7)}.skippr\\:text-red-400{color:var(--skippr-color-red-400)}.skippr\\:text-red-600{color:var(--skippr-color-red-600)}.skippr\\:text-red-700{color:var(--skippr-color-red-700)}.skippr\\:text-secondary-foreground{color:#613700}.skippr\\:text-white,.skippr\\:text-white\\/60{color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:text-white\\/60{color:color-mix(in oklab,var(--skippr-color-white)60%,transparent)}}.skippr\\:capitalize{text-transform:capitalize}.skippr\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.skippr\\:line-through{text-decoration-line:line-through}.skippr\\:placeholder-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}.skippr\\:opacity-0{opacity:0}.skippr\\:opacity-40{opacity:.4}.skippr\\:opacity-75{opacity:.75}.skippr\\:opacity-100{opacity:1}.skippr\\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[-6px_8px_30px_rgba\\(15\\,18\\,26\\,0\\.32\\)\\]{--tw-shadow:-6px 8px 30px var(--tw-shadow-color,#0f121a52);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.12\\)\\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_14px_rgba\\(239\\,68\\,68\\,0\\.45\\)\\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#ef444473);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_16px_rgba\\(45\\,43\\,61\\,0\\.45\\)\\,0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#2d2b3d73),0 2px 4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(45\\,43\\,61\\,0\\.35\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#2d2b3d59);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_30px_rgba\\(0\\,0\\,0\\,0\\.16\\)\\,0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#00000029),0 4px 12px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_10px_32px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 10px 32px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-black\\/5{--tw-ring-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--skippr-color-black)5%,transparent)}}.skippr\\:ring-brand{--tw-ring-color:#2bc0ae}.skippr\\:ring-foreground\\/10{--tw-ring-color:oklab(14.7% .00261104 .00303026/.1)}.skippr\\:ring-white\\/30{--tw-ring-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-white\\/30{--tw-ring-color:color-mix(in oklab,var(--skippr-color-white)30%,transparent)}}.skippr\\:ring-offset-background{--tw-ring-offset-color:oklch(100% 0 0)}.skippr\\:drop-shadow-\\[0_2px_5px_rgba\\(0\\,0\\,0\\,0\\.4\\)\\]{--tw-drop-shadow-size:drop-shadow(0 2px 5px var(--tw-drop-shadow-color,#0006));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.skippr\\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--skippr-blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.skippr\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[opacity\\,transform\\,height\\]{transition-property:opacity,transform,height;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[width\\,margin\\]{transition-property:width,margin;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:duration-75{--tw-duration:75ms;transition-duration:75ms}.skippr\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.skippr\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.skippr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.skippr\\:duration-\\[400ms\\]{--tw-duration:.4s;transition-duration:.4s}.skippr\\:ease-\\[cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{--tw-ease:cubic-bezier(.22,1,.36,1);transition-timing-function:cubic-bezier(.22,1,.36,1)}.skippr\\:ease-in-out{--tw-ease:var(--skippr-ease-in-out);transition-timing-function:var(--skippr-ease-in-out)}.skippr\\:ease-out{--tw-ease:var(--skippr-ease-out);transition-timing-function:var(--skippr-ease-out)}.skippr\\:outline-none{--tw-outline-style:none;outline-style:none}.skippr\\:select-none{-webkit-user-select:none;user-select:none}.skippr\\:\\[animation-delay\\:0ms\\]{animation-delay:0s}.skippr\\:\\[animation-delay\\:150ms\\]{animation-delay:.15s}.skippr\\:\\[animation-delay\\:200ms\\]{animation-delay:.2s}.skippr\\:\\[animation-delay\\:300ms\\]{animation-delay:.3s}.skippr\\:\\[animation-delay\\:400ms\\]{animation-delay:.4s}.skippr\\:\\[overflow-anchor\\:none\\]{overflow-anchor:none}.skippr\\:group-focus-within\\:scale-100:is(:where(.skippr\\:group):focus-within *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:group-focus-within\\:opacity-100:is(:where(.skippr\\:group):focus-within *){opacity:1}@media (hover:hover){.skippr\\:group-hover\\:scale-100:is(:where(.skippr\\:group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:group-hover\\:text-red-300:is(:where(.skippr\\:group):hover *){color:var(--skippr-color-red-300)}.skippr\\:group-hover\\:text-white\\/80:is(:where(.skippr\\:group):hover *){color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:group-hover\\:text-white\\/80:is(:where(.skippr\\:group):hover *){color:color-mix(in oklab,var(--skippr-color-white)80%,transparent)}}.skippr\\:group-hover\\:opacity-100:is(:where(.skippr\\:group):hover *){opacity:1}}.skippr\\:placeholder\\:text-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}@media (hover:hover){.skippr\\:hover\\:-translate-y-0\\.5:hover{--tw-translate-y:calc(var(--skippr-spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:hover\\:bg-\\[\\#3a384b\\]:hover{background-color:#3a384b}.skippr\\:hover\\:bg-accent:hover{background-color:#e7e5e4}.skippr\\:hover\\:bg-amber-100:hover{background-color:var(--skippr-color-amber-100)}.skippr\\:hover\\:bg-bubble:hover{background-color:#2d2b3d}.skippr\\:hover\\:bg-destructive\\/90:hover{background-color:oklab(61.4357% .15892 .0698893/.9)}.skippr\\:hover\\:bg-green-200:hover{background-color:var(--skippr-color-green-200)}.skippr\\:hover\\:bg-muted:hover{background-color:oklch(97% .001 106.424)}.skippr\\:hover\\:bg-neutral-100:hover{background-color:var(--skippr-color-neutral-100)}.skippr\\:hover\\:bg-neutral-200:hover{background-color:var(--skippr-color-neutral-200)}.skippr\\:hover\\:bg-primary\\/90:hover{background-color:oklab(29.9244% .0107414 -.0305411/.9)}.skippr\\:hover\\:bg-red-200:hover{background-color:var(--skippr-color-red-200)}.skippr\\:hover\\:bg-red-600:hover{background-color:var(--skippr-color-red-600)}.skippr\\:hover\\:bg-secondary\\/80:hover{background-color:oklab(91.9963% .0175391 .0626889/.8)}.skippr\\:hover\\:bg-white\\/10:hover{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:hover\\:bg-white\\/10:hover{background-color:color-mix(in oklab,var(--skippr-color-white)10%,transparent)}}.skippr\\:hover\\:text-accent-foreground:hover{color:oklch(21.6% .006 56.043)}.skippr\\:hover\\:text-foreground:hover{color:oklch(14.7% .004 49.25)}.skippr\\:hover\\:text-primary-foreground:hover{color:#fff}.skippr\\:hover\\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.skippr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:focus-visible\\:ring-brand:focus-visible{--tw-ring-color:#2bc0ae}.skippr\\:focus-visible\\:ring-bubble\\/60:focus-visible{--tw-ring-color:oklab(29.9244% .0107414 -.0305411/.6)}.skippr\\:focus-visible\\:ring-ring:focus-visible{--tw-ring-color:oklch(70.9% .01 56.259)}.skippr\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.skippr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.skippr\\:active\\:translate-y-0:active{--tw-translate-y:calc(var(--skippr-spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.skippr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.skippr\\:disabled\\:opacity-50:disabled{opacity:.5}.skippr\\:disabled\\:opacity-60:disabled{opacity:.6}@media (prefers-reduced-motion:reduce){.skippr\\:motion-reduce\\:hidden{display:none}.skippr\\:motion-reduce\\:animate-none{animation:none}}.skippr\\:\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.skippr\\:\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.skippr\\:\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}}@keyframes skippr-tap{0%{transform:scale(1)}45%{transform:scale(.7)}to{transform:scale(1)}}@keyframes skippr-press{0%{transform:scale(1)}55%{transform:scale(1)}85%{transform:scale(.68)}to{transform:scale(1)}}@keyframes skippr-cursor-pop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes skippr-click-ping{0%{opacity:.9;transform:translate(-50%,-50%)scale(.4)}to{opacity:0;transform:translate(-50%,-50%)scale(2.4)}}@keyframes skippr-tab-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-speak{0%,to{opacity:.6;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-thinking-dot{0%,80%,to{opacity:.2;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}@keyframes skippr-pulse-ring{0%,to{box-shadow:0 0 #2d2b3d66}50%{box-shadow:0 0 0 10px #2d2b3d00}}@keyframes skippr-rec-ring{0%{box-shadow:0 0 #2bc0ae8c}70%{box-shadow:0 0 0 11px #2bc0ae00}to{box-shadow:0 0 #2bc0ae00}}@keyframes skippr-annotation-pulse{0%,to{box-shadow:0 0 #2bc0ae80}50%{box-shadow:0 0 0 6px #2bc0ae00}}@keyframes skippr-speak-ripple{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(1.8)}}@keyframes skippr-bar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes skippr-breathe{0%,to{opacity:.85;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}@keyframes skippr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-wave{0%,to{opacity:.4;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-bubble-in{0%{opacity:0;transform:translateY(12px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-tip-in{0%{opacity:0;transform:translateY(14px)scale(.96)}60%{opacity:1;transform:translateY(-2px)scale(1.01)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-pill-content{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@keyframes skippr-banner-look{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}@keyframes skippr-finger-tap{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(2px)rotate(-6deg)}}@keyframes skippr-toolset-pop{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes skippr-stage-fade{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes skippr-agent-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}@keyframes skippr-orb-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}.skippr-no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.skippr-no-scrollbar::-webkit-scrollbar{display:none}:host{color:var(--color-foreground)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}`;
|
|
4806
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--skippr-font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--skippr-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--skippr-color-red-50:oklch(97.1% .013 17.38);--skippr-color-red-100:oklch(93.6% .032 17.717);--skippr-color-red-200:oklch(88.5% .062 18.334);--skippr-color-red-300:oklch(80.8% .114 19.571);--skippr-color-red-400:oklch(70.4% .191 22.216);--skippr-color-red-500:oklch(63.7% .237 25.331);--skippr-color-red-600:oklch(57.7% .245 27.325);--skippr-color-red-700:oklch(50.5% .213 27.518);--skippr-color-amber-50:oklch(98.7% .022 95.277);--skippr-color-amber-100:oklch(96.2% .059 95.617);--skippr-color-amber-400:oklch(82.8% .189 84.429);--skippr-color-amber-700:oklch(55.5% .163 48.998);--skippr-color-amber-950:oklch(27.9% .077 45.635);--skippr-color-green-100:oklch(96.2% .044 156.743);--skippr-color-green-200:oklch(92.5% .084 155.995);--skippr-color-green-700:oklch(52.7% .154 150.069);--skippr-color-emerald-400:oklch(76.5% .177 163.223);--skippr-color-neutral-100:oklch(97% 0 0);--skippr-color-neutral-200:oklch(92.2% 0 0);--skippr-color-neutral-500:oklch(55.6% 0 0);--skippr-color-neutral-700:oklch(37.1% 0 0);--skippr-color-black:#000;--skippr-color-white:#fff;--skippr-spacing:.25rem;--skippr-text-xs:.75rem;--skippr-text-xs--line-height:calc(1/.75);--skippr-text-sm:.875rem;--skippr-text-sm--line-height:calc(1.25/.875);--skippr-font-weight-medium:500;--skippr-font-weight-semibold:600;--skippr-leading-tight:1.25;--skippr-leading-snug:1.375;--skippr-leading-relaxed:1.625;--skippr-ease-out:cubic-bezier(0,0,.2,1);--skippr-ease-in-out:cubic-bezier(.4,0,.2,1);--skippr-animate-spin:spin 1s linear infinite;--skippr-animate-ping:ping 1s cubic-bezier(0,0,.2,1)infinite;--skippr-animate-bounce:bounce 1s infinite;--skippr-blur-sm:8px;--skippr-default-transition-duration:.15s;--skippr-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--skippr-default-font-family:var(--skippr-font-sans);--skippr-default-mono-font-family:var(--skippr-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--skippr-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--skippr-default-font-feature-settings,normal);font-variation-settings:var(--skippr-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--skippr-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--skippr-default-mono-font-feature-settings,normal);font-variation-settings:var(--skippr-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.skippr\\:pointer-events-none{pointer-events:none}.skippr\\:absolute{position:absolute}.skippr\\:fixed{position:fixed}.skippr\\:relative{position:relative}.skippr\\:sticky{position:sticky}.skippr\\:inset-0{inset:calc(var(--skippr-spacing)*0)}.skippr\\:inset-y-0{inset-block:calc(var(--skippr-spacing)*0)}.skippr\\:top-0{top:calc(var(--skippr-spacing)*0)}.skippr\\:top-1\\/2{top:50%}.skippr\\:top-full{top:100%}.skippr\\:-right-8{right:calc(var(--skippr-spacing)*-8)}.skippr\\:right-0{right:calc(var(--skippr-spacing)*0)}.skippr\\:right-3{right:calc(var(--skippr-spacing)*3)}.skippr\\:right-5{right:calc(var(--skippr-spacing)*5)}.skippr\\:right-6{right:calc(var(--skippr-spacing)*6)}.skippr\\:-bottom-1{bottom:calc(var(--skippr-spacing)*-1)}.skippr\\:-bottom-9{bottom:calc(var(--skippr-spacing)*-9)}.skippr\\:bottom-3{bottom:calc(var(--skippr-spacing)*3)}.skippr\\:bottom-20{bottom:calc(var(--skippr-spacing)*20)}.skippr\\:bottom-full{bottom:100%}.skippr\\:-left-8{left:calc(var(--skippr-spacing)*-8)}.skippr\\:left-0{left:calc(var(--skippr-spacing)*0)}.skippr\\:left-1\\/2{left:50%}.skippr\\:left-2{left:calc(var(--skippr-spacing)*2)}.skippr\\:left-3{left:calc(var(--skippr-spacing)*3)}.skippr\\:left-5{left:calc(var(--skippr-spacing)*5)}.skippr\\:left-6{left:calc(var(--skippr-spacing)*6)}.skippr\\:z-10{z-index:10}.skippr\\:z-20{z-index:20}.skippr\\:z-\\[9998\\]{z-index:9998}.skippr\\:z-\\[9999\\]{z-index:9999}.skippr\\:z-\\[10000\\]{z-index:10000}.skippr\\:order-first{order:-9999}.skippr\\:order-last{order:9999}.skippr\\:mx-auto{margin-inline:auto}.skippr\\:-mt-\\[5px\\]{margin-top:-5px}.skippr\\:-mt-\\[27px\\]{margin-top:-27px}.skippr\\:mt-0\\.5{margin-top:calc(var(--skippr-spacing)*.5)}.skippr\\:mt-1{margin-top:calc(var(--skippr-spacing)*1)}.skippr\\:mt-1\\.5{margin-top:calc(var(--skippr-spacing)*1.5)}.skippr\\:mt-2{margin-top:calc(var(--skippr-spacing)*2)}.skippr\\:mt-3{margin-top:calc(var(--skippr-spacing)*3)}.skippr\\:mt-3\\.5{margin-top:calc(var(--skippr-spacing)*3.5)}.skippr\\:mr-7{margin-right:calc(var(--skippr-spacing)*7)}.skippr\\:-mb-\\[5px\\]{margin-bottom:-5px}.skippr\\:mb-1\\.5{margin-bottom:calc(var(--skippr-spacing)*1.5)}.skippr\\:mb-2{margin-bottom:calc(var(--skippr-spacing)*2)}.skippr\\:mb-3{margin-bottom:calc(var(--skippr-spacing)*3)}.skippr\\:mb-4{margin-bottom:calc(var(--skippr-spacing)*4)}.skippr\\:ml-0\\.5{margin-left:calc(var(--skippr-spacing)*.5)}.skippr\\:ml-1{margin-left:calc(var(--skippr-spacing)*1)}.skippr\\:ml-7{margin-left:calc(var(--skippr-spacing)*7)}.skippr\\:flex{display:flex}.skippr\\:hidden{display:none}.skippr\\:inline-flex{display:inline-flex}.skippr\\:size-1{width:calc(var(--skippr-spacing)*1);height:calc(var(--skippr-spacing)*1)}.skippr\\:size-1\\.5{width:calc(var(--skippr-spacing)*1.5);height:calc(var(--skippr-spacing)*1.5)}.skippr\\:size-2{width:calc(var(--skippr-spacing)*2);height:calc(var(--skippr-spacing)*2)}.skippr\\:size-2\\.5{width:calc(var(--skippr-spacing)*2.5);height:calc(var(--skippr-spacing)*2.5)}.skippr\\:size-3{width:calc(var(--skippr-spacing)*3);height:calc(var(--skippr-spacing)*3)}.skippr\\:size-3\\.5{width:calc(var(--skippr-spacing)*3.5);height:calc(var(--skippr-spacing)*3.5)}.skippr\\:size-4{width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}.skippr\\:size-5{width:calc(var(--skippr-spacing)*5);height:calc(var(--skippr-spacing)*5)}.skippr\\:size-6{width:calc(var(--skippr-spacing)*6);height:calc(var(--skippr-spacing)*6)}.skippr\\:size-7{width:calc(var(--skippr-spacing)*7);height:calc(var(--skippr-spacing)*7)}.skippr\\:size-8{width:calc(var(--skippr-spacing)*8);height:calc(var(--skippr-spacing)*8)}.skippr\\:size-9{width:calc(var(--skippr-spacing)*9);height:calc(var(--skippr-spacing)*9)}.skippr\\:size-10{width:calc(var(--skippr-spacing)*10);height:calc(var(--skippr-spacing)*10)}.skippr\\:size-12{width:calc(var(--skippr-spacing)*12);height:calc(var(--skippr-spacing)*12)}.skippr\\:size-\\[5px\\]{width:5px;height:5px}.skippr\\:size-\\[38px\\]{width:38px;height:38px}.skippr\\:size-full{width:100%;height:100%}.skippr\\:h-0{height:calc(var(--skippr-spacing)*0)}.skippr\\:h-0\\.5{height:calc(var(--skippr-spacing)*.5)}.skippr\\:h-1{height:calc(var(--skippr-spacing)*1)}.skippr\\:h-1\\.5{height:calc(var(--skippr-spacing)*1.5)}.skippr\\:h-2{height:calc(var(--skippr-spacing)*2)}.skippr\\:h-3{height:calc(var(--skippr-spacing)*3)}.skippr\\:h-3\\.5{height:calc(var(--skippr-spacing)*3.5)}.skippr\\:h-4{height:calc(var(--skippr-spacing)*4)}.skippr\\:h-5{height:calc(var(--skippr-spacing)*5)}.skippr\\:h-6{height:calc(var(--skippr-spacing)*6)}.skippr\\:h-7{height:calc(var(--skippr-spacing)*7)}.skippr\\:h-8{height:calc(var(--skippr-spacing)*8)}.skippr\\:h-9{height:calc(var(--skippr-spacing)*9)}.skippr\\:h-10{height:calc(var(--skippr-spacing)*10)}.skippr\\:h-\\[18\\.5px\\]{height:18.5px}.skippr\\:h-\\[36px\\]{height:36px}.skippr\\:h-\\[38px\\]{height:38px}.skippr\\:h-\\[48px\\]{height:48px}.skippr\\:h-\\[54px\\]{height:54px}.skippr\\:h-full{height:100%}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.skippr\\:min-h-11{min-height:calc(var(--skippr-spacing)*11)}.skippr\\:w-0{width:calc(var(--skippr-spacing)*0)}.skippr\\:w-3\\.5{width:calc(var(--skippr-spacing)*3.5)}.skippr\\:w-4{width:calc(var(--skippr-spacing)*4)}.skippr\\:w-5{width:calc(var(--skippr-spacing)*5)}.skippr\\:w-6{width:calc(var(--skippr-spacing)*6)}.skippr\\:w-7{width:calc(var(--skippr-spacing)*7)}.skippr\\:w-8{width:calc(var(--skippr-spacing)*8)}.skippr\\:w-10{width:calc(var(--skippr-spacing)*10)}.skippr\\:w-40{width:calc(var(--skippr-spacing)*40)}.skippr\\:w-\\[2px\\]{width:2px}.skippr\\:w-\\[3px\\]{width:3px}.skippr\\:w-\\[15\\.4px\\]{width:15.4px}.skippr\\:w-\\[36px\\]{width:36px}.skippr\\:w-\\[38px\\]{width:38px}.skippr\\:w-\\[50px\\]{width:50px}.skippr\\:w-fit{width:fit-content}.skippr\\:w-full{width:100%}.skippr\\:max-w-64{max-width:calc(var(--skippr-spacing)*64)}.skippr\\:max-w-72{max-width:calc(var(--skippr-spacing)*72)}.skippr\\:max-w-\\[80\\%\\]{max-width:80%}.skippr\\:max-w-\\[280px\\]{max-width:280px}.skippr\\:min-w-0{min-width:calc(var(--skippr-spacing)*0)}.skippr\\:min-w-11{min-width:calc(var(--skippr-spacing)*11)}.skippr\\:flex-1{flex:1}.skippr\\:shrink-0{flex-shrink:0}.skippr\\:origin-bottom-left{transform-origin:0 100%}.skippr\\:origin-bottom-right{transform-origin:100% 100%}.skippr\\:origin-center{transform-origin:50%}.skippr\\:origin-left{transform-origin:0}.skippr\\:origin-right{transform-origin:100%}.skippr\\:origin-top-left{transform-origin:0 0}.skippr\\:origin-top-right{transform-origin:100% 0}.skippr\\:-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:-translate-x-3{--tw-translate-x:calc(var(--skippr-spacing)*-3);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:-translate-x-7{--tw-translate-x:calc(var(--skippr-spacing)*-7);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:translate-x-3{--tw-translate-x:calc(var(--skippr-spacing)*3);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:translate-x-7{--tw-translate-x:calc(var(--skippr-spacing)*7);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:scale-\\[0\\.94\\]{scale:.94}.skippr\\:-rotate-90{rotate:-90deg}.skippr\\:rotate-45{rotate:45deg}.skippr\\:rotate-\\[225deg\\]{rotate:225deg}.skippr\\:\\[animation\\:skippr-agent-in_200ms_ease-out\\]{animation:.2s ease-out skippr-agent-in}.skippr\\:\\[animation\\:skippr-agent-in_200ms_ease-out_240ms_both\\]{animation:.2s ease-out .24s both skippr-agent-in}.skippr\\:\\[animation\\:skippr-banner-look_2\\.4s_ease-in-out_infinite\\]{animation:2.4s ease-in-out infinite skippr-banner-look}.skippr\\:\\[animation\\:skippr-finger-tap_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-finger-tap}.skippr\\:\\[animation\\:skippr-orb-in_320ms_cubic-bezier\\(0\\.34\\,1\\.3\\,0\\.64\\,1\\)\\]{animation:.32s cubic-bezier(.34,1.3,.64,1) skippr-orb-in}.skippr\\:\\[animation\\:skippr-stage-fade_240ms_ease-out\\]{animation:.24s ease-out skippr-stage-fade}.skippr\\:\\[animation\\:skippr-tip-in_360ms_cubic-bezier\\(0\\.34\\,1\\.3\\,0\\.64\\,1\\)_backwards\\]{animation:.36s cubic-bezier(.34,1.3,.64,1) backwards skippr-tip-in}.skippr\\:\\[animation\\:skippr-toolset-pop_280ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.28s cubic-bezier(.22,1,.36,1) skippr-toolset-pop}.skippr\\:\\[animation\\:skippr-toolset-pop_440ms_cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{animation:.44s cubic-bezier(.22,1,.36,1) skippr-toolset-pop}.skippr\\:animate-\\[skippr-banner-look_2\\.4s_ease-in-out_infinite\\]{animation:2.4s ease-in-out infinite skippr-banner-look}.skippr\\:animate-\\[skippr-bubble-in_0\\.28s_ease-out\\]{animation:.28s ease-out skippr-bubble-in}.skippr\\:animate-\\[skippr-fade-in_0\\.3s_ease-out\\]{animation:.3s ease-out skippr-fade-in}.skippr\\:animate-\\[skippr-pill-content_0\\.22s_ease-out\\]{animation:.22s ease-out skippr-pill-content}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.3s_infinite\\]{animation:1.1s ease-in-out .3s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.6s_infinite\\]{animation:1.1s ease-in-out .6s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.15s_infinite\\]{animation:1.1s ease-in-out .15s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_0\\.45s_infinite\\]{animation:1.1s ease-in-out .45s infinite skippr-speak}.skippr\\:animate-\\[skippr-speak_1\\.1s_ease-in-out_infinite\\]{animation:1.1s ease-in-out infinite skippr-speak}.skippr\\:animate-bounce{animation:var(--skippr-animate-bounce)}.skippr\\:animate-ping{animation:var(--skippr-animate-ping)}.skippr\\:animate-skippr-annotation-pulse{animation:1.8s ease-in-out infinite skippr-annotation-pulse}.skippr\\:animate-skippr-click-ping{animation:.5s ease-out forwards skippr-click-ping}.skippr\\:animate-skippr-cursor-pop{animation:.22s ease-out skippr-cursor-pop}.skippr\\:animate-skippr-press{animation:.5s ease-in-out skippr-press}.skippr\\:animate-skippr-ptt-transmit{animation:1.4s ease-out infinite skippr-ptt-transmit}.skippr\\:animate-skippr-rec-ring{animation:2s ease-out infinite skippr-rec-ring}.skippr\\:animate-skippr-tab-fade{animation:.2s ease-out skippr-tab-fade}.skippr\\:animate-skippr-thinking-dot{animation:1.2s ease-in-out infinite skippr-thinking-dot}.skippr\\:animate-spin{animation:var(--skippr-animate-spin)}.skippr\\:cursor-default{cursor:default}.skippr\\:cursor-grab{cursor:grab}.skippr\\:cursor-not-allowed{cursor:not-allowed}.skippr\\:cursor-pointer{cursor:pointer}.skippr\\:touch-none{touch-action:none}.skippr\\:resize-none{resize:none}.skippr\\:flex-col{flex-direction:column}.skippr\\:flex-col-reverse{flex-direction:column-reverse}.skippr\\:items-center{align-items:center}.skippr\\:items-end{align-items:flex-end}.skippr\\:items-start{align-items:flex-start}.skippr\\:justify-between{justify-content:space-between}.skippr\\:justify-center{justify-content:center}.skippr\\:justify-end{justify-content:flex-end}.skippr\\:justify-start{justify-content:flex-start}.skippr\\:gap-0\\.5{gap:calc(var(--skippr-spacing)*.5)}.skippr\\:gap-1{gap:calc(var(--skippr-spacing)*1)}.skippr\\:gap-1\\.5{gap:calc(var(--skippr-spacing)*1.5)}.skippr\\:gap-2{gap:calc(var(--skippr-spacing)*2)}.skippr\\:gap-2\\.5{gap:calc(var(--skippr-spacing)*2.5)}.skippr\\:gap-3{gap:calc(var(--skippr-spacing)*3)}.skippr\\:gap-\\[2px\\]{gap:2px}.skippr\\:gap-\\[3px\\]{gap:3px}:where(.skippr\\:space-y-0\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.skippr\\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--skippr-spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--skippr-spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.skippr\\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.skippr\\:overflow-hidden{overflow:hidden}.skippr\\:overflow-y-auto{overflow-y:auto}.skippr\\:rounded{border-radius:.25rem}.skippr\\:rounded-2xl{border-radius:1.125rem}.skippr\\:rounded-\\[1rem\\]{border-radius:1rem}.skippr\\:rounded-\\[10px\\]{border-radius:10px}.skippr\\:rounded-\\[11px\\]{border-radius:11px}.skippr\\:rounded-\\[12px\\]{border-radius:12px}.skippr\\:rounded-\\[14px\\]{border-radius:14px}.skippr\\:rounded-\\[16px\\]{border-radius:16px}.skippr\\:rounded-\\[20px\\]{border-radius:20px}.skippr\\:rounded-full{border-radius:3.40282e38px}.skippr\\:rounded-lg{border-radius:.625rem}.skippr\\:rounded-md{border-radius:.5rem}.skippr\\:rounded-sm{border-radius:.375rem}.skippr\\:rounded-xl{border-radius:.875rem}.skippr\\:rounded-l-\\[18px\\]{border-top-left-radius:18px;border-bottom-left-radius:18px}.skippr\\:rounded-tl-md{border-top-left-radius:.5rem}.skippr\\:rounded-r-\\[18px\\]{border-top-right-radius:18px;border-bottom-right-radius:18px}.skippr\\:border{border-style:var(--tw-border-style);border-width:1px}.skippr\\:border-0{border-style:var(--tw-border-style);border-width:0}.skippr\\:border-2{border-style:var(--tw-border-style);border-width:2px}.skippr\\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.skippr\\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.skippr\\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.skippr\\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.skippr\\:border-\\[\\#2bc0ae\\]{border-color:#2bc0ae}.skippr\\:border-black\\/25{border-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:border-black\\/25{border-color:color-mix(in oklab,var(--skippr-color-black)25%,transparent)}}.skippr\\:border-border,.skippr\\:border-input{border-color:oklch(92.3% .003 48.717)}.skippr\\:border-primary\\/20{border-color:oklab(29.9244% .0107414 -.0305411/.2)}.skippr\\:border-r-border{border-right-color:oklch(92.3% .003 48.717)}.skippr\\:border-l-border{border-left-color:oklch(92.3% .003 48.717)}.skippr\\:bg-\\[\\#2bc0ae\\]{background-color:#2bc0ae}.skippr\\:bg-\\[\\#2bc0ae\\]\\/50{background-color:oklab(72.9347% -.121518 -.00545585/.5)}.skippr\\:bg-\\[\\#f4ecd8\\]{background-color:#f4ecd8}.skippr\\:bg-amber-50{background-color:var(--skippr-color-amber-50)}.skippr\\:bg-amber-400{background-color:var(--skippr-color-amber-400)}.skippr\\:bg-background{background-color:oklch(100% 0 0)}.skippr\\:bg-black\\/\\[0\\.07\\]{background-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-black\\/\\[0\\.07\\]{background-color:color-mix(in oklab,var(--skippr-color-black)7.0%,transparent)}}.skippr\\:bg-bubble{background-color:#2d2b3d}.skippr\\:bg-bubble\\/95{background-color:oklab(29.9244% .0107414 -.0305411/.95)}.skippr\\:bg-card{background-color:oklch(100% 0 0)}.skippr\\:bg-current{background-color:currentColor}.skippr\\:bg-destructive{background-color:#d94f4f}.skippr\\:bg-emerald-400{background-color:var(--skippr-color-emerald-400)}.skippr\\:bg-foreground{background-color:oklch(14.7% .004 49.25)}.skippr\\:bg-green-100{background-color:var(--skippr-color-green-100)}.skippr\\:bg-launcher{background-color:#2d2d3f}.skippr\\:bg-muted-foreground\\/20{background-color:oklab(55.3% .00687528 .0110332/.2)}.skippr\\:bg-muted-foreground\\/40{background-color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:bg-muted\\/50{background-color:oklab(97% -.000282743 .000959196/.5)}.skippr\\:bg-neutral-100{background-color:var(--skippr-color-neutral-100)}.skippr\\:bg-primary{background-color:#2d2b3d}.skippr\\:bg-primary-foreground\\/20{background-color:oklab(100% 0 5.96046e-8/.2)}.skippr\\:bg-primary\\/10{background-color:oklab(29.9244% .0107414 -.0305411/.1)}.skippr\\:bg-red-50{background-color:var(--skippr-color-red-50)}.skippr\\:bg-red-100{background-color:var(--skippr-color-red-100)}.skippr\\:bg-red-400{background-color:var(--skippr-color-red-400)}.skippr\\:bg-red-500{background-color:var(--skippr-color-red-500)}.skippr\\:bg-secondary{background-color:#ffdfb5}.skippr\\:bg-transparent{background-color:#0000}.skippr\\:bg-white,.skippr\\:bg-white\\/15{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/15{background-color:color-mix(in oklab,var(--skippr-color-white)15%,transparent)}}.skippr\\:bg-white\\/70{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:bg-white\\/70{background-color:color-mix(in oklab,var(--skippr-color-white)70%,transparent)}}.skippr\\:fill-brand{fill:#2bc0ae}.skippr\\:fill-primary\\/30{fill:oklab(29.9244% .0107414 -.0305411/.3)}.skippr\\:stroke-black\\/15{stroke:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:stroke-black\\/15{stroke:color-mix(in oklab,var(--skippr-color-black)15%,transparent)}}.skippr\\:stroke-bubble{stroke:#2d2b3d}.skippr\\:p-0{padding:calc(var(--skippr-spacing)*0)}.skippr\\:p-0\\.5{padding:calc(var(--skippr-spacing)*.5)}.skippr\\:p-1\\.5{padding:calc(var(--skippr-spacing)*1.5)}.skippr\\:p-2{padding:calc(var(--skippr-spacing)*2)}.skippr\\:p-3{padding:calc(var(--skippr-spacing)*3)}.skippr\\:p-3\\.5{padding:calc(var(--skippr-spacing)*3.5)}.skippr\\:p-4{padding:calc(var(--skippr-spacing)*4)}.skippr\\:px-1{padding-inline:calc(var(--skippr-spacing)*1)}.skippr\\:px-1\\.5{padding-inline:calc(var(--skippr-spacing)*1.5)}.skippr\\:px-2{padding-inline:calc(var(--skippr-spacing)*2)}.skippr\\:px-2\\.5{padding-inline:calc(var(--skippr-spacing)*2.5)}.skippr\\:px-3{padding-inline:calc(var(--skippr-spacing)*3)}.skippr\\:px-3\\.5{padding-inline:calc(var(--skippr-spacing)*3.5)}.skippr\\:px-4{padding-inline:calc(var(--skippr-spacing)*4)}.skippr\\:px-6{padding-inline:calc(var(--skippr-spacing)*6)}.skippr\\:px-8{padding-inline:calc(var(--skippr-spacing)*8)}.skippr\\:py-0\\.5{padding-block:calc(var(--skippr-spacing)*.5)}.skippr\\:py-1{padding-block:calc(var(--skippr-spacing)*1)}.skippr\\:py-1\\.5{padding-block:calc(var(--skippr-spacing)*1.5)}.skippr\\:py-2{padding-block:calc(var(--skippr-spacing)*2)}.skippr\\:py-2\\.5{padding-block:calc(var(--skippr-spacing)*2.5)}.skippr\\:py-3{padding-block:calc(var(--skippr-spacing)*3)}.skippr\\:py-4{padding-block:calc(var(--skippr-spacing)*4)}.skippr\\:py-6{padding-block:calc(var(--skippr-spacing)*6)}.skippr\\:pt-1\\.5{padding-top:calc(var(--skippr-spacing)*1.5)}.skippr\\:pr-2\\.5{padding-right:calc(var(--skippr-spacing)*2.5)}.skippr\\:pr-3{padding-right:calc(var(--skippr-spacing)*3)}.skippr\\:pb-2{padding-bottom:calc(var(--skippr-spacing)*2)}.skippr\\:pl-1\\.5{padding-left:calc(var(--skippr-spacing)*1.5)}.skippr\\:pl-2\\.5{padding-left:calc(var(--skippr-spacing)*2.5)}.skippr\\:pl-3\\.5{padding-left:calc(var(--skippr-spacing)*3.5)}.skippr\\:text-center{text-align:center}.skippr\\:text-left{text-align:left}.skippr\\:font-mono{font-family:var(--skippr-font-mono)}.skippr\\:text-sm{font-size:var(--skippr-text-sm);line-height:var(--tw-leading,var(--skippr-text-sm--line-height))}.skippr\\:text-xs{font-size:var(--skippr-text-xs);line-height:var(--tw-leading,var(--skippr-text-xs--line-height))}.skippr\\:text-\\[10px\\]{font-size:10px}.skippr\\:text-\\[11px\\]{font-size:11px}.skippr\\:text-\\[13px\\]{font-size:13px}.skippr\\:leading-5{--tw-leading:calc(var(--skippr-spacing)*5);line-height:calc(var(--skippr-spacing)*5)}.skippr\\:leading-none{--tw-leading:1;line-height:1}.skippr\\:leading-relaxed{--tw-leading:var(--skippr-leading-relaxed);line-height:var(--skippr-leading-relaxed)}.skippr\\:leading-snug{--tw-leading:var(--skippr-leading-snug);line-height:var(--skippr-leading-snug)}.skippr\\:leading-tight{--tw-leading:var(--skippr-leading-tight);line-height:var(--skippr-leading-tight)}.skippr\\:font-medium{--tw-font-weight:var(--skippr-font-weight-medium);font-weight:var(--skippr-font-weight-medium)}.skippr\\:font-semibold{--tw-font-weight:var(--skippr-font-weight-semibold);font-weight:var(--skippr-font-weight-semibold)}.skippr\\:whitespace-nowrap{white-space:nowrap}.skippr\\:text-\\[\\#2bc0ae\\]{color:#2bc0ae}.skippr\\:text-amber-700{color:var(--skippr-color-amber-700)}.skippr\\:text-amber-950{color:var(--skippr-color-amber-950)}.skippr\\:text-background{color:oklch(100% 0 0)}.skippr\\:text-black,.skippr\\:text-black\\/40{color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:text-black\\/40{color:color-mix(in oklab,var(--skippr-color-black)40%,transparent)}}.skippr\\:text-brand{color:#2bc0ae}.skippr\\:text-bubble{color:#2d2b3d}.skippr\\:text-chart-3{color:oklch(66.6% .179 58.318)}.skippr\\:text-destructive{color:#d94f4f}.skippr\\:text-foreground{color:oklch(14.7% .004 49.25)}.skippr\\:text-green-700{color:var(--skippr-color-green-700)}.skippr\\:text-muted-foreground{color:oklch(55.3% .013 58.071)}.skippr\\:text-muted-foreground\\/30{color:oklab(55.3% .00687528 .0110332/.3)}.skippr\\:text-muted-foreground\\/40{color:oklab(55.3% .00687528 .0110332/.4)}.skippr\\:text-muted-foreground\\/60{color:oklab(55.3% .00687528 .0110332/.6)}.skippr\\:text-muted-foreground\\/70{color:oklab(55.3% .00687528 .0110332/.7)}.skippr\\:text-neutral-500{color:var(--skippr-color-neutral-500)}.skippr\\:text-neutral-700{color:var(--skippr-color-neutral-700)}.skippr\\:text-primary{color:#2d2b3d}.skippr\\:text-primary-foreground{color:#fff}.skippr\\:text-primary-foreground\\/70{color:oklab(100% 0 5.96046e-8/.7)}.skippr\\:text-red-400{color:var(--skippr-color-red-400)}.skippr\\:text-red-600{color:var(--skippr-color-red-600)}.skippr\\:text-red-700{color:var(--skippr-color-red-700)}.skippr\\:text-secondary-foreground{color:#613700}.skippr\\:text-white,.skippr\\:text-white\\/60{color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:text-white\\/60{color:color-mix(in oklab,var(--skippr-color-white)60%,transparent)}}.skippr\\:capitalize{text-transform:capitalize}.skippr\\:tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.skippr\\:line-through{text-decoration-line:line-through}.skippr\\:placeholder-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}.skippr\\:opacity-0{opacity:0}.skippr\\:opacity-40{opacity:.4}.skippr\\:opacity-75{opacity:.75}.skippr\\:opacity-100{opacity:1}.skippr\\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[-6px_8px_30px_rgba\\(15\\,18\\,26\\,0\\.32\\)\\]{--tw-shadow:-6px 8px 30px var(--tw-shadow-color,#0f121a52);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_2px_6px_rgba\\(0\\,0\\,0\\,0\\.28\\)\\]{--tw-shadow:0 2px 6px var(--tw-shadow-color,#00000047);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.12\\)\\]{--tw-shadow:0 4px 12px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_14px_rgba\\(0\\,0\\,0\\,0\\.12\\)\\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_14px_rgba\\(239\\,68\\,68\\,0\\.45\\)\\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#ef444473);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_4px_16px_rgba\\(45\\,43\\,61\\,0\\.45\\)\\,0_2px_4px_rgba\\(0\\,0\\,0\\,0\\.1\\)\\]{--tw-shadow:0 4px 16px var(--tw-shadow-color,#2d2b3d73),0 2px 4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_24px_rgba\\(45\\,43\\,61\\,0\\.35\\)\\]{--tw-shadow:0 8px 24px var(--tw-shadow-color,#2d2b3d59);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_8px_30px_rgba\\(0\\,0\\,0\\,0\\.16\\)\\,0_4px_12px_rgba\\(0\\,0\\,0\\,0\\.08\\)\\]{--tw-shadow:0 8px 30px var(--tw-shadow-color,#00000029),0 4px 12px var(--tw-shadow-color,#00000014);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-\\[0_10px_32px_rgba\\(0\\,0\\,0\\,0\\.18\\)\\]{--tw-shadow:0 10px 32px var(--tw-shadow-color,#0000002e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:ring-black\\/5{--tw-ring-color:var(--skippr-color-black)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--skippr-color-black)5%,transparent)}}.skippr\\:ring-brand{--tw-ring-color:#2bc0ae}.skippr\\:ring-foreground\\/10{--tw-ring-color:oklab(14.7% .00261104 .00303026/.1)}.skippr\\:ring-white\\/15{--tw-ring-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-white\\/15{--tw-ring-color:color-mix(in oklab,var(--skippr-color-white)15%,transparent)}}.skippr\\:ring-white\\/30{--tw-ring-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:ring-white\\/30{--tw-ring-color:color-mix(in oklab,var(--skippr-color-white)30%,transparent)}}.skippr\\:ring-offset-background{--tw-ring-offset-color:oklch(100% 0 0)}.skippr\\:drop-shadow-\\[0_2px_5px_rgba\\(0\\,0\\,0\\,0\\.4\\)\\]{--tw-drop-shadow-size:drop-shadow(0 2px 5px var(--tw-drop-shadow-color,#0006));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.skippr\\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--skippr-blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.skippr\\:transition-\\[height\\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[opacity\\,transform\\,height\\]{transition-property:opacity,transform,height;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[width\\,margin\\]{transition-property:width,margin;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-\\[width\\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--skippr-default-transition-timing-function));transition-duration:var(--tw-duration,var(--skippr-default-transition-duration))}.skippr\\:duration-75{--tw-duration:75ms;transition-duration:75ms}.skippr\\:duration-100{--tw-duration:.1s;transition-duration:.1s}.skippr\\:duration-150{--tw-duration:.15s;transition-duration:.15s}.skippr\\:duration-200{--tw-duration:.2s;transition-duration:.2s}.skippr\\:duration-300{--tw-duration:.3s;transition-duration:.3s}.skippr\\:duration-\\[400ms\\]{--tw-duration:.4s;transition-duration:.4s}.skippr\\:ease-\\[cubic-bezier\\(0\\.22\\,1\\,0\\.36\\,1\\)\\]{--tw-ease:cubic-bezier(.22,1,.36,1);transition-timing-function:cubic-bezier(.22,1,.36,1)}.skippr\\:ease-\\[cubic-bezier\\(0\\.34\\,1\\.56\\,0\\.64\\,1\\)\\]{--tw-ease:cubic-bezier(.34,1.56,.64,1);transition-timing-function:cubic-bezier(.34,1.56,.64,1)}.skippr\\:ease-in-out{--tw-ease:var(--skippr-ease-in-out);transition-timing-function:var(--skippr-ease-in-out)}.skippr\\:ease-out{--tw-ease:var(--skippr-ease-out);transition-timing-function:var(--skippr-ease-out)}.skippr\\:outline-none{--tw-outline-style:none;outline-style:none}.skippr\\:select-none{-webkit-user-select:none;user-select:none}.skippr\\:\\[animation-delay\\:0ms\\]{animation-delay:0s}.skippr\\:\\[animation-delay\\:150ms\\]{animation-delay:.15s}.skippr\\:\\[animation-delay\\:200ms\\]{animation-delay:.2s}.skippr\\:\\[animation-delay\\:300ms\\]{animation-delay:.3s}.skippr\\:\\[animation-delay\\:400ms\\]{animation-delay:.4s}.skippr\\:\\[overflow-anchor\\:none\\]{overflow-anchor:none}.skippr\\:group-focus-within\\:scale-100:is(:where(.skippr\\:group):focus-within *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:group-focus-within\\:opacity-100:is(:where(.skippr\\:group):focus-within *){opacity:1}@media (hover:hover){.skippr\\:group-hover\\:scale-100:is(:where(.skippr\\:group):hover *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:group-hover\\:text-red-300:is(:where(.skippr\\:group):hover *){color:var(--skippr-color-red-300)}.skippr\\:group-hover\\:text-white\\/80:is(:where(.skippr\\:group):hover *){color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:group-hover\\:text-white\\/80:is(:where(.skippr\\:group):hover *){color:color-mix(in oklab,var(--skippr-color-white)80%,transparent)}}.skippr\\:group-hover\\:opacity-100:is(:where(.skippr\\:group):hover *){opacity:1}}.skippr\\:placeholder\\:text-muted-foreground::placeholder{color:oklch(55.3% .013 58.071)}@media (hover:hover){.skippr\\:hover\\:-translate-y-0\\.5:hover{--tw-translate-y:calc(var(--skippr-spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:hover\\:bg-\\[\\#3a384b\\]:hover{background-color:#3a384b}.skippr\\:hover\\:bg-accent:hover{background-color:#e7e5e4}.skippr\\:hover\\:bg-amber-100:hover{background-color:var(--skippr-color-amber-100)}.skippr\\:hover\\:bg-bubble:hover{background-color:#2d2b3d}.skippr\\:hover\\:bg-destructive\\/90:hover{background-color:oklab(61.4357% .15892 .0698893/.9)}.skippr\\:hover\\:bg-green-200:hover{background-color:var(--skippr-color-green-200)}.skippr\\:hover\\:bg-muted:hover{background-color:oklch(97% .001 106.424)}.skippr\\:hover\\:bg-neutral-100:hover{background-color:var(--skippr-color-neutral-100)}.skippr\\:hover\\:bg-neutral-200:hover{background-color:var(--skippr-color-neutral-200)}.skippr\\:hover\\:bg-primary\\/90:hover{background-color:oklab(29.9244% .0107414 -.0305411/.9)}.skippr\\:hover\\:bg-red-200:hover{background-color:var(--skippr-color-red-200)}.skippr\\:hover\\:bg-red-600:hover{background-color:var(--skippr-color-red-600)}.skippr\\:hover\\:bg-secondary\\/80:hover{background-color:oklab(91.9963% .0175391 .0626889/.8)}.skippr\\:hover\\:bg-white\\/10:hover{background-color:var(--skippr-color-white)}@supports (color:color-mix(in lab, red, red)){.skippr\\:hover\\:bg-white\\/10:hover{background-color:color-mix(in oklab,var(--skippr-color-white)10%,transparent)}}.skippr\\:hover\\:text-accent-foreground:hover{color:oklch(21.6% .006 56.043)}.skippr\\:hover\\:text-foreground:hover{color:oklch(14.7% .004 49.25)}.skippr\\:hover\\:text-primary-foreground:hover{color:#fff}.skippr\\:hover\\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.skippr\\:focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.skippr\\:focus-visible\\:ring-brand:focus-visible{--tw-ring-color:#2bc0ae}.skippr\\:focus-visible\\:ring-bubble\\/60:focus-visible{--tw-ring-color:oklab(29.9244% .0107414 -.0305411/.6)}.skippr\\:focus-visible\\:ring-ring:focus-visible{--tw-ring-color:oklch(70.9% .01 56.259)}.skippr\\:focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.skippr\\:focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.skippr\\:active\\:translate-y-0:active{--tw-translate-y:calc(var(--skippr-spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.skippr\\:disabled\\:pointer-events-none:disabled{pointer-events:none}.skippr\\:disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.skippr\\:disabled\\:opacity-50:disabled{opacity:.5}.skippr\\:disabled\\:opacity-60:disabled{opacity:.6}@media (prefers-reduced-motion:reduce){.skippr\\:motion-reduce\\:hidden{display:none}.skippr\\:motion-reduce\\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.skippr\\:motion-reduce\\:animate-none{animation:none}}.skippr\\:\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.skippr\\:\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.skippr\\:\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--skippr-spacing)*4);height:calc(var(--skippr-spacing)*4)}}@keyframes skippr-tap{0%{transform:scale(1)}45%{transform:scale(.7)}to{transform:scale(1)}}@keyframes skippr-press{0%{transform:scale(1)}55%{transform:scale(1)}85%{transform:scale(.68)}to{transform:scale(1)}}@keyframes skippr-cursor-pop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@keyframes skippr-click-ping{0%{opacity:.9;transform:translate(-50%,-50%)scale(.4)}to{opacity:0;transform:translate(-50%,-50%)scale(2.4)}}@keyframes skippr-tab-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-speak{0%,to{opacity:.6;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-thinking-dot{0%,80%,to{opacity:.2;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}@keyframes skippr-pulse-ring{0%,to{box-shadow:0 0 #2d2b3d66}50%{box-shadow:0 0 0 10px #2d2b3d00}}@keyframes skippr-rec-ring{0%{box-shadow:0 0 #2bc0ae8c}70%{box-shadow:0 0 0 11px #2bc0ae00}to{box-shadow:0 0 #2bc0ae00}}@keyframes skippr-ptt-transmit{0%{box-shadow:0 0 #2bc0ae99,0 0 #2bc0ae59}70%{box-shadow:0 0 0 9px #2bc0ae00,0 0 0 16px #2bc0ae00}to{box-shadow:0 0 #2bc0ae00,0 0 #2bc0ae00}}@keyframes skippr-annotation-pulse{0%,to{box-shadow:0 0 #2bc0ae80}50%{box-shadow:0 0 0 6px #2bc0ae00}}@keyframes skippr-speak-ripple{0%{opacity:.6;transform:scale(1)}to{opacity:0;transform:scale(1.8)}}@keyframes skippr-bar{0%,to{transform:scaleY(.35)}50%{transform:scaleY(1)}}@keyframes skippr-breathe{0%,to{opacity:.85;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}@keyframes skippr-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes skippr-wave{0%,to{opacity:.4;transform:scaleY(.4)}50%{opacity:1;transform:scaleY(1)}}@keyframes skippr-bubble-in{0%{opacity:0;transform:translateY(12px)scale(.96)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-tip-in{0%{opacity:0;transform:translateY(14px)scale(.96)}60%{opacity:1;transform:translateY(-2px)scale(1.01)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes skippr-pill-content{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@keyframes skippr-banner-look{0%,to{transform:translate(0)}25%{transform:translate(-2px)}75%{transform:translate(2px)}}@keyframes skippr-finger-tap{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(2px)rotate(-6deg)}}@keyframes skippr-toolset-pop{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes skippr-stage-fade{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes skippr-agent-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}@keyframes skippr-orb-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}.skippr-no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.skippr-no-scrollbar::-webkit-scrollbar{display:none}:host{color:var(--color-foreground)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}`;
|
|
4599
4807
|
useLayoutEffect2(() => {
|
|
4600
4808
|
const host = hostRef.current;
|
|
4601
4809
|
if (!host || !css)
|
|
@@ -4610,17 +4818,17 @@ function ShadowHost({ children }) {
|
|
|
4610
4818
|
setShadowRoot(root);
|
|
4611
4819
|
}, [css]);
|
|
4612
4820
|
if (!css)
|
|
4613
|
-
return /* @__PURE__ */
|
|
4821
|
+
return /* @__PURE__ */ jsx12(Fragment2, {
|
|
4614
4822
|
children
|
|
4615
4823
|
});
|
|
4616
|
-
return /* @__PURE__ */
|
|
4824
|
+
return /* @__PURE__ */ jsx12("div", {
|
|
4617
4825
|
ref: hostRef,
|
|
4618
4826
|
children: shadowRoot && createPortal(children, shadowRoot)
|
|
4619
4827
|
});
|
|
4620
4828
|
}
|
|
4621
4829
|
|
|
4622
4830
|
// src/components/Sidebar.tsx
|
|
4623
|
-
import { useContext as useContext13, useEffect as
|
|
4831
|
+
import { useContext as useContext13, useEffect as useEffect28 } from "react";
|
|
4624
4832
|
|
|
4625
4833
|
// src/hooks/useCombinedMessages.ts
|
|
4626
4834
|
import { useContext as useContext9, useMemo as useMemo6 } from "react";
|
|
@@ -4655,14 +4863,14 @@ function useChatMessages() {
|
|
|
4655
4863
|
|
|
4656
4864
|
// src/hooks/useStreamingTranscript.ts
|
|
4657
4865
|
import { useLocalParticipant as useLocalParticipant10 } from "@livekit/components-react/hooks";
|
|
4658
|
-
import { useMemo as useMemo5, useRef as
|
|
4866
|
+
import { useMemo as useMemo5, useRef as useRef16 } from "react";
|
|
4659
4867
|
function useStreamingTranscript() {
|
|
4660
4868
|
const transcriptions = useSharedTranscriptions();
|
|
4661
4869
|
const { localParticipant } = useLocalParticipant10();
|
|
4662
|
-
const { isCapturingSpeech } =
|
|
4870
|
+
const { isCapturingSpeech } = useVoiceTurnContext();
|
|
4663
4871
|
const localIdentity = localParticipant.identity;
|
|
4664
|
-
const priorUserStreamIdsRef =
|
|
4665
|
-
const wasCapturingSpeechRef =
|
|
4872
|
+
const priorUserStreamIdsRef = useRef16(new Set);
|
|
4873
|
+
const wasCapturingSpeechRef = useRef16(false);
|
|
4666
4874
|
if (isCapturingSpeech && !wasCapturingSpeechRef.current) {
|
|
4667
4875
|
priorUserStreamIdsRef.current = new Set(transcriptions.filter((stream) => stream.participantInfo.identity === localIdentity).map((stream) => stream.streamInfo.id));
|
|
4668
4876
|
}
|
|
@@ -4723,7 +4931,7 @@ function useCombinedMessages() {
|
|
|
4723
4931
|
}
|
|
4724
4932
|
|
|
4725
4933
|
// src/hooks/usePhaseUpdates.ts
|
|
4726
|
-
import { useCallback as
|
|
4934
|
+
import { useCallback as useCallback14, useContext as useContext10, useEffect as useEffect22 } from "react";
|
|
4727
4935
|
function parsePhases(json) {
|
|
4728
4936
|
try {
|
|
4729
4937
|
const data = JSON.parse(json);
|
|
@@ -4734,10 +4942,10 @@ function parsePhases(json) {
|
|
|
4734
4942
|
return null;
|
|
4735
4943
|
}
|
|
4736
4944
|
function usePhaseUpdates() {
|
|
4737
|
-
const parse =
|
|
4945
|
+
const parse = useCallback14(parsePhases, []);
|
|
4738
4946
|
const livePhases = useAgentState("phases", parse, []);
|
|
4739
4947
|
const ctx = useContext10(LiveAgentContext);
|
|
4740
|
-
|
|
4948
|
+
useEffect22(() => {
|
|
4741
4949
|
if (livePhases.length > 0)
|
|
4742
4950
|
ctx?.setPhasesSnapshot(livePhases);
|
|
4743
4951
|
}, [livePhases, ctx?.setPhasesSnapshot]);
|
|
@@ -4746,7 +4954,7 @@ function usePhaseUpdates() {
|
|
|
4746
4954
|
}
|
|
4747
4955
|
|
|
4748
4956
|
// src/hooks/useSessionRemaining.ts
|
|
4749
|
-
import { useEffect as
|
|
4957
|
+
import { useEffect as useEffect23, useRef as useRef17, useState as useState16 } from "react";
|
|
4750
4958
|
|
|
4751
4959
|
// src/lib/format.ts
|
|
4752
4960
|
function formatTime(seconds) {
|
|
@@ -4762,9 +4970,9 @@ function parseNumber(s) {
|
|
|
4762
4970
|
// src/hooks/useSessionRemaining.ts
|
|
4763
4971
|
function useSessionRemaining() {
|
|
4764
4972
|
const maxCallDuration = useAgentState("maxCallDuration", parseNumber, null);
|
|
4765
|
-
const endTimeRef =
|
|
4766
|
-
const [remaining, setRemaining] =
|
|
4767
|
-
|
|
4973
|
+
const endTimeRef = useRef17(null);
|
|
4974
|
+
const [remaining, setRemaining] = useState16(null);
|
|
4975
|
+
useEffect23(() => {
|
|
4768
4976
|
if (maxCallDuration === null || endTimeRef.current !== null)
|
|
4769
4977
|
return;
|
|
4770
4978
|
const endTime = Date.now() + maxCallDuration * 1000;
|
|
@@ -4781,13 +4989,13 @@ function useSessionRemaining() {
|
|
|
4781
4989
|
}
|
|
4782
4990
|
|
|
4783
4991
|
// src/components/ChatHeader.tsx
|
|
4784
|
-
import { useContext as useContext12, useRef as
|
|
4992
|
+
import { useContext as useContext12, useRef as useRef19 } from "react";
|
|
4785
4993
|
|
|
4786
4994
|
// src/hooks/useElapsedSeconds.ts
|
|
4787
|
-
import { useEffect as
|
|
4995
|
+
import { useEffect as useEffect24, useState as useState17 } from "react";
|
|
4788
4996
|
function useElapsedSeconds(isRunning) {
|
|
4789
|
-
const [elapsed, setElapsed] =
|
|
4790
|
-
|
|
4997
|
+
const [elapsed, setElapsed] = useState17(0);
|
|
4998
|
+
useEffect24(() => {
|
|
4791
4999
|
if (!isRunning) {
|
|
4792
5000
|
setElapsed(0);
|
|
4793
5001
|
return;
|
|
@@ -4804,7 +5012,7 @@ function useElapsedSeconds(isRunning) {
|
|
|
4804
5012
|
|
|
4805
5013
|
// src/hooks/useTextMode.ts
|
|
4806
5014
|
import { useLocalParticipant as useLocalParticipant11 } from "@livekit/components-react/hooks";
|
|
4807
|
-
import { useCallback as
|
|
5015
|
+
import { useCallback as useCallback15, useContext as useContext11, useRef as useRef18 } from "react";
|
|
4808
5016
|
var textEncoder6 = new TextEncoder;
|
|
4809
5017
|
function useTextMode() {
|
|
4810
5018
|
const ctx = useContext11(LiveAgentContext);
|
|
@@ -4813,8 +5021,8 @@ function useTextMode() {
|
|
|
4813
5021
|
}
|
|
4814
5022
|
const { textMode, setTextModeState, sidebarTab, setSidebarTab } = ctx;
|
|
4815
5023
|
const { localParticipant } = useLocalParticipant11();
|
|
4816
|
-
const confirmedTextModeRef =
|
|
4817
|
-
const toggleTextMode =
|
|
5024
|
+
const confirmedTextModeRef = useRef18(false);
|
|
5025
|
+
const toggleTextMode = useCallback15(async () => {
|
|
4818
5026
|
const next = !textMode;
|
|
4819
5027
|
setTextModeState(next);
|
|
4820
5028
|
if (next && sidebarTab === "agenda") {
|
|
@@ -4836,7 +5044,7 @@ function useTextMode() {
|
|
|
4836
5044
|
}
|
|
4837
5045
|
|
|
4838
5046
|
// src/components/ChatHeader.tsx
|
|
4839
|
-
import { jsx as
|
|
5047
|
+
import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
4840
5048
|
function ChatHeader() {
|
|
4841
5049
|
const ctx = useContext12(LiveAgentContext);
|
|
4842
5050
|
if (!ctx) {
|
|
@@ -4854,37 +5062,37 @@ function ChatHeader() {
|
|
|
4854
5062
|
setIsDragging
|
|
4855
5063
|
} = ctx;
|
|
4856
5064
|
const elapsed = useElapsedSeconds(isConnected);
|
|
4857
|
-
const headerRef =
|
|
5065
|
+
const headerRef = useRef19(null);
|
|
4858
5066
|
const followsPanel = variant === "floating" && isPanelOpen;
|
|
4859
5067
|
const dragFollowers = followsPanel ? [panelRef, controlBarRef] : null;
|
|
4860
5068
|
const { wasDraggedRef } = useLauncherDrag(headerRef, commitLauncherDrop, dragFollowers, setIsDragging);
|
|
4861
|
-
return /* @__PURE__ */
|
|
5069
|
+
return /* @__PURE__ */ jsxs10("header", {
|
|
4862
5070
|
ref: headerRef,
|
|
4863
5071
|
className: cn("skippr:sticky skippr:top-0 skippr:z-10 skippr:flex skippr:shrink-0 skippr:items-center skippr:justify-between skippr:border-b skippr:border-border skippr:bg-primary skippr:px-4 skippr:py-3", followsPanel && "skippr:cursor-grab skippr:touch-none skippr:select-none"),
|
|
4864
5072
|
children: [
|
|
4865
|
-
/* @__PURE__ */
|
|
5073
|
+
/* @__PURE__ */ jsxs10("div", {
|
|
4866
5074
|
className: "skippr:flex skippr:items-center skippr:gap-3",
|
|
4867
5075
|
children: [
|
|
4868
|
-
isConnected && /* @__PURE__ */
|
|
4869
|
-
isConnected && /* @__PURE__ */
|
|
5076
|
+
isConnected && /* @__PURE__ */ jsx13(HeaderModeToggle, {}),
|
|
5077
|
+
isConnected && /* @__PURE__ */ jsxs10("div", {
|
|
4870
5078
|
className: "skippr:flex skippr:items-center skippr:gap-1.5 skippr:rounded-full skippr:bg-primary-foreground/20 skippr:px-2.5 skippr:py-1",
|
|
4871
5079
|
children: [
|
|
4872
|
-
/* @__PURE__ */
|
|
5080
|
+
/* @__PURE__ */ jsxs10("span", {
|
|
4873
5081
|
className: "skippr:relative skippr:flex skippr:size-1.5",
|
|
4874
5082
|
children: [
|
|
4875
|
-
/* @__PURE__ */
|
|
5083
|
+
/* @__PURE__ */ jsx13("span", {
|
|
4876
5084
|
className: "skippr:absolute skippr:inline-flex skippr:h-full skippr:w-full skippr:animate-ping skippr:rounded-full skippr:bg-red-400 skippr:opacity-75"
|
|
4877
5085
|
}),
|
|
4878
|
-
/* @__PURE__ */
|
|
5086
|
+
/* @__PURE__ */ jsx13("span", {
|
|
4879
5087
|
className: "skippr:relative skippr:inline-flex skippr:size-1.5 skippr:rounded-full skippr:bg-red-400"
|
|
4880
5088
|
})
|
|
4881
5089
|
]
|
|
4882
5090
|
}),
|
|
4883
|
-
/* @__PURE__ */
|
|
5091
|
+
/* @__PURE__ */ jsx13("span", {
|
|
4884
5092
|
className: "skippr:text-[10px] skippr:font-medium skippr:text-primary-foreground",
|
|
4885
5093
|
children: "REC"
|
|
4886
5094
|
}),
|
|
4887
|
-
/* @__PURE__ */
|
|
5095
|
+
/* @__PURE__ */ jsx13("span", {
|
|
4888
5096
|
className: "skippr:text-[10px] skippr:font-mono skippr:text-primary-foreground",
|
|
4889
5097
|
children: formatTime(elapsed)
|
|
4890
5098
|
})
|
|
@@ -4892,7 +5100,7 @@ function ChatHeader() {
|
|
|
4892
5100
|
})
|
|
4893
5101
|
]
|
|
4894
5102
|
}),
|
|
4895
|
-
minimizable && /* @__PURE__ */
|
|
5103
|
+
minimizable && /* @__PURE__ */ jsx13("button", {
|
|
4896
5104
|
type: "button",
|
|
4897
5105
|
onClick: () => {
|
|
4898
5106
|
if (!wasDraggedRef.current)
|
|
@@ -4901,7 +5109,7 @@ function ChatHeader() {
|
|
|
4901
5109
|
"aria-label": "Close",
|
|
4902
5110
|
title: "Close",
|
|
4903
5111
|
className: "skippr:flex skippr:h-8 skippr:w-8 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-lg skippr:text-primary-foreground/70 skippr:transition-colors skippr:hover:bg-white/10 skippr:hover:text-primary-foreground skippr:focus-visible:outline-none skippr:focus-visible:ring-2 skippr:focus-visible:ring-brand",
|
|
4904
|
-
children: /* @__PURE__ */
|
|
5112
|
+
children: /* @__PURE__ */ jsx13(X, {
|
|
4905
5113
|
className: "skippr:h-4 skippr:w-4"
|
|
4906
5114
|
})
|
|
4907
5115
|
})
|
|
@@ -4911,12 +5119,12 @@ function ChatHeader() {
|
|
|
4911
5119
|
function HeaderModeToggle() {
|
|
4912
5120
|
const { textMode, toggleTextMode } = useTextMode();
|
|
4913
5121
|
const { isHeld } = useSessionHoldContext();
|
|
4914
|
-
return /* @__PURE__ */
|
|
5122
|
+
return /* @__PURE__ */ jsxs10("fieldset", {
|
|
4915
5123
|
"aria-label": "Response mode",
|
|
4916
5124
|
disabled: isHeld,
|
|
4917
5125
|
className: "skippr:flex skippr:items-center skippr:gap-0.5 skippr:rounded-lg skippr:bg-white/15 skippr:p-0.5 skippr:text-xs skippr:font-medium skippr:ring-1 skippr:ring-white/30 skippr:disabled:opacity-50",
|
|
4918
5126
|
children: [
|
|
4919
|
-
/* @__PURE__ */
|
|
5127
|
+
/* @__PURE__ */ jsx13("button", {
|
|
4920
5128
|
type: "button",
|
|
4921
5129
|
"aria-pressed": !textMode,
|
|
4922
5130
|
disabled: isHeld,
|
|
@@ -4927,7 +5135,7 @@ function HeaderModeToggle() {
|
|
|
4927
5135
|
className: cn("skippr:rounded-md skippr:px-2.5 skippr:py-1 skippr:transition-colors skippr:focus-visible:outline-none skippr:focus-visible:ring-2 skippr:focus-visible:ring-brand skippr:disabled:cursor-not-allowed", isHeld ? "skippr:cursor-not-allowed" : "skippr:cursor-pointer", textMode ? "skippr:font-semibold skippr:text-primary-foreground" : "skippr:bg-white skippr:text-primary skippr:shadow-sm"),
|
|
4928
5136
|
children: "Voice"
|
|
4929
5137
|
}),
|
|
4930
|
-
/* @__PURE__ */
|
|
5138
|
+
/* @__PURE__ */ jsx13("button", {
|
|
4931
5139
|
type: "button",
|
|
4932
5140
|
"aria-pressed": textMode,
|
|
4933
5141
|
disabled: isHeld,
|
|
@@ -4943,26 +5151,26 @@ function HeaderModeToggle() {
|
|
|
4943
5151
|
}
|
|
4944
5152
|
|
|
4945
5153
|
// src/components/LoadingDots.tsx
|
|
4946
|
-
import { jsx as
|
|
5154
|
+
import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
4947
5155
|
function LoadingDots({ label }) {
|
|
4948
|
-
return /* @__PURE__ */
|
|
5156
|
+
return /* @__PURE__ */ jsxs11("div", {
|
|
4949
5157
|
className: "skippr:flex skippr:items-center skippr:gap-2 skippr:py-4",
|
|
4950
5158
|
children: [
|
|
4951
|
-
/* @__PURE__ */
|
|
5159
|
+
/* @__PURE__ */ jsxs11("div", {
|
|
4952
5160
|
className: "skippr:flex skippr:gap-1",
|
|
4953
5161
|
children: [
|
|
4954
|
-
/* @__PURE__ */
|
|
5162
|
+
/* @__PURE__ */ jsx14("span", {
|
|
4955
5163
|
className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:0ms]"
|
|
4956
5164
|
}),
|
|
4957
|
-
/* @__PURE__ */
|
|
5165
|
+
/* @__PURE__ */ jsx14("span", {
|
|
4958
5166
|
className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:150ms]"
|
|
4959
5167
|
}),
|
|
4960
|
-
/* @__PURE__ */
|
|
5168
|
+
/* @__PURE__ */ jsx14("span", {
|
|
4961
5169
|
className: "skippr:size-1.5 skippr:rounded-full skippr:bg-muted-foreground/40 skippr:animate-bounce skippr:[animation-delay:300ms]"
|
|
4962
5170
|
})
|
|
4963
5171
|
]
|
|
4964
5172
|
}),
|
|
4965
|
-
/* @__PURE__ */
|
|
5173
|
+
/* @__PURE__ */ jsx14("p", {
|
|
4966
5174
|
className: "skippr:text-xs skippr:text-muted-foreground",
|
|
4967
5175
|
children: label
|
|
4968
5176
|
})
|
|
@@ -4971,11 +5179,11 @@ function LoadingDots({ label }) {
|
|
|
4971
5179
|
}
|
|
4972
5180
|
|
|
4973
5181
|
// src/components/LoginFlow.tsx
|
|
4974
|
-
import { useCallback as
|
|
5182
|
+
import { useCallback as useCallback16, useEffect as useEffect25, useRef as useRef20, useState as useState18 } from "react";
|
|
4975
5183
|
|
|
4976
5184
|
// src/components/ui/button.tsx
|
|
4977
5185
|
import { forwardRef as forwardRef3 } from "react";
|
|
4978
|
-
import { jsx as
|
|
5186
|
+
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
4979
5187
|
var variantClasses = {
|
|
4980
5188
|
default: "skippr:bg-primary skippr:text-primary-foreground skippr:hover:bg-primary/90",
|
|
4981
5189
|
destructive: "skippr:bg-destructive skippr:text-white skippr:hover:bg-destructive/90",
|
|
@@ -4994,7 +5202,7 @@ var sizeClasses = {
|
|
|
4994
5202
|
"icon-lg": "skippr:size-10"
|
|
4995
5203
|
};
|
|
4996
5204
|
var Button = forwardRef3(({ className, variant = "default", size = "default", ...props }, ref) => {
|
|
4997
|
-
return /* @__PURE__ */
|
|
5205
|
+
return /* @__PURE__ */ jsx15("button", {
|
|
4998
5206
|
className: cn("skippr:inline-flex skippr:items-center skippr:justify-center skippr:gap-2 skippr:whitespace-nowrap skippr:rounded-md skippr:text-sm skippr:font-medium skippr:ring-offset-background skippr:transition-all skippr:cursor-pointer skippr:focus-visible:outline-none skippr:focus-visible:ring-2 skippr:focus-visible:ring-ring skippr:focus-visible:ring-offset-2 skippr:disabled:pointer-events-none skippr:disabled:opacity-50 skippr:shrink-0 skippr:[&_svg]:pointer-events-none skippr:[&_svg:not([class*='size-'])]:size-4 skippr:[&_svg]:shrink-0", variantClasses[variant], sizeClasses[size], className),
|
|
4999
5207
|
ref,
|
|
5000
5208
|
...props
|
|
@@ -5003,28 +5211,28 @@ var Button = forwardRef3(({ className, variant = "default", size = "default", ..
|
|
|
5003
5211
|
Button.displayName = "Button";
|
|
5004
5212
|
|
|
5005
5213
|
// src/components/LoginFlow.tsx
|
|
5006
|
-
import { jsx as
|
|
5214
|
+
import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
5007
5215
|
var OTP_LENGTH = 6;
|
|
5008
5216
|
var DIGIT_KEYS = ["d0", "d1", "d2", "d3", "d4", "d5"];
|
|
5009
5217
|
function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
|
|
5010
|
-
const [step, setStep] =
|
|
5011
|
-
const [email, setEmail] =
|
|
5012
|
-
const handleRequestOtp =
|
|
5218
|
+
const [step, setStep] = useState18("email");
|
|
5219
|
+
const [email, setEmail] = useState18("");
|
|
5220
|
+
const handleRequestOtp = useCallback16(async (emailValue) => {
|
|
5013
5221
|
const success = await requestOtp(emailValue);
|
|
5014
5222
|
if (success)
|
|
5015
5223
|
setStep("otp");
|
|
5016
5224
|
}, [requestOtp]);
|
|
5017
|
-
const handleVerifyOtp =
|
|
5225
|
+
const handleVerifyOtp = useCallback16(async (code) => {
|
|
5018
5226
|
await verifyOtp(email, code);
|
|
5019
5227
|
}, [verifyOtp, email]);
|
|
5020
|
-
const handleBack =
|
|
5228
|
+
const handleBack = useCallback16(() => {
|
|
5021
5229
|
setStep("email");
|
|
5022
5230
|
}, []);
|
|
5023
|
-
const handleResend =
|
|
5231
|
+
const handleResend = useCallback16(async () => {
|
|
5024
5232
|
await requestOtp(email);
|
|
5025
5233
|
}, [requestOtp, email]);
|
|
5026
5234
|
if (step === "otp") {
|
|
5027
|
-
return /* @__PURE__ */
|
|
5235
|
+
return /* @__PURE__ */ jsx16(OtpStep, {
|
|
5028
5236
|
email,
|
|
5029
5237
|
onSubmit: handleVerifyOtp,
|
|
5030
5238
|
onResend: handleResend,
|
|
@@ -5033,7 +5241,7 @@ function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
|
|
|
5033
5241
|
isSubmitting
|
|
5034
5242
|
});
|
|
5035
5243
|
}
|
|
5036
|
-
return /* @__PURE__ */
|
|
5244
|
+
return /* @__PURE__ */ jsx16(EmailStep, {
|
|
5037
5245
|
email,
|
|
5038
5246
|
onEmailChange: setEmail,
|
|
5039
5247
|
onSubmit: handleRequestOtp,
|
|
@@ -5047,30 +5255,30 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
|
|
|
5047
5255
|
if (email.trim())
|
|
5048
5256
|
onSubmit(email.trim());
|
|
5049
5257
|
}
|
|
5050
|
-
return /* @__PURE__ */
|
|
5258
|
+
return /* @__PURE__ */ jsxs12("div", {
|
|
5051
5259
|
className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
|
|
5052
5260
|
children: [
|
|
5053
|
-
/* @__PURE__ */
|
|
5261
|
+
/* @__PURE__ */ jsxs12("div", {
|
|
5054
5262
|
className: "skippr:mb-4 skippr:text-center",
|
|
5055
5263
|
children: [
|
|
5056
|
-
/* @__PURE__ */
|
|
5264
|
+
/* @__PURE__ */ jsx16(Mail, {
|
|
5057
5265
|
className: "skippr:mx-auto skippr:mb-2 skippr:size-6 skippr:text-primary"
|
|
5058
5266
|
}),
|
|
5059
|
-
/* @__PURE__ */
|
|
5267
|
+
/* @__PURE__ */ jsx16("p", {
|
|
5060
5268
|
className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
|
|
5061
5269
|
children: "Sign in to continue"
|
|
5062
5270
|
}),
|
|
5063
|
-
/* @__PURE__ */
|
|
5271
|
+
/* @__PURE__ */ jsx16("p", {
|
|
5064
5272
|
className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
|
|
5065
5273
|
children: "Your email will be used to identify you across sessions"
|
|
5066
5274
|
})
|
|
5067
5275
|
]
|
|
5068
5276
|
}),
|
|
5069
|
-
/* @__PURE__ */
|
|
5277
|
+
/* @__PURE__ */ jsxs12("form", {
|
|
5070
5278
|
onSubmit: handleSubmit,
|
|
5071
5279
|
className: "skippr:flex skippr:flex-col skippr:gap-3",
|
|
5072
5280
|
children: [
|
|
5073
|
-
/* @__PURE__ */
|
|
5281
|
+
/* @__PURE__ */ jsx16("input", {
|
|
5074
5282
|
type: "email",
|
|
5075
5283
|
placeholder: "you@example.com",
|
|
5076
5284
|
value: email,
|
|
@@ -5079,15 +5287,15 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
|
|
|
5079
5287
|
required: true,
|
|
5080
5288
|
className: "skippr:w-full skippr:rounded-md skippr:border skippr:border-border skippr:bg-background skippr:px-3 skippr:py-2 skippr:text-sm skippr:text-foreground skippr:placeholder-muted-foreground skippr:outline-none focus:skippr:ring-2 focus:skippr:ring-primary/30 focus:skippr:border-primary disabled:skippr:opacity-50"
|
|
5081
5289
|
}),
|
|
5082
|
-
/* @__PURE__ */
|
|
5290
|
+
/* @__PURE__ */ jsx16(Button, {
|
|
5083
5291
|
type: "submit",
|
|
5084
5292
|
disabled: isSubmitting || !email.trim(),
|
|
5085
5293
|
className: "skippr:w-full",
|
|
5086
|
-
children: isSubmitting ? /* @__PURE__ */
|
|
5294
|
+
children: isSubmitting ? /* @__PURE__ */ jsx16(LoaderCircle, {
|
|
5087
5295
|
className: "skippr:size-4 skippr:animate-spin"
|
|
5088
5296
|
}) : "Continue"
|
|
5089
5297
|
}),
|
|
5090
|
-
error && /* @__PURE__ */
|
|
5298
|
+
error && /* @__PURE__ */ jsx16("p", {
|
|
5091
5299
|
className: "skippr:text-xs skippr:text-center skippr:text-destructive",
|
|
5092
5300
|
children: error
|
|
5093
5301
|
})
|
|
@@ -5097,30 +5305,30 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
|
|
|
5097
5305
|
});
|
|
5098
5306
|
}
|
|
5099
5307
|
function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
5100
|
-
const [digits, setDigits] =
|
|
5101
|
-
const [resendCooldown, setResendCooldown] =
|
|
5102
|
-
const inputRefs =
|
|
5103
|
-
const submittedRef =
|
|
5104
|
-
|
|
5308
|
+
const [digits, setDigits] = useState18(Array(OTP_LENGTH).fill(""));
|
|
5309
|
+
const [resendCooldown, setResendCooldown] = useState18(0);
|
|
5310
|
+
const inputRefs = useRef20([]);
|
|
5311
|
+
const submittedRef = useRef20(false);
|
|
5312
|
+
useEffect25(() => {
|
|
5105
5313
|
inputRefs.current[0]?.focus();
|
|
5106
5314
|
}, []);
|
|
5107
|
-
|
|
5315
|
+
useEffect25(() => {
|
|
5108
5316
|
if (error)
|
|
5109
5317
|
submittedRef.current = false;
|
|
5110
5318
|
}, [error]);
|
|
5111
|
-
|
|
5319
|
+
useEffect25(() => {
|
|
5112
5320
|
if (resendCooldown <= 0)
|
|
5113
5321
|
return;
|
|
5114
5322
|
const timer = setTimeout(() => setResendCooldown((c) => c - 1), 1000);
|
|
5115
5323
|
return () => clearTimeout(timer);
|
|
5116
5324
|
}, [resendCooldown]);
|
|
5117
|
-
const submitCode =
|
|
5325
|
+
const submitCode = useCallback16((code) => {
|
|
5118
5326
|
if (submittedRef.current || isSubmitting)
|
|
5119
5327
|
return;
|
|
5120
5328
|
submittedRef.current = true;
|
|
5121
5329
|
onSubmit(code);
|
|
5122
5330
|
}, [onSubmit, isSubmitting]);
|
|
5123
|
-
const handleDigitChange =
|
|
5331
|
+
const handleDigitChange = useCallback16((index2, value) => {
|
|
5124
5332
|
const digit = value.replace(/\D/g, "").slice(-1);
|
|
5125
5333
|
const newDigits = [...digits];
|
|
5126
5334
|
newDigits[index2] = digit;
|
|
@@ -5134,12 +5342,12 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
5134
5342
|
submitCode(code);
|
|
5135
5343
|
}
|
|
5136
5344
|
}, [digits, submitCode]);
|
|
5137
|
-
const handleKeyDown =
|
|
5345
|
+
const handleKeyDown = useCallback16((index2, e) => {
|
|
5138
5346
|
if (e.key === "Backspace" && !digits[index2] && index2 > 0) {
|
|
5139
5347
|
inputRefs.current[index2 - 1]?.focus();
|
|
5140
5348
|
}
|
|
5141
5349
|
}, [digits]);
|
|
5142
|
-
const handlePaste =
|
|
5350
|
+
const handlePaste = useCallback16((e) => {
|
|
5143
5351
|
e.preventDefault();
|
|
5144
5352
|
const pasted = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, OTP_LENGTH);
|
|
5145
5353
|
if (pasted.length > 0) {
|
|
@@ -5167,22 +5375,22 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
5167
5375
|
submittedRef.current = false;
|
|
5168
5376
|
inputRefs.current[0]?.focus();
|
|
5169
5377
|
}
|
|
5170
|
-
return /* @__PURE__ */
|
|
5378
|
+
return /* @__PURE__ */ jsxs12("div", {
|
|
5171
5379
|
className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
|
|
5172
5380
|
children: [
|
|
5173
|
-
/* @__PURE__ */
|
|
5381
|
+
/* @__PURE__ */ jsxs12("div", {
|
|
5174
5382
|
className: "skippr:mb-4 skippr:text-center",
|
|
5175
5383
|
children: [
|
|
5176
|
-
/* @__PURE__ */
|
|
5384
|
+
/* @__PURE__ */ jsx16("p", {
|
|
5177
5385
|
className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
|
|
5178
5386
|
children: "Enter verification code"
|
|
5179
5387
|
}),
|
|
5180
|
-
/* @__PURE__ */
|
|
5388
|
+
/* @__PURE__ */ jsxs12("p", {
|
|
5181
5389
|
className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
|
|
5182
5390
|
children: [
|
|
5183
5391
|
"We sent a 6-digit code to",
|
|
5184
5392
|
" ",
|
|
5185
|
-
/* @__PURE__ */
|
|
5393
|
+
/* @__PURE__ */ jsx16("span", {
|
|
5186
5394
|
className: "skippr:font-medium skippr:text-foreground",
|
|
5187
5395
|
children: email
|
|
5188
5396
|
})
|
|
@@ -5190,13 +5398,13 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
5190
5398
|
})
|
|
5191
5399
|
]
|
|
5192
5400
|
}),
|
|
5193
|
-
/* @__PURE__ */
|
|
5401
|
+
/* @__PURE__ */ jsxs12("form", {
|
|
5194
5402
|
onSubmit: handleSubmit,
|
|
5195
5403
|
className: "skippr:flex skippr:flex-col skippr:gap-3",
|
|
5196
5404
|
children: [
|
|
5197
|
-
/* @__PURE__ */
|
|
5405
|
+
/* @__PURE__ */ jsx16("div", {
|
|
5198
5406
|
className: "skippr:flex skippr:justify-center skippr:gap-1.5",
|
|
5199
|
-
children: digits.map((digit, index2) => /* @__PURE__ */
|
|
5407
|
+
children: digits.map((digit, index2) => /* @__PURE__ */ jsx16("input", {
|
|
5200
5408
|
ref: (el) => {
|
|
5201
5409
|
inputRefs.current[index2] = el;
|
|
5202
5410
|
},
|
|
@@ -5211,29 +5419,29 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
5211
5419
|
className: "skippr:h-10 skippr:w-10 skippr:rounded-md skippr:border skippr:border-border skippr:bg-background skippr:text-center skippr:text-sm skippr:font-semibold skippr:text-foreground skippr:outline-none focus:skippr:ring-2 focus:skippr:ring-primary/30 focus:skippr:border-primary disabled:skippr:opacity-50"
|
|
5212
5420
|
}, DIGIT_KEYS[index2]))
|
|
5213
5421
|
}),
|
|
5214
|
-
error && /* @__PURE__ */
|
|
5422
|
+
error && /* @__PURE__ */ jsx16("p", {
|
|
5215
5423
|
className: "skippr:text-xs skippr:text-center skippr:text-destructive",
|
|
5216
5424
|
children: error
|
|
5217
5425
|
}),
|
|
5218
|
-
/* @__PURE__ */
|
|
5426
|
+
/* @__PURE__ */ jsx16(Button, {
|
|
5219
5427
|
type: "submit",
|
|
5220
5428
|
disabled: isSubmitting || digits.join("").length !== OTP_LENGTH,
|
|
5221
5429
|
className: "skippr:w-full",
|
|
5222
|
-
children: isSubmitting ? /* @__PURE__ */
|
|
5430
|
+
children: isSubmitting ? /* @__PURE__ */ jsx16(LoaderCircle, {
|
|
5223
5431
|
className: "skippr:size-4 skippr:animate-spin"
|
|
5224
5432
|
}) : "Verify"
|
|
5225
5433
|
}),
|
|
5226
|
-
/* @__PURE__ */
|
|
5434
|
+
/* @__PURE__ */ jsxs12("div", {
|
|
5227
5435
|
className: "skippr:flex skippr:items-center skippr:justify-between skippr:text-xs",
|
|
5228
5436
|
children: [
|
|
5229
|
-
/* @__PURE__ */
|
|
5437
|
+
/* @__PURE__ */ jsx16("button", {
|
|
5230
5438
|
type: "button",
|
|
5231
5439
|
onClick: onBack,
|
|
5232
5440
|
disabled: isSubmitting,
|
|
5233
5441
|
className: "skippr:text-muted-foreground hover:skippr:text-foreground skippr:transition-colors disabled:skippr:opacity-50",
|
|
5234
5442
|
children: "Change email"
|
|
5235
5443
|
}),
|
|
5236
|
-
/* @__PURE__ */
|
|
5444
|
+
/* @__PURE__ */ jsx16("button", {
|
|
5237
5445
|
type: "button",
|
|
5238
5446
|
onClick: handleResend,
|
|
5239
5447
|
disabled: isSubmitting || resendCooldown > 0,
|
|
@@ -5249,17 +5457,17 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
5249
5457
|
}
|
|
5250
5458
|
|
|
5251
5459
|
// src/components/MessageList.tsx
|
|
5252
|
-
import { useCallback as
|
|
5460
|
+
import { useCallback as useCallback17, useLayoutEffect as useLayoutEffect3, useRef as useRef22, useState as useState20 } from "react";
|
|
5253
5461
|
|
|
5254
5462
|
// src/components/ChatInput.tsx
|
|
5255
|
-
import { useEffect as
|
|
5256
|
-
import { jsx as
|
|
5463
|
+
import { useEffect as useEffect26, useRef as useRef21, useState as useState19 } from "react";
|
|
5464
|
+
import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
5257
5465
|
var MAX_INPUT_HEIGHT = 60;
|
|
5258
5466
|
function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
|
|
5259
|
-
const [inputText, setInputText] =
|
|
5260
|
-
const textareaRef =
|
|
5467
|
+
const [inputText, setInputText] = useState19("");
|
|
5468
|
+
const textareaRef = useRef21(null);
|
|
5261
5469
|
const canSend = inputText.trim().length > 0 && !isSendingChat;
|
|
5262
|
-
|
|
5470
|
+
useEffect26(() => {
|
|
5263
5471
|
if (autoFocus)
|
|
5264
5472
|
textareaRef.current?.focus();
|
|
5265
5473
|
}, [autoFocus]);
|
|
@@ -5290,13 +5498,13 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
|
|
|
5290
5498
|
handleSubmit(e);
|
|
5291
5499
|
}
|
|
5292
5500
|
}
|
|
5293
|
-
return /* @__PURE__ */
|
|
5501
|
+
return /* @__PURE__ */ jsx17("form", {
|
|
5294
5502
|
onSubmit: handleSubmit,
|
|
5295
5503
|
className: "skippr:border-t skippr:border-border skippr:p-3",
|
|
5296
|
-
children: /* @__PURE__ */
|
|
5504
|
+
children: /* @__PURE__ */ jsxs13("div", {
|
|
5297
5505
|
className: "skippr:flex skippr:items-center skippr:gap-2 skippr:rounded-xl skippr:bg-background skippr:ring-1 skippr:ring-foreground/10 skippr:px-3 skippr:py-2",
|
|
5298
5506
|
children: [
|
|
5299
|
-
/* @__PURE__ */
|
|
5507
|
+
/* @__PURE__ */ jsx17("textarea", {
|
|
5300
5508
|
ref: textareaRef,
|
|
5301
5509
|
rows: 1,
|
|
5302
5510
|
value: inputText,
|
|
@@ -5306,12 +5514,12 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
|
|
|
5306
5514
|
className: "skippr:flex-1 skippr:resize-none skippr:overflow-y-auto skippr:bg-transparent skippr:text-sm skippr:leading-5 skippr:text-foreground skippr:placeholder:text-muted-foreground skippr:outline-none",
|
|
5307
5515
|
style: { maxHeight: `${MAX_INPUT_HEIGHT}px` }
|
|
5308
5516
|
}),
|
|
5309
|
-
/* @__PURE__ */
|
|
5517
|
+
/* @__PURE__ */ jsx17("button", {
|
|
5310
5518
|
type: "submit",
|
|
5311
5519
|
disabled: !canSend,
|
|
5312
5520
|
"aria-label": "Send message",
|
|
5313
5521
|
className: cn("skippr:flex skippr:size-8 skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-lg skippr:transition-colors", canSend ? "skippr:bg-primary skippr:text-primary-foreground skippr:hover:bg-primary/90" : "skippr:bg-muted-foreground/20 skippr:text-muted-foreground/60"),
|
|
5314
|
-
children: /* @__PURE__ */
|
|
5522
|
+
children: /* @__PURE__ */ jsx17(Send, {
|
|
5315
5523
|
className: "skippr:size-3.5"
|
|
5316
5524
|
})
|
|
5317
5525
|
})
|
|
@@ -5321,7 +5529,7 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
|
|
|
5321
5529
|
}
|
|
5322
5530
|
|
|
5323
5531
|
// src/components/ChatMessage.tsx
|
|
5324
|
-
import { jsx as
|
|
5532
|
+
import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
5325
5533
|
function formatTimestamp(ts) {
|
|
5326
5534
|
return new Date(ts).toLocaleTimeString("en-US", {
|
|
5327
5535
|
hour: "numeric",
|
|
@@ -5331,16 +5539,16 @@ function formatTimestamp(ts) {
|
|
|
5331
5539
|
}
|
|
5332
5540
|
function ChatMessage({ message }) {
|
|
5333
5541
|
const isAgent = message.role === "assistant";
|
|
5334
|
-
return /* @__PURE__ */
|
|
5542
|
+
return /* @__PURE__ */ jsx18("div", {
|
|
5335
5543
|
className: cn("skippr:flex skippr:gap-2", isAgent ? "skippr:items-start" : "skippr:justify-end"),
|
|
5336
|
-
children: /* @__PURE__ */
|
|
5544
|
+
children: /* @__PURE__ */ jsxs14("div", {
|
|
5337
5545
|
className: cn("skippr:flex skippr:max-w-[80%] skippr:flex-col", isAgent ? "skippr:items-start" : "skippr:items-end"),
|
|
5338
5546
|
children: [
|
|
5339
|
-
/* @__PURE__ */
|
|
5547
|
+
/* @__PURE__ */ jsx18("div", {
|
|
5340
5548
|
className: cn("skippr:rounded-2xl skippr:px-4 skippr:py-2.5 skippr:text-sm skippr:leading-relaxed", isAgent ? "skippr:border skippr:border-border skippr:bg-card skippr:text-foreground" : "skippr:bg-primary skippr:text-primary-foreground"),
|
|
5341
5549
|
children: message.content
|
|
5342
5550
|
}),
|
|
5343
|
-
message.timestamp && /* @__PURE__ */
|
|
5551
|
+
message.timestamp && /* @__PURE__ */ jsx18("span", {
|
|
5344
5552
|
className: "skippr:mt-1 skippr:px-1 skippr:text-[10px] skippr:text-muted-foreground/60",
|
|
5345
5553
|
children: formatTimestamp(message.timestamp)
|
|
5346
5554
|
})
|
|
@@ -5350,70 +5558,70 @@ function ChatMessage({ message }) {
|
|
|
5350
5558
|
}
|
|
5351
5559
|
|
|
5352
5560
|
// src/components/PlanCard.tsx
|
|
5353
|
-
import { useEffect as
|
|
5354
|
-
import { jsx as
|
|
5561
|
+
import { useEffect as useEffect27 } from "react";
|
|
5562
|
+
import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
5355
5563
|
var APPROVE_MESSAGE = "Yes, go ahead.";
|
|
5356
5564
|
var CANCEL_MESSAGE = "No, cancel that.";
|
|
5357
5565
|
var COMPLETED_CARD_VISIBLE_MS = 2500;
|
|
5358
5566
|
function StepIcon({ status }) {
|
|
5359
5567
|
if (status === "done") {
|
|
5360
|
-
return /* @__PURE__ */
|
|
5568
|
+
return /* @__PURE__ */ jsx19(CircleCheck, {
|
|
5361
5569
|
className: "skippr:size-4 skippr:text-chart-3"
|
|
5362
5570
|
});
|
|
5363
5571
|
}
|
|
5364
5572
|
if (status === "failed") {
|
|
5365
|
-
return /* @__PURE__ */
|
|
5573
|
+
return /* @__PURE__ */ jsx19(CircleX, {
|
|
5366
5574
|
className: "skippr:size-4 skippr:text-destructive"
|
|
5367
5575
|
});
|
|
5368
5576
|
}
|
|
5369
5577
|
if (status === "active") {
|
|
5370
|
-
return /* @__PURE__ */
|
|
5578
|
+
return /* @__PURE__ */ jsx19(Circle, {
|
|
5371
5579
|
className: "skippr:size-4 skippr:fill-primary/30 skippr:text-primary"
|
|
5372
5580
|
});
|
|
5373
5581
|
}
|
|
5374
|
-
return /* @__PURE__ */
|
|
5582
|
+
return /* @__PURE__ */ jsx19(Circle, {
|
|
5375
5583
|
className: "skippr:size-4 skippr:text-muted-foreground/30"
|
|
5376
5584
|
});
|
|
5377
5585
|
}
|
|
5378
5586
|
function PlanCard({ plan, sendChatMessage, onDismiss }) {
|
|
5379
5587
|
const awaitingApproval = plan.state === "proposed";
|
|
5380
|
-
|
|
5588
|
+
useEffect27(() => {
|
|
5381
5589
|
if (plan.state !== "completed")
|
|
5382
5590
|
return;
|
|
5383
5591
|
const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
|
|
5384
5592
|
return () => clearTimeout(timer);
|
|
5385
5593
|
}, [plan.state, onDismiss]);
|
|
5386
|
-
return /* @__PURE__ */
|
|
5594
|
+
return /* @__PURE__ */ jsxs15("div", {
|
|
5387
5595
|
className: "skippr:rounded-2xl skippr:rounded-tl-md skippr:bg-card skippr:p-3.5 skippr:ring-2 skippr:ring-brand",
|
|
5388
5596
|
children: [
|
|
5389
|
-
/* @__PURE__ */
|
|
5597
|
+
/* @__PURE__ */ jsx19("p", {
|
|
5390
5598
|
className: "skippr:mb-3 skippr:text-sm skippr:font-semibold skippr:leading-snug skippr:text-foreground",
|
|
5391
5599
|
children: "Plan"
|
|
5392
5600
|
}),
|
|
5393
|
-
/* @__PURE__ */
|
|
5601
|
+
/* @__PURE__ */ jsx19("div", {
|
|
5394
5602
|
className: "skippr:space-y-2",
|
|
5395
|
-
children: plan.steps.map((step) => /* @__PURE__ */
|
|
5603
|
+
children: plan.steps.map((step) => /* @__PURE__ */ jsxs15("div", {
|
|
5396
5604
|
className: "skippr:flex skippr:items-center skippr:gap-2",
|
|
5397
5605
|
children: [
|
|
5398
|
-
/* @__PURE__ */
|
|
5606
|
+
/* @__PURE__ */ jsx19(StepIcon, {
|
|
5399
5607
|
status: step.status
|
|
5400
5608
|
}),
|
|
5401
|
-
/* @__PURE__ */
|
|
5609
|
+
/* @__PURE__ */ jsx19("p", {
|
|
5402
5610
|
className: cn("skippr:text-sm skippr:leading-snug", step.status === "done" && "skippr:text-muted-foreground skippr:line-through", step.status === "active" && "skippr:font-medium skippr:text-foreground", step.status === "pending" && "skippr:text-muted-foreground", step.status === "failed" && "skippr:text-destructive"),
|
|
5403
5611
|
children: step.label
|
|
5404
5612
|
})
|
|
5405
5613
|
]
|
|
5406
5614
|
}, step.index))
|
|
5407
5615
|
}),
|
|
5408
|
-
awaitingApproval && /* @__PURE__ */
|
|
5616
|
+
awaitingApproval && /* @__PURE__ */ jsxs15("div", {
|
|
5409
5617
|
className: "skippr:mt-3.5 skippr:flex skippr:gap-2",
|
|
5410
5618
|
children: [
|
|
5411
|
-
/* @__PURE__ */
|
|
5619
|
+
/* @__PURE__ */ jsx19(Button, {
|
|
5412
5620
|
className: "skippr:flex-1 skippr:py-2",
|
|
5413
5621
|
onClick: () => sendChatMessage(APPROVE_MESSAGE),
|
|
5414
5622
|
children: "Approve"
|
|
5415
5623
|
}),
|
|
5416
|
-
/* @__PURE__ */
|
|
5624
|
+
/* @__PURE__ */ jsx19(Button, {
|
|
5417
5625
|
variant: "outline",
|
|
5418
5626
|
className: "skippr:flex-1 skippr:py-2",
|
|
5419
5627
|
onClick: () => sendChatMessage(CANCEL_MESSAGE),
|
|
@@ -5426,26 +5634,26 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
|
|
|
5426
5634
|
}
|
|
5427
5635
|
|
|
5428
5636
|
// src/components/TypingIndicator.tsx
|
|
5429
|
-
import { jsx as
|
|
5637
|
+
import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
5430
5638
|
function TypingIndicator() {
|
|
5431
|
-
return /* @__PURE__ */
|
|
5639
|
+
return /* @__PURE__ */ jsx20("div", {
|
|
5432
5640
|
className: "skippr:flex skippr:items-start skippr:gap-2 skippr:animate-skippr-tab-fade",
|
|
5433
|
-
children: /* @__PURE__ */
|
|
5641
|
+
children: /* @__PURE__ */ jsxs16("div", {
|
|
5434
5642
|
className: "skippr:inline-flex skippr:items-center skippr:gap-1 skippr:rounded-2xl skippr:border skippr:border-primary/20 skippr:bg-primary/10 skippr:px-4 skippr:py-2 skippr:text-xs skippr:text-primary",
|
|
5435
5643
|
children: [
|
|
5436
|
-
/* @__PURE__ */
|
|
5644
|
+
/* @__PURE__ */ jsx20("span", {
|
|
5437
5645
|
children: "Agent is analyzing your screen"
|
|
5438
5646
|
}),
|
|
5439
|
-
/* @__PURE__ */
|
|
5647
|
+
/* @__PURE__ */ jsxs16("span", {
|
|
5440
5648
|
className: "skippr:inline-flex skippr:items-center skippr:gap-[2px]",
|
|
5441
5649
|
children: [
|
|
5442
|
-
/* @__PURE__ */
|
|
5650
|
+
/* @__PURE__ */ jsx20("span", {
|
|
5443
5651
|
className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:0ms]"
|
|
5444
5652
|
}),
|
|
5445
|
-
/* @__PURE__ */
|
|
5653
|
+
/* @__PURE__ */ jsx20("span", {
|
|
5446
5654
|
className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:200ms]"
|
|
5447
5655
|
}),
|
|
5448
|
-
/* @__PURE__ */
|
|
5656
|
+
/* @__PURE__ */ jsx20("span", {
|
|
5449
5657
|
className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:400ms]"
|
|
5450
5658
|
})
|
|
5451
5659
|
]
|
|
@@ -5456,7 +5664,7 @@ function TypingIndicator() {
|
|
|
5456
5664
|
}
|
|
5457
5665
|
|
|
5458
5666
|
// src/components/MessageList.tsx
|
|
5459
|
-
import { jsx as
|
|
5667
|
+
import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
5460
5668
|
var BOTTOM_THRESHOLD_PX = 32;
|
|
5461
5669
|
function isPlanVisible(plan) {
|
|
5462
5670
|
return !!plan && plan.steps.length > 0 && plan.state !== "abandoned";
|
|
@@ -5470,17 +5678,17 @@ function MessageList({
|
|
|
5470
5678
|
autoFocus = false,
|
|
5471
5679
|
readOnly = false
|
|
5472
5680
|
}) {
|
|
5473
|
-
const containerRef =
|
|
5474
|
-
const isPinnedToBottom =
|
|
5475
|
-
const lastSeenMessageId =
|
|
5476
|
-
const [showJumpToLatest, setShowJumpToLatest] =
|
|
5681
|
+
const containerRef = useRef22(null);
|
|
5682
|
+
const isPinnedToBottom = useRef22(true);
|
|
5683
|
+
const lastSeenMessageId = useRef22(undefined);
|
|
5684
|
+
const [showJumpToLatest, setShowJumpToLatest] = useState20(false);
|
|
5477
5685
|
const lastMessage = messages.length > 0 ? messages[messages.length - 1] : undefined;
|
|
5478
|
-
const [dismissedPlanId, setDismissedPlanId] =
|
|
5479
|
-
const dismissPlan =
|
|
5686
|
+
const [dismissedPlanId, setDismissedPlanId] = useState20(null);
|
|
5687
|
+
const dismissPlan = useCallback17(() => {
|
|
5480
5688
|
if (plan)
|
|
5481
5689
|
setDismissedPlanId(plan.planId);
|
|
5482
5690
|
}, [plan]);
|
|
5483
|
-
const handleScroll =
|
|
5691
|
+
const handleScroll = useCallback17(() => {
|
|
5484
5692
|
const container = containerRef.current;
|
|
5485
5693
|
if (!container)
|
|
5486
5694
|
return;
|
|
@@ -5489,7 +5697,7 @@ function MessageList({
|
|
|
5489
5697
|
isPinnedToBottom.current = pinned;
|
|
5490
5698
|
setShowJumpToLatest(!pinned);
|
|
5491
5699
|
}, []);
|
|
5492
|
-
const jumpToLatest =
|
|
5700
|
+
const jumpToLatest = useCallback17(() => {
|
|
5493
5701
|
const container = containerRef.current;
|
|
5494
5702
|
if (!container)
|
|
5495
5703
|
return;
|
|
@@ -5512,49 +5720,49 @@ function MessageList({
|
|
|
5512
5720
|
container.scrollTop = container.scrollHeight;
|
|
5513
5721
|
}, [messages.length, lastMessage?.content]);
|
|
5514
5722
|
const showTyping = isStreaming && lastMessage?.role === "assistant" && lastMessage.content === "";
|
|
5515
|
-
return /* @__PURE__ */
|
|
5723
|
+
return /* @__PURE__ */ jsxs17("div", {
|
|
5516
5724
|
className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
|
|
5517
5725
|
children: [
|
|
5518
|
-
/* @__PURE__ */
|
|
5726
|
+
/* @__PURE__ */ jsxs17("div", {
|
|
5519
5727
|
className: "skippr:relative skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
|
|
5520
5728
|
children: [
|
|
5521
|
-
/* @__PURE__ */
|
|
5729
|
+
/* @__PURE__ */ jsxs17("div", {
|
|
5522
5730
|
ref: containerRef,
|
|
5523
5731
|
onScroll: handleScroll,
|
|
5524
5732
|
className: "skippr:min-h-0 skippr:flex-1 skippr:space-y-4 skippr:overflow-y-auto skippr:p-4 skippr:[overflow-anchor:none]",
|
|
5525
5733
|
children: [
|
|
5526
|
-
messages.length === 0 && !showTyping && (readOnly ? /* @__PURE__ */
|
|
5734
|
+
messages.length === 0 && !showTyping && (readOnly ? /* @__PURE__ */ jsx21("p", {
|
|
5527
5735
|
className: "skippr:px-2 skippr:py-6 skippr:text-center skippr:text-sm skippr:text-muted-foreground",
|
|
5528
5736
|
children: "No messages in this conversation yet."
|
|
5529
|
-
}) : /* @__PURE__ */
|
|
5737
|
+
}) : /* @__PURE__ */ jsx21(LoadingDots, {
|
|
5530
5738
|
label: "Waiting for conversation to begin..."
|
|
5531
5739
|
})),
|
|
5532
|
-
messages.map((message) => /* @__PURE__ */
|
|
5740
|
+
messages.map((message) => /* @__PURE__ */ jsx21(ChatMessage, {
|
|
5533
5741
|
message
|
|
5534
5742
|
}, message.id)),
|
|
5535
|
-
showTyping && /* @__PURE__ */
|
|
5743
|
+
showTyping && /* @__PURE__ */ jsx21(TypingIndicator, {})
|
|
5536
5744
|
]
|
|
5537
5745
|
}),
|
|
5538
|
-
showJumpToLatest && /* @__PURE__ */
|
|
5746
|
+
showJumpToLatest && /* @__PURE__ */ jsx21("button", {
|
|
5539
5747
|
type: "button",
|
|
5540
5748
|
onClick: jumpToLatest,
|
|
5541
5749
|
"aria-label": "Jump to latest message",
|
|
5542
5750
|
className: "skippr:-translate-x-1/2 skippr:absolute skippr:bottom-3 skippr:left-1/2 skippr:flex skippr:min-h-11 skippr:min-w-11 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-full skippr:border skippr:border-border skippr:bg-background skippr:p-1.5 skippr:text-foreground skippr:shadow-md skippr:transition-colors skippr:hover:bg-muted",
|
|
5543
|
-
children: /* @__PURE__ */
|
|
5751
|
+
children: /* @__PURE__ */ jsx21(ChevronDown, {
|
|
5544
5752
|
className: "skippr:size-4"
|
|
5545
5753
|
})
|
|
5546
5754
|
})
|
|
5547
5755
|
]
|
|
5548
5756
|
}),
|
|
5549
|
-
sendChatMessage && isPlanVisible(plan) && plan.planId !== dismissedPlanId && /* @__PURE__ */
|
|
5757
|
+
sendChatMessage && isPlanVisible(plan) && plan.planId !== dismissedPlanId && /* @__PURE__ */ jsx21("div", {
|
|
5550
5758
|
className: "skippr:shrink-0 skippr:border-t skippr:border-border skippr:p-3",
|
|
5551
|
-
children: /* @__PURE__ */
|
|
5759
|
+
children: /* @__PURE__ */ jsx21(PlanCard, {
|
|
5552
5760
|
plan,
|
|
5553
5761
|
sendChatMessage,
|
|
5554
5762
|
onDismiss: dismissPlan
|
|
5555
5763
|
}, plan.planId)
|
|
5556
5764
|
}),
|
|
5557
|
-
!readOnly && sendChatMessage && /* @__PURE__ */
|
|
5765
|
+
!readOnly && sendChatMessage && /* @__PURE__ */ jsx21(ChatInput, {
|
|
5558
5766
|
sendChatMessage,
|
|
5559
5767
|
isSendingChat,
|
|
5560
5768
|
autoFocus
|
|
@@ -5564,49 +5772,49 @@ function MessageList({
|
|
|
5564
5772
|
}
|
|
5565
5773
|
|
|
5566
5774
|
// src/components/SessionAgenda.tsx
|
|
5567
|
-
import { jsx as
|
|
5775
|
+
import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
5568
5776
|
function SessionAgenda({ phases, hasStarted }) {
|
|
5569
5777
|
if (phases.length === 0 || !hasStarted) {
|
|
5570
|
-
return /* @__PURE__ */
|
|
5778
|
+
return /* @__PURE__ */ jsx22("div", {
|
|
5571
5779
|
className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
|
|
5572
|
-
children: /* @__PURE__ */
|
|
5780
|
+
children: /* @__PURE__ */ jsx22(LoadingDots, {
|
|
5573
5781
|
label: "Waiting for agenda to load..."
|
|
5574
5782
|
})
|
|
5575
5783
|
});
|
|
5576
5784
|
}
|
|
5577
|
-
return /* @__PURE__ */
|
|
5785
|
+
return /* @__PURE__ */ jsx22("div", {
|
|
5578
5786
|
className: "skippr:flex-1 skippr:overflow-y-auto skippr:px-4 skippr:py-4",
|
|
5579
|
-
children: /* @__PURE__ */
|
|
5787
|
+
children: /* @__PURE__ */ jsx22("div", {
|
|
5580
5788
|
className: "skippr:space-y-1",
|
|
5581
5789
|
children: phases.map((phase) => {
|
|
5582
5790
|
const isActive = phase.status === "active";
|
|
5583
5791
|
const isCompleted = phase.status === "completed";
|
|
5584
|
-
return /* @__PURE__ */
|
|
5792
|
+
return /* @__PURE__ */ jsxs18("div", {
|
|
5585
5793
|
className: cn("skippr:flex skippr:items-start skippr:gap-2.5 skippr:rounded-lg skippr:p-2 skippr:transition-colors", isActive && "skippr:bg-primary/10"),
|
|
5586
5794
|
children: [
|
|
5587
|
-
/* @__PURE__ */
|
|
5795
|
+
/* @__PURE__ */ jsx22("div", {
|
|
5588
5796
|
className: "skippr:mt-0.5",
|
|
5589
|
-
children: isCompleted ? /* @__PURE__ */
|
|
5797
|
+
children: isCompleted ? /* @__PURE__ */ jsx22(CircleCheck, {
|
|
5590
5798
|
className: "skippr:size-4 skippr:text-chart-3"
|
|
5591
|
-
}) : isActive ? /* @__PURE__ */
|
|
5799
|
+
}) : isActive ? /* @__PURE__ */ jsx22(Circle, {
|
|
5592
5800
|
className: "skippr:size-4 skippr:fill-primary/30 skippr:text-primary"
|
|
5593
|
-
}) : /* @__PURE__ */
|
|
5801
|
+
}) : /* @__PURE__ */ jsx22(Circle, {
|
|
5594
5802
|
className: "skippr:size-4 skippr:text-muted-foreground/30"
|
|
5595
5803
|
})
|
|
5596
5804
|
}),
|
|
5597
|
-
/* @__PURE__ */
|
|
5805
|
+
/* @__PURE__ */ jsxs18("div", {
|
|
5598
5806
|
className: "skippr:min-w-0 skippr:flex-1",
|
|
5599
5807
|
children: [
|
|
5600
|
-
/* @__PURE__ */
|
|
5808
|
+
/* @__PURE__ */ jsx22("p", {
|
|
5601
5809
|
className: cn("skippr:text-sm", isCompleted && "skippr:text-muted-foreground skippr:line-through", isActive && "skippr:font-medium skippr:text-foreground", phase.status === "pending" && "skippr:text-muted-foreground"),
|
|
5602
5810
|
children: phase.name
|
|
5603
5811
|
}),
|
|
5604
|
-
phase.highlights.length > 0 && /* @__PURE__ */
|
|
5812
|
+
phase.highlights.length > 0 && /* @__PURE__ */ jsx22("ul", {
|
|
5605
5813
|
className: "skippr:mt-1 skippr:space-y-0.5",
|
|
5606
|
-
children: phase.highlights.map((text) => /* @__PURE__ */
|
|
5814
|
+
children: phase.highlights.map((text) => /* @__PURE__ */ jsxs18("li", {
|
|
5607
5815
|
className: cn("skippr:flex skippr:items-center skippr:gap-1.5 skippr:text-[11px] skippr:leading-tight", isCompleted ? "skippr:text-muted-foreground/40 skippr:line-through" : "skippr:text-muted-foreground/70"),
|
|
5608
5816
|
children: [
|
|
5609
|
-
/* @__PURE__ */
|
|
5817
|
+
/* @__PURE__ */ jsx22("span", {
|
|
5610
5818
|
className: "skippr:size-1 skippr:shrink-0 skippr:rounded-full skippr:bg-current"
|
|
5611
5819
|
}),
|
|
5612
5820
|
text
|
|
@@ -5623,12 +5831,12 @@ function SessionAgenda({ phases, hasStarted }) {
|
|
|
5623
5831
|
}
|
|
5624
5832
|
|
|
5625
5833
|
// src/components/SessionWarningBanner.tsx
|
|
5626
|
-
import { jsx as
|
|
5834
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
5627
5835
|
var SESSION_WARNING_THRESHOLD_SECS = 60;
|
|
5628
5836
|
function SessionWarningBanner({ remaining }) {
|
|
5629
5837
|
if (remaining === null || remaining <= 0 || remaining > SESSION_WARNING_THRESHOLD_SECS)
|
|
5630
5838
|
return null;
|
|
5631
|
-
return /* @__PURE__ */
|
|
5839
|
+
return /* @__PURE__ */ jsx23("div", {
|
|
5632
5840
|
"data-testid": "session-warning-banner",
|
|
5633
5841
|
className: "skippr:bg-red-50 skippr:px-4 skippr:py-1.5 skippr:text-center skippr:text-xs skippr:font-medium skippr:text-red-700",
|
|
5634
5842
|
children: "Session ending soon"
|
|
@@ -5636,7 +5844,7 @@ function SessionWarningBanner({ remaining }) {
|
|
|
5636
5844
|
}
|
|
5637
5845
|
|
|
5638
5846
|
// src/components/Sidebar.tsx
|
|
5639
|
-
import { jsx as
|
|
5847
|
+
import { jsx as jsx24, jsxs as jsxs19, Fragment as Fragment3 } from "react/jsx-runtime";
|
|
5640
5848
|
var PANEL_GAP_PX = 12;
|
|
5641
5849
|
var PANEL_VIEWPORT_MARGIN_PX = 24;
|
|
5642
5850
|
var PANEL_MAX_HEIGHT_PX = 460;
|
|
@@ -5696,7 +5904,7 @@ function Sidebar({
|
|
|
5696
5904
|
height: panelExpanded ? availableHeight : `min(${PANEL_MAX_HEIGHT_PX}px, ${availableHeight})`
|
|
5697
5905
|
};
|
|
5698
5906
|
}
|
|
5699
|
-
|
|
5907
|
+
useEffect28(() => {
|
|
5700
5908
|
if (!isSidebar)
|
|
5701
5909
|
return;
|
|
5702
5910
|
const prop = position === "right" ? "marginRight" : "marginLeft";
|
|
@@ -5710,13 +5918,13 @@ function Sidebar({
|
|
|
5710
5918
|
document.body.style.transition = "";
|
|
5711
5919
|
};
|
|
5712
5920
|
}, [isSidebar, isPanelOpen, position]);
|
|
5713
|
-
return /* @__PURE__ */
|
|
5921
|
+
return /* @__PURE__ */ jsxs19("div", {
|
|
5714
5922
|
ref: internalCtx?.panelRef,
|
|
5715
5923
|
className: cn("skippr:fixed skippr:z-[9999]", "skippr:bg-card", "skippr:flex skippr:flex-col", "skippr:overflow-hidden", isFloating && "skippr:border skippr:border-border skippr:rounded-2xl skippr:shadow-[0_8px_30px_rgba(0,0,0,0.16),0_4px_12px_rgba(0,0,0,0.08)]", isFloating && (position === "right" ? "skippr:right-6" : "skippr:left-6"), isFloating && "skippr:transition-[opacity,transform,height] skippr:duration-300 skippr:ease-in-out", isFloating && (popsDown ? position === "right" ? "skippr:origin-top-right" : "skippr:origin-top-left" : position === "right" ? "skippr:origin-bottom-right" : "skippr:origin-bottom-left"), isFloating && !isPanelOpen && "skippr:scale-0 skippr:opacity-0 skippr:pointer-events-none", isFloating && isPanelOpen && "skippr:scale-100 skippr:opacity-100", isSidebar && "skippr:top-0 skippr:h-full", isSidebar && "skippr:transition-[width] skippr:duration-300 skippr:ease-in-out", isSidebar && position === "right" && "skippr:right-0 skippr:border-l skippr:border-l-border", isSidebar && position === "left" && "skippr:left-0 skippr:border-r skippr:border-r-border", isSidebar && !isPanelOpen && "skippr:w-0 skippr:border-0"),
|
|
5716
5924
|
style: { width: isPanelOpen ? SIDEBAR_WIDTH : undefined, ...floatingStyle },
|
|
5717
5925
|
children: [
|
|
5718
|
-
!hideHeader && /* @__PURE__ */
|
|
5719
|
-
authFailed ? /* @__PURE__ */
|
|
5926
|
+
!hideHeader && /* @__PURE__ */ jsx24(ChatHeader, {}),
|
|
5927
|
+
authFailed ? /* @__PURE__ */ jsx24(AuthError, {}) : isAuthenticated ? /* @__PURE__ */ jsx24(AuthenticatedContent, {
|
|
5720
5928
|
isConnected,
|
|
5721
5929
|
isPaused,
|
|
5722
5930
|
isPausing,
|
|
@@ -5732,12 +5940,12 @@ function Sidebar({
|
|
|
5732
5940
|
onTalk: startDefaultSession,
|
|
5733
5941
|
talkLabel: startSessionLabel,
|
|
5734
5942
|
talkDisabled
|
|
5735
|
-
}) : usesHostAuth || isValidating ? /* @__PURE__ */
|
|
5943
|
+
}) : usesHostAuth || isValidating ? /* @__PURE__ */ jsx24("div", {
|
|
5736
5944
|
className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
|
|
5737
|
-
children: /* @__PURE__ */
|
|
5945
|
+
children: /* @__PURE__ */ jsx24(LoadingDots, {
|
|
5738
5946
|
label: "Loading..."
|
|
5739
5947
|
})
|
|
5740
|
-
}) : /* @__PURE__ */
|
|
5948
|
+
}) : /* @__PURE__ */ jsx24(LoginFlow, {
|
|
5741
5949
|
requestOtp,
|
|
5742
5950
|
verifyOtp,
|
|
5743
5951
|
error: authError,
|
|
@@ -5769,61 +5977,61 @@ function AuthenticatedContent({
|
|
|
5769
5977
|
if (isStarting && !isConnected) {
|
|
5770
5978
|
transitionLabel = "Reconnecting...";
|
|
5771
5979
|
}
|
|
5772
|
-
return /* @__PURE__ */
|
|
5980
|
+
return /* @__PURE__ */ jsxs19(Fragment3, {
|
|
5773
5981
|
children: [
|
|
5774
|
-
isConnected && /* @__PURE__ */
|
|
5775
|
-
showAgenda && /* @__PURE__ */
|
|
5982
|
+
isConnected && /* @__PURE__ */ jsx24(ConnectedBanner, {}),
|
|
5983
|
+
showAgenda && /* @__PURE__ */ jsxs19("div", {
|
|
5776
5984
|
className: "skippr:flex skippr:items-center skippr:gap-2 skippr:border-b skippr:border-border skippr:px-3 skippr:py-1",
|
|
5777
5985
|
children: [
|
|
5778
|
-
/* @__PURE__ */
|
|
5986
|
+
/* @__PURE__ */ jsxs19("button", {
|
|
5779
5987
|
type: "button",
|
|
5780
5988
|
className: cn("skippr:relative skippr:inline-flex skippr:cursor-pointer skippr:items-center skippr:gap-1.5 skippr:rounded-lg skippr:px-3 skippr:py-1.5 skippr:text-sm skippr:font-medium skippr:transition-all", activeTab === "chat" ? "skippr:text-foreground" : "skippr:text-muted-foreground skippr:hover:text-foreground"),
|
|
5781
5989
|
onClick: () => onTabChange("chat"),
|
|
5782
5990
|
children: [
|
|
5783
|
-
/* @__PURE__ */
|
|
5991
|
+
/* @__PURE__ */ jsx24(MessageCircle, {
|
|
5784
5992
|
className: "skippr:size-3.5"
|
|
5785
5993
|
}),
|
|
5786
5994
|
"Chat",
|
|
5787
|
-
activeTab === "chat" && /* @__PURE__ */
|
|
5995
|
+
activeTab === "chat" && /* @__PURE__ */ jsx24("span", {
|
|
5788
5996
|
className: "skippr:absolute skippr:-bottom-1 skippr:left-3 skippr:right-3 skippr:h-0.5 skippr:rounded-full skippr:bg-foreground"
|
|
5789
5997
|
})
|
|
5790
5998
|
]
|
|
5791
5999
|
}),
|
|
5792
|
-
/* @__PURE__ */
|
|
6000
|
+
/* @__PURE__ */ jsxs19("button", {
|
|
5793
6001
|
type: "button",
|
|
5794
6002
|
className: cn("skippr:relative skippr:inline-flex skippr:cursor-pointer skippr:items-center skippr:gap-1.5 skippr:rounded-lg skippr:px-3 skippr:py-1.5 skippr:text-sm skippr:font-medium skippr:transition-all", activeTab === "agenda" ? "skippr:text-foreground" : "skippr:text-muted-foreground skippr:hover:text-foreground"),
|
|
5795
6003
|
onClick: () => onTabChange("agenda"),
|
|
5796
6004
|
children: [
|
|
5797
|
-
/* @__PURE__ */
|
|
6005
|
+
/* @__PURE__ */ jsx24(Calendar, {
|
|
5798
6006
|
className: "skippr:size-3.5"
|
|
5799
6007
|
}),
|
|
5800
6008
|
"Agenda",
|
|
5801
|
-
activeTab === "agenda" && /* @__PURE__ */
|
|
6009
|
+
activeTab === "agenda" && /* @__PURE__ */ jsx24("span", {
|
|
5802
6010
|
className: "skippr:absolute skippr:-bottom-1 skippr:left-3 skippr:right-3 skippr:h-0.5 skippr:rounded-full skippr:bg-foreground"
|
|
5803
6011
|
})
|
|
5804
6012
|
]
|
|
5805
6013
|
})
|
|
5806
6014
|
]
|
|
5807
6015
|
}),
|
|
5808
|
-
/* @__PURE__ */
|
|
6016
|
+
/* @__PURE__ */ jsx24("div", {
|
|
5809
6017
|
className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
|
|
5810
|
-
children: isDisconnecting ? /* @__PURE__ */
|
|
6018
|
+
children: isDisconnecting ? /* @__PURE__ */ jsx24("div", {
|
|
5811
6019
|
className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
|
|
5812
|
-
children: /* @__PURE__ */
|
|
6020
|
+
children: /* @__PURE__ */ jsx24(LoadingDots, {
|
|
5813
6021
|
label: "Ending session..."
|
|
5814
6022
|
})
|
|
5815
|
-
}) : inSession ? /* @__PURE__ */
|
|
6023
|
+
}) : inSession ? /* @__PURE__ */ jsxs19(Fragment3, {
|
|
5816
6024
|
children: [
|
|
5817
|
-
transitionLabel && /* @__PURE__ */
|
|
6025
|
+
transitionLabel && /* @__PURE__ */ jsx24("div", {
|
|
5818
6026
|
className: "skippr:shrink-0 skippr:border-b skippr:border-border skippr:bg-muted/50 skippr:px-3 skippr:py-1.5 skippr:text-center skippr:text-xs skippr:text-muted-foreground",
|
|
5819
6027
|
children: transitionLabel
|
|
5820
6028
|
}),
|
|
5821
|
-
/* @__PURE__ */
|
|
6029
|
+
/* @__PURE__ */ jsx24(ConnectedBody, {
|
|
5822
6030
|
activeTab: effectiveTab,
|
|
5823
6031
|
autoFocusChat
|
|
5824
6032
|
})
|
|
5825
6033
|
]
|
|
5826
|
-
}) : /* @__PURE__ */
|
|
6034
|
+
}) : /* @__PURE__ */ jsx24(IdleHistory, {
|
|
5827
6035
|
activeTab: effectiveTab,
|
|
5828
6036
|
history: idleHistory,
|
|
5829
6037
|
onTalk,
|
|
@@ -5832,22 +6040,22 @@ function AuthenticatedContent({
|
|
|
5832
6040
|
error
|
|
5833
6041
|
})
|
|
5834
6042
|
}),
|
|
5835
|
-
!hideControls && /* @__PURE__ */
|
|
6043
|
+
!hideControls && /* @__PURE__ */ jsx24("div", {
|
|
5836
6044
|
className: "skippr:shrink-0 skippr:border-t skippr:border-border",
|
|
5837
|
-
children: /* @__PURE__ */
|
|
6045
|
+
children: /* @__PURE__ */ jsxs19("div", {
|
|
5838
6046
|
className: "skippr:flex skippr:items-center skippr:justify-center skippr:gap-1 skippr:px-4 skippr:pt-1.5 skippr:pb-2 skippr:text-[10px] skippr:text-muted-foreground",
|
|
5839
6047
|
children: [
|
|
5840
|
-
/* @__PURE__ */
|
|
6048
|
+
/* @__PURE__ */ jsxs19("svg", {
|
|
5841
6049
|
viewBox: "21 21 109 109",
|
|
5842
6050
|
className: "skippr:size-3",
|
|
5843
6051
|
fill: "none",
|
|
5844
6052
|
"aria-hidden": "true",
|
|
5845
6053
|
children: [
|
|
5846
|
-
/* @__PURE__ */
|
|
6054
|
+
/* @__PURE__ */ jsx24("path", {
|
|
5847
6055
|
d: "M119.497 24C124.193 24 128 27.8071 128 32.5033V81.3974C128 83.0339 127.536 84.5616 126.735 85.8587L89.8936 57.4811L89.8943 57.4804C80.4203 50.1648 66.2971 56.7058 66.297 69.0147V89.9007H29.5033C24.8071 89.9007 21 86.0936 21 81.3974V32.5033C21 27.8071 24.8071 24 29.5033 24H119.497ZM76.2715 69.0147C76.2716 65.1724 80.7356 63.0111 83.7978 65.3755L115.637 89.9007H76.2715V69.0147Z",
|
|
5848
6056
|
fill: "currentColor"
|
|
5849
6057
|
}),
|
|
5850
|
-
/* @__PURE__ */
|
|
6058
|
+
/* @__PURE__ */ jsx24("path", {
|
|
5851
6059
|
d: "M83.7979 64.8856C80.7358 62.5211 76.2716 64.6824 76.2716 68.5247V120.892C76.2716 125.27 81.8518 127.191 84.5938 123.755L97.6194 107.437C98.1001 106.836 98.7119 106.35 99.4091 106.016C100.106 105.683 100.871 105.51 101.645 105.51H122.946C127.386 105.51 129.316 99.9436 125.81 97.2466L83.7979 64.8856Z",
|
|
5852
6060
|
className: "skippr:fill-brand"
|
|
5853
6061
|
})
|
|
@@ -5861,17 +6069,17 @@ function AuthenticatedContent({
|
|
|
5861
6069
|
});
|
|
5862
6070
|
}
|
|
5863
6071
|
function AuthError() {
|
|
5864
|
-
return /* @__PURE__ */
|
|
6072
|
+
return /* @__PURE__ */ jsxs19("div", {
|
|
5865
6073
|
className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:px-6 skippr:py-4 skippr:text-center",
|
|
5866
6074
|
children: [
|
|
5867
|
-
/* @__PURE__ */
|
|
6075
|
+
/* @__PURE__ */ jsx24(CircleAlert, {
|
|
5868
6076
|
className: "skippr:mb-3 skippr:size-7 skippr:text-destructive"
|
|
5869
6077
|
}),
|
|
5870
|
-
/* @__PURE__ */
|
|
6078
|
+
/* @__PURE__ */ jsx24("p", {
|
|
5871
6079
|
className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
|
|
5872
6080
|
children: "We couldn't verify your session"
|
|
5873
6081
|
}),
|
|
5874
|
-
/* @__PURE__ */
|
|
6082
|
+
/* @__PURE__ */ jsx24("p", {
|
|
5875
6083
|
className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
|
|
5876
6084
|
children: "Please contact administrator."
|
|
5877
6085
|
})
|
|
@@ -5880,7 +6088,7 @@ function AuthError() {
|
|
|
5880
6088
|
}
|
|
5881
6089
|
function ConnectedBanner() {
|
|
5882
6090
|
const remaining = useSessionRemaining();
|
|
5883
|
-
return /* @__PURE__ */
|
|
6091
|
+
return /* @__PURE__ */ jsx24(SessionWarningBanner, {
|
|
5884
6092
|
remaining
|
|
5885
6093
|
});
|
|
5886
6094
|
}
|
|
@@ -5893,43 +6101,43 @@ function IdleHistory({
|
|
|
5893
6101
|
error
|
|
5894
6102
|
}) {
|
|
5895
6103
|
if (history2.isLoading) {
|
|
5896
|
-
return /* @__PURE__ */
|
|
6104
|
+
return /* @__PURE__ */ jsx24("div", {
|
|
5897
6105
|
className: "skippr:flex skippr:flex-1 skippr:items-center skippr:justify-center",
|
|
5898
|
-
children: /* @__PURE__ */
|
|
6106
|
+
children: /* @__PURE__ */ jsx24(LoadingDots, {
|
|
5899
6107
|
label: "Loading conversation..."
|
|
5900
6108
|
})
|
|
5901
6109
|
});
|
|
5902
6110
|
}
|
|
5903
|
-
return /* @__PURE__ */
|
|
6111
|
+
return /* @__PURE__ */ jsxs19("div", {
|
|
5904
6112
|
className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col skippr:animate-skippr-tab-fade",
|
|
5905
6113
|
children: [
|
|
5906
|
-
activeTab === "agenda" ? /* @__PURE__ */
|
|
6114
|
+
activeTab === "agenda" ? /* @__PURE__ */ jsx24("div", {
|
|
5907
6115
|
className: "skippr:min-h-0 skippr:flex-1 skippr:overflow-y-auto",
|
|
5908
|
-
children: /* @__PURE__ */
|
|
6116
|
+
children: /* @__PURE__ */ jsx24(SessionAgenda, {
|
|
5909
6117
|
phases: history2.phases,
|
|
5910
6118
|
hasStarted: history2.phases.length > 0
|
|
5911
6119
|
})
|
|
5912
|
-
}) : /* @__PURE__ */
|
|
6120
|
+
}) : /* @__PURE__ */ jsx24(MessageList, {
|
|
5913
6121
|
messages: history2.messages,
|
|
5914
6122
|
isStreaming: false,
|
|
5915
6123
|
readOnly: true
|
|
5916
6124
|
}),
|
|
5917
|
-
/* @__PURE__ */
|
|
6125
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
5918
6126
|
className: "skippr:shrink-0 skippr:border-t skippr:border-border skippr:p-3",
|
|
5919
6127
|
children: [
|
|
5920
|
-
/* @__PURE__ */
|
|
6128
|
+
/* @__PURE__ */ jsxs19("button", {
|
|
5921
6129
|
type: "button",
|
|
5922
6130
|
onClick: onTalk,
|
|
5923
6131
|
disabled: talkDisabled,
|
|
5924
6132
|
className: "skippr:flex skippr:w-full skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:gap-2 skippr:rounded-xl skippr:bg-primary skippr:px-4 skippr:py-3 skippr:font-semibold skippr:text-[13px] skippr:text-primary-foreground skippr:transition-colors skippr:hover:bg-primary/90 skippr:disabled:cursor-not-allowed skippr:disabled:opacity-50",
|
|
5925
6133
|
children: [
|
|
5926
|
-
/* @__PURE__ */
|
|
6134
|
+
/* @__PURE__ */ jsx24(Mic, {
|
|
5927
6135
|
className: "skippr:size-4"
|
|
5928
6136
|
}),
|
|
5929
6137
|
talkLabel
|
|
5930
6138
|
]
|
|
5931
6139
|
}),
|
|
5932
|
-
error && /* @__PURE__ */
|
|
6140
|
+
error && /* @__PURE__ */ jsx24("p", {
|
|
5933
6141
|
className: "skippr:mt-2 skippr:text-center skippr:text-xs skippr:text-destructive",
|
|
5934
6142
|
children: error
|
|
5935
6143
|
})
|
|
@@ -5948,17 +6156,17 @@ function ConnectedBody({
|
|
|
5948
6156
|
const { agentControls, isPaused } = useLiveAgent();
|
|
5949
6157
|
const { isHeld } = useSessionHoldContext();
|
|
5950
6158
|
if (activeTab === "agenda") {
|
|
5951
|
-
return /* @__PURE__ */
|
|
6159
|
+
return /* @__PURE__ */ jsx24("div", {
|
|
5952
6160
|
className: "skippr:min-h-0 skippr:flex-1 skippr:overflow-y-auto skippr:animate-skippr-tab-fade",
|
|
5953
|
-
children: /* @__PURE__ */
|
|
6161
|
+
children: /* @__PURE__ */ jsx24(SessionAgenda, {
|
|
5954
6162
|
phases,
|
|
5955
6163
|
hasStarted: allMessages.length > 0 || agentState === "speaking"
|
|
5956
6164
|
})
|
|
5957
6165
|
}, "agenda");
|
|
5958
6166
|
}
|
|
5959
|
-
return /* @__PURE__ */
|
|
6167
|
+
return /* @__PURE__ */ jsx24("div", {
|
|
5960
6168
|
className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col skippr:animate-skippr-tab-fade",
|
|
5961
|
-
children: /* @__PURE__ */
|
|
6169
|
+
children: /* @__PURE__ */ jsx24(MessageList, {
|
|
5962
6170
|
messages: allMessages,
|
|
5963
6171
|
isStreaming: agentState === "speaking",
|
|
5964
6172
|
sendChatMessage,
|
|
@@ -5974,9 +6182,9 @@ function ConnectedBody({
|
|
|
5974
6182
|
import { useContext as useContext14 } from "react";
|
|
5975
6183
|
|
|
5976
6184
|
// src/components/Logo.tsx
|
|
5977
|
-
import { jsx as
|
|
6185
|
+
import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
5978
6186
|
function Logo({ className }) {
|
|
5979
|
-
return /* @__PURE__ */
|
|
6187
|
+
return /* @__PURE__ */ jsxs20("svg", {
|
|
5980
6188
|
width: "1em",
|
|
5981
6189
|
height: "1em",
|
|
5982
6190
|
viewBox: "0 0 200 200",
|
|
@@ -5986,20 +6194,20 @@ function Logo({ className }) {
|
|
|
5986
6194
|
"aria-label": "Skippr",
|
|
5987
6195
|
className,
|
|
5988
6196
|
children: [
|
|
5989
|
-
/* @__PURE__ */
|
|
6197
|
+
/* @__PURE__ */ jsx25("rect", {
|
|
5990
6198
|
width: "200",
|
|
5991
6199
|
height: "200",
|
|
5992
6200
|
rx: "40",
|
|
5993
6201
|
fill: "#2D2D3F"
|
|
5994
6202
|
}),
|
|
5995
|
-
/* @__PURE__ */
|
|
6203
|
+
/* @__PURE__ */ jsxs20("g", {
|
|
5996
6204
|
transform: "translate(100 100) scale(0.8) translate(-100 -100)",
|
|
5997
6205
|
children: [
|
|
5998
|
-
/* @__PURE__ */
|
|
6206
|
+
/* @__PURE__ */ jsx25("path", {
|
|
5999
6207
|
d: "M144.497 59C149.193 59 153 62.8071 153 67.5033V116.397C153 118.034 152.536 119.562 151.735 120.859L114.894 92.4811L114.894 92.4804C105.42 85.1648 91.2971 91.7058 91.297 104.015V124.901H54.5033C49.8071 124.901 46 121.094 46 116.397V67.5033C46 62.8071 49.8071 59 54.5033 59H144.497ZM101.272 104.015C101.272 100.172 105.736 98.0111 108.798 100.375L140.637 124.901H101.272V104.015Z",
|
|
6000
6208
|
fill: "white"
|
|
6001
6209
|
}),
|
|
6002
|
-
/* @__PURE__ */
|
|
6210
|
+
/* @__PURE__ */ jsx25("path", {
|
|
6003
6211
|
d: "M108.798 99.8856C105.736 97.5211 101.271 99.6824 101.271 103.525V155.892C101.271 160.27 106.852 162.191 109.594 158.755L122.619 142.437C123.1 141.836 123.712 141.35 124.409 141.016C125.106 140.683 125.871 140.51 126.645 140.51H147.946C152.386 140.51 154.316 134.944 150.81 132.247L108.798 99.8856Z",
|
|
6004
6212
|
className: "skippr:fill-brand"
|
|
6005
6213
|
})
|
|
@@ -6010,7 +6218,7 @@ function Logo({ className }) {
|
|
|
6010
6218
|
}
|
|
6011
6219
|
|
|
6012
6220
|
// src/components/SidebarTrigger.tsx
|
|
6013
|
-
import { jsx as
|
|
6221
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
6014
6222
|
function SidebarTrigger() {
|
|
6015
6223
|
const {
|
|
6016
6224
|
isPanelOpen,
|
|
@@ -6029,23 +6237,23 @@ function SidebarTrigger() {
|
|
|
6029
6237
|
if (isMinimized || isConnected || isStarting || isPausing)
|
|
6030
6238
|
return null;
|
|
6031
6239
|
const handleClick = isPanelOpen && minimizable ? minimizePanel : togglePanel;
|
|
6032
|
-
return /* @__PURE__ */
|
|
6240
|
+
return /* @__PURE__ */ jsx26("button", {
|
|
6033
6241
|
type: "button",
|
|
6034
6242
|
onClick: handleClick,
|
|
6035
6243
|
title: isPanelOpen ? "Close chat" : "Open chat",
|
|
6036
6244
|
"aria-label": isPanelOpen ? "Close chat" : "Open chat",
|
|
6037
6245
|
style: { bottom: triggerBottomPx(launcherBottomPx, popsDown) },
|
|
6038
6246
|
className: cn("skippr:fixed skippr:z-[9998]", "skippr:flex skippr:size-12 skippr:items-center skippr:justify-center", "skippr:shadow-[0_4px_16px_rgba(45,43,61,0.45),0_2px_4px_rgba(0,0,0,0.1)] skippr:transition-all", "skippr:cursor-pointer skippr:hover:brightness-110 skippr:hover:-translate-y-0.5 skippr:active:translate-y-0", isPanelOpen ? "skippr:rounded-[14px] skippr:bg-bubble skippr:text-white" : "skippr:rounded-[10px] skippr:overflow-hidden", position === "right" ? "skippr:right-6" : "skippr:left-6"),
|
|
6039
|
-
children: isPanelOpen ? /* @__PURE__ */
|
|
6247
|
+
children: isPanelOpen ? /* @__PURE__ */ jsx26(ChevronDown, {
|
|
6040
6248
|
className: "skippr:size-5"
|
|
6041
|
-
}) : /* @__PURE__ */
|
|
6249
|
+
}) : /* @__PURE__ */ jsx26(Logo, {
|
|
6042
6250
|
className: "skippr:size-12"
|
|
6043
6251
|
})
|
|
6044
6252
|
});
|
|
6045
6253
|
}
|
|
6046
6254
|
|
|
6047
6255
|
// src/components/LiveAgent.tsx
|
|
6048
|
-
import { jsx as
|
|
6256
|
+
import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
6049
6257
|
function readSavedLauncherBottom() {
|
|
6050
6258
|
try {
|
|
6051
6259
|
const saved = Number.parseInt(localStorage.getItem("skippr_widget_bottom") ?? "", 10);
|
|
@@ -6055,7 +6263,7 @@ function readSavedLauncherBottom() {
|
|
|
6055
6263
|
}
|
|
6056
6264
|
}
|
|
6057
6265
|
function AgentCursorMount({ animated }) {
|
|
6058
|
-
return /* @__PURE__ */
|
|
6266
|
+
return /* @__PURE__ */ jsx27(AgentCursor, {
|
|
6059
6267
|
target: useAgentCursor(),
|
|
6060
6268
|
animated
|
|
6061
6269
|
});
|
|
@@ -6063,8 +6271,8 @@ function AgentCursorMount({ animated }) {
|
|
|
6063
6271
|
function PlanPanelOpener() {
|
|
6064
6272
|
const plan = usePlanUpdates();
|
|
6065
6273
|
const { expandPanel } = useLiveAgent();
|
|
6066
|
-
const surfacedPlanIdRef =
|
|
6067
|
-
|
|
6274
|
+
const surfacedPlanIdRef = useRef23(null);
|
|
6275
|
+
useEffect29(() => {
|
|
6068
6276
|
if (plan?.state !== "proposed" || surfacedPlanIdRef.current === plan.planId)
|
|
6069
6277
|
return;
|
|
6070
6278
|
surfacedPlanIdRef.current = plan.planId;
|
|
@@ -6104,18 +6312,18 @@ function LiveAgent(props) {
|
|
|
6104
6312
|
const auth = useAuth({ appKey });
|
|
6105
6313
|
const usesHostAuth = !!getUserToken || !!userToken || !!authTokenProp;
|
|
6106
6314
|
const effectiveAuthToken = usesHostAuth ? authTokenProp : auth.authToken ?? undefined;
|
|
6107
|
-
const [activeModule, setActiveModule] =
|
|
6108
|
-
const minimizeOnSessionStart =
|
|
6315
|
+
const [activeModule, setActiveModule] = useState21(null);
|
|
6316
|
+
const minimizeOnSessionStart = useCallback18(() => {
|
|
6109
6317
|
if (minimizable) {
|
|
6110
6318
|
setIsMinimized(true);
|
|
6111
6319
|
setIsPanelOpen(false);
|
|
6112
6320
|
}
|
|
6113
6321
|
}, [minimizable]);
|
|
6114
|
-
const expandOnSessionStartError =
|
|
6322
|
+
const expandOnSessionStartError = useCallback18(() => {
|
|
6115
6323
|
setIsMinimized(false);
|
|
6116
6324
|
setIsPanelOpen(true);
|
|
6117
6325
|
}, []);
|
|
6118
|
-
const minimizeOnSessionDisconnect =
|
|
6326
|
+
const minimizeOnSessionDisconnect = useCallback18(() => {
|
|
6119
6327
|
setActiveModule(null);
|
|
6120
6328
|
if (minimizable) {
|
|
6121
6329
|
setIsMinimized(true);
|
|
@@ -6150,30 +6358,30 @@ function LiveAgent(props) {
|
|
|
6150
6358
|
onStartError: expandOnSessionStartError,
|
|
6151
6359
|
onDisconnect: minimizeOnSessionDisconnect
|
|
6152
6360
|
});
|
|
6153
|
-
const teardownInFlightRef =
|
|
6361
|
+
const teardownInFlightRef = useRef23(false);
|
|
6154
6362
|
teardownInFlightRef.current = isPaused || isPausing || isDisconnecting;
|
|
6155
|
-
const handleRoomDisconnected =
|
|
6363
|
+
const handleRoomDisconnected = useCallback18(() => {
|
|
6156
6364
|
if (teardownInFlightRef.current)
|
|
6157
6365
|
return;
|
|
6158
6366
|
disconnect();
|
|
6159
6367
|
}, [disconnect]);
|
|
6160
6368
|
const isSessionLive = connection !== null || isStarting || isPausing || isDisconnecting;
|
|
6161
|
-
const [isPanelOpen, setIsPanelOpen] =
|
|
6162
|
-
const [isMinimized, setIsMinimized] =
|
|
6163
|
-
const [sidebarTab, setSidebarTab] =
|
|
6164
|
-
const [phasesSnapshot, setPhasesSnapshot] =
|
|
6165
|
-
const [textMode, setTextMode] =
|
|
6166
|
-
const [panelExpanded, setPanelExpanded] =
|
|
6167
|
-
const togglePanelExpanded =
|
|
6168
|
-
const panelRef =
|
|
6169
|
-
const controlBarRef =
|
|
6170
|
-
const [isDragging, setIsDragging] =
|
|
6171
|
-
const setTextModeState =
|
|
6369
|
+
const [isPanelOpen, setIsPanelOpen] = useState21(defaultOpen);
|
|
6370
|
+
const [isMinimized, setIsMinimized] = useState21(minimizable && !defaultOpen);
|
|
6371
|
+
const [sidebarTab, setSidebarTab] = useState21("agenda");
|
|
6372
|
+
const [phasesSnapshot, setPhasesSnapshot] = useState21([]);
|
|
6373
|
+
const [textMode, setTextMode] = useState21(false);
|
|
6374
|
+
const [panelExpanded, setPanelExpanded] = useState21(false);
|
|
6375
|
+
const togglePanelExpanded = useCallback18(() => setPanelExpanded((prev) => !prev), []);
|
|
6376
|
+
const panelRef = useRef23(null);
|
|
6377
|
+
const controlBarRef = useRef23(null);
|
|
6378
|
+
const [isDragging, setIsDragging] = useState21(false);
|
|
6379
|
+
const setTextModeState = useCallback18((enabled) => {
|
|
6172
6380
|
setTextMode(enabled);
|
|
6173
6381
|
}, []);
|
|
6174
6382
|
const isConnected = connection !== null;
|
|
6175
6383
|
const showControlBar = isConnected || isStarting || isPausing;
|
|
6176
|
-
|
|
6384
|
+
useEffect29(() => {
|
|
6177
6385
|
if (!isConnected)
|
|
6178
6386
|
setTextModeState(false);
|
|
6179
6387
|
}, [isConnected, setTextModeState]);
|
|
@@ -6201,7 +6409,7 @@ function LiveAgent(props) {
|
|
|
6201
6409
|
const agentMode = operatingModule?.mode ?? null;
|
|
6202
6410
|
const shouldAnimateCursor = operatingModule?.uiPreferences?.animateCursor ?? animateAgentCursor;
|
|
6203
6411
|
const resumableSession = useMemo7(() => getResumableSession(operatingModule), [operatingModule]);
|
|
6204
|
-
const resumeSession =
|
|
6412
|
+
const resumeSession = useCallback18(async () => {
|
|
6205
6413
|
if (!resumableSession)
|
|
6206
6414
|
return;
|
|
6207
6415
|
await startSession({
|
|
@@ -6210,7 +6418,7 @@ function LiveAgent(props) {
|
|
|
6210
6418
|
existingSessionId: resumableSession.id
|
|
6211
6419
|
});
|
|
6212
6420
|
}, [resumableSession, startSession, agentControls]);
|
|
6213
|
-
const selectModule =
|
|
6421
|
+
const selectModule = useCallback18((moduleId, opts) => {
|
|
6214
6422
|
const found = availableModules.find((m) => m.id === moduleId);
|
|
6215
6423
|
if (!found)
|
|
6216
6424
|
return;
|
|
@@ -6222,7 +6430,7 @@ function LiveAgent(props) {
|
|
|
6222
6430
|
autoStarted: opts?.autoStarted
|
|
6223
6431
|
});
|
|
6224
6432
|
}, [availableModules, startSession]);
|
|
6225
|
-
const startAdoptionSession =
|
|
6433
|
+
const startAdoptionSession = useCallback18((goal) => {
|
|
6226
6434
|
attendGoal(goal.goalId);
|
|
6227
6435
|
const found = availableModules.find((m) => m.id === goal.agentId);
|
|
6228
6436
|
if (found)
|
|
@@ -6233,9 +6441,9 @@ function LiveAgent(props) {
|
|
|
6233
6441
|
adoptionGoalId: goal.goalId
|
|
6234
6442
|
});
|
|
6235
6443
|
}, [attendGoal, availableModules, startSession]);
|
|
6236
|
-
const [welcomeDismissed, setWelcomeDismissed] =
|
|
6237
|
-
const dismissWelcome =
|
|
6238
|
-
const [currentPosition, setCurrentPosition] =
|
|
6444
|
+
const [welcomeDismissed, setWelcomeDismissed] = useState21(false);
|
|
6445
|
+
const dismissWelcome = useCallback18(() => setWelcomeDismissed(true), []);
|
|
6446
|
+
const [currentPosition, setCurrentPosition] = useState21(() => {
|
|
6239
6447
|
try {
|
|
6240
6448
|
const saved = localStorage.getItem("skippr_widget_position");
|
|
6241
6449
|
if (saved === "left" || saved === "right")
|
|
@@ -6243,18 +6451,18 @@ function LiveAgent(props) {
|
|
|
6243
6451
|
} catch {}
|
|
6244
6452
|
return position;
|
|
6245
6453
|
});
|
|
6246
|
-
const setPositionWithPersist =
|
|
6454
|
+
const setPositionWithPersist = useCallback18((pos) => {
|
|
6247
6455
|
setCurrentPosition(pos);
|
|
6248
6456
|
try {
|
|
6249
6457
|
localStorage.setItem("skippr_widget_position", pos);
|
|
6250
6458
|
} catch {}
|
|
6251
6459
|
}, []);
|
|
6252
6460
|
const savedLauncherBottom = readSavedLauncherBottom();
|
|
6253
|
-
const hasDraggedRef =
|
|
6254
|
-
const verticalAlignRef =
|
|
6255
|
-
const [launcherBottomPx, setLauncherBottomPxState] =
|
|
6256
|
-
const [popsDown, setPopsDown] =
|
|
6257
|
-
const setLauncherBottomPx =
|
|
6461
|
+
const hasDraggedRef = useRef23(savedLauncherBottom !== null);
|
|
6462
|
+
const verticalAlignRef = useRef23(verticalAlign);
|
|
6463
|
+
const [launcherBottomPx, setLauncherBottomPxState] = useState21(() => savedLauncherBottom !== null ? clampLauncherBottom(savedLauncherBottom) : verticalAlignToBottomPx(verticalAlign));
|
|
6464
|
+
const [popsDown, setPopsDown] = useState21(() => launcherPopsDown(launcherBottomPx));
|
|
6465
|
+
const setLauncherBottomPx = useCallback18((px) => {
|
|
6258
6466
|
hasDraggedRef.current = true;
|
|
6259
6467
|
setLauncherBottomPxState(px);
|
|
6260
6468
|
setPopsDown(launcherPopsDown(px));
|
|
@@ -6262,13 +6470,13 @@ function LiveAgent(props) {
|
|
|
6262
6470
|
localStorage.setItem("skippr_widget_bottom", String(px));
|
|
6263
6471
|
} catch {}
|
|
6264
6472
|
}, []);
|
|
6265
|
-
const launcherBottomPxRef =
|
|
6473
|
+
const launcherBottomPxRef = useRef23(launcherBottomPx);
|
|
6266
6474
|
launcherBottomPxRef.current = launcherBottomPx;
|
|
6267
|
-
const commitLauncherDrop =
|
|
6475
|
+
const commitLauncherDrop = useCallback18(({ side, bottomPx }) => {
|
|
6268
6476
|
setPositionWithPersist(side);
|
|
6269
6477
|
setLauncherBottomPx(bottomPx);
|
|
6270
6478
|
}, [setPositionWithPersist, setLauncherBottomPx]);
|
|
6271
|
-
|
|
6479
|
+
useEffect29(() => {
|
|
6272
6480
|
const syncToViewport = () => {
|
|
6273
6481
|
const next = hasDraggedRef.current ? clampLauncherBottom(launcherBottomPxRef.current) : verticalAlignToBottomPx(verticalAlignRef.current);
|
|
6274
6482
|
setLauncherBottomPxState(next);
|
|
@@ -6278,26 +6486,26 @@ function LiveAgent(props) {
|
|
|
6278
6486
|
window.addEventListener("resize", syncToViewport);
|
|
6279
6487
|
return () => window.removeEventListener("resize", syncToViewport);
|
|
6280
6488
|
}, []);
|
|
6281
|
-
const openPanel =
|
|
6282
|
-
const closePanel =
|
|
6283
|
-
const togglePanel =
|
|
6284
|
-
const expandPanel =
|
|
6489
|
+
const openPanel = useCallback18(() => setIsPanelOpen(true), []);
|
|
6490
|
+
const closePanel = useCallback18(() => setIsPanelOpen(false), []);
|
|
6491
|
+
const togglePanel = useCallback18(() => setIsPanelOpen((prev) => !prev), []);
|
|
6492
|
+
const expandPanel = useCallback18(() => {
|
|
6285
6493
|
setIsMinimized(false);
|
|
6286
6494
|
setIsPanelOpen(true);
|
|
6287
6495
|
}, []);
|
|
6288
|
-
const minimizePanel =
|
|
6496
|
+
const minimizePanel = useCallback18(() => {
|
|
6289
6497
|
if (!minimizable)
|
|
6290
6498
|
return;
|
|
6291
6499
|
setIsMinimized(true);
|
|
6292
6500
|
setIsPanelOpen(false);
|
|
6293
6501
|
}, [minimizable]);
|
|
6294
|
-
const pauseSessionAndMinimize =
|
|
6502
|
+
const pauseSessionAndMinimize = useCallback18(async () => {
|
|
6295
6503
|
await pauseSession();
|
|
6296
6504
|
minimizePanel();
|
|
6297
6505
|
}, [pauseSession, minimizePanel]);
|
|
6298
6506
|
const isAuthenticated = bearerToken !== null || auth.isAuthenticated;
|
|
6299
6507
|
const defaultAgentId = hostAgentId ?? defaultSelection.agentId;
|
|
6300
|
-
const startDefaultSession =
|
|
6508
|
+
const startDefaultSession = useCallback18(() => {
|
|
6301
6509
|
const target = availableModules.find((m) => m.id === defaultAgentId);
|
|
6302
6510
|
if (!target)
|
|
6303
6511
|
return;
|
|
@@ -6460,45 +6668,45 @@ function LiveAgent(props) {
|
|
|
6460
6668
|
adoptionGoals,
|
|
6461
6669
|
startAdoptionSession
|
|
6462
6670
|
]);
|
|
6463
|
-
return /* @__PURE__ */
|
|
6671
|
+
return /* @__PURE__ */ jsx27(LiveAgentContext.Provider, {
|
|
6464
6672
|
value: ctx,
|
|
6465
|
-
children: /* @__PURE__ */
|
|
6673
|
+
children: /* @__PURE__ */ jsxs21(LiveKitRoom, {
|
|
6466
6674
|
serverUrl: connection?.livekitUrl,
|
|
6467
6675
|
token: connection?.token,
|
|
6468
6676
|
connect: shouldConnect,
|
|
6469
6677
|
audio: true,
|
|
6470
6678
|
onDisconnected: handleRoomDisconnected,
|
|
6471
6679
|
children: [
|
|
6472
|
-
connection && !textMode && /* @__PURE__ */
|
|
6473
|
-
connection && captureMode === CAPTURE_MODE.Screenshare && /* @__PURE__ */
|
|
6680
|
+
connection && !textMode && /* @__PURE__ */ jsx27(RoomAudioRenderer, {}),
|
|
6681
|
+
connection && captureMode === CAPTURE_MODE.Screenshare && /* @__PURE__ */ jsx27(AutoStartMedia, {
|
|
6474
6682
|
pendingScreenStream,
|
|
6475
|
-
|
|
6683
|
+
pushOrTapMicMode: isRequestResponseMicMode(agentControls?.micMode)
|
|
6476
6684
|
}),
|
|
6477
|
-
connection && captureMode === CAPTURE_MODE.Auto && /* @__PURE__ */
|
|
6478
|
-
|
|
6685
|
+
connection && captureMode === CAPTURE_MODE.Auto && /* @__PURE__ */ jsx27(DomCapture, {
|
|
6686
|
+
pushOrTapMicMode: isRequestResponseMicMode(agentControls?.micMode)
|
|
6479
6687
|
}),
|
|
6480
|
-
/* @__PURE__ */
|
|
6688
|
+
/* @__PURE__ */ jsxs21(ShadowHost, {
|
|
6481
6689
|
children: [
|
|
6482
|
-
connection && captureMode === CAPTURE_MODE.Auto && agentControls?.highlight && /* @__PURE__ */
|
|
6483
|
-
connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */
|
|
6484
|
-
connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */
|
|
6485
|
-
connection && captureMode === CAPTURE_MODE.Auto && (agentControls?.highlight || agentControls?.actions) && /* @__PURE__ */
|
|
6690
|
+
connection && captureMode === CAPTURE_MODE.Auto && agentControls?.highlight && /* @__PURE__ */ jsx27(HighlightOverlay, {}),
|
|
6691
|
+
connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */ jsx27(PageActionHandler, {}),
|
|
6692
|
+
connection && captureMode === CAPTURE_MODE.Auto && agentControls?.actions && /* @__PURE__ */ jsx27(PlanPanelOpener, {}),
|
|
6693
|
+
connection && captureMode === CAPTURE_MODE.Auto && (agentControls?.highlight || agentControls?.actions) && /* @__PURE__ */ jsx27(AgentCursorMount, {
|
|
6486
6694
|
animated: shouldAnimateCursor
|
|
6487
6695
|
}),
|
|
6488
|
-
/* @__PURE__ */
|
|
6489
|
-
children: /* @__PURE__ */
|
|
6490
|
-
children: /* @__PURE__ */
|
|
6491
|
-
children: /* @__PURE__ */
|
|
6696
|
+
/* @__PURE__ */ jsx27(SessionHoldProvider, {
|
|
6697
|
+
children: /* @__PURE__ */ jsx27(VoiceTurnProvider, {
|
|
6698
|
+
children: /* @__PURE__ */ jsx27(TranscriptionsProvider, {
|
|
6699
|
+
children: /* @__PURE__ */ jsxs21("div", {
|
|
6492
6700
|
id: WIDGET_ROOT_ID,
|
|
6493
6701
|
children: [
|
|
6494
|
-
isMinimized && !showControlBar && /* @__PURE__ */
|
|
6702
|
+
isMinimized && !showControlBar && /* @__PURE__ */ jsx27(MinimizedBubble, {
|
|
6495
6703
|
welcomeMessage,
|
|
6496
6704
|
welcomeDismissed,
|
|
6497
6705
|
onDismissWelcome: dismissWelcome
|
|
6498
6706
|
}),
|
|
6499
|
-
showControlBar && !hideControls && /* @__PURE__ */
|
|
6500
|
-
/* @__PURE__ */
|
|
6501
|
-
/* @__PURE__ */
|
|
6707
|
+
showControlBar && !hideControls && /* @__PURE__ */ jsx27(SessionControlBar, {}),
|
|
6708
|
+
/* @__PURE__ */ jsx27(SidebarTrigger, {}),
|
|
6709
|
+
/* @__PURE__ */ jsx27(Sidebar, {
|
|
6502
6710
|
hideControls,
|
|
6503
6711
|
hideHeader,
|
|
6504
6712
|
startSessionLabel
|