@skippr/live-agent-sdk 0.67.0 → 0.69.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 +659 -518
- package/dist/skippr-sdk.css +1 -1
- package/dist/skippr-sdk.js +135 -135
- package/dist/types/components/PausedCountdown.d.ts +4 -0
- package/dist/types/context/LiveAgentContext.d.ts +3 -0
- package/dist/types/hooks/useLauncherDrag.d.ts +1 -1
- package/dist/types/hooks/useSession.d.ts +1 -0
- package/dist/types/hooks/useSessionHold.d.ts +13 -0
- package/dist/types/lib/constants.d.ts +2 -1
- package/package.json +1 -1
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 useCallback15, useEffect as useEffect25, useMemo as useMemo6, useRef as useRef17, useState as useState18 } from "react";
|
|
12
12
|
|
|
13
13
|
// src/capture/useAgentCursor.ts
|
|
14
14
|
import { useEffect, useState } from "react";
|
|
@@ -416,7 +416,7 @@ function useLiveAgent() {
|
|
|
416
416
|
import { useCallback as useCallback4 } from "react";
|
|
417
417
|
|
|
418
418
|
// src/lib/constants.ts
|
|
419
|
-
var SIDEBAR_WIDTH =
|
|
419
|
+
var SIDEBAR_WIDTH = 280;
|
|
420
420
|
var WIDGET_ROOT_ID = "skippr-sdk-root";
|
|
421
421
|
var REF_ATTR = "data-skippr-ref";
|
|
422
422
|
var PRIVATE_ATTR = "data-skippr-private";
|
|
@@ -426,6 +426,7 @@ var HIGHLIGHT_TOPIC = "skippr.highlight";
|
|
|
426
426
|
var PAGE_ACTIONS_TOPIC = "skippr.page-actions";
|
|
427
427
|
var TEXT_MODE_TOPIC = "skippr.text-mode";
|
|
428
428
|
var ACTION_CONTROL_TOPIC = "skippr.action-control";
|
|
429
|
+
var SESSION_HOLD_TOPIC = "skippr.session-hold";
|
|
429
430
|
var PLAN_ATTR = "skippr.action-plan";
|
|
430
431
|
var NAME_MAX_CHARS = 80;
|
|
431
432
|
|
|
@@ -555,6 +556,7 @@ function useSession({
|
|
|
555
556
|
const [pendingScreenStream, setPendingScreenStream] = useState6(null);
|
|
556
557
|
const [isPaused, setIsPaused] = useState6(false);
|
|
557
558
|
const [isPausing, setIsPausing] = useState6(false);
|
|
559
|
+
const [pauseTimeoutSeconds, setPauseTimeoutSeconds] = useState6(null);
|
|
558
560
|
const [historyMessages, setHistoryMessages] = useState6([]);
|
|
559
561
|
const [authFailed, setAuthFailed] = useState6(false);
|
|
560
562
|
const tokenRef = useRef(authToken ? { token: authToken, expiresAt: null } : null);
|
|
@@ -730,7 +732,11 @@ function useSession({
|
|
|
730
732
|
setErrorCode(startResp.status);
|
|
731
733
|
throw new Error(body?.detail || `Failed to start session: ${startResp.status}`);
|
|
732
734
|
}
|
|
733
|
-
const {
|
|
735
|
+
const {
|
|
736
|
+
session,
|
|
737
|
+
connection: conn,
|
|
738
|
+
pauseTimeoutSeconds: pauseTimeout
|
|
739
|
+
} = await startResp.json();
|
|
734
740
|
const history2 = existingSessionId ? await fetchSessionMessages(session.id, authedFetch) : [];
|
|
735
741
|
setSessionId(session.id);
|
|
736
742
|
setHistoryMessages(history2);
|
|
@@ -741,6 +747,7 @@ function useSession({
|
|
|
741
747
|
setPendingScreenStream(screenStream);
|
|
742
748
|
setShouldConnect(true);
|
|
743
749
|
setIsPaused(false);
|
|
750
|
+
setPauseTimeoutSeconds(typeof pauseTimeout === "number" ? pauseTimeout : null);
|
|
744
751
|
} catch (e) {
|
|
745
752
|
stopStream(screenStream);
|
|
746
753
|
setError(e instanceof Error ? e.message : "Failed to start session");
|
|
@@ -810,6 +817,7 @@ function useSession({
|
|
|
810
817
|
disconnect,
|
|
811
818
|
isPaused,
|
|
812
819
|
isPausing,
|
|
820
|
+
pauseTimeoutSeconds,
|
|
813
821
|
historyMessages,
|
|
814
822
|
pendingScreenStream,
|
|
815
823
|
bearerToken,
|
|
@@ -1003,42 +1011,28 @@ var CircleX = createLucideIcon("circle-x", __iconNode3);
|
|
|
1003
1011
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/loader-circle.js
|
|
1004
1012
|
var __iconNode4 = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
|
|
1005
1013
|
var LoaderCircle = createLucideIcon("loader-circle", __iconNode4);
|
|
1006
|
-
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/sparkles.js
|
|
1007
|
-
var __iconNode5 = [
|
|
1008
|
-
[
|
|
1009
|
-
"path",
|
|
1010
|
-
{
|
|
1011
|
-
d: "M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",
|
|
1012
|
-
key: "1s2grr"
|
|
1013
|
-
}
|
|
1014
|
-
],
|
|
1015
|
-
["path", { d: "M20 2v4", key: "1rf3ol" }],
|
|
1016
|
-
["path", { d: "M22 4h-4", key: "gwowj6" }],
|
|
1017
|
-
["circle", { cx: "4", cy: "20", r: "2", key: "6kqj1y" }]
|
|
1018
|
-
];
|
|
1019
|
-
var Sparkles = createLucideIcon("sparkles", __iconNode5);
|
|
1020
1014
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/arrow-right.js
|
|
1021
|
-
var
|
|
1015
|
+
var __iconNode5 = [
|
|
1022
1016
|
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
1023
1017
|
["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
|
|
1024
1018
|
];
|
|
1025
|
-
var ArrowRight = createLucideIcon("arrow-right",
|
|
1019
|
+
var ArrowRight = createLucideIcon("arrow-right", __iconNode5);
|
|
1026
1020
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/calendar.js
|
|
1027
|
-
var
|
|
1021
|
+
var __iconNode6 = [
|
|
1028
1022
|
["path", { d: "M8 2v4", key: "1cmpym" }],
|
|
1029
1023
|
["path", { d: "M16 2v4", key: "4m81vk" }],
|
|
1030
1024
|
["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
|
|
1031
1025
|
["path", { d: "M3 10h18", key: "8toen8" }]
|
|
1032
1026
|
];
|
|
1033
|
-
var Calendar = createLucideIcon("calendar",
|
|
1027
|
+
var Calendar = createLucideIcon("calendar", __iconNode6);
|
|
1034
1028
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/chevron-down.js
|
|
1035
|
-
var
|
|
1036
|
-
var ChevronDown = createLucideIcon("chevron-down",
|
|
1029
|
+
var __iconNode7 = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
1030
|
+
var ChevronDown = createLucideIcon("chevron-down", __iconNode7);
|
|
1037
1031
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/circle.js
|
|
1038
|
-
var
|
|
1039
|
-
var Circle = createLucideIcon("circle",
|
|
1032
|
+
var __iconNode8 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
|
|
1033
|
+
var Circle = createLucideIcon("circle", __iconNode8);
|
|
1040
1034
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/lightbulb.js
|
|
1041
|
-
var
|
|
1035
|
+
var __iconNode9 = [
|
|
1042
1036
|
[
|
|
1043
1037
|
"path",
|
|
1044
1038
|
{
|
|
@@ -1049,23 +1043,15 @@ var __iconNode10 = [
|
|
|
1049
1043
|
["path", { d: "M9 18h6", key: "x1upvd" }],
|
|
1050
1044
|
["path", { d: "M10 22h4", key: "ceow96" }]
|
|
1051
1045
|
];
|
|
1052
|
-
var Lightbulb = createLucideIcon("lightbulb",
|
|
1046
|
+
var Lightbulb = createLucideIcon("lightbulb", __iconNode9);
|
|
1053
1047
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/mail.js
|
|
1054
|
-
var
|
|
1048
|
+
var __iconNode10 = [
|
|
1055
1049
|
["path", { d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7", key: "132q7q" }],
|
|
1056
1050
|
["rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", key: "izxlao" }]
|
|
1057
1051
|
];
|
|
1058
|
-
var Mail = createLucideIcon("mail",
|
|
1059
|
-
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/maximize-2.js
|
|
1060
|
-
var __iconNode12 = [
|
|
1061
|
-
["path", { d: "M15 3h6v6", key: "1q9fwt" }],
|
|
1062
|
-
["path", { d: "m21 3-7 7", key: "1l2asr" }],
|
|
1063
|
-
["path", { d: "m3 21 7-7", key: "tjx5ai" }],
|
|
1064
|
-
["path", { d: "M9 21H3v-6", key: "wtvkvv" }]
|
|
1065
|
-
];
|
|
1066
|
-
var Maximize2 = createLucideIcon("maximize-2", __iconNode12);
|
|
1052
|
+
var Mail = createLucideIcon("mail", __iconNode10);
|
|
1067
1053
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/message-circle.js
|
|
1068
|
-
var
|
|
1054
|
+
var __iconNode11 = [
|
|
1069
1055
|
[
|
|
1070
1056
|
"path",
|
|
1071
1057
|
{
|
|
@@ -1074,9 +1060,9 @@ var __iconNode13 = [
|
|
|
1074
1060
|
}
|
|
1075
1061
|
]
|
|
1076
1062
|
];
|
|
1077
|
-
var MessageCircle = createLucideIcon("message-circle",
|
|
1063
|
+
var MessageCircle = createLucideIcon("message-circle", __iconNode11);
|
|
1078
1064
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/message-square.js
|
|
1079
|
-
var
|
|
1065
|
+
var __iconNode12 = [
|
|
1080
1066
|
[
|
|
1081
1067
|
"path",
|
|
1082
1068
|
{
|
|
@@ -1085,9 +1071,9 @@ var __iconNode14 = [
|
|
|
1085
1071
|
}
|
|
1086
1072
|
]
|
|
1087
1073
|
];
|
|
1088
|
-
var MessageSquare = createLucideIcon("message-square",
|
|
1074
|
+
var MessageSquare = createLucideIcon("message-square", __iconNode12);
|
|
1089
1075
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/mic-off.js
|
|
1090
|
-
var
|
|
1076
|
+
var __iconNode13 = [
|
|
1091
1077
|
["path", { d: "M12 19v3", key: "npa21l" }],
|
|
1092
1078
|
["path", { d: "M15 9.34V5a3 3 0 0 0-5.68-1.33", key: "1gzdoj" }],
|
|
1093
1079
|
["path", { d: "M16.95 16.95A7 7 0 0 1 5 12v-2", key: "cqa7eg" }],
|
|
@@ -1095,40 +1081,32 @@ var __iconNode15 = [
|
|
|
1095
1081
|
["path", { d: "m2 2 20 20", key: "1ooewy" }],
|
|
1096
1082
|
["path", { d: "M9 9v3a3 3 0 0 0 5.12 2.12", key: "r2i35w" }]
|
|
1097
1083
|
];
|
|
1098
|
-
var MicOff = createLucideIcon("mic-off",
|
|
1084
|
+
var MicOff = createLucideIcon("mic-off", __iconNode13);
|
|
1099
1085
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/mic.js
|
|
1100
|
-
var
|
|
1086
|
+
var __iconNode14 = [
|
|
1101
1087
|
["path", { d: "M12 19v3", key: "npa21l" }],
|
|
1102
1088
|
["path", { d: "M19 10v2a7 7 0 0 1-14 0v-2", key: "1vc78b" }],
|
|
1103
1089
|
["rect", { x: "9", y: "2", width: "6", height: "13", rx: "3", key: "s6n7sd" }]
|
|
1104
1090
|
];
|
|
1105
|
-
var Mic = createLucideIcon("mic",
|
|
1106
|
-
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/minimize-2.js
|
|
1107
|
-
var __iconNode17 = [
|
|
1108
|
-
["path", { d: "m14 10 7-7", key: "oa77jy" }],
|
|
1109
|
-
["path", { d: "M20 10h-6V4", key: "mjg0md" }],
|
|
1110
|
-
["path", { d: "m3 21 7-7", key: "tjx5ai" }],
|
|
1111
|
-
["path", { d: "M4 14h6v6", key: "rmj7iw" }]
|
|
1112
|
-
];
|
|
1113
|
-
var Minimize2 = createLucideIcon("minimize-2", __iconNode17);
|
|
1091
|
+
var Mic = createLucideIcon("mic", __iconNode14);
|
|
1114
1092
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/monitor-off.js
|
|
1115
|
-
var
|
|
1093
|
+
var __iconNode15 = [
|
|
1116
1094
|
["path", { d: "M12 17v4", key: "1riwvh" }],
|
|
1117
1095
|
["path", { d: "M17 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 1.184-1.826", key: "cv7jms" }],
|
|
1118
1096
|
["path", { d: "m2 2 20 20", key: "1ooewy" }],
|
|
1119
1097
|
["path", { d: "M8 21h8", key: "1ev6f3" }],
|
|
1120
1098
|
["path", { d: "M8.656 3H20a2 2 0 0 1 2 2v10a2 2 0 0 1-.293 1.042", key: "z8ni2w" }]
|
|
1121
1099
|
];
|
|
1122
|
-
var MonitorOff = createLucideIcon("monitor-off",
|
|
1100
|
+
var MonitorOff = createLucideIcon("monitor-off", __iconNode15);
|
|
1123
1101
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/monitor.js
|
|
1124
|
-
var
|
|
1102
|
+
var __iconNode16 = [
|
|
1125
1103
|
["rect", { width: "20", height: "14", x: "2", y: "3", rx: "2", key: "48i651" }],
|
|
1126
1104
|
["line", { x1: "8", x2: "16", y1: "21", y2: "21", key: "1svkeh" }],
|
|
1127
1105
|
["line", { x1: "12", x2: "12", y1: "17", y2: "21", key: "vw1qmm" }]
|
|
1128
1106
|
];
|
|
1129
|
-
var Monitor = createLucideIcon("monitor",
|
|
1107
|
+
var Monitor = createLucideIcon("monitor", __iconNode16);
|
|
1130
1108
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/mouse-pointer-2.js
|
|
1131
|
-
var
|
|
1109
|
+
var __iconNode17 = [
|
|
1132
1110
|
[
|
|
1133
1111
|
"path",
|
|
1134
1112
|
{
|
|
@@ -1137,9 +1115,9 @@ var __iconNode20 = [
|
|
|
1137
1115
|
}
|
|
1138
1116
|
]
|
|
1139
1117
|
];
|
|
1140
|
-
var MousePointer2 = createLucideIcon("mouse-pointer-2",
|
|
1118
|
+
var MousePointer2 = createLucideIcon("mouse-pointer-2", __iconNode17);
|
|
1141
1119
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/mouse-pointer-click.js
|
|
1142
|
-
var
|
|
1120
|
+
var __iconNode18 = [
|
|
1143
1121
|
["path", { d: "M14 4.1 12 6", key: "ita8i4" }],
|
|
1144
1122
|
["path", { d: "m5.1 8-2.9-.8", key: "1go3kf" }],
|
|
1145
1123
|
["path", { d: "m6 12-1.9 2", key: "mnht97" }],
|
|
@@ -1152,9 +1130,15 @@ var __iconNode21 = [
|
|
|
1152
1130
|
}
|
|
1153
1131
|
]
|
|
1154
1132
|
];
|
|
1155
|
-
var MousePointerClick = createLucideIcon("mouse-pointer-click",
|
|
1133
|
+
var MousePointerClick = createLucideIcon("mouse-pointer-click", __iconNode18);
|
|
1134
|
+
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/pause.js
|
|
1135
|
+
var __iconNode19 = [
|
|
1136
|
+
["rect", { x: "14", y: "3", width: "5", height: "18", rx: "1", key: "kaeet6" }],
|
|
1137
|
+
["rect", { x: "5", y: "3", width: "5", height: "18", rx: "1", key: "1wsw3u" }]
|
|
1138
|
+
];
|
|
1139
|
+
var Pause = createLucideIcon("pause", __iconNode19);
|
|
1156
1140
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/play.js
|
|
1157
|
-
var
|
|
1141
|
+
var __iconNode20 = [
|
|
1158
1142
|
[
|
|
1159
1143
|
"path",
|
|
1160
1144
|
{
|
|
@@ -1163,9 +1147,9 @@ var __iconNode22 = [
|
|
|
1163
1147
|
}
|
|
1164
1148
|
]
|
|
1165
1149
|
];
|
|
1166
|
-
var Play = createLucideIcon("play",
|
|
1150
|
+
var Play = createLucideIcon("play", __iconNode20);
|
|
1167
1151
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/send.js
|
|
1168
|
-
var
|
|
1152
|
+
var __iconNode21 = [
|
|
1169
1153
|
[
|
|
1170
1154
|
"path",
|
|
1171
1155
|
{
|
|
@@ -1175,18 +1159,18 @@ var __iconNode23 = [
|
|
|
1175
1159
|
],
|
|
1176
1160
|
["path", { d: "m21.854 2.147-10.94 10.939", key: "12cjpa" }]
|
|
1177
1161
|
];
|
|
1178
|
-
var Send = createLucideIcon("send",
|
|
1162
|
+
var Send = createLucideIcon("send", __iconNode21);
|
|
1179
1163
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/square.js
|
|
1180
|
-
var
|
|
1164
|
+
var __iconNode22 = [
|
|
1181
1165
|
["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }]
|
|
1182
1166
|
];
|
|
1183
|
-
var Square = createLucideIcon("square",
|
|
1167
|
+
var Square = createLucideIcon("square", __iconNode22);
|
|
1184
1168
|
// ../../node_modules/.bun/lucide-react@1.8.0+83d5fd7b249dbeef/node_modules/lucide-react/dist/esm/icons/x.js
|
|
1185
|
-
var
|
|
1169
|
+
var __iconNode23 = [
|
|
1186
1170
|
["path", { d: "M18 6 6 18", key: "1bl5f8" }],
|
|
1187
1171
|
["path", { d: "m6 6 12 12", key: "d8bk6v" }]
|
|
1188
1172
|
];
|
|
1189
|
-
var X = createLucideIcon("x",
|
|
1173
|
+
var X = createLucideIcon("x", __iconNode23);
|
|
1190
1174
|
// src/components/AgentCursor.tsx
|
|
1191
1175
|
import { useContext as useContext3, useEffect as useEffect7, useLayoutEffect, useRef as useRef2, useState as useState7 } from "react";
|
|
1192
1176
|
|
|
@@ -2749,12 +2733,14 @@ import { useContext as useContext4, useEffect as useEffect12, useRef as useRef7,
|
|
|
2749
2733
|
import { useEffect as useEffect11, useRef as useRef6 } from "react";
|
|
2750
2734
|
import { flushSync } from "react-dom";
|
|
2751
2735
|
var DRAG_THRESHOLD_PX = 5;
|
|
2752
|
-
function useLauncherDrag(containerRef, onDrop, followRefs) {
|
|
2736
|
+
function useLauncherDrag(containerRef, onDrop, followRefs, reportDragging) {
|
|
2753
2737
|
const wasDraggedRef = useRef6(false);
|
|
2754
2738
|
const onDropRef = useRef6(onDrop);
|
|
2755
2739
|
onDropRef.current = onDrop;
|
|
2756
2740
|
const followTargetsRef = useRef6(followRefs);
|
|
2757
2741
|
followTargetsRef.current = followRefs;
|
|
2742
|
+
const reportDraggingRef = useRef6(reportDragging);
|
|
2743
|
+
reportDraggingRef.current = reportDragging;
|
|
2758
2744
|
useEffect11(() => {
|
|
2759
2745
|
const el = containerRef.current;
|
|
2760
2746
|
if (!el)
|
|
@@ -2810,6 +2796,7 @@ function useLauncherDrag(containerRef, onDrop, followRefs) {
|
|
|
2810
2796
|
cancelPendingTransitionRestore();
|
|
2811
2797
|
for (const follower of followers)
|
|
2812
2798
|
freeze(follower);
|
|
2799
|
+
reportDraggingRef.current?.(true);
|
|
2813
2800
|
}
|
|
2814
2801
|
dragging = true;
|
|
2815
2802
|
wasDraggedRef.current = true;
|
|
@@ -2836,6 +2823,8 @@ function useLauncherDrag(containerRef, onDrop, followRefs) {
|
|
|
2836
2823
|
};
|
|
2837
2824
|
const endDrag = () => {
|
|
2838
2825
|
activePointerId = null;
|
|
2826
|
+
if (dragging)
|
|
2827
|
+
reportDraggingRef.current?.(false);
|
|
2839
2828
|
window.removeEventListener("pointermove", onPointerMove);
|
|
2840
2829
|
window.removeEventListener("pointerup", onPointerUp);
|
|
2841
2830
|
window.removeEventListener("pointercancel", onPointerCancel);
|
|
@@ -2880,6 +2869,8 @@ function useLauncherDrag(containerRef, onDrop, followRefs) {
|
|
|
2880
2869
|
window.removeEventListener("pointermove", onPointerMove);
|
|
2881
2870
|
window.removeEventListener("pointerup", onPointerUp);
|
|
2882
2871
|
window.removeEventListener("pointercancel", onPointerCancel);
|
|
2872
|
+
if (dragging)
|
|
2873
|
+
reportDraggingRef.current?.(false);
|
|
2883
2874
|
el.style.transform = "";
|
|
2884
2875
|
cancelPendingTransitionRestore();
|
|
2885
2876
|
for (const follower of followers) {
|
|
@@ -3538,7 +3529,7 @@ function PageActionHandler() {
|
|
|
3538
3529
|
}
|
|
3539
3530
|
|
|
3540
3531
|
// src/components/SessionControlBar.tsx
|
|
3541
|
-
import { useContext as useContext6 } from "react";
|
|
3532
|
+
import { useContext as useContext6, useEffect as useEffect18 } from "react";
|
|
3542
3533
|
|
|
3543
3534
|
// src/hooks/useActionControl.ts
|
|
3544
3535
|
import { useLocalParticipant as useLocalParticipant3 } from "@livekit/components-react/hooks";
|
|
@@ -3703,20 +3694,114 @@ function usePhaseUpdates() {
|
|
|
3703
3694
|
return { phases };
|
|
3704
3695
|
}
|
|
3705
3696
|
|
|
3697
|
+
// src/hooks/useSessionHold.ts
|
|
3698
|
+
import { useLocalParticipant as useLocalParticipant6 } from "@livekit/components-react/hooks";
|
|
3699
|
+
import { useCallback as useCallback11, useEffect as useEffect17, useState as useState11 } from "react";
|
|
3700
|
+
var textEncoder4 = new TextEncoder;
|
|
3701
|
+
var FALLBACK_PAUSE_TIMEOUT_SECONDS = 120;
|
|
3702
|
+
function useSessionHold({
|
|
3703
|
+
pauseSession,
|
|
3704
|
+
pauseTimeoutSeconds
|
|
3705
|
+
}) {
|
|
3706
|
+
const { localParticipant } = useLocalParticipant6();
|
|
3707
|
+
const timeoutSeconds = pauseTimeoutSeconds ?? FALLBACK_PAUSE_TIMEOUT_SECONDS;
|
|
3708
|
+
const [isHeld, setIsHeld] = useState11(false);
|
|
3709
|
+
const [countdown, setCountdown] = useState11(timeoutSeconds);
|
|
3710
|
+
const publish = useCallback11(async (type) => {
|
|
3711
|
+
await localParticipant.publishData(textEncoder4.encode(JSON.stringify({ type })), {
|
|
3712
|
+
reliable: true,
|
|
3713
|
+
topic: SESSION_HOLD_TOPIC
|
|
3714
|
+
});
|
|
3715
|
+
}, [localParticipant]);
|
|
3716
|
+
const hold = useCallback11(async () => {
|
|
3717
|
+
try {
|
|
3718
|
+
await localParticipant.setMicrophoneEnabled(false);
|
|
3719
|
+
await publish("pause");
|
|
3720
|
+
setIsHeld(true);
|
|
3721
|
+
} catch (error) {
|
|
3722
|
+
console.error("Failed to hold session:", error);
|
|
3723
|
+
}
|
|
3724
|
+
}, [localParticipant, publish]);
|
|
3725
|
+
const release = useCallback11(async () => {
|
|
3726
|
+
try {
|
|
3727
|
+
await localParticipant.setMicrophoneEnabled(true);
|
|
3728
|
+
await publish("resume");
|
|
3729
|
+
setIsHeld(false);
|
|
3730
|
+
} catch (error) {
|
|
3731
|
+
console.error("Failed to release session:", error);
|
|
3732
|
+
}
|
|
3733
|
+
}, [localParticipant, publish]);
|
|
3734
|
+
useEffect17(() => {
|
|
3735
|
+
if (!isHeld) {
|
|
3736
|
+
setCountdown(timeoutSeconds);
|
|
3737
|
+
return;
|
|
3738
|
+
}
|
|
3739
|
+
const id = setInterval(() => {
|
|
3740
|
+
setCountdown((seconds) => Math.max(0, seconds - 1));
|
|
3741
|
+
}, 1000);
|
|
3742
|
+
return () => clearInterval(id);
|
|
3743
|
+
}, [isHeld, timeoutSeconds]);
|
|
3744
|
+
useEffect17(() => {
|
|
3745
|
+
if (isHeld && countdown === 0) {
|
|
3746
|
+
setIsHeld(false);
|
|
3747
|
+
pauseSession();
|
|
3748
|
+
}
|
|
3749
|
+
}, [isHeld, countdown, pauseSession]);
|
|
3750
|
+
const toggle = useCallback11(() => {
|
|
3751
|
+
if (isHeld) {
|
|
3752
|
+
release();
|
|
3753
|
+
} else {
|
|
3754
|
+
hold();
|
|
3755
|
+
}
|
|
3756
|
+
}, [isHeld, hold, release]);
|
|
3757
|
+
return { isHeld, countdown, toggle };
|
|
3758
|
+
}
|
|
3759
|
+
|
|
3760
|
+
// src/components/PausedCountdown.tsx
|
|
3761
|
+
import { jsxs as jsxs5 } from "react/jsx-runtime";
|
|
3762
|
+
function PausedCountdown({ secondsRemaining }) {
|
|
3763
|
+
const minutes = Math.floor(secondsRemaining / 60);
|
|
3764
|
+
const seconds = String(secondsRemaining % 60).padStart(2, "0");
|
|
3765
|
+
return /* @__PURE__ */ jsxs5("span", {
|
|
3766
|
+
role: "timer",
|
|
3767
|
+
"aria-label": `Agent closes in ${secondsRemaining} seconds`,
|
|
3768
|
+
className: "skippr:flex skippr:h-[38px] skippr:items-center skippr:whitespace-nowrap skippr:px-1 skippr:text-[13px] skippr:font-medium skippr:text-neutral-500 skippr:[animation:skippr-stage-fade_240ms_ease-out]",
|
|
3769
|
+
children: [
|
|
3770
|
+
"Agent closes in",
|
|
3771
|
+
/* @__PURE__ */ jsxs5("span", {
|
|
3772
|
+
className: "skippr:ml-1 skippr:font-semibold skippr:tabular-nums skippr:text-bubble",
|
|
3773
|
+
children: [
|
|
3774
|
+
minutes,
|
|
3775
|
+
":",
|
|
3776
|
+
seconds
|
|
3777
|
+
]
|
|
3778
|
+
})
|
|
3779
|
+
]
|
|
3780
|
+
});
|
|
3781
|
+
}
|
|
3782
|
+
|
|
3706
3783
|
// src/components/SessionControlBar.tsx
|
|
3707
|
-
import { jsx as jsx5, jsxs as
|
|
3784
|
+
import { jsx as jsx5, jsxs as jsxs6, Fragment } from "react/jsx-runtime";
|
|
3708
3785
|
var STANDBY_BAR_WIDTH = 168;
|
|
3709
|
-
var READY_BAR_WIDTH =
|
|
3710
|
-
var
|
|
3711
|
-
var
|
|
3712
|
-
var
|
|
3713
|
-
var
|
|
3714
|
-
var
|
|
3715
|
-
var
|
|
3786
|
+
var READY_BAR_WIDTH = 238;
|
|
3787
|
+
var PAUSED_BAR_WIDTH = 200;
|
|
3788
|
+
var TEXT_BAR_WIDTH = 100;
|
|
3789
|
+
var SCREEN_SHARE_EXTRA_WIDTH = 46;
|
|
3790
|
+
var ACTION_CONTROL_EXTRA_WIDTH = 46;
|
|
3791
|
+
var MIC_REGION_WIDTH = 130;
|
|
3792
|
+
var MIC_SQUARE_WIDTH = 38;
|
|
3793
|
+
var AGENT_ACTIVITY_WIDTH = 84;
|
|
3794
|
+
var SQUARE_BUTTON = "skippr:flex skippr:size-[38px] skippr:shrink-0 skippr:items-center skippr:justify-center skippr:rounded-[12px] skippr:cursor-pointer skippr:transition-colors";
|
|
3716
3795
|
var AGENT_BARS = 4;
|
|
3717
3796
|
var AGENT_BAR_IDLE_HEIGHT_PX = 4;
|
|
3718
3797
|
var AGENT_BAR_MAX_GROWTH_PX = 12;
|
|
3719
3798
|
var AGENT_NOISE_GATE = 0;
|
|
3799
|
+
var AGENT_STATE_LABELS = {
|
|
3800
|
+
idle: "Idle",
|
|
3801
|
+
listening: "Listening",
|
|
3802
|
+
thinking: "Thinking",
|
|
3803
|
+
speaking: "Talking"
|
|
3804
|
+
};
|
|
3720
3805
|
function AgentActivity({
|
|
3721
3806
|
state,
|
|
3722
3807
|
isActing,
|
|
@@ -3728,68 +3813,72 @@ function AgentActivity({
|
|
|
3728
3813
|
maxGrowthPx: AGENT_BAR_MAX_GROWTH_PX,
|
|
3729
3814
|
noiseGate: AGENT_NOISE_GATE
|
|
3730
3815
|
});
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
role: "status",
|
|
3734
|
-
className: "skippr:flex skippr:h-5 skippr:w-12 skippr:shrink-0 skippr:items-center skippr:justify-center skippr:text-bubble",
|
|
3735
|
-
"aria-label": "Agent is acting",
|
|
3736
|
-
children: /* @__PURE__ */ jsx5(MousePointerClick, {
|
|
3737
|
-
strokeWidth: 2,
|
|
3738
|
-
className: "skippr:size-5 skippr:[animation:skippr-finger-tap_1.1s_ease-in-out_infinite]"
|
|
3739
|
-
})
|
|
3740
|
-
});
|
|
3741
|
-
}
|
|
3742
|
-
return /* @__PURE__ */ jsxs5("span", {
|
|
3816
|
+
const label = isActing ? "Working" : AGENT_STATE_LABELS[state] ?? "";
|
|
3817
|
+
return /* @__PURE__ */ jsxs6("span", {
|
|
3743
3818
|
role: "status",
|
|
3744
|
-
className: "skippr:flex skippr:
|
|
3745
|
-
"aria-label": `Agent is ${state}`,
|
|
3819
|
+
className: "skippr:flex skippr:items-center skippr:gap-1.5 skippr:text-bubble",
|
|
3820
|
+
"aria-label": isActing ? "Agent is acting" : `Agent is ${state}`,
|
|
3746
3821
|
children: [
|
|
3747
|
-
|
|
3748
|
-
className: "skippr:flex skippr:
|
|
3749
|
-
children:
|
|
3750
|
-
|
|
3751
|
-
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3822
|
+
/* @__PURE__ */ jsx5("span", {
|
|
3823
|
+
className: "skippr:flex skippr:size-5 skippr:shrink-0 skippr:items-center skippr:justify-center",
|
|
3824
|
+
children: isActing ? /* @__PURE__ */ jsx5(MousePointerClick, {
|
|
3825
|
+
strokeWidth: 2,
|
|
3826
|
+
className: "skippr:size-5 skippr:[animation:skippr-finger-tap_1.1s_ease-in-out_infinite]"
|
|
3827
|
+
}) : /* @__PURE__ */ jsxs6(Fragment, {
|
|
3828
|
+
children: [
|
|
3829
|
+
state === "speaking" && /* @__PURE__ */ jsx5("span", {
|
|
3830
|
+
className: "skippr:flex skippr:h-5 skippr:items-center skippr:gap-[2px]",
|
|
3831
|
+
children: Array.from({ length: AGENT_BARS }).map((_, index2) => /* @__PURE__ */ jsx5("span", {
|
|
3832
|
+
ref: (el) => {
|
|
3833
|
+
barRefs.current[index2] = el;
|
|
3834
|
+
},
|
|
3835
|
+
className: "skippr:w-[2px] skippr:rounded-full skippr:bg-current skippr:transition-[height] skippr:duration-75",
|
|
3836
|
+
style: { height: AGENT_BAR_IDLE_HEIGHT_PX }
|
|
3837
|
+
}, index2))
|
|
3838
|
+
}),
|
|
3839
|
+
state === "thinking" && /* @__PURE__ */ jsxs6("span", {
|
|
3840
|
+
className: "skippr:flex skippr:items-center skippr:gap-[3px]",
|
|
3841
|
+
children: [
|
|
3842
|
+
/* @__PURE__ */ jsx5("span", {
|
|
3843
|
+
className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:0ms]"
|
|
3844
|
+
}),
|
|
3845
|
+
/* @__PURE__ */ jsx5("span", {
|
|
3846
|
+
className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:150ms]"
|
|
3847
|
+
}),
|
|
3848
|
+
/* @__PURE__ */ jsx5("span", {
|
|
3849
|
+
className: "skippr:size-[5px] skippr:rounded-full skippr:bg-current skippr:animate-bounce skippr:[animation-delay:300ms]"
|
|
3850
|
+
})
|
|
3851
|
+
]
|
|
3852
|
+
}),
|
|
3853
|
+
state === "listening" && /* @__PURE__ */ jsxs6("svg", {
|
|
3854
|
+
viewBox: "0 0 24 24",
|
|
3855
|
+
className: "skippr:size-5",
|
|
3856
|
+
fill: "none",
|
|
3857
|
+
stroke: "currentColor",
|
|
3858
|
+
strokeWidth: "2",
|
|
3859
|
+
strokeLinecap: "round",
|
|
3860
|
+
strokeLinejoin: "round",
|
|
3861
|
+
"aria-hidden": "true",
|
|
3862
|
+
children: [
|
|
3863
|
+
/* @__PURE__ */ jsx5("path", {
|
|
3864
|
+
d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"
|
|
3865
|
+
}),
|
|
3866
|
+
/* @__PURE__ */ jsx5("circle", {
|
|
3867
|
+
cx: "12",
|
|
3868
|
+
cy: "12",
|
|
3869
|
+
r: "2.5",
|
|
3870
|
+
fill: "currentColor",
|
|
3871
|
+
stroke: "none",
|
|
3872
|
+
className: "skippr:origin-center skippr:[animation:skippr-banner-look_2.4s_ease-in-out_infinite]"
|
|
3873
|
+
})
|
|
3874
|
+
]
|
|
3875
|
+
})
|
|
3876
|
+
]
|
|
3877
|
+
})
|
|
3770
3878
|
}),
|
|
3771
|
-
|
|
3772
|
-
|
|
3773
|
-
|
|
3774
|
-
fill: "none",
|
|
3775
|
-
stroke: "currentColor",
|
|
3776
|
-
strokeWidth: "2",
|
|
3777
|
-
strokeLinecap: "round",
|
|
3778
|
-
strokeLinejoin: "round",
|
|
3779
|
-
"aria-hidden": "true",
|
|
3780
|
-
children: [
|
|
3781
|
-
/* @__PURE__ */ jsx5("path", {
|
|
3782
|
-
d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z"
|
|
3783
|
-
}),
|
|
3784
|
-
/* @__PURE__ */ jsx5("circle", {
|
|
3785
|
-
cx: "12",
|
|
3786
|
-
cy: "12",
|
|
3787
|
-
r: "2.5",
|
|
3788
|
-
fill: "currentColor",
|
|
3789
|
-
stroke: "none",
|
|
3790
|
-
className: "skippr:origin-center skippr:[animation:skippr-banner-look_2.4s_ease-in-out_infinite]"
|
|
3791
|
-
})
|
|
3792
|
-
]
|
|
3879
|
+
/* @__PURE__ */ jsx5("span", {
|
|
3880
|
+
className: "skippr:text-[11px] skippr:font-medium skippr:capitalize",
|
|
3881
|
+
children: label
|
|
3793
3882
|
})
|
|
3794
3883
|
]
|
|
3795
3884
|
});
|
|
@@ -3811,24 +3900,51 @@ function SessionControlBar() {
|
|
|
3811
3900
|
if (!internalCtx) {
|
|
3812
3901
|
throw new Error("SessionControlBar must be used within a <LiveAgent> provider");
|
|
3813
3902
|
}
|
|
3814
|
-
const {
|
|
3903
|
+
const {
|
|
3904
|
+
textMode,
|
|
3905
|
+
launcherBottomPx,
|
|
3906
|
+
popsDown,
|
|
3907
|
+
controlBarRef,
|
|
3908
|
+
commitLauncherDrop,
|
|
3909
|
+
panelRef,
|
|
3910
|
+
pauseTimeoutSeconds,
|
|
3911
|
+
isDragging,
|
|
3912
|
+
setIsDragging
|
|
3913
|
+
} = internalCtx;
|
|
3815
3914
|
const followsPanel = variant === "floating" && isPanelOpen;
|
|
3816
3915
|
const panelFollowers = followsPanel ? [panelRef] : null;
|
|
3817
|
-
const { wasDraggedRef } = useLauncherDrag(controlBarRef, commitLauncherDrop, panelFollowers);
|
|
3916
|
+
const { wasDraggedRef } = useLauncherDrag(controlBarRef, commitLauncherDrop, panelFollowers, setIsDragging);
|
|
3818
3917
|
const { isMuted, toggleMute, isScreenSharing, toggleScreenShare } = useMediaControls();
|
|
3819
3918
|
const { state, mediaStreamTrack: agentMediaStreamTrack } = useAgentVoiceState();
|
|
3820
3919
|
const { phases } = usePhaseUpdates();
|
|
3821
3920
|
const { actionsActive, actionsPaused: actionsPaused2, togglePaused } = useActionControl();
|
|
3921
|
+
const {
|
|
3922
|
+
isHeld,
|
|
3923
|
+
countdown,
|
|
3924
|
+
toggle: togglePause
|
|
3925
|
+
} = useSessionHold({
|
|
3926
|
+
pauseSession,
|
|
3927
|
+
pauseTimeoutSeconds
|
|
3928
|
+
});
|
|
3929
|
+
useEffect18(() => {
|
|
3930
|
+
if (isHeld)
|
|
3931
|
+
minimizePanel();
|
|
3932
|
+
}, [isHeld, minimizePanel]);
|
|
3822
3933
|
const isReady = state === "listening" || state === "thinking" || state === "speaking";
|
|
3823
|
-
const { barRefs, isTalking } = useMicLevel(isReady && !isMuted && !textMode);
|
|
3934
|
+
const { barRefs, isTalking } = useMicLevel(isReady && !isMuted && !textMode && !isHeld);
|
|
3824
3935
|
const showScreenShareToggle = captureMode === "screenshare";
|
|
3825
3936
|
const showActionControl = captureMode === "auto" && actionsActive;
|
|
3826
3937
|
const screenShareExtra = showScreenShareToggle ? SCREEN_SHARE_EXTRA_WIDTH : 0;
|
|
3827
3938
|
const actionControlExtra = showActionControl ? ACTION_CONTROL_EXTRA_WIDTH : 0;
|
|
3828
3939
|
let barWidth = STANDBY_BAR_WIDTH;
|
|
3829
3940
|
if (isReady) {
|
|
3830
|
-
|
|
3831
|
-
|
|
3941
|
+
if (isHeld) {
|
|
3942
|
+
barWidth = PAUSED_BAR_WIDTH;
|
|
3943
|
+
} else if (textMode) {
|
|
3944
|
+
barWidth = TEXT_BAR_WIDTH + screenShareExtra + actionControlExtra;
|
|
3945
|
+
} else {
|
|
3946
|
+
barWidth = READY_BAR_WIDTH + screenShareExtra + actionControlExtra;
|
|
3947
|
+
}
|
|
3832
3948
|
}
|
|
3833
3949
|
const agendaModule = activeModule && activeModule.mode !== AGENT_MODE.AlwaysOn && activeModule.totalPhases > 0 ? activeModule : null;
|
|
3834
3950
|
const agendaProgress = phases.length > 0 ? {
|
|
@@ -3856,13 +3972,13 @@ function SessionControlBar() {
|
|
|
3856
3972
|
return;
|
|
3857
3973
|
action();
|
|
3858
3974
|
};
|
|
3859
|
-
return /* @__PURE__ */
|
|
3975
|
+
return /* @__PURE__ */ jsxs6("div", {
|
|
3860
3976
|
ref: controlBarRef,
|
|
3861
3977
|
style: { bottom: launcherBottomPx },
|
|
3862
3978
|
className: cn("skippr:fixed skippr:z-[9999] skippr:touch-none skippr:cursor-grab", position === "right" ? "skippr:right-3" : "skippr:left-3"),
|
|
3863
3979
|
children: [
|
|
3864
3980
|
!isPanelOpen && agendaModule && agendaProgress && /* @__PURE__ */ jsx5("div", {
|
|
3865
|
-
className: cn("skippr:absolute", popsDown ? "skippr:top-full skippr:mt-3" : "skippr:bottom-full skippr:mb-3", position === "right" ? "skippr:right-0" : "skippr:left-0"),
|
|
3981
|
+
className: cn("skippr:absolute", popsDown ? "skippr:top-full skippr:mt-3" : "skippr:bottom-full skippr:mb-3", isReady ? position === "right" ? "skippr:right-7" : "skippr:left-7" : position === "right" ? "skippr:right-0" : "skippr:left-0"),
|
|
3866
3982
|
children: /* @__PURE__ */ jsx5(ModulePill, {
|
|
3867
3983
|
module: agendaModule,
|
|
3868
3984
|
onSelect: ifNotDragged(openAgenda),
|
|
@@ -3871,14 +3987,14 @@ function SessionControlBar() {
|
|
|
3871
3987
|
isLive: true
|
|
3872
3988
|
})
|
|
3873
3989
|
}),
|
|
3874
|
-
/* @__PURE__ */
|
|
3990
|
+
/* @__PURE__ */ jsxs6("div", {
|
|
3875
3991
|
style: { width: barWidth },
|
|
3876
|
-
className: cn("skippr:group skippr:relative skippr:flex skippr:h-
|
|
3992
|
+
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")),
|
|
3877
3993
|
children: [
|
|
3878
|
-
!isReady && /* @__PURE__ */
|
|
3879
|
-
className: "skippr:flex skippr:h-
|
|
3994
|
+
!isReady && /* @__PURE__ */ jsxs6("span", {
|
|
3995
|
+
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]",
|
|
3880
3996
|
children: [
|
|
3881
|
-
/* @__PURE__ */
|
|
3997
|
+
/* @__PURE__ */ jsxs6("span", {
|
|
3882
3998
|
className: "skippr:flex skippr:items-center skippr:gap-[3px]",
|
|
3883
3999
|
children: [
|
|
3884
4000
|
/* @__PURE__ */ jsx5("span", {
|
|
@@ -3897,135 +4013,159 @@ function SessionControlBar() {
|
|
|
3897
4013
|
})
|
|
3898
4014
|
]
|
|
3899
4015
|
}),
|
|
3900
|
-
isReady && /* @__PURE__ */
|
|
3901
|
-
className: "skippr:flex skippr:items-center skippr:gap-2 skippr:[animation:skippr-stage-fade_240ms_ease-out]",
|
|
4016
|
+
isReady && /* @__PURE__ */ jsxs6("div", {
|
|
4017
|
+
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"),
|
|
3902
4018
|
children: [
|
|
3903
|
-
!textMode && /* @__PURE__ */ jsxs5("div", {
|
|
3904
|
-
className: "skippr:relative skippr:h-12",
|
|
3905
|
-
style: { width: MIC_REGION_WIDTH },
|
|
3906
|
-
children: [
|
|
3907
|
-
!isTalking && /* @__PURE__ */ jsx5("span", {
|
|
3908
|
-
className: "skippr:absolute skippr:inset-y-0 skippr:right-[-3px] skippr:flex skippr:w-14 skippr:items-center skippr:justify-center skippr:[animation:skippr-agent-in_200ms_ease-out_240ms_both]",
|
|
3909
|
-
children: /* @__PURE__ */ jsx5(AgentActivity, {
|
|
3910
|
-
state,
|
|
3911
|
-
isActing: showActionControl && !actionsPaused2,
|
|
3912
|
-
mediaStreamTrack: agentMediaStreamTrack
|
|
3913
|
-
})
|
|
3914
|
-
}),
|
|
3915
|
-
/* @__PURE__ */ jsxs5("button", {
|
|
3916
|
-
type: "button",
|
|
3917
|
-
onClick: ifNotDragged(() => void toggleMute()),
|
|
3918
|
-
"aria-label": isMuted ? "Unmute" : "Mute",
|
|
3919
|
-
className: "skippr:group skippr:absolute skippr:top-0 skippr:left-0 skippr:z-10 skippr:flex skippr:h-12 skippr:items-center skippr:gap-2.5 skippr:overflow-hidden skippr:rounded-2xl skippr:bg-bubble skippr:pl-3.5 skippr:text-white skippr:cursor-pointer skippr:transition-[width] skippr:duration-300 skippr:ease-out",
|
|
3920
|
-
style: { width: isTalking ? MIC_REGION_WIDTH : MIC_SQUARE_WIDTH },
|
|
3921
|
-
children: [
|
|
3922
|
-
/* @__PURE__ */ jsx5("span", {
|
|
3923
|
-
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"),
|
|
3924
|
-
children: isMuted ? /* @__PURE__ */ jsx5(MicOff, {
|
|
3925
|
-
className: "skippr:size-5"
|
|
3926
|
-
}) : /* @__PURE__ */ jsx5(Mic, {
|
|
3927
|
-
className: "skippr:size-5"
|
|
3928
|
-
})
|
|
3929
|
-
}),
|
|
3930
|
-
/* @__PURE__ */ jsx5("span", {
|
|
3931
|
-
className: cn("skippr:flex skippr:h-6 skippr:flex-1 skippr:items-center skippr:justify-center skippr:gap-[3px] skippr:transition-opacity skippr:duration-200", isTalking ? "skippr:opacity-100" : "skippr:opacity-0"),
|
|
3932
|
-
children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx5("span", {
|
|
3933
|
-
ref: (el) => {
|
|
3934
|
-
barRefs.current[index2] = el;
|
|
3935
|
-
},
|
|
3936
|
-
className: "skippr:w-[3px] skippr:rounded-full skippr:bg-white skippr:transition-[height] skippr:duration-75",
|
|
3937
|
-
style: { height: 5 }
|
|
3938
|
-
}, index2))
|
|
3939
|
-
})
|
|
3940
|
-
]
|
|
3941
|
-
})
|
|
3942
|
-
]
|
|
3943
|
-
}),
|
|
3944
|
-
showScreenShareToggle && /* @__PURE__ */ jsx5("button", {
|
|
3945
|
-
type: "button",
|
|
3946
|
-
onClick: ifNotDragged(() => void toggleScreenShare()),
|
|
3947
|
-
"aria-label": isScreenSharing ? "Stop sharing screen" : "Share screen",
|
|
3948
|
-
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"),
|
|
3949
|
-
children: isScreenSharing ? /* @__PURE__ */ jsx5(MonitorOff, {
|
|
3950
|
-
className: "skippr:size-5"
|
|
3951
|
-
}) : /* @__PURE__ */ jsx5(Monitor, {
|
|
3952
|
-
className: "skippr:size-5"
|
|
3953
|
-
})
|
|
3954
|
-
}),
|
|
3955
4019
|
/* @__PURE__ */ jsx5("button", {
|
|
3956
4020
|
type: "button",
|
|
3957
|
-
onClick: ifNotDragged(
|
|
3958
|
-
"aria-label":
|
|
3959
|
-
|
|
3960
|
-
|
|
3961
|
-
|
|
3962
|
-
})
|
|
3963
|
-
}),
|
|
3964
|
-
showActionControl && /* @__PURE__ */ jsx5("button", {
|
|
3965
|
-
type: "button",
|
|
3966
|
-
onClick: ifNotDragged(() => void togglePaused()),
|
|
3967
|
-
"aria-label": actionsPaused2 ? "Resume actions" : "Stop actions",
|
|
3968
|
-
title: actionsPaused2 ? "Resume" : "Stop",
|
|
3969
|
-
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"),
|
|
3970
|
-
children: actionsPaused2 ? /* @__PURE__ */ jsx5(Play, {
|
|
4021
|
+
onClick: ifNotDragged(togglePause),
|
|
4022
|
+
"aria-label": isHeld ? "Resume" : "Pause",
|
|
4023
|
+
title: isHeld ? "Resume" : "Pause",
|
|
4024
|
+
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"),
|
|
4025
|
+
children: isHeld ? /* @__PURE__ */ jsx5(Play, {
|
|
3971
4026
|
className: "skippr:size-5",
|
|
3972
4027
|
fill: "currentColor"
|
|
3973
|
-
}) : /* @__PURE__ */ jsx5(
|
|
4028
|
+
}) : /* @__PURE__ */ jsx5(Pause, {
|
|
3974
4029
|
className: "skippr:size-5",
|
|
3975
4030
|
fill: "currentColor"
|
|
3976
4031
|
})
|
|
3977
|
-
})
|
|
3978
|
-
]
|
|
3979
|
-
}, textMode ? "ready-text" : "ready"),
|
|
3980
|
-
isReady && /* @__PURE__ */ jsxs5("button", {
|
|
3981
|
-
type: "button",
|
|
3982
|
-
onClick: ifNotDragged(() => void pauseSession()),
|
|
3983
|
-
disabled: isPausing,
|
|
3984
|
-
"aria-label": "Pause session",
|
|
3985
|
-
"aria-busy": isPausing,
|
|
3986
|
-
className: cn("skippr:absolute skippr:-top-2 skippr:-right-2 skippr:z-20 skippr:flex skippr:size-6 skippr:items-center skippr:justify-center", "skippr:rounded-full skippr:bg-bubble skippr:text-white", "skippr:shadow-[0_4px_14px_rgba(0,0,0,0.3)]", "skippr:transition-opacity skippr:duration-150", isPausing ? "skippr:cursor-default" : "skippr:cursor-pointer skippr:hover:bg-[#3a384b]"),
|
|
3987
|
-
children: [
|
|
3988
|
-
/* @__PURE__ */ jsx5(X, {
|
|
3989
|
-
className: cn("skippr:size-3.5 skippr:transition-opacity skippr:duration-200", isPausing && "skippr:opacity-40"),
|
|
3990
|
-
strokeWidth: 2.5
|
|
3991
4032
|
}),
|
|
3992
|
-
|
|
3993
|
-
|
|
3994
|
-
|
|
3995
|
-
"aria-hidden": "true",
|
|
3996
|
-
className: "skippr:absolute skippr:inset-0 skippr:size-full skippr:animate-spin skippr:motion-reduce:hidden",
|
|
4033
|
+
isHeld ? /* @__PURE__ */ jsx5(PausedCountdown, {
|
|
4034
|
+
secondsRemaining: countdown
|
|
4035
|
+
}) : /* @__PURE__ */ jsxs6(Fragment, {
|
|
3997
4036
|
children: [
|
|
3998
|
-
/* @__PURE__ */
|
|
3999
|
-
|
|
4000
|
-
|
|
4001
|
-
|
|
4002
|
-
|
|
4003
|
-
|
|
4004
|
-
|
|
4037
|
+
!textMode && /* @__PURE__ */ jsxs6("div", {
|
|
4038
|
+
className: "skippr:relative skippr:h-[38px]",
|
|
4039
|
+
style: { width: MIC_REGION_WIDTH },
|
|
4040
|
+
children: [
|
|
4041
|
+
!isTalking && /* @__PURE__ */ jsx5("span", {
|
|
4042
|
+
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]",
|
|
4043
|
+
style: { width: AGENT_ACTIVITY_WIDTH },
|
|
4044
|
+
children: /* @__PURE__ */ jsx5(AgentActivity, {
|
|
4045
|
+
state,
|
|
4046
|
+
isActing: showActionControl && !actionsPaused2,
|
|
4047
|
+
mediaStreamTrack: agentMediaStreamTrack
|
|
4048
|
+
})
|
|
4049
|
+
}),
|
|
4050
|
+
/* @__PURE__ */ jsxs6("button", {
|
|
4051
|
+
type: "button",
|
|
4052
|
+
onClick: ifNotDragged(() => void toggleMute()),
|
|
4053
|
+
"aria-label": isMuted ? "Unmute" : "Mute",
|
|
4054
|
+
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"),
|
|
4055
|
+
style: { width: isTalking ? MIC_REGION_WIDTH : MIC_SQUARE_WIDTH },
|
|
4056
|
+
children: [
|
|
4057
|
+
/* @__PURE__ */ jsx5("span", {
|
|
4058
|
+
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"),
|
|
4059
|
+
children: isMuted ? /* @__PURE__ */ jsx5(MicOff, {
|
|
4060
|
+
className: "skippr:size-5"
|
|
4061
|
+
}) : /* @__PURE__ */ jsx5(Mic, {
|
|
4062
|
+
className: "skippr:size-5"
|
|
4063
|
+
})
|
|
4064
|
+
}),
|
|
4065
|
+
/* @__PURE__ */ jsx5("span", {
|
|
4066
|
+
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"),
|
|
4067
|
+
children: Array.from({ length: MIC_BARS }).map((_, index2) => /* @__PURE__ */ jsx5("span", {
|
|
4068
|
+
ref: (el) => {
|
|
4069
|
+
barRefs.current[index2] = el;
|
|
4070
|
+
},
|
|
4071
|
+
className: "skippr:w-[3px] skippr:rounded-full skippr:bg-white skippr:transition-[height] skippr:duration-75",
|
|
4072
|
+
style: { height: 5 }
|
|
4073
|
+
}, index2))
|
|
4074
|
+
})
|
|
4075
|
+
]
|
|
4076
|
+
})
|
|
4077
|
+
]
|
|
4078
|
+
}),
|
|
4079
|
+
showScreenShareToggle && /* @__PURE__ */ jsx5("button", {
|
|
4080
|
+
type: "button",
|
|
4081
|
+
onClick: ifNotDragged(() => void toggleScreenShare()),
|
|
4082
|
+
"aria-label": isScreenSharing ? "Stop sharing screen" : "Share screen",
|
|
4083
|
+
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"),
|
|
4084
|
+
children: isScreenSharing ? /* @__PURE__ */ jsx5(MonitorOff, {
|
|
4085
|
+
className: "skippr:size-5"
|
|
4086
|
+
}) : /* @__PURE__ */ jsx5(Monitor, {
|
|
4087
|
+
className: "skippr:size-5"
|
|
4088
|
+
})
|
|
4005
4089
|
}),
|
|
4006
|
-
/* @__PURE__ */ jsx5("
|
|
4007
|
-
|
|
4008
|
-
|
|
4009
|
-
|
|
4010
|
-
|
|
4011
|
-
|
|
4012
|
-
|
|
4013
|
-
|
|
4090
|
+
/* @__PURE__ */ jsx5("button", {
|
|
4091
|
+
type: "button",
|
|
4092
|
+
onClick: ifNotDragged(togglePanel),
|
|
4093
|
+
"aria-label": isPanelOpen ? "Close panel" : agendaModule && !textMode ? "Open agenda" : "Open chat",
|
|
4094
|
+
className: cn(SQUARE_BUTTON, "skippr:text-neutral-700", textMode ? "skippr:hover:bg-neutral-100" : "skippr:bg-neutral-100 skippr:hover:bg-neutral-200"),
|
|
4095
|
+
children: /* @__PURE__ */ jsx5(MessageSquare, {
|
|
4096
|
+
className: "skippr:size-5"
|
|
4097
|
+
})
|
|
4098
|
+
}),
|
|
4099
|
+
showActionControl && /* @__PURE__ */ jsx5("button", {
|
|
4100
|
+
type: "button",
|
|
4101
|
+
onClick: ifNotDragged(() => void togglePaused()),
|
|
4102
|
+
"aria-label": actionsPaused2 ? "Resume actions" : "Stop actions",
|
|
4103
|
+
title: actionsPaused2 ? "Resume" : "Stop",
|
|
4104
|
+
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"),
|
|
4105
|
+
children: actionsPaused2 ? /* @__PURE__ */ jsx5(Play, {
|
|
4106
|
+
className: "skippr:size-5",
|
|
4107
|
+
fill: "currentColor"
|
|
4108
|
+
}) : /* @__PURE__ */ jsx5(Square, {
|
|
4109
|
+
className: "skippr:size-5",
|
|
4110
|
+
fill: "currentColor"
|
|
4111
|
+
})
|
|
4014
4112
|
})
|
|
4015
4113
|
]
|
|
4016
4114
|
})
|
|
4017
4115
|
]
|
|
4018
|
-
})
|
|
4116
|
+
}, textMode ? "ready-text" : "ready")
|
|
4019
4117
|
]
|
|
4118
|
+
}),
|
|
4119
|
+
isReady && !isDragging && /* @__PURE__ */ jsx5("button", {
|
|
4120
|
+
type: "button",
|
|
4121
|
+
onClick: ifNotDragged(() => void pauseSession()),
|
|
4122
|
+
disabled: isPausing,
|
|
4123
|
+
"aria-label": "End session",
|
|
4124
|
+
"aria-busy": isPausing,
|
|
4125
|
+
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"),
|
|
4126
|
+
children: /* @__PURE__ */ jsxs6("span", {
|
|
4127
|
+
className: "skippr:relative skippr:flex skippr:size-5 skippr:items-center skippr:justify-center",
|
|
4128
|
+
children: [
|
|
4129
|
+
/* @__PURE__ */ jsx5(X, {
|
|
4130
|
+
className: cn("skippr:size-4 skippr:transition-opacity skippr:duration-200", isPausing && "skippr:opacity-40"),
|
|
4131
|
+
strokeWidth: 2.5
|
|
4132
|
+
}),
|
|
4133
|
+
isPausing && /* @__PURE__ */ jsxs6("svg", {
|
|
4134
|
+
viewBox: "0 0 24 24",
|
|
4135
|
+
fill: "none",
|
|
4136
|
+
"aria-hidden": "true",
|
|
4137
|
+
className: "skippr:absolute skippr:inset-0 skippr:size-full skippr:animate-spin skippr:motion-reduce:hidden",
|
|
4138
|
+
children: [
|
|
4139
|
+
/* @__PURE__ */ jsx5("circle", {
|
|
4140
|
+
cx: "12",
|
|
4141
|
+
cy: "12",
|
|
4142
|
+
r: "10.5",
|
|
4143
|
+
stroke: "white",
|
|
4144
|
+
strokeOpacity: "0.2",
|
|
4145
|
+
strokeWidth: "1.5"
|
|
4146
|
+
}),
|
|
4147
|
+
/* @__PURE__ */ jsx5("circle", {
|
|
4148
|
+
cx: "12",
|
|
4149
|
+
cy: "12",
|
|
4150
|
+
r: "10.5",
|
|
4151
|
+
stroke: "white",
|
|
4152
|
+
strokeWidth: "1.5",
|
|
4153
|
+
strokeLinecap: "round",
|
|
4154
|
+
strokeDasharray: "17 49"
|
|
4155
|
+
})
|
|
4156
|
+
]
|
|
4157
|
+
})
|
|
4158
|
+
]
|
|
4159
|
+
})
|
|
4020
4160
|
})
|
|
4021
4161
|
]
|
|
4022
4162
|
});
|
|
4023
4163
|
}
|
|
4024
4164
|
|
|
4025
4165
|
// src/components/ShadowHost.tsx
|
|
4026
|
-
import { useLayoutEffect as useLayoutEffect2, useRef as useRef10, useState as
|
|
4166
|
+
import { useLayoutEffect as useLayoutEffect2, useRef as useRef10, useState as useState12 } from "react";
|
|
4027
4167
|
import { createPortal } from "react-dom";
|
|
4028
|
-
import { jsx as jsx6, Fragment } from "react/jsx-runtime";
|
|
4168
|
+
import { jsx as jsx6, Fragment as Fragment2 } from "react/jsx-runtime";
|
|
4029
4169
|
var PROPERTIES_STYLE_ID = "skippr-tw-properties";
|
|
4030
4170
|
var PROPERTY_RULE = /@property\s+[^{]+\{[^}]*\}/g;
|
|
4031
4171
|
function hoistTailwindProperties(css) {
|
|
@@ -4041,9 +4181,9 @@ function hoistTailwindProperties(css) {
|
|
|
4041
4181
|
}
|
|
4042
4182
|
function ShadowHost({ children }) {
|
|
4043
4183
|
const hostRef = useRef10(null);
|
|
4044
|
-
const [shadowRoot, setShadowRoot] =
|
|
4184
|
+
const [shadowRoot, setShadowRoot] = useState12(null);
|
|
4045
4185
|
const css = `/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
|
|
4046
|
-
@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-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-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-emerald-500:oklch(69.6% .17 162.48);--skippr-color-neutral-100:oklch(97% 0 0);--skippr-color-neutral-200:oklch(92.2% 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-pulse:pulse 2s cubic-bezier(.4,0,.6,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-2{top:calc(var(--skippr-spacing)*-2)}.skippr\\:top-0{top:calc(var(--skippr-spacing)*0)}.skippr\\:top-1\\/2{top:50%}.skippr\\:top-full{top:100%}.skippr\\:-right-2{right:calc(var(--skippr-spacing)*-2)}.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\\:right-\\[-3px\\]{right:-3px}.skippr\\:right-\\[24px\\]{right:24px}.skippr\\:-bottom-1{bottom:calc(var(--skippr-spacing)*-1)}.skippr\\:-bottom-9{bottom:calc(var(--skippr-spacing)*-9)}.skippr\\:bottom-20{bottom:calc(var(--skippr-spacing)*20)}.skippr\\:bottom-full{bottom:100%}.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\\:left-\\[24px\\]{left:24px}.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\\:mx-auto{margin-inline:auto}.skippr\\:-mt-\\[5px\\]{margin-top:-5px}.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-3{margin-top:calc(var(--skippr-spacing)*3)}.skippr\\:mt-3\\.5{margin-top:calc(var(--skippr-spacing)*3.5)}.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\\:flex{display:flex}.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\\.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-\\[6px\\]{width:6px;height:6px}.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-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-12{height:calc(var(--skippr-spacing)*12)}.skippr\\:h-16{height:calc(var(--skippr-spacing)*16)}.skippr\\:h-\\[18\\.5px\\]{height:18.5px}.skippr\\:h-\\[50px\\]{height:50px}.skippr\\:h-full{height:100%}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.skippr\\:w-0{width:calc(var(--skippr-spacing)*0)}.skippr\\:w-3\\.5{width:calc(var(--skippr-spacing)*3.5)}.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-10{width:calc(var(--skippr-spacing)*10)}.skippr\\:w-12{width:calc(var(--skippr-spacing)*12)}.skippr\\:w-14{width:calc(var(--skippr-spacing)*14)}.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-\\[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\\:min-w-0{min-width:calc(var(--skippr-spacing)*0)}.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-7{--tw-translate-x:calc(var(--skippr-spacing)*-7);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-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);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_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_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-pulse{animation:var(--skippr-animate-pulse)}.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-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-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\\: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-\\[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-tl-md{border-top-left-radius:.5rem}.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-emerald-500{background-color:var(--skippr-color-emerald-500)}.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{background-color:oklch(97% .001 106.424)}.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-secondary{background-color:#ffdfb5}.skippr\\:bg-transparent{background-color:#0000}.skippr\\:bg-white{background-color:var(--skippr-color-white)}.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-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-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\\:pt-1\\.5{padding-top:calc(var(--skippr-spacing)*1.5)}.skippr\\:pt-2{padding-top:calc(var(--skippr-spacing)*2)}.skippr\\:pr-3{padding-right:calc(var(--skippr-spacing)*3)}.skippr\\:pb-0{padding-bottom:calc(var(--skippr-spacing)*0)}.skippr\\:pb-2{padding-bottom:calc(var(--skippr-spacing)*2)}.skippr\\:pl-1\\.5{padding-left:calc(var(--skippr-spacing)*1.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-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-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{color:var(--skippr-color-white)}.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_6px_22px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{--tw-shadow:-6px 6px 22px var(--tw-shadow-color,#0000004d);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\\.3\\)\\]{--tw-shadow:0 4px 14px var(--tw-shadow-color,#0000004d);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-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-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\\]{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\\: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\\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-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\\/70:hover{background-color:oklab(97% -.000282743 .000959196/.7)}.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-foreground\\/10:hover{background-color:oklab(100% 0 5.96046e-8/.1)}.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-secondary\\/80:hover{background-color:oklab(91.9963% .0175391 .0626889/.8)}.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-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-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-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 pulse{50%{opacity:.5}}@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}}`;
|
|
4186
|
+
@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-emerald-500:oklch(69.6% .17 162.48);--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-pulse:pulse 2s cubic-bezier(.4,0,.6,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\\:right-7{right:calc(var(--skippr-spacing)*7)}.skippr\\:right-\\[24px\\]{right:24px}.skippr\\:-bottom-1{bottom:calc(var(--skippr-spacing)*-1)}.skippr\\:-bottom-9{bottom:calc(var(--skippr-spacing)*-9)}.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\\:left-7{left:calc(var(--skippr-spacing)*7)}.skippr\\:left-\\[24px\\]{left:24px}.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\\: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-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-\\[6px\\]{width:6px;height:6px}.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-\\[38px\\]{height:38px}.skippr\\:h-\\[50px\\]{height:50px}.skippr\\:h-\\[54px\\]{height:54px}.skippr\\:h-full{height:100%}.skippr\\:min-h-0{min-height:calc(var(--skippr-spacing)*0)}.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-\\[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\\:min-w-0{min-width:calc(var(--skippr-spacing)*0)}.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-7{--tw-translate-x:calc(var(--skippr-spacing)*-7);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-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);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_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-pulse{animation:var(--skippr-animate-pulse)}.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-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-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-\\[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-tl-md{border-top-left-radius:.5rem}.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-emerald-500{background-color:var(--skippr-color-emerald-500)}.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\\.5{padding:calc(var(--skippr-spacing)*.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-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\\: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-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{color:var(--skippr-color-white)}.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_6px_22px_rgba\\(0\\,0\\,0\\,0\\.3\\)\\]{--tw-shadow:-6px 6px 22px var(--tw-shadow-color,#0000004d);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-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\\: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\\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-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-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-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 pulse{50%{opacity:.5}}@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}}`;
|
|
4047
4187
|
useLayoutEffect2(() => {
|
|
4048
4188
|
const host = hostRef.current;
|
|
4049
4189
|
if (!host || !css)
|
|
@@ -4058,7 +4198,7 @@ function ShadowHost({ children }) {
|
|
|
4058
4198
|
setShadowRoot(root);
|
|
4059
4199
|
}, [css]);
|
|
4060
4200
|
if (!css)
|
|
4061
|
-
return /* @__PURE__ */ jsx6(
|
|
4201
|
+
return /* @__PURE__ */ jsx6(Fragment2, {
|
|
4062
4202
|
children
|
|
4063
4203
|
});
|
|
4064
4204
|
return /* @__PURE__ */ jsx6("div", {
|
|
@@ -4068,13 +4208,13 @@ function ShadowHost({ children }) {
|
|
|
4068
4208
|
}
|
|
4069
4209
|
|
|
4070
4210
|
// src/components/Sidebar.tsx
|
|
4071
|
-
import { useContext as useContext10, useEffect as
|
|
4211
|
+
import { useContext as useContext10, useEffect as useEffect24 } from "react";
|
|
4072
4212
|
|
|
4073
4213
|
// src/hooks/useCombinedMessages.ts
|
|
4074
4214
|
import { useContext as useContext7, useMemo as useMemo5 } from "react";
|
|
4075
4215
|
|
|
4076
4216
|
// src/hooks/useChatMessages.ts
|
|
4077
|
-
import { useChat, useLocalParticipant as
|
|
4217
|
+
import { useChat, useLocalParticipant as useLocalParticipant7 } from "@livekit/components-react/hooks";
|
|
4078
4218
|
import { useMemo as useMemo3 } from "react";
|
|
4079
4219
|
|
|
4080
4220
|
// src/lib/filterSystemMessages.ts
|
|
@@ -4086,7 +4226,7 @@ function filterSystemMessages(messages) {
|
|
|
4086
4226
|
// src/hooks/useChatMessages.ts
|
|
4087
4227
|
function useChatMessages() {
|
|
4088
4228
|
const { chatMessages: rawMessages, send, isSending } = useChat();
|
|
4089
|
-
const { localParticipant } =
|
|
4229
|
+
const { localParticipant } = useLocalParticipant7();
|
|
4090
4230
|
const localIdentity = localParticipant.identity;
|
|
4091
4231
|
const chatMessages = useMemo3(() => {
|
|
4092
4232
|
const sortedMessages = rawMessages.map((msg) => ({
|
|
@@ -4102,11 +4242,11 @@ function useChatMessages() {
|
|
|
4102
4242
|
}
|
|
4103
4243
|
|
|
4104
4244
|
// src/hooks/useStreamingTranscript.ts
|
|
4105
|
-
import { useLocalParticipant as
|
|
4245
|
+
import { useLocalParticipant as useLocalParticipant8, useTranscriptions } from "@livekit/components-react/hooks";
|
|
4106
4246
|
import { useMemo as useMemo4 } from "react";
|
|
4107
4247
|
function useStreamingTranscript() {
|
|
4108
4248
|
const transcriptions = useTranscriptions();
|
|
4109
|
-
const { localParticipant } =
|
|
4249
|
+
const { localParticipant } = useLocalParticipant8();
|
|
4110
4250
|
const localIdentity = localParticipant.identity;
|
|
4111
4251
|
const transcriptMessages = useMemo4(() => filterSystemMessages(transcriptions.filter((stream) => stream.text.trim().length > 0).map((stream) => ({
|
|
4112
4252
|
id: stream.streamInfo.id,
|
|
@@ -4157,7 +4297,7 @@ function useCombinedMessages() {
|
|
|
4157
4297
|
}
|
|
4158
4298
|
|
|
4159
4299
|
// src/hooks/useSessionRemaining.ts
|
|
4160
|
-
import { useEffect as
|
|
4300
|
+
import { useEffect as useEffect19, useRef as useRef11, useState as useState13 } from "react";
|
|
4161
4301
|
|
|
4162
4302
|
// src/lib/format.ts
|
|
4163
4303
|
function formatTime(seconds) {
|
|
@@ -4174,8 +4314,8 @@ function parseNumber(s) {
|
|
|
4174
4314
|
function useSessionRemaining() {
|
|
4175
4315
|
const maxCallDuration = useAgentState("maxCallDuration", parseNumber, null);
|
|
4176
4316
|
const endTimeRef = useRef11(null);
|
|
4177
|
-
const [remaining, setRemaining] =
|
|
4178
|
-
|
|
4317
|
+
const [remaining, setRemaining] = useState13(null);
|
|
4318
|
+
useEffect19(() => {
|
|
4179
4319
|
if (maxCallDuration === null || endTimeRef.current !== null)
|
|
4180
4320
|
return;
|
|
4181
4321
|
const endTime = Date.now() + maxCallDuration * 1000;
|
|
@@ -4191,26 +4331,48 @@ function useSessionRemaining() {
|
|
|
4191
4331
|
return remaining;
|
|
4192
4332
|
}
|
|
4193
4333
|
|
|
4334
|
+
// src/components/ChatHeader.tsx
|
|
4335
|
+
import { useContext as useContext9, useRef as useRef13 } from "react";
|
|
4336
|
+
|
|
4337
|
+
// src/hooks/useElapsedSeconds.ts
|
|
4338
|
+
import { useEffect as useEffect20, useState as useState14 } from "react";
|
|
4339
|
+
function useElapsedSeconds(isRunning) {
|
|
4340
|
+
const [elapsed, setElapsed] = useState14(0);
|
|
4341
|
+
useEffect20(() => {
|
|
4342
|
+
if (!isRunning) {
|
|
4343
|
+
setElapsed(0);
|
|
4344
|
+
return;
|
|
4345
|
+
}
|
|
4346
|
+
const startedAt = Date.now();
|
|
4347
|
+
setElapsed(0);
|
|
4348
|
+
const id = setInterval(() => {
|
|
4349
|
+
setElapsed(Math.floor((Date.now() - startedAt) / 1000));
|
|
4350
|
+
}, 1000);
|
|
4351
|
+
return () => clearInterval(id);
|
|
4352
|
+
}, [isRunning]);
|
|
4353
|
+
return elapsed;
|
|
4354
|
+
}
|
|
4355
|
+
|
|
4194
4356
|
// src/hooks/useTextMode.ts
|
|
4195
|
-
import { useLocalParticipant as
|
|
4196
|
-
import { useCallback as
|
|
4197
|
-
var
|
|
4357
|
+
import { useLocalParticipant as useLocalParticipant9 } from "@livekit/components-react/hooks";
|
|
4358
|
+
import { useCallback as useCallback12, useContext as useContext8, useRef as useRef12 } from "react";
|
|
4359
|
+
var textEncoder5 = new TextEncoder;
|
|
4198
4360
|
function useTextMode() {
|
|
4199
4361
|
const ctx = useContext8(LiveAgentContext);
|
|
4200
4362
|
if (!ctx) {
|
|
4201
4363
|
throw new Error("useTextMode must be used within a <LiveAgent> provider");
|
|
4202
4364
|
}
|
|
4203
4365
|
const { textMode, setTextModeState, sidebarTab, setSidebarTab } = ctx;
|
|
4204
|
-
const { localParticipant } =
|
|
4366
|
+
const { localParticipant } = useLocalParticipant9();
|
|
4205
4367
|
const confirmedTextModeRef = useRef12(false);
|
|
4206
|
-
const toggleTextMode =
|
|
4368
|
+
const toggleTextMode = useCallback12(async () => {
|
|
4207
4369
|
const next = !textMode;
|
|
4208
4370
|
setTextModeState(next);
|
|
4209
4371
|
if (next && sidebarTab === "agenda") {
|
|
4210
4372
|
setSidebarTab("chat");
|
|
4211
4373
|
}
|
|
4212
4374
|
try {
|
|
4213
|
-
await localParticipant.publishData(
|
|
4375
|
+
await localParticipant.publishData(textEncoder5.encode(JSON.stringify({ textMode: next })), {
|
|
4214
4376
|
reliable: true,
|
|
4215
4377
|
topic: TEXT_MODE_TOPIC
|
|
4216
4378
|
});
|
|
@@ -4225,29 +4387,7 @@ function useTextMode() {
|
|
|
4225
4387
|
}
|
|
4226
4388
|
|
|
4227
4389
|
// src/components/ChatHeader.tsx
|
|
4228
|
-
import {
|
|
4229
|
-
|
|
4230
|
-
// src/hooks/useElapsedSeconds.ts
|
|
4231
|
-
import { useEffect as useEffect18, useState as useState13 } from "react";
|
|
4232
|
-
function useElapsedSeconds(isRunning) {
|
|
4233
|
-
const [elapsed, setElapsed] = useState13(0);
|
|
4234
|
-
useEffect18(() => {
|
|
4235
|
-
if (!isRunning) {
|
|
4236
|
-
setElapsed(0);
|
|
4237
|
-
return;
|
|
4238
|
-
}
|
|
4239
|
-
const startedAt = Date.now();
|
|
4240
|
-
setElapsed(0);
|
|
4241
|
-
const id = setInterval(() => {
|
|
4242
|
-
setElapsed(Math.floor((Date.now() - startedAt) / 1000));
|
|
4243
|
-
}, 1000);
|
|
4244
|
-
return () => clearInterval(id);
|
|
4245
|
-
}, [isRunning]);
|
|
4246
|
-
return elapsed;
|
|
4247
|
-
}
|
|
4248
|
-
|
|
4249
|
-
// src/components/ChatHeader.tsx
|
|
4250
|
-
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
4390
|
+
import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
4251
4391
|
function ChatHeader() {
|
|
4252
4392
|
const ctx = useContext9(LiveAgentContext);
|
|
4253
4393
|
if (!ctx) {
|
|
@@ -4257,32 +4397,30 @@ function ChatHeader() {
|
|
|
4257
4397
|
isConnected,
|
|
4258
4398
|
variant,
|
|
4259
4399
|
isPanelOpen,
|
|
4260
|
-
|
|
4261
|
-
|
|
4400
|
+
minimizable,
|
|
4401
|
+
minimizePanel,
|
|
4262
4402
|
commitLauncherDrop,
|
|
4263
4403
|
panelRef,
|
|
4264
|
-
controlBarRef
|
|
4404
|
+
controlBarRef,
|
|
4405
|
+
setIsDragging
|
|
4265
4406
|
} = ctx;
|
|
4266
4407
|
const elapsed = useElapsedSeconds(isConnected);
|
|
4267
4408
|
const headerRef = useRef13(null);
|
|
4268
4409
|
const followsPanel = variant === "floating" && isPanelOpen;
|
|
4269
4410
|
const dragFollowers = followsPanel ? [panelRef, controlBarRef] : null;
|
|
4270
|
-
const { wasDraggedRef } = useLauncherDrag(headerRef, commitLauncherDrop, dragFollowers);
|
|
4271
|
-
return /* @__PURE__ */
|
|
4411
|
+
const { wasDraggedRef } = useLauncherDrag(headerRef, commitLauncherDrop, dragFollowers, setIsDragging);
|
|
4412
|
+
return /* @__PURE__ */ jsxs7("header", {
|
|
4272
4413
|
ref: headerRef,
|
|
4273
4414
|
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"),
|
|
4274
4415
|
children: [
|
|
4275
|
-
/* @__PURE__ */
|
|
4276
|
-
className: "skippr:
|
|
4277
|
-
children: "Skippr"
|
|
4278
|
-
}),
|
|
4279
|
-
/* @__PURE__ */ jsxs6("div", {
|
|
4280
|
-
className: "skippr:flex skippr:items-center skippr:gap-2",
|
|
4416
|
+
/* @__PURE__ */ jsxs7("div", {
|
|
4417
|
+
className: "skippr:flex skippr:items-center skippr:gap-3",
|
|
4281
4418
|
children: [
|
|
4282
|
-
isConnected && /* @__PURE__ */
|
|
4419
|
+
isConnected && /* @__PURE__ */ jsx7(HeaderModeToggle, {}),
|
|
4420
|
+
isConnected && /* @__PURE__ */ jsxs7("div", {
|
|
4283
4421
|
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",
|
|
4284
4422
|
children: [
|
|
4285
|
-
/* @__PURE__ */
|
|
4423
|
+
/* @__PURE__ */ jsxs7("span", {
|
|
4286
4424
|
className: "skippr:relative skippr:flex skippr:size-1.5",
|
|
4287
4425
|
children: [
|
|
4288
4426
|
/* @__PURE__ */ jsx7("span", {
|
|
@@ -4302,35 +4440,62 @@ function ChatHeader() {
|
|
|
4302
4440
|
children: formatTime(elapsed)
|
|
4303
4441
|
})
|
|
4304
4442
|
]
|
|
4305
|
-
}),
|
|
4306
|
-
variant === "floating" && /* @__PURE__ */ jsx7("button", {
|
|
4307
|
-
type: "button",
|
|
4308
|
-
onClick: () => {
|
|
4309
|
-
if (!wasDraggedRef.current)
|
|
4310
|
-
togglePanelExpanded();
|
|
4311
|
-
},
|
|
4312
|
-
"aria-label": panelExpanded ? "Collapse" : "Expand",
|
|
4313
|
-
title: panelExpanded ? "Collapse" : "Expand",
|
|
4314
|
-
className: "skippr:flex skippr:size-6 skippr:cursor-pointer skippr:items-center skippr:justify-center skippr:rounded-md skippr:text-primary-foreground/70 skippr:transition-colors skippr:hover:bg-primary-foreground/10 skippr:hover:text-primary-foreground",
|
|
4315
|
-
children: panelExpanded ? /* @__PURE__ */ jsx7(Minimize2, {
|
|
4316
|
-
className: "skippr:size-3.5"
|
|
4317
|
-
}) : /* @__PURE__ */ jsx7(Maximize2, {
|
|
4318
|
-
className: "skippr:size-3.5"
|
|
4319
|
-
})
|
|
4320
4443
|
})
|
|
4321
4444
|
]
|
|
4445
|
+
}),
|
|
4446
|
+
minimizable && /* @__PURE__ */ jsx7("button", {
|
|
4447
|
+
type: "button",
|
|
4448
|
+
onClick: () => {
|
|
4449
|
+
if (!wasDraggedRef.current)
|
|
4450
|
+
minimizePanel();
|
|
4451
|
+
},
|
|
4452
|
+
"aria-label": "Close",
|
|
4453
|
+
title: "Close",
|
|
4454
|
+
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",
|
|
4455
|
+
children: /* @__PURE__ */ jsx7(X, {
|
|
4456
|
+
className: "skippr:h-4 skippr:w-4"
|
|
4457
|
+
})
|
|
4458
|
+
})
|
|
4459
|
+
]
|
|
4460
|
+
});
|
|
4461
|
+
}
|
|
4462
|
+
function HeaderModeToggle() {
|
|
4463
|
+
const { textMode, toggleTextMode } = useTextMode();
|
|
4464
|
+
return /* @__PURE__ */ jsxs7("fieldset", {
|
|
4465
|
+
"aria-label": "Response mode",
|
|
4466
|
+
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",
|
|
4467
|
+
children: [
|
|
4468
|
+
/* @__PURE__ */ jsx7("button", {
|
|
4469
|
+
type: "button",
|
|
4470
|
+
"aria-pressed": !textMode,
|
|
4471
|
+
onClick: () => {
|
|
4472
|
+
if (textMode)
|
|
4473
|
+
toggleTextMode();
|
|
4474
|
+
},
|
|
4475
|
+
className: cn("skippr:cursor-pointer 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", textMode ? "skippr:font-semibold skippr:text-primary-foreground" : "skippr:bg-white skippr:text-primary skippr:shadow-sm"),
|
|
4476
|
+
children: "Voice"
|
|
4477
|
+
}),
|
|
4478
|
+
/* @__PURE__ */ jsx7("button", {
|
|
4479
|
+
type: "button",
|
|
4480
|
+
"aria-pressed": textMode,
|
|
4481
|
+
onClick: () => {
|
|
4482
|
+
if (!textMode)
|
|
4483
|
+
toggleTextMode();
|
|
4484
|
+
},
|
|
4485
|
+
className: cn("skippr:cursor-pointer 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", textMode ? "skippr:bg-white skippr:text-primary skippr:shadow-sm" : "skippr:font-semibold skippr:text-primary-foreground"),
|
|
4486
|
+
children: "Text"
|
|
4322
4487
|
})
|
|
4323
4488
|
]
|
|
4324
4489
|
});
|
|
4325
4490
|
}
|
|
4326
4491
|
|
|
4327
4492
|
// src/components/LoadingDots.tsx
|
|
4328
|
-
import { jsx as jsx8, jsxs as
|
|
4493
|
+
import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
4329
4494
|
function LoadingDots({ label }) {
|
|
4330
|
-
return /* @__PURE__ */
|
|
4495
|
+
return /* @__PURE__ */ jsxs8("div", {
|
|
4331
4496
|
className: "skippr:flex skippr:items-center skippr:gap-2 skippr:py-4",
|
|
4332
4497
|
children: [
|
|
4333
|
-
/* @__PURE__ */
|
|
4498
|
+
/* @__PURE__ */ jsxs8("div", {
|
|
4334
4499
|
className: "skippr:flex skippr:gap-1",
|
|
4335
4500
|
children: [
|
|
4336
4501
|
/* @__PURE__ */ jsx8("span", {
|
|
@@ -4353,7 +4518,7 @@ function LoadingDots({ label }) {
|
|
|
4353
4518
|
}
|
|
4354
4519
|
|
|
4355
4520
|
// src/components/LoginFlow.tsx
|
|
4356
|
-
import { useCallback as
|
|
4521
|
+
import { useCallback as useCallback13, useEffect as useEffect21, useRef as useRef14, useState as useState15 } from "react";
|
|
4357
4522
|
|
|
4358
4523
|
// src/components/ui/button.tsx
|
|
4359
4524
|
import { forwardRef as forwardRef3 } from "react";
|
|
@@ -4385,24 +4550,24 @@ var Button = forwardRef3(({ className, variant = "default", size = "default", ..
|
|
|
4385
4550
|
Button.displayName = "Button";
|
|
4386
4551
|
|
|
4387
4552
|
// src/components/LoginFlow.tsx
|
|
4388
|
-
import { jsx as jsx10, jsxs as
|
|
4553
|
+
import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
4389
4554
|
var OTP_LENGTH = 6;
|
|
4390
4555
|
var DIGIT_KEYS = ["d0", "d1", "d2", "d3", "d4", "d5"];
|
|
4391
4556
|
function LoginFlow({ requestOtp, verifyOtp, error, isSubmitting }) {
|
|
4392
|
-
const [step, setStep] =
|
|
4393
|
-
const [email, setEmail] =
|
|
4394
|
-
const handleRequestOtp =
|
|
4557
|
+
const [step, setStep] = useState15("email");
|
|
4558
|
+
const [email, setEmail] = useState15("");
|
|
4559
|
+
const handleRequestOtp = useCallback13(async (emailValue) => {
|
|
4395
4560
|
const success = await requestOtp(emailValue);
|
|
4396
4561
|
if (success)
|
|
4397
4562
|
setStep("otp");
|
|
4398
4563
|
}, [requestOtp]);
|
|
4399
|
-
const handleVerifyOtp =
|
|
4564
|
+
const handleVerifyOtp = useCallback13(async (code) => {
|
|
4400
4565
|
await verifyOtp(email, code);
|
|
4401
4566
|
}, [verifyOtp, email]);
|
|
4402
|
-
const handleBack =
|
|
4567
|
+
const handleBack = useCallback13(() => {
|
|
4403
4568
|
setStep("email");
|
|
4404
4569
|
}, []);
|
|
4405
|
-
const handleResend =
|
|
4570
|
+
const handleResend = useCallback13(async () => {
|
|
4406
4571
|
await requestOtp(email);
|
|
4407
4572
|
}, [requestOtp, email]);
|
|
4408
4573
|
if (step === "otp") {
|
|
@@ -4429,10 +4594,10 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
|
|
|
4429
4594
|
if (email.trim())
|
|
4430
4595
|
onSubmit(email.trim());
|
|
4431
4596
|
}
|
|
4432
|
-
return /* @__PURE__ */
|
|
4597
|
+
return /* @__PURE__ */ jsxs9("div", {
|
|
4433
4598
|
className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
|
|
4434
4599
|
children: [
|
|
4435
|
-
/* @__PURE__ */
|
|
4600
|
+
/* @__PURE__ */ jsxs9("div", {
|
|
4436
4601
|
className: "skippr:mb-4 skippr:text-center",
|
|
4437
4602
|
children: [
|
|
4438
4603
|
/* @__PURE__ */ jsx10(Mail, {
|
|
@@ -4448,7 +4613,7 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
|
|
|
4448
4613
|
})
|
|
4449
4614
|
]
|
|
4450
4615
|
}),
|
|
4451
|
-
/* @__PURE__ */
|
|
4616
|
+
/* @__PURE__ */ jsxs9("form", {
|
|
4452
4617
|
onSubmit: handleSubmit,
|
|
4453
4618
|
className: "skippr:flex skippr:flex-col skippr:gap-3",
|
|
4454
4619
|
children: [
|
|
@@ -4479,30 +4644,30 @@ function EmailStep({ email, onEmailChange, onSubmit, error, isSubmitting }) {
|
|
|
4479
4644
|
});
|
|
4480
4645
|
}
|
|
4481
4646
|
function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
4482
|
-
const [digits, setDigits] =
|
|
4483
|
-
const [resendCooldown, setResendCooldown] =
|
|
4647
|
+
const [digits, setDigits] = useState15(Array(OTP_LENGTH).fill(""));
|
|
4648
|
+
const [resendCooldown, setResendCooldown] = useState15(0);
|
|
4484
4649
|
const inputRefs = useRef14([]);
|
|
4485
4650
|
const submittedRef = useRef14(false);
|
|
4486
|
-
|
|
4651
|
+
useEffect21(() => {
|
|
4487
4652
|
inputRefs.current[0]?.focus();
|
|
4488
4653
|
}, []);
|
|
4489
|
-
|
|
4654
|
+
useEffect21(() => {
|
|
4490
4655
|
if (error)
|
|
4491
4656
|
submittedRef.current = false;
|
|
4492
4657
|
}, [error]);
|
|
4493
|
-
|
|
4658
|
+
useEffect21(() => {
|
|
4494
4659
|
if (resendCooldown <= 0)
|
|
4495
4660
|
return;
|
|
4496
4661
|
const timer = setTimeout(() => setResendCooldown((c) => c - 1), 1000);
|
|
4497
4662
|
return () => clearTimeout(timer);
|
|
4498
4663
|
}, [resendCooldown]);
|
|
4499
|
-
const submitCode =
|
|
4664
|
+
const submitCode = useCallback13((code) => {
|
|
4500
4665
|
if (submittedRef.current || isSubmitting)
|
|
4501
4666
|
return;
|
|
4502
4667
|
submittedRef.current = true;
|
|
4503
4668
|
onSubmit(code);
|
|
4504
4669
|
}, [onSubmit, isSubmitting]);
|
|
4505
|
-
const handleDigitChange =
|
|
4670
|
+
const handleDigitChange = useCallback13((index2, value) => {
|
|
4506
4671
|
const digit = value.replace(/\D/g, "").slice(-1);
|
|
4507
4672
|
const newDigits = [...digits];
|
|
4508
4673
|
newDigits[index2] = digit;
|
|
@@ -4516,12 +4681,12 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
4516
4681
|
submitCode(code);
|
|
4517
4682
|
}
|
|
4518
4683
|
}, [digits, submitCode]);
|
|
4519
|
-
const handleKeyDown =
|
|
4684
|
+
const handleKeyDown = useCallback13((index2, e) => {
|
|
4520
4685
|
if (e.key === "Backspace" && !digits[index2] && index2 > 0) {
|
|
4521
4686
|
inputRefs.current[index2 - 1]?.focus();
|
|
4522
4687
|
}
|
|
4523
4688
|
}, [digits]);
|
|
4524
|
-
const handlePaste =
|
|
4689
|
+
const handlePaste = useCallback13((e) => {
|
|
4525
4690
|
e.preventDefault();
|
|
4526
4691
|
const pasted = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, OTP_LENGTH);
|
|
4527
4692
|
if (pasted.length > 0) {
|
|
@@ -4549,17 +4714,17 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
4549
4714
|
submittedRef.current = false;
|
|
4550
4715
|
inputRefs.current[0]?.focus();
|
|
4551
4716
|
}
|
|
4552
|
-
return /* @__PURE__ */
|
|
4717
|
+
return /* @__PURE__ */ jsxs9("div", {
|
|
4553
4718
|
className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:px-4 skippr:py-4",
|
|
4554
4719
|
children: [
|
|
4555
|
-
/* @__PURE__ */
|
|
4720
|
+
/* @__PURE__ */ jsxs9("div", {
|
|
4556
4721
|
className: "skippr:mb-4 skippr:text-center",
|
|
4557
4722
|
children: [
|
|
4558
4723
|
/* @__PURE__ */ jsx10("p", {
|
|
4559
4724
|
className: "skippr:text-sm skippr:font-medium skippr:text-foreground",
|
|
4560
4725
|
children: "Enter verification code"
|
|
4561
4726
|
}),
|
|
4562
|
-
/* @__PURE__ */
|
|
4727
|
+
/* @__PURE__ */ jsxs9("p", {
|
|
4563
4728
|
className: "skippr:mt-1 skippr:text-xs skippr:text-muted-foreground",
|
|
4564
4729
|
children: [
|
|
4565
4730
|
"We sent a 6-digit code to",
|
|
@@ -4572,7 +4737,7 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
4572
4737
|
})
|
|
4573
4738
|
]
|
|
4574
4739
|
}),
|
|
4575
|
-
/* @__PURE__ */
|
|
4740
|
+
/* @__PURE__ */ jsxs9("form", {
|
|
4576
4741
|
onSubmit: handleSubmit,
|
|
4577
4742
|
className: "skippr:flex skippr:flex-col skippr:gap-3",
|
|
4578
4743
|
children: [
|
|
@@ -4605,7 +4770,7 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
4605
4770
|
className: "skippr:size-4 skippr:animate-spin"
|
|
4606
4771
|
}) : "Verify"
|
|
4607
4772
|
}),
|
|
4608
|
-
/* @__PURE__ */
|
|
4773
|
+
/* @__PURE__ */ jsxs9("div", {
|
|
4609
4774
|
className: "skippr:flex skippr:items-center skippr:justify-between skippr:text-xs",
|
|
4610
4775
|
children: [
|
|
4611
4776
|
/* @__PURE__ */ jsx10("button", {
|
|
@@ -4631,17 +4796,17 @@ function OtpStep({ email, onSubmit, onResend, onBack, error, isSubmitting }) {
|
|
|
4631
4796
|
}
|
|
4632
4797
|
|
|
4633
4798
|
// src/components/MessageList.tsx
|
|
4634
|
-
import { useCallback as
|
|
4799
|
+
import { useCallback as useCallback14, useLayoutEffect as useLayoutEffect3, useRef as useRef16, useState as useState17 } from "react";
|
|
4635
4800
|
|
|
4636
4801
|
// src/components/ChatInput.tsx
|
|
4637
|
-
import { useEffect as
|
|
4638
|
-
import { jsx as jsx11, jsxs as
|
|
4802
|
+
import { useEffect as useEffect22, useRef as useRef15, useState as useState16 } from "react";
|
|
4803
|
+
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
4639
4804
|
var MAX_INPUT_HEIGHT = 60;
|
|
4640
4805
|
function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
|
|
4641
|
-
const [inputText, setInputText] =
|
|
4806
|
+
const [inputText, setInputText] = useState16("");
|
|
4642
4807
|
const textareaRef = useRef15(null);
|
|
4643
4808
|
const canSend = inputText.trim().length > 0 && !isSendingChat;
|
|
4644
|
-
|
|
4809
|
+
useEffect22(() => {
|
|
4645
4810
|
if (autoFocus)
|
|
4646
4811
|
textareaRef.current?.focus();
|
|
4647
4812
|
}, [autoFocus]);
|
|
@@ -4675,7 +4840,7 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
|
|
|
4675
4840
|
return /* @__PURE__ */ jsx11("form", {
|
|
4676
4841
|
onSubmit: handleSubmit,
|
|
4677
4842
|
className: "skippr:border-t skippr:border-border skippr:p-3",
|
|
4678
|
-
children: /* @__PURE__ */
|
|
4843
|
+
children: /* @__PURE__ */ jsxs10("div", {
|
|
4679
4844
|
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",
|
|
4680
4845
|
children: [
|
|
4681
4846
|
/* @__PURE__ */ jsx11("textarea", {
|
|
@@ -4703,7 +4868,7 @@ function ChatInput({ sendChatMessage, isSendingChat, autoFocus = false }) {
|
|
|
4703
4868
|
}
|
|
4704
4869
|
|
|
4705
4870
|
// src/components/ChatMessage.tsx
|
|
4706
|
-
import { jsx as jsx12, jsxs as
|
|
4871
|
+
import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
4707
4872
|
function formatTimestamp(ts) {
|
|
4708
4873
|
return new Date(ts).toLocaleTimeString("en-US", {
|
|
4709
4874
|
hour: "numeric",
|
|
@@ -4713,35 +4878,27 @@ function formatTimestamp(ts) {
|
|
|
4713
4878
|
}
|
|
4714
4879
|
function ChatMessage({ message }) {
|
|
4715
4880
|
const isAgent = message.role === "assistant";
|
|
4716
|
-
return /* @__PURE__ */
|
|
4881
|
+
return /* @__PURE__ */ jsx12("div", {
|
|
4717
4882
|
className: cn("skippr:flex skippr:gap-2", isAgent ? "skippr:items-start" : "skippr:justify-end"),
|
|
4718
|
-
children:
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
|
|
4722
|
-
className: "skippr:
|
|
4883
|
+
children: /* @__PURE__ */ jsxs11("div", {
|
|
4884
|
+
className: cn("skippr:flex skippr:max-w-[80%] skippr:flex-col", isAgent ? "skippr:items-start" : "skippr:items-end"),
|
|
4885
|
+
children: [
|
|
4886
|
+
/* @__PURE__ */ jsx12("div", {
|
|
4887
|
+
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"),
|
|
4888
|
+
children: message.content
|
|
4889
|
+
}),
|
|
4890
|
+
message.timestamp && /* @__PURE__ */ jsx12("span", {
|
|
4891
|
+
className: "skippr:mt-1 skippr:px-1 skippr:text-[10px] skippr:text-muted-foreground/60",
|
|
4892
|
+
children: formatTimestamp(message.timestamp)
|
|
4723
4893
|
})
|
|
4724
|
-
|
|
4725
|
-
|
|
4726
|
-
className: cn("skippr:flex skippr:max-w-[80%] skippr:flex-col", isAgent ? "skippr:items-start" : "skippr:items-end"),
|
|
4727
|
-
children: [
|
|
4728
|
-
/* @__PURE__ */ jsx12("div", {
|
|
4729
|
-
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"),
|
|
4730
|
-
children: message.content
|
|
4731
|
-
}),
|
|
4732
|
-
message.timestamp && /* @__PURE__ */ jsx12("span", {
|
|
4733
|
-
className: "skippr:mt-1 skippr:px-1 skippr:text-[10px] skippr:text-muted-foreground/60",
|
|
4734
|
-
children: formatTimestamp(message.timestamp)
|
|
4735
|
-
})
|
|
4736
|
-
]
|
|
4737
|
-
})
|
|
4738
|
-
]
|
|
4894
|
+
]
|
|
4895
|
+
})
|
|
4739
4896
|
});
|
|
4740
4897
|
}
|
|
4741
4898
|
|
|
4742
4899
|
// src/components/PlanCard.tsx
|
|
4743
|
-
import { useEffect as
|
|
4744
|
-
import { jsx as jsx13, jsxs as
|
|
4900
|
+
import { useEffect as useEffect23 } from "react";
|
|
4901
|
+
import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
4745
4902
|
var APPROVE_MESSAGE = "Yes, go ahead.";
|
|
4746
4903
|
var CANCEL_MESSAGE = "No, cancel that.";
|
|
4747
4904
|
var COMPLETED_CARD_VISIBLE_MS = 2500;
|
|
@@ -4767,13 +4924,13 @@ function StepIcon({ status }) {
|
|
|
4767
4924
|
}
|
|
4768
4925
|
function PlanCard({ plan, sendChatMessage, onDismiss }) {
|
|
4769
4926
|
const awaitingApproval = plan.state === "proposed";
|
|
4770
|
-
|
|
4927
|
+
useEffect23(() => {
|
|
4771
4928
|
if (plan.state !== "completed")
|
|
4772
4929
|
return;
|
|
4773
4930
|
const timer = setTimeout(onDismiss, COMPLETED_CARD_VISIBLE_MS);
|
|
4774
4931
|
return () => clearTimeout(timer);
|
|
4775
4932
|
}, [plan.state, onDismiss]);
|
|
4776
|
-
return /* @__PURE__ */
|
|
4933
|
+
return /* @__PURE__ */ jsxs12("div", {
|
|
4777
4934
|
className: "skippr:rounded-2xl skippr:rounded-tl-md skippr:bg-card skippr:p-3.5 skippr:ring-2 skippr:ring-brand",
|
|
4778
4935
|
children: [
|
|
4779
4936
|
/* @__PURE__ */ jsx13("p", {
|
|
@@ -4782,7 +4939,7 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
|
|
|
4782
4939
|
}),
|
|
4783
4940
|
/* @__PURE__ */ jsx13("div", {
|
|
4784
4941
|
className: "skippr:space-y-2",
|
|
4785
|
-
children: plan.steps.map((step) => /* @__PURE__ */
|
|
4942
|
+
children: plan.steps.map((step) => /* @__PURE__ */ jsxs12("div", {
|
|
4786
4943
|
className: "skippr:flex skippr:items-center skippr:gap-2",
|
|
4787
4944
|
children: [
|
|
4788
4945
|
/* @__PURE__ */ jsx13(StepIcon, {
|
|
@@ -4795,7 +4952,7 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
|
|
|
4795
4952
|
]
|
|
4796
4953
|
}, step.index))
|
|
4797
4954
|
}),
|
|
4798
|
-
awaitingApproval && /* @__PURE__ */
|
|
4955
|
+
awaitingApproval && /* @__PURE__ */ jsxs12("div", {
|
|
4799
4956
|
className: "skippr:mt-3.5 skippr:flex skippr:gap-2",
|
|
4800
4957
|
children: [
|
|
4801
4958
|
/* @__PURE__ */ jsx13(Button, {
|
|
@@ -4816,45 +4973,37 @@ function PlanCard({ plan, sendChatMessage, onDismiss }) {
|
|
|
4816
4973
|
}
|
|
4817
4974
|
|
|
4818
4975
|
// src/components/TypingIndicator.tsx
|
|
4819
|
-
import { jsx as jsx14, jsxs as
|
|
4976
|
+
import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
4820
4977
|
function TypingIndicator() {
|
|
4821
|
-
return /* @__PURE__ */
|
|
4978
|
+
return /* @__PURE__ */ jsx14("div", {
|
|
4822
4979
|
className: "skippr:flex skippr:items-start skippr:gap-2 skippr:animate-skippr-tab-fade",
|
|
4823
|
-
children:
|
|
4824
|
-
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
|
|
4980
|
+
children: /* @__PURE__ */ jsxs13("div", {
|
|
4981
|
+
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",
|
|
4982
|
+
children: [
|
|
4983
|
+
/* @__PURE__ */ jsx14("span", {
|
|
4984
|
+
children: "Agent is analyzing your screen"
|
|
4985
|
+
}),
|
|
4986
|
+
/* @__PURE__ */ jsxs13("span", {
|
|
4987
|
+
className: "skippr:inline-flex skippr:items-center skippr:gap-[2px]",
|
|
4988
|
+
children: [
|
|
4989
|
+
/* @__PURE__ */ jsx14("span", {
|
|
4990
|
+
className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:0ms]"
|
|
4991
|
+
}),
|
|
4992
|
+
/* @__PURE__ */ jsx14("span", {
|
|
4993
|
+
className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:200ms]"
|
|
4994
|
+
}),
|
|
4995
|
+
/* @__PURE__ */ jsx14("span", {
|
|
4996
|
+
className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:400ms]"
|
|
4997
|
+
})
|
|
4998
|
+
]
|
|
4828
4999
|
})
|
|
4829
|
-
|
|
4830
|
-
|
|
4831
|
-
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",
|
|
4832
|
-
children: [
|
|
4833
|
-
/* @__PURE__ */ jsx14("span", {
|
|
4834
|
-
children: "Agent is analyzing your screen"
|
|
4835
|
-
}),
|
|
4836
|
-
/* @__PURE__ */ jsxs12("span", {
|
|
4837
|
-
className: "skippr:inline-flex skippr:items-center skippr:gap-[2px]",
|
|
4838
|
-
children: [
|
|
4839
|
-
/* @__PURE__ */ jsx14("span", {
|
|
4840
|
-
className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:0ms]"
|
|
4841
|
-
}),
|
|
4842
|
-
/* @__PURE__ */ jsx14("span", {
|
|
4843
|
-
className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:200ms]"
|
|
4844
|
-
}),
|
|
4845
|
-
/* @__PURE__ */ jsx14("span", {
|
|
4846
|
-
className: "skippr:size-1 skippr:rounded-full skippr:bg-primary skippr:animate-skippr-thinking-dot skippr:[animation-delay:400ms]"
|
|
4847
|
-
})
|
|
4848
|
-
]
|
|
4849
|
-
})
|
|
4850
|
-
]
|
|
4851
|
-
})
|
|
4852
|
-
]
|
|
5000
|
+
]
|
|
5001
|
+
})
|
|
4853
5002
|
});
|
|
4854
5003
|
}
|
|
4855
5004
|
|
|
4856
5005
|
// src/components/MessageList.tsx
|
|
4857
|
-
import { jsx as jsx15, jsxs as
|
|
5006
|
+
import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
4858
5007
|
function isPlanVisible(plan) {
|
|
4859
5008
|
return !!plan && plan.steps.length > 0 && plan.state !== "abandoned";
|
|
4860
5009
|
}
|
|
@@ -4868,8 +5017,8 @@ function MessageList({
|
|
|
4868
5017
|
}) {
|
|
4869
5018
|
const containerRef = useRef16(null);
|
|
4870
5019
|
const lastMessage = messages.length > 0 ? messages[messages.length - 1] : undefined;
|
|
4871
|
-
const [dismissedPlanId, setDismissedPlanId] =
|
|
4872
|
-
const dismissPlan =
|
|
5020
|
+
const [dismissedPlanId, setDismissedPlanId] = useState17(null);
|
|
5021
|
+
const dismissPlan = useCallback14(() => {
|
|
4873
5022
|
if (plan)
|
|
4874
5023
|
setDismissedPlanId(plan.planId);
|
|
4875
5024
|
}, [plan]);
|
|
@@ -4882,10 +5031,10 @@ function MessageList({
|
|
|
4882
5031
|
container.scrollTop = container.scrollHeight;
|
|
4883
5032
|
}, [messages.length, lastMessage?.content]);
|
|
4884
5033
|
const showTyping = isStreaming && lastMessage?.role === "assistant" && lastMessage.content === "";
|
|
4885
|
-
return /* @__PURE__ */
|
|
5034
|
+
return /* @__PURE__ */ jsxs14("div", {
|
|
4886
5035
|
className: "skippr:flex skippr:min-h-0 skippr:flex-1 skippr:flex-col",
|
|
4887
5036
|
children: [
|
|
4888
|
-
/* @__PURE__ */
|
|
5037
|
+
/* @__PURE__ */ jsxs14("div", {
|
|
4889
5038
|
ref: containerRef,
|
|
4890
5039
|
className: "skippr:min-h-0 skippr:flex-1 skippr:space-y-4 skippr:overflow-y-auto skippr:p-4 skippr:[overflow-anchor:none]",
|
|
4891
5040
|
children: [
|
|
@@ -4916,7 +5065,7 @@ function MessageList({
|
|
|
4916
5065
|
}
|
|
4917
5066
|
|
|
4918
5067
|
// src/components/SessionAgenda.tsx
|
|
4919
|
-
import { jsx as jsx16, jsxs as
|
|
5068
|
+
import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
4920
5069
|
function SessionAgenda({ phases, hasStarted }) {
|
|
4921
5070
|
if (phases.length === 0 || !hasStarted) {
|
|
4922
5071
|
return /* @__PURE__ */ jsx16("div", {
|
|
@@ -4933,7 +5082,7 @@ function SessionAgenda({ phases, hasStarted }) {
|
|
|
4933
5082
|
children: phases.map((phase) => {
|
|
4934
5083
|
const isActive = phase.status === "active";
|
|
4935
5084
|
const isCompleted = phase.status === "completed";
|
|
4936
|
-
return /* @__PURE__ */
|
|
5085
|
+
return /* @__PURE__ */ jsxs15("div", {
|
|
4937
5086
|
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"),
|
|
4938
5087
|
children: [
|
|
4939
5088
|
/* @__PURE__ */ jsx16("div", {
|
|
@@ -4946,7 +5095,7 @@ function SessionAgenda({ phases, hasStarted }) {
|
|
|
4946
5095
|
className: "skippr:size-4 skippr:text-muted-foreground/30"
|
|
4947
5096
|
})
|
|
4948
5097
|
}),
|
|
4949
|
-
/* @__PURE__ */
|
|
5098
|
+
/* @__PURE__ */ jsxs15("div", {
|
|
4950
5099
|
className: "skippr:min-w-0 skippr:flex-1",
|
|
4951
5100
|
children: [
|
|
4952
5101
|
/* @__PURE__ */ jsx16("p", {
|
|
@@ -4955,7 +5104,7 @@ function SessionAgenda({ phases, hasStarted }) {
|
|
|
4955
5104
|
}),
|
|
4956
5105
|
phase.highlights.length > 0 && /* @__PURE__ */ jsx16("ul", {
|
|
4957
5106
|
className: "skippr:mt-1 skippr:space-y-0.5",
|
|
4958
|
-
children: phase.highlights.map((text) => /* @__PURE__ */
|
|
5107
|
+
children: phase.highlights.map((text) => /* @__PURE__ */ jsxs15("li", {
|
|
4959
5108
|
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"),
|
|
4960
5109
|
children: [
|
|
4961
5110
|
/* @__PURE__ */ jsx16("span", {
|
|
@@ -4988,7 +5137,7 @@ function SessionWarningBanner({ remaining }) {
|
|
|
4988
5137
|
}
|
|
4989
5138
|
|
|
4990
5139
|
// src/components/StartSessionPrompt.tsx
|
|
4991
|
-
import { jsx as jsx18, jsxs as
|
|
5140
|
+
import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
4992
5141
|
var PROMPT_BUTTON = "skippr:cursor-pointer skippr:rounded-xl skippr:bg-primary skippr:px-8 skippr:py-3 skippr:text-sm skippr:font-medium skippr:text-primary-foreground skippr:transition-all skippr:hover:bg-primary/90 skippr:disabled:cursor-not-allowed skippr:disabled:opacity-60";
|
|
4993
5142
|
function StartSessionPrompt({
|
|
4994
5143
|
onStartSession,
|
|
@@ -5000,7 +5149,7 @@ function StartSessionPrompt({
|
|
|
5000
5149
|
canResume = false,
|
|
5001
5150
|
onResume
|
|
5002
5151
|
}) {
|
|
5003
|
-
return /* @__PURE__ */
|
|
5152
|
+
return /* @__PURE__ */ jsxs16("div", {
|
|
5004
5153
|
className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:gap-3 skippr:px-4",
|
|
5005
5154
|
children: [
|
|
5006
5155
|
canResume && onResume ? /* @__PURE__ */ jsx18("button", {
|
|
@@ -5029,7 +5178,7 @@ function StartSessionPrompt({
|
|
|
5029
5178
|
}
|
|
5030
5179
|
|
|
5031
5180
|
// src/components/Sidebar.tsx
|
|
5032
|
-
import { jsx as jsx19, jsxs as
|
|
5181
|
+
import { jsx as jsx19, jsxs as jsxs17, Fragment as Fragment3 } from "react/jsx-runtime";
|
|
5033
5182
|
var PANEL_GAP_PX = 12;
|
|
5034
5183
|
var PANEL_VIEWPORT_MARGIN_PX = 24;
|
|
5035
5184
|
var PANEL_MAX_HEIGHT_PX = 460;
|
|
@@ -5083,7 +5232,7 @@ function Sidebar({
|
|
|
5083
5232
|
height: panelExpanded ? availableHeight : `min(${PANEL_MAX_HEIGHT_PX}px, ${availableHeight})`
|
|
5084
5233
|
};
|
|
5085
5234
|
}
|
|
5086
|
-
|
|
5235
|
+
useEffect24(() => {
|
|
5087
5236
|
if (!isSidebar)
|
|
5088
5237
|
return;
|
|
5089
5238
|
const prop = position === "right" ? "marginRight" : "marginLeft";
|
|
@@ -5097,7 +5246,7 @@ function Sidebar({
|
|
|
5097
5246
|
document.body.style.transition = "";
|
|
5098
5247
|
};
|
|
5099
5248
|
}, [isSidebar, isPanelOpen, position]);
|
|
5100
|
-
return /* @__PURE__ */
|
|
5249
|
+
return /* @__PURE__ */ jsxs17("div", {
|
|
5101
5250
|
ref: internalCtx?.panelRef,
|
|
5102
5251
|
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"),
|
|
5103
5252
|
style: { width: isPanelOpen ? SIDEBAR_WIDTH : undefined, ...floatingStyle },
|
|
@@ -5157,20 +5306,18 @@ function AuthenticatedContent({
|
|
|
5157
5306
|
const inSession = isConnected || isStarting || isPaused || isPausing;
|
|
5158
5307
|
const effectiveTab = showAgenda ? activeTab : "chat";
|
|
5159
5308
|
let transitionLabel = null;
|
|
5160
|
-
if (
|
|
5161
|
-
transitionLabel = "Pausing...";
|
|
5162
|
-
} else if (isStarting && !isConnected) {
|
|
5309
|
+
if (isStarting && !isConnected) {
|
|
5163
5310
|
transitionLabel = "Reconnecting...";
|
|
5164
5311
|
} else if (isPaused) {
|
|
5165
5312
|
transitionLabel = "Paused";
|
|
5166
5313
|
}
|
|
5167
|
-
return /* @__PURE__ */
|
|
5314
|
+
return /* @__PURE__ */ jsxs17(Fragment3, {
|
|
5168
5315
|
children: [
|
|
5169
5316
|
isConnected && /* @__PURE__ */ jsx19(ConnectedBanner, {}),
|
|
5170
|
-
/* @__PURE__ */
|
|
5317
|
+
showAgenda && /* @__PURE__ */ jsxs17("div", {
|
|
5171
5318
|
className: "skippr:flex skippr:items-center skippr:gap-2 skippr:border-b skippr:border-border skippr:px-3 skippr:py-1",
|
|
5172
5319
|
children: [
|
|
5173
|
-
/* @__PURE__ */
|
|
5320
|
+
/* @__PURE__ */ jsxs17("button", {
|
|
5174
5321
|
type: "button",
|
|
5175
5322
|
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"),
|
|
5176
5323
|
onClick: () => onTabChange("chat"),
|
|
@@ -5184,7 +5331,7 @@ function AuthenticatedContent({
|
|
|
5184
5331
|
})
|
|
5185
5332
|
]
|
|
5186
5333
|
}),
|
|
5187
|
-
|
|
5334
|
+
/* @__PURE__ */ jsxs17("button", {
|
|
5188
5335
|
type: "button",
|
|
5189
5336
|
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"),
|
|
5190
5337
|
onClick: () => onTabChange("agenda"),
|
|
@@ -5207,7 +5354,7 @@ function AuthenticatedContent({
|
|
|
5207
5354
|
children: /* @__PURE__ */ jsx19(LoadingDots, {
|
|
5208
5355
|
label: "Ending session..."
|
|
5209
5356
|
})
|
|
5210
|
-
}) : inSession ? /* @__PURE__ */
|
|
5357
|
+
}) : inSession ? /* @__PURE__ */ jsxs17(Fragment3, {
|
|
5211
5358
|
children: [
|
|
5212
5359
|
transitionLabel && /* @__PURE__ */ jsx19("div", {
|
|
5213
5360
|
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",
|
|
@@ -5232,48 +5379,36 @@ function AuthenticatedContent({
|
|
|
5232
5379
|
})
|
|
5233
5380
|
}, `${activeTab}-empty`)
|
|
5234
5381
|
}),
|
|
5235
|
-
!hideControls && /* @__PURE__ */
|
|
5382
|
+
!hideControls && /* @__PURE__ */ jsx19("div", {
|
|
5236
5383
|
className: "skippr:shrink-0 skippr:border-t skippr:border-border",
|
|
5237
|
-
children:
|
|
5238
|
-
|
|
5239
|
-
|
|
5240
|
-
|
|
5241
|
-
|
|
5242
|
-
|
|
5243
|
-
|
|
5384
|
+
children: /* @__PURE__ */ jsxs17("div", {
|
|
5385
|
+
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",
|
|
5386
|
+
children: [
|
|
5387
|
+
/* @__PURE__ */ jsxs17("svg", {
|
|
5388
|
+
viewBox: "21 21 109 109",
|
|
5389
|
+
className: "skippr:size-3",
|
|
5390
|
+
fill: "none",
|
|
5391
|
+
"aria-hidden": "true",
|
|
5392
|
+
children: [
|
|
5393
|
+
/* @__PURE__ */ jsx19("path", {
|
|
5394
|
+
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",
|
|
5395
|
+
fill: "currentColor"
|
|
5396
|
+
}),
|
|
5397
|
+
/* @__PURE__ */ jsx19("path", {
|
|
5398
|
+
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",
|
|
5399
|
+
className: "skippr:fill-brand"
|
|
5400
|
+
})
|
|
5401
|
+
]
|
|
5402
|
+
}),
|
|
5403
|
+
"Powered by Skippr"
|
|
5404
|
+
]
|
|
5405
|
+
})
|
|
5244
5406
|
})
|
|
5245
5407
|
]
|
|
5246
5408
|
});
|
|
5247
5409
|
}
|
|
5248
|
-
function ModeToggleRow() {
|
|
5249
|
-
const { textMode, toggleTextMode } = useTextMode();
|
|
5250
|
-
return /* @__PURE__ */ jsx19("div", {
|
|
5251
|
-
className: "skippr:flex skippr:justify-center skippr:px-3 skippr:pt-2 skippr:pb-0",
|
|
5252
|
-
children: /* @__PURE__ */ jsx19("button", {
|
|
5253
|
-
type: "button",
|
|
5254
|
-
"aria-label": textMode ? "Switch to voice mode" : "Switch to text mode",
|
|
5255
|
-
className: "skippr:flex skippr:cursor-pointer skippr:items-center skippr:gap-2 skippr:rounded-xl skippr:bg-muted skippr:px-4 skippr:py-1.5 skippr:text-sm skippr:font-medium skippr:text-foreground skippr:transition-colors skippr:hover:bg-muted/70",
|
|
5256
|
-
onClick: () => void toggleTextMode(),
|
|
5257
|
-
children: textMode ? /* @__PURE__ */ jsxs16(Fragment2, {
|
|
5258
|
-
children: [
|
|
5259
|
-
/* @__PURE__ */ jsx19(Mic, {
|
|
5260
|
-
className: "skippr:size-4"
|
|
5261
|
-
}),
|
|
5262
|
-
"Voice mode"
|
|
5263
|
-
]
|
|
5264
|
-
}) : /* @__PURE__ */ jsxs16(Fragment2, {
|
|
5265
|
-
children: [
|
|
5266
|
-
/* @__PURE__ */ jsx19(MessageSquare, {
|
|
5267
|
-
className: "skippr:size-4"
|
|
5268
|
-
}),
|
|
5269
|
-
"Text mode"
|
|
5270
|
-
]
|
|
5271
|
-
})
|
|
5272
|
-
})
|
|
5273
|
-
});
|
|
5274
|
-
}
|
|
5275
5410
|
function AuthError() {
|
|
5276
|
-
return /* @__PURE__ */
|
|
5411
|
+
return /* @__PURE__ */ jsxs17("div", {
|
|
5277
5412
|
className: "skippr:flex skippr:flex-1 skippr:flex-col skippr:items-center skippr:justify-center skippr:px-6 skippr:py-4 skippr:text-center",
|
|
5278
5413
|
children: [
|
|
5279
5414
|
/* @__PURE__ */ jsx19(CircleAlert, {
|
|
@@ -5330,9 +5465,9 @@ function ConnectedBody({
|
|
|
5330
5465
|
import { useContext as useContext11 } from "react";
|
|
5331
5466
|
|
|
5332
5467
|
// src/components/Logo.tsx
|
|
5333
|
-
import { jsx as jsx20, jsxs as
|
|
5468
|
+
import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
5334
5469
|
function Logo({ className }) {
|
|
5335
|
-
return /* @__PURE__ */
|
|
5470
|
+
return /* @__PURE__ */ jsxs18("svg", {
|
|
5336
5471
|
width: "1em",
|
|
5337
5472
|
height: "1em",
|
|
5338
5473
|
viewBox: "0 0 200 200",
|
|
@@ -5348,7 +5483,7 @@ function Logo({ className }) {
|
|
|
5348
5483
|
rx: "40",
|
|
5349
5484
|
fill: "#2D2D3F"
|
|
5350
5485
|
}),
|
|
5351
|
-
/* @__PURE__ */
|
|
5486
|
+
/* @__PURE__ */ jsxs18("g", {
|
|
5352
5487
|
transform: "translate(100 100) scale(0.8) translate(-100 -100)",
|
|
5353
5488
|
children: [
|
|
5354
5489
|
/* @__PURE__ */ jsx20("path", {
|
|
@@ -5401,7 +5536,7 @@ function SidebarTrigger() {
|
|
|
5401
5536
|
}
|
|
5402
5537
|
|
|
5403
5538
|
// src/components/LiveAgent.tsx
|
|
5404
|
-
import { jsx as jsx22, jsxs as
|
|
5539
|
+
import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
5405
5540
|
function AgentCursorMount({ animated }) {
|
|
5406
5541
|
return /* @__PURE__ */ jsx22(AgentCursor, {
|
|
5407
5542
|
target: useAgentCursor(),
|
|
@@ -5412,7 +5547,7 @@ function PlanPanelOpener() {
|
|
|
5412
5547
|
const plan = usePlanUpdates();
|
|
5413
5548
|
const { expandPanel } = useLiveAgent();
|
|
5414
5549
|
const surfacedPlanIdRef = useRef17(null);
|
|
5415
|
-
|
|
5550
|
+
useEffect25(() => {
|
|
5416
5551
|
if (plan?.state !== "proposed" || surfacedPlanIdRef.current === plan.planId)
|
|
5417
5552
|
return;
|
|
5418
5553
|
surfacedPlanIdRef.current = plan.planId;
|
|
@@ -5451,18 +5586,18 @@ function LiveAgent(props) {
|
|
|
5451
5586
|
const auth = useAuth({ appKey });
|
|
5452
5587
|
const usesHostAuth = !!getUserToken || !!userToken || !!authTokenProp;
|
|
5453
5588
|
const effectiveAuthToken = usesHostAuth ? authTokenProp : auth.authToken ?? undefined;
|
|
5454
|
-
const [activeModule, setActiveModule] =
|
|
5455
|
-
const minimizeOnSessionStart =
|
|
5589
|
+
const [activeModule, setActiveModule] = useState18(null);
|
|
5590
|
+
const minimizeOnSessionStart = useCallback15(() => {
|
|
5456
5591
|
if (minimizable) {
|
|
5457
5592
|
setIsMinimized(true);
|
|
5458
5593
|
setIsPanelOpen(false);
|
|
5459
5594
|
}
|
|
5460
5595
|
}, [minimizable]);
|
|
5461
|
-
const expandOnSessionStartError =
|
|
5596
|
+
const expandOnSessionStartError = useCallback15(() => {
|
|
5462
5597
|
setIsMinimized(false);
|
|
5463
5598
|
setIsPanelOpen(true);
|
|
5464
5599
|
}, []);
|
|
5465
|
-
const minimizeOnSessionDisconnect =
|
|
5600
|
+
const minimizeOnSessionDisconnect = useCallback15(() => {
|
|
5466
5601
|
setActiveModule(null);
|
|
5467
5602
|
if (minimizable) {
|
|
5468
5603
|
setIsMinimized(true);
|
|
@@ -5481,6 +5616,7 @@ function LiveAgent(props) {
|
|
|
5481
5616
|
pauseSession,
|
|
5482
5617
|
disconnect,
|
|
5483
5618
|
isPaused,
|
|
5619
|
+
pauseTimeoutSeconds,
|
|
5484
5620
|
historyMessages,
|
|
5485
5621
|
pendingScreenStream,
|
|
5486
5622
|
bearerToken,
|
|
@@ -5498,28 +5634,28 @@ function LiveAgent(props) {
|
|
|
5498
5634
|
});
|
|
5499
5635
|
const teardownInFlightRef = useRef17(false);
|
|
5500
5636
|
teardownInFlightRef.current = isPaused || isPausing || isDisconnecting;
|
|
5501
|
-
const handleRoomDisconnected =
|
|
5637
|
+
const handleRoomDisconnected = useCallback15(() => {
|
|
5502
5638
|
if (teardownInFlightRef.current)
|
|
5503
5639
|
return;
|
|
5504
5640
|
disconnect();
|
|
5505
5641
|
}, [disconnect]);
|
|
5506
5642
|
const isSessionLive = connection !== null || isStarting || isPausing || isDisconnecting;
|
|
5507
|
-
const [isPanelOpen, setIsPanelOpen] =
|
|
5508
|
-
const [isMinimized, setIsMinimized] =
|
|
5509
|
-
const [sidebarTab, setSidebarTab] =
|
|
5510
|
-
const [phasesSnapshot, setPhasesSnapshot] =
|
|
5511
|
-
const [textMode, setTextMode] =
|
|
5512
|
-
const [panelExpanded, setPanelExpanded] =
|
|
5513
|
-
const togglePanelExpanded =
|
|
5643
|
+
const [isPanelOpen, setIsPanelOpen] = useState18(defaultOpen);
|
|
5644
|
+
const [isMinimized, setIsMinimized] = useState18(minimizable && !defaultOpen);
|
|
5645
|
+
const [sidebarTab, setSidebarTab] = useState18("agenda");
|
|
5646
|
+
const [phasesSnapshot, setPhasesSnapshot] = useState18([]);
|
|
5647
|
+
const [textMode, setTextMode] = useState18(false);
|
|
5648
|
+
const [panelExpanded, setPanelExpanded] = useState18(false);
|
|
5649
|
+
const togglePanelExpanded = useCallback15(() => setPanelExpanded((prev) => !prev), []);
|
|
5514
5650
|
const panelRef = useRef17(null);
|
|
5515
5651
|
const controlBarRef = useRef17(null);
|
|
5516
|
-
const
|
|
5652
|
+
const [isDragging, setIsDragging] = useState18(false);
|
|
5653
|
+
const setTextModeState = useCallback15((enabled) => {
|
|
5517
5654
|
setTextMode(enabled);
|
|
5518
|
-
setPanelExpanded(enabled);
|
|
5519
5655
|
}, []);
|
|
5520
5656
|
const isConnected = connection !== null;
|
|
5521
5657
|
const showControlBar = isConnected || isStarting || isPausing;
|
|
5522
|
-
|
|
5658
|
+
useEffect25(() => {
|
|
5523
5659
|
if (!isConnected)
|
|
5524
5660
|
setTextModeState(false);
|
|
5525
5661
|
}, [isConnected, setTextModeState]);
|
|
@@ -5546,7 +5682,7 @@ function LiveAgent(props) {
|
|
|
5546
5682
|
const agentMode = operatingModule?.mode ?? null;
|
|
5547
5683
|
const shouldAnimateCursor = operatingModule?.uiPreferences?.animateCursor ?? animateAgentCursor;
|
|
5548
5684
|
const resumableSession = useMemo6(() => getResumableSession(operatingModule), [operatingModule]);
|
|
5549
|
-
const resumeSession =
|
|
5685
|
+
const resumeSession = useCallback15(async () => {
|
|
5550
5686
|
if (!resumableSession)
|
|
5551
5687
|
return;
|
|
5552
5688
|
await startSession({
|
|
@@ -5555,7 +5691,7 @@ function LiveAgent(props) {
|
|
|
5555
5691
|
existingSessionId: resumableSession.id
|
|
5556
5692
|
});
|
|
5557
5693
|
}, [resumableSession, startSession, agentControls]);
|
|
5558
|
-
const selectModule =
|
|
5694
|
+
const selectModule = useCallback15((moduleId) => {
|
|
5559
5695
|
const found = availableModules.find((m) => m.id === moduleId);
|
|
5560
5696
|
if (!found)
|
|
5561
5697
|
return;
|
|
@@ -5566,7 +5702,7 @@ function LiveAgent(props) {
|
|
|
5566
5702
|
existingSessionId: getResumableSessionId(found.currentSession, found.mode)
|
|
5567
5703
|
});
|
|
5568
5704
|
}, [availableModules, startSession]);
|
|
5569
|
-
const startAdoptionSession =
|
|
5705
|
+
const startAdoptionSession = useCallback15((goal) => {
|
|
5570
5706
|
attendGoal(goal.goalId);
|
|
5571
5707
|
const found = availableModules.find((m) => m.id === goal.agentId);
|
|
5572
5708
|
if (found)
|
|
@@ -5577,9 +5713,9 @@ function LiveAgent(props) {
|
|
|
5577
5713
|
adoptionGoalId: goal.goalId
|
|
5578
5714
|
});
|
|
5579
5715
|
}, [attendGoal, availableModules, startSession]);
|
|
5580
|
-
const [welcomeDismissed, setWelcomeDismissed] =
|
|
5581
|
-
const dismissWelcome =
|
|
5582
|
-
const [currentPosition, setCurrentPosition] =
|
|
5716
|
+
const [welcomeDismissed, setWelcomeDismissed] = useState18(false);
|
|
5717
|
+
const dismissWelcome = useCallback15(() => setWelcomeDismissed(true), []);
|
|
5718
|
+
const [currentPosition, setCurrentPosition] = useState18(() => {
|
|
5583
5719
|
try {
|
|
5584
5720
|
const saved = localStorage.getItem("skippr_widget_position");
|
|
5585
5721
|
if (saved === "left" || saved === "right")
|
|
@@ -5587,13 +5723,13 @@ function LiveAgent(props) {
|
|
|
5587
5723
|
} catch {}
|
|
5588
5724
|
return position;
|
|
5589
5725
|
});
|
|
5590
|
-
const setPositionWithPersist =
|
|
5726
|
+
const setPositionWithPersist = useCallback15((pos) => {
|
|
5591
5727
|
setCurrentPosition(pos);
|
|
5592
5728
|
try {
|
|
5593
5729
|
localStorage.setItem("skippr_widget_position", pos);
|
|
5594
5730
|
} catch {}
|
|
5595
5731
|
}, []);
|
|
5596
|
-
const [launcherBottomPx, setLauncherBottomPxState] =
|
|
5732
|
+
const [launcherBottomPx, setLauncherBottomPxState] = useState18(() => {
|
|
5597
5733
|
try {
|
|
5598
5734
|
const saved = Number.parseInt(localStorage.getItem("skippr_widget_bottom") ?? "", 10);
|
|
5599
5735
|
if (Number.isFinite(saved) && saved > 0)
|
|
@@ -5601,8 +5737,8 @@ function LiveAgent(props) {
|
|
|
5601
5737
|
} catch {}
|
|
5602
5738
|
return DEFAULT_LAUNCHER_BOTTOM_PX;
|
|
5603
5739
|
});
|
|
5604
|
-
const [popsDown, setPopsDown] =
|
|
5605
|
-
const setLauncherBottomPx =
|
|
5740
|
+
const [popsDown, setPopsDown] = useState18(() => launcherPopsDown(launcherBottomPx));
|
|
5741
|
+
const setLauncherBottomPx = useCallback15((px) => {
|
|
5606
5742
|
setLauncherBottomPxState(px);
|
|
5607
5743
|
setPopsDown(launcherPopsDown(px));
|
|
5608
5744
|
try {
|
|
@@ -5611,11 +5747,11 @@ function LiveAgent(props) {
|
|
|
5611
5747
|
}, []);
|
|
5612
5748
|
const launcherBottomPxRef = useRef17(launcherBottomPx);
|
|
5613
5749
|
launcherBottomPxRef.current = launcherBottomPx;
|
|
5614
|
-
const commitLauncherDrop =
|
|
5750
|
+
const commitLauncherDrop = useCallback15(({ side, bottomPx }) => {
|
|
5615
5751
|
setPositionWithPersist(side);
|
|
5616
5752
|
setLauncherBottomPx(bottomPx);
|
|
5617
5753
|
}, [setPositionWithPersist, setLauncherBottomPx]);
|
|
5618
|
-
|
|
5754
|
+
useEffect25(() => {
|
|
5619
5755
|
const syncToViewport = () => {
|
|
5620
5756
|
const clamped = clampLauncherBottom(launcherBottomPxRef.current);
|
|
5621
5757
|
setLauncherBottomPxState(clamped);
|
|
@@ -5625,20 +5761,20 @@ function LiveAgent(props) {
|
|
|
5625
5761
|
window.addEventListener("resize", syncToViewport);
|
|
5626
5762
|
return () => window.removeEventListener("resize", syncToViewport);
|
|
5627
5763
|
}, []);
|
|
5628
|
-
const openPanel =
|
|
5629
|
-
const closePanel =
|
|
5630
|
-
const togglePanel =
|
|
5631
|
-
const expandPanel =
|
|
5764
|
+
const openPanel = useCallback15(() => setIsPanelOpen(true), []);
|
|
5765
|
+
const closePanel = useCallback15(() => setIsPanelOpen(false), []);
|
|
5766
|
+
const togglePanel = useCallback15(() => setIsPanelOpen((prev) => !prev), []);
|
|
5767
|
+
const expandPanel = useCallback15(() => {
|
|
5632
5768
|
setIsMinimized(false);
|
|
5633
5769
|
setIsPanelOpen(true);
|
|
5634
5770
|
}, []);
|
|
5635
|
-
const minimizePanel =
|
|
5771
|
+
const minimizePanel = useCallback15(() => {
|
|
5636
5772
|
if (!minimizable)
|
|
5637
5773
|
return;
|
|
5638
5774
|
setIsMinimized(true);
|
|
5639
5775
|
setIsPanelOpen(false);
|
|
5640
5776
|
}, [minimizable]);
|
|
5641
|
-
const pauseSessionAndMinimize =
|
|
5777
|
+
const pauseSessionAndMinimize = useCallback15(async () => {
|
|
5642
5778
|
await pauseSession();
|
|
5643
5779
|
minimizePanel();
|
|
5644
5780
|
}, [pauseSession, minimizePanel]);
|
|
@@ -5657,6 +5793,7 @@ function LiveAgent(props) {
|
|
|
5657
5793
|
resumeSession,
|
|
5658
5794
|
disconnect,
|
|
5659
5795
|
isPaused,
|
|
5796
|
+
pauseTimeoutSeconds,
|
|
5660
5797
|
resumableSession,
|
|
5661
5798
|
historyMessages,
|
|
5662
5799
|
phasesSnapshot,
|
|
@@ -5676,6 +5813,8 @@ function LiveAgent(props) {
|
|
|
5676
5813
|
togglePanelExpanded,
|
|
5677
5814
|
panelRef,
|
|
5678
5815
|
controlBarRef,
|
|
5816
|
+
isDragging,
|
|
5817
|
+
setIsDragging,
|
|
5679
5818
|
minimizable,
|
|
5680
5819
|
isMinimized,
|
|
5681
5820
|
expandPanel,
|
|
@@ -5721,6 +5860,7 @@ function LiveAgent(props) {
|
|
|
5721
5860
|
resumeSession,
|
|
5722
5861
|
disconnect,
|
|
5723
5862
|
isPaused,
|
|
5863
|
+
pauseTimeoutSeconds,
|
|
5724
5864
|
resumableSession,
|
|
5725
5865
|
historyMessages,
|
|
5726
5866
|
phasesSnapshot,
|
|
@@ -5737,6 +5877,7 @@ function LiveAgent(props) {
|
|
|
5737
5877
|
popsDown,
|
|
5738
5878
|
panelExpanded,
|
|
5739
5879
|
togglePanelExpanded,
|
|
5880
|
+
isDragging,
|
|
5740
5881
|
minimizable,
|
|
5741
5882
|
isMinimized,
|
|
5742
5883
|
expandPanel,
|
|
@@ -5770,7 +5911,7 @@ function LiveAgent(props) {
|
|
|
5770
5911
|
]);
|
|
5771
5912
|
return /* @__PURE__ */ jsx22(LiveAgentContext.Provider, {
|
|
5772
5913
|
value: ctx,
|
|
5773
|
-
children: /* @__PURE__ */
|
|
5914
|
+
children: /* @__PURE__ */ jsxs19(LiveKitRoom, {
|
|
5774
5915
|
serverUrl: connection?.livekitUrl,
|
|
5775
5916
|
token: connection?.token,
|
|
5776
5917
|
connect: shouldConnect,
|
|
@@ -5782,7 +5923,7 @@ function LiveAgent(props) {
|
|
|
5782
5923
|
pendingScreenStream
|
|
5783
5924
|
}),
|
|
5784
5925
|
connection && captureMode === "auto" && /* @__PURE__ */ jsx22(DomCapture, {}),
|
|
5785
|
-
/* @__PURE__ */
|
|
5926
|
+
/* @__PURE__ */ jsxs19(ShadowHost, {
|
|
5786
5927
|
children: [
|
|
5787
5928
|
connection && captureMode === "auto" && agentControls?.highlight && /* @__PURE__ */ jsx22(HighlightOverlay, {}),
|
|
5788
5929
|
connection && captureMode === "auto" && agentControls?.actions && /* @__PURE__ */ jsx22(PageActionHandler, {}),
|
|
@@ -5790,7 +5931,7 @@ function LiveAgent(props) {
|
|
|
5790
5931
|
connection && captureMode === "auto" && (agentControls?.highlight || agentControls?.actions) && /* @__PURE__ */ jsx22(AgentCursorMount, {
|
|
5791
5932
|
animated: shouldAnimateCursor
|
|
5792
5933
|
}),
|
|
5793
|
-
/* @__PURE__ */
|
|
5934
|
+
/* @__PURE__ */ jsxs19("div", {
|
|
5794
5935
|
id: WIDGET_ROOT_ID,
|
|
5795
5936
|
children: [
|
|
5796
5937
|
isMinimized && !showControlBar && /* @__PURE__ */ jsx22(MinimizedBubble, {
|
|
@@ -5815,9 +5956,9 @@ function LiveAgent(props) {
|
|
|
5815
5956
|
});
|
|
5816
5957
|
}
|
|
5817
5958
|
// src/hooks/useIsLocalSpeaking.ts
|
|
5818
|
-
import { useIsSpeaking, useLocalParticipant as
|
|
5959
|
+
import { useIsSpeaking, useLocalParticipant as useLocalParticipant10 } from "@livekit/components-react/hooks";
|
|
5819
5960
|
function useIsLocalSpeaking() {
|
|
5820
|
-
const { localParticipant } =
|
|
5961
|
+
const { localParticipant } = useLocalParticipant10();
|
|
5821
5962
|
return useIsSpeaking(localParticipant);
|
|
5822
5963
|
}
|
|
5823
5964
|
export {
|