@mcp-b/embedded-agent 0.0.7-beta.2 → 0.0.7
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/index.d.ts +0 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +686 -1659
- package/dist/index.js.map +1 -1
- package/dist/styles/globals.css +1 -1
- package/dist/web-component-standalone.iife.js +4 -4
- package/dist/web-component.d.ts +0 -7
- package/dist/web-component.d.ts.map +1 -1
- package/dist/web-component.js +686 -1659
- package/dist/web-component.js.map +1 -1
- package/package.json +4 -3
package/dist/index.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { c } from "react/compiler-runtime";
|
|
2
|
-
import { ActionBarPrimitive, AssistantModalPrimitive, AssistantRuntimeProvider, AttachmentPrimitive, BranchPickerPrimitive, ComposerPrimitive, ErrorPrimitive, MessagePrimitive, ThreadPrimitive,
|
|
2
|
+
import { ActionBarPrimitive, AssistantModalPrimitive, AssistantRuntimeProvider, AttachmentPrimitive, BranchPickerPrimitive, ComposerPrimitive, ErrorPrimitive, MessagePrimitive, ThreadPrimitive, useAssistantApi, useAssistantState, useAssistantTool, useComposer, useComposerRuntime, useThread } from "@assistant-ui/react";
|
|
3
3
|
import { AssistantChatTransport, useChatRuntime } from "@assistant-ui/react-ai-sdk";
|
|
4
4
|
import r2wc from "@r2wc/react-to-web-component";
|
|
5
5
|
import { lastAssistantMessageIsCompleteWithToolCalls } from "ai";
|
|
6
6
|
import { createContext, forwardRef, memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
7
|
-
import { AlertCircle, ArrowDownIcon, ArrowUpIcon, Check, CheckCircle2, CheckIcon, ChevronDown, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, Circle,
|
|
7
|
+
import { AlertCircle, ArrowDownIcon, ArrowUpIcon, Check, CheckCircle2, CheckIcon, ChevronDown, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, Circle, Copy, CopyIcon, FileText, GripHorizontal, History, Loader2, Mic, MicOff, PencilIcon, Phone, PhoneOff, Plug, Plus, PlusIcon, RefreshCwIcon, Send, Square, Volume2, X, XIcon } from "lucide-react";
|
|
8
8
|
import { AnimatePresence, LazyMotion, MotionConfig, domAnimation, motion, useDragControls, useReducedMotion } from "motion/react";
|
|
9
9
|
import * as m from "motion/react-m";
|
|
10
10
|
import { clsx } from "clsx";
|
|
11
11
|
import { twMerge } from "tailwind-merge";
|
|
12
|
+
import { jsonrepair } from "jsonrepair";
|
|
12
13
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
14
|
import { useShallow } from "zustand/shallow";
|
|
14
15
|
import * as AvatarPrimitive from "@radix-ui/react-avatar";
|
|
@@ -19,7 +20,7 @@ import { cva } from "class-variance-authority";
|
|
|
19
20
|
import { MarkdownTextPrimitive, unstable_memoizeMarkdownComponents, useIsMarkdownCodeBlock } from "@assistant-ui/react-markdown";
|
|
20
21
|
import remarkGfm from "remark-gfm";
|
|
21
22
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
22
|
-
import { ToolListChangedNotificationSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
23
|
+
import { PromptListChangedNotificationSchema, ToolListChangedNotificationSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
23
24
|
import { TabClientTransport } from "@mcp-b/transports";
|
|
24
25
|
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
25
26
|
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
@@ -539,9 +540,11 @@ var ToolManager = class {
|
|
|
539
540
|
}
|
|
540
541
|
let args;
|
|
541
542
|
try {
|
|
542
|
-
|
|
543
|
+
const repaired = argsString ? jsonrepair(argsString) : "{}";
|
|
544
|
+
args = JSON.parse(repaired);
|
|
543
545
|
} catch (error) {
|
|
544
546
|
console.error("[ToolManager] Failed to parse arguments:", error);
|
|
547
|
+
console.error("[ToolManager] Raw argsString:", argsString?.slice(0, 200));
|
|
545
548
|
return {
|
|
546
549
|
success: false,
|
|
547
550
|
error: "Invalid arguments format"
|
|
@@ -2184,7 +2187,7 @@ const useFileSrc = (file) => {
|
|
|
2184
2187
|
return src;
|
|
2185
2188
|
};
|
|
2186
2189
|
const useAttachmentSrc = () => {
|
|
2187
|
-
const { file, src: src_0 } = useAssistantState(useShallow(_temp2$
|
|
2190
|
+
const { file, src: src_0 } = useAssistantState(useShallow(_temp2$5));
|
|
2188
2191
|
return useFileSrc(file) ?? src_0;
|
|
2189
2192
|
};
|
|
2190
2193
|
const AttachmentPreview = (t0) => {
|
|
@@ -2250,7 +2253,7 @@ const AttachmentPreviewDialog = (t0) => {
|
|
|
2250
2253
|
};
|
|
2251
2254
|
const AttachmentThumb = () => {
|
|
2252
2255
|
const $ = c(8);
|
|
2253
|
-
const isImage = useAssistantState(_temp3$
|
|
2256
|
+
const isImage = useAssistantState(_temp3$3);
|
|
2254
2257
|
const src = useAttachmentSrc();
|
|
2255
2258
|
let t0;
|
|
2256
2259
|
if ($[0] !== src) {
|
|
@@ -2292,8 +2295,8 @@ const AttachmentThumb = () => {
|
|
|
2292
2295
|
const AttachmentUI = () => {
|
|
2293
2296
|
const $ = c(17);
|
|
2294
2297
|
const isComposer = useAssistantApi().attachment.source === "composer";
|
|
2295
|
-
const isImage = useAssistantState(_temp4$
|
|
2296
|
-
const typeLabel = useAssistantState(_temp5
|
|
2298
|
+
const isImage = useAssistantState(_temp4$2);
|
|
2299
|
+
const typeLabel = useAssistantState(_temp5);
|
|
2297
2300
|
const t0 = isImage && "aui-attachment-root-composer only:[&>#attachment-tile]:size-24";
|
|
2298
2301
|
let t1;
|
|
2299
2302
|
if ($[0] !== t0) {
|
|
@@ -2424,26 +2427,26 @@ const ComposerAddAttachment = () => {
|
|
|
2424
2427
|
} else t0 = $[0];
|
|
2425
2428
|
return t0;
|
|
2426
2429
|
};
|
|
2427
|
-
function _temp$
|
|
2430
|
+
function _temp$9(c$1) {
|
|
2428
2431
|
return c$1.type === "image";
|
|
2429
2432
|
}
|
|
2430
|
-
function _temp2$
|
|
2433
|
+
function _temp2$5(t0) {
|
|
2431
2434
|
const { attachment } = t0;
|
|
2432
2435
|
if (attachment.type !== "image") return {};
|
|
2433
2436
|
if (attachment.file) return { file: attachment.file };
|
|
2434
|
-
const src = attachment.content?.filter(_temp$
|
|
2437
|
+
const src = attachment.content?.filter(_temp$9)[0]?.image;
|
|
2435
2438
|
if (!src) return {};
|
|
2436
2439
|
return { src };
|
|
2437
2440
|
}
|
|
2438
|
-
function _temp3$
|
|
2441
|
+
function _temp3$3(t0) {
|
|
2439
2442
|
const { attachment } = t0;
|
|
2440
2443
|
return attachment.type === "image";
|
|
2441
2444
|
}
|
|
2442
|
-
function _temp4$
|
|
2445
|
+
function _temp4$2(t0) {
|
|
2443
2446
|
const { attachment } = t0;
|
|
2444
2447
|
return attachment.type === "image";
|
|
2445
2448
|
}
|
|
2446
|
-
function _temp5
|
|
2449
|
+
function _temp5(t0) {
|
|
2447
2450
|
const { attachment: attachment_0 } = t0;
|
|
2448
2451
|
const type = attachment_0.type;
|
|
2449
2452
|
switch (type) {
|
|
@@ -2722,10 +2725,11 @@ function createMCPTransport(config, transportType = "http") {
|
|
|
2722
2725
|
const SOURCE_LOCAL = "local";
|
|
2723
2726
|
const SOURCE_REMOTE = "remote";
|
|
2724
2727
|
const MCPToolsContext = createContext(null);
|
|
2725
|
-
function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange }) {
|
|
2728
|
+
function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange, onPromptsChange }) {
|
|
2726
2729
|
const sourcesRef = useRef(/* @__PURE__ */ new Map());
|
|
2727
2730
|
const [, forceUpdate] = useState({});
|
|
2728
2731
|
const [toolsList, setToolsList] = useState([]);
|
|
2732
|
+
const [promptsList, setPromptsList] = useState([]);
|
|
2729
2733
|
/**
|
|
2730
2734
|
* Rebuild tools list from all sources
|
|
2731
2735
|
*/
|
|
@@ -2742,18 +2746,30 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
|
|
|
2742
2746
|
setToolsList(allTools);
|
|
2743
2747
|
}, []);
|
|
2744
2748
|
/**
|
|
2749
|
+
* Rebuild prompts list from all sources
|
|
2750
|
+
*/
|
|
2751
|
+
const rebuildPrompts = useCallback(() => {
|
|
2752
|
+
const allPrompts = [];
|
|
2753
|
+
sourcesRef.current.forEach((source_0) => {
|
|
2754
|
+
source_0.prompts.forEach((prompt) => {
|
|
2755
|
+
allPrompts.push(prompt);
|
|
2756
|
+
});
|
|
2757
|
+
});
|
|
2758
|
+
setPromptsList(allPrompts);
|
|
2759
|
+
}, []);
|
|
2760
|
+
/**
|
|
2745
2761
|
* Get public source state (without client reference)
|
|
2746
2762
|
*/
|
|
2747
|
-
const getPublicSource = useCallback((
|
|
2763
|
+
const getPublicSource = useCallback((source_1) => {
|
|
2748
2764
|
return {
|
|
2749
|
-
id:
|
|
2750
|
-
config:
|
|
2751
|
-
state:
|
|
2752
|
-
error:
|
|
2753
|
-
tools:
|
|
2754
|
-
resources:
|
|
2755
|
-
resourceTemplates:
|
|
2756
|
-
prompts:
|
|
2765
|
+
id: source_1.id,
|
|
2766
|
+
config: source_1.config,
|
|
2767
|
+
state: source_1.state,
|
|
2768
|
+
error: source_1.error,
|
|
2769
|
+
tools: source_1.tools,
|
|
2770
|
+
resources: source_1.resources,
|
|
2771
|
+
resourceTemplates: source_1.resourceTemplates,
|
|
2772
|
+
prompts: source_1.prompts
|
|
2757
2773
|
};
|
|
2758
2774
|
}, []);
|
|
2759
2775
|
/**
|
|
@@ -2786,17 +2802,34 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
|
|
|
2786
2802
|
sourceState.transport = transport;
|
|
2787
2803
|
const { tools } = await client.listTools();
|
|
2788
2804
|
sourceState.tools = tools;
|
|
2805
|
+
try {
|
|
2806
|
+
const { prompts } = await client.listPrompts();
|
|
2807
|
+
sourceState.prompts = prompts;
|
|
2808
|
+
} catch (err_0) {
|
|
2809
|
+
console.warn(`[MCPToolsProvider:${id}] Server does not support prompts:`, err_0);
|
|
2810
|
+
sourceState.prompts = [];
|
|
2811
|
+
}
|
|
2789
2812
|
sourceState.state = "connected";
|
|
2790
2813
|
client.setNotificationHandler(ToolListChangedNotificationSchema, async () => {
|
|
2791
2814
|
try {
|
|
2792
2815
|
sourceState.tools = (await client.listTools()).tools;
|
|
2793
2816
|
rebuildTools();
|
|
2794
2817
|
forceUpdate({});
|
|
2795
|
-
} catch (
|
|
2796
|
-
console.error(`[MCPToolsProvider:${id}] Failed to update tools:`,
|
|
2818
|
+
} catch (err_1) {
|
|
2819
|
+
console.error(`[MCPToolsProvider:${id}] Failed to update tools:`, err_1);
|
|
2820
|
+
}
|
|
2821
|
+
});
|
|
2822
|
+
client.setNotificationHandler(PromptListChangedNotificationSchema, async () => {
|
|
2823
|
+
try {
|
|
2824
|
+
sourceState.prompts = (await client.listPrompts()).prompts;
|
|
2825
|
+
rebuildPrompts();
|
|
2826
|
+
forceUpdate({});
|
|
2827
|
+
} catch (err_2) {
|
|
2828
|
+
console.error(`[MCPToolsProvider:${id}] Failed to update prompts:`, err_2);
|
|
2797
2829
|
}
|
|
2798
2830
|
});
|
|
2799
2831
|
rebuildTools();
|
|
2832
|
+
rebuildPrompts();
|
|
2800
2833
|
forceUpdate({});
|
|
2801
2834
|
} catch (err) {
|
|
2802
2835
|
const error = err instanceof Error ? err : new Error(String(err));
|
|
@@ -2805,33 +2838,34 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
|
|
|
2805
2838
|
sourceState.error = error;
|
|
2806
2839
|
forceUpdate({});
|
|
2807
2840
|
}
|
|
2808
|
-
}, [rebuildTools]);
|
|
2841
|
+
}, [rebuildTools, rebuildPrompts]);
|
|
2809
2842
|
/**
|
|
2810
2843
|
* Remove a source
|
|
2811
2844
|
*/
|
|
2812
2845
|
const removeSource = useCallback(async (id_0) => {
|
|
2813
|
-
const
|
|
2814
|
-
if (!
|
|
2815
|
-
if (
|
|
2816
|
-
await
|
|
2817
|
-
} catch (
|
|
2818
|
-
console.error(`[MCPToolsProvider:${id_0}] Error closing client:`,
|
|
2846
|
+
const source_2 = sourcesRef.current.get(id_0);
|
|
2847
|
+
if (!source_2) return;
|
|
2848
|
+
if (source_2.client) try {
|
|
2849
|
+
await source_2.client.close();
|
|
2850
|
+
} catch (err_3) {
|
|
2851
|
+
console.error(`[MCPToolsProvider:${id_0}] Error closing client:`, err_3);
|
|
2819
2852
|
}
|
|
2820
|
-
if (
|
|
2821
|
-
await
|
|
2822
|
-
} catch (
|
|
2823
|
-
console.error(`[MCPToolsProvider:${id_0}] Error closing transport:`,
|
|
2853
|
+
if (source_2.transport) try {
|
|
2854
|
+
await source_2.transport.close();
|
|
2855
|
+
} catch (err_4) {
|
|
2856
|
+
console.error(`[MCPToolsProvider:${id_0}] Error closing transport:`, err_4);
|
|
2824
2857
|
}
|
|
2825
2858
|
sourcesRef.current.delete(id_0);
|
|
2826
2859
|
rebuildTools();
|
|
2860
|
+
rebuildPrompts();
|
|
2827
2861
|
forceUpdate({});
|
|
2828
|
-
}, [rebuildTools]);
|
|
2862
|
+
}, [rebuildTools, rebuildPrompts]);
|
|
2829
2863
|
/**
|
|
2830
2864
|
* Get a source by ID
|
|
2831
2865
|
*/
|
|
2832
2866
|
const getSource = useCallback((id_1) => {
|
|
2833
|
-
const
|
|
2834
|
-
return
|
|
2867
|
+
const source_3 = sourcesRef.current.get(id_1);
|
|
2868
|
+
return source_3 ? getPublicSource(source_3) : void 0;
|
|
2835
2869
|
}, [getPublicSource]);
|
|
2836
2870
|
/**
|
|
2837
2871
|
* Check if a source is connected
|
|
@@ -2843,9 +2877,9 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
|
|
|
2843
2877
|
* Call a tool on a specific source
|
|
2844
2878
|
*/
|
|
2845
2879
|
const callToolOnSource = useCallback(async (sourceId, name, args) => {
|
|
2846
|
-
const
|
|
2847
|
-
if (!
|
|
2848
|
-
return await
|
|
2880
|
+
const source_5 = sourcesRef.current.get(sourceId);
|
|
2881
|
+
if (!source_5?.client) throw new Error(`Source '${sourceId}' not connected`);
|
|
2882
|
+
return await source_5.client.callTool({
|
|
2849
2883
|
name,
|
|
2850
2884
|
arguments: args
|
|
2851
2885
|
});
|
|
@@ -2859,15 +2893,29 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
|
|
|
2859
2893
|
return callToolOnSource(tool_0._sourceId, name_0, args_0);
|
|
2860
2894
|
}, [toolsList, callToolOnSource]);
|
|
2861
2895
|
/**
|
|
2896
|
+
* Get a prompt's expanded content (auto-routes based on prompt name)
|
|
2897
|
+
*/
|
|
2898
|
+
const getPrompt = useCallback(async (name_1, args_1) => {
|
|
2899
|
+
for (const source_6 of sourcesRef.current.values()) if (source_6.prompts.some((p) => p.name === name_1) && source_6.client) return await source_6.client.getPrompt({
|
|
2900
|
+
name: name_1,
|
|
2901
|
+
arguments: args_1
|
|
2902
|
+
});
|
|
2903
|
+
throw new Error(`Prompt '${name_1}' not found`);
|
|
2904
|
+
}, []);
|
|
2905
|
+
/**
|
|
2862
2906
|
* Get sources map for context (public view)
|
|
2863
2907
|
*/
|
|
2864
2908
|
const sources = useMemo(() => {
|
|
2865
2909
|
const publicSources = /* @__PURE__ */ new Map();
|
|
2866
|
-
sourcesRef.current.forEach((
|
|
2867
|
-
publicSources.set(
|
|
2910
|
+
sourcesRef.current.forEach((source_7) => {
|
|
2911
|
+
publicSources.set(source_7.id, getPublicSource(source_7));
|
|
2868
2912
|
});
|
|
2869
2913
|
return publicSources;
|
|
2870
|
-
}, [
|
|
2914
|
+
}, [
|
|
2915
|
+
toolsList,
|
|
2916
|
+
promptsList,
|
|
2917
|
+
getPublicSource
|
|
2918
|
+
]);
|
|
2871
2919
|
useEffect(() => {
|
|
2872
2920
|
if (autoConnectLocal) {
|
|
2873
2921
|
const timer = setTimeout(() => {
|
|
@@ -2879,34 +2927,41 @@ function MCPToolsProvider({ children, autoConnectLocal = true, onToolsChange })
|
|
|
2879
2927
|
useEffect(() => {
|
|
2880
2928
|
onToolsChange?.(toolsList);
|
|
2881
2929
|
}, [toolsList, onToolsChange]);
|
|
2930
|
+
useEffect(() => {
|
|
2931
|
+
onPromptsChange?.(promptsList);
|
|
2932
|
+
}, [promptsList, onPromptsChange]);
|
|
2882
2933
|
useEffect(() => {
|
|
2883
2934
|
const sources_0 = sourcesRef;
|
|
2884
2935
|
return () => {
|
|
2885
|
-
sources_0.current.forEach((
|
|
2886
|
-
if (
|
|
2887
|
-
if (
|
|
2936
|
+
sources_0.current.forEach((source_8) => {
|
|
2937
|
+
if (source_8.client) source_8.client.close().catch(console.error);
|
|
2938
|
+
if (source_8.transport) source_8.transport.close().catch(console.error);
|
|
2888
2939
|
});
|
|
2889
2940
|
sources_0.current.clear();
|
|
2890
2941
|
};
|
|
2891
2942
|
}, []);
|
|
2892
2943
|
const value = useMemo(() => ({
|
|
2893
2944
|
tools: toolsList,
|
|
2945
|
+
prompts: promptsList,
|
|
2894
2946
|
sources,
|
|
2895
2947
|
addSource,
|
|
2896
2948
|
removeSource,
|
|
2897
2949
|
getSource,
|
|
2898
2950
|
isConnected,
|
|
2899
2951
|
callTool,
|
|
2900
|
-
callToolOnSource
|
|
2952
|
+
callToolOnSource,
|
|
2953
|
+
getPrompt
|
|
2901
2954
|
}), [
|
|
2902
2955
|
toolsList,
|
|
2956
|
+
promptsList,
|
|
2903
2957
|
sources,
|
|
2904
2958
|
addSource,
|
|
2905
2959
|
removeSource,
|
|
2906
2960
|
getSource,
|
|
2907
2961
|
isConnected,
|
|
2908
2962
|
callTool,
|
|
2909
|
-
callToolOnSource
|
|
2963
|
+
callToolOnSource,
|
|
2964
|
+
getPrompt
|
|
2910
2965
|
]);
|
|
2911
2966
|
return /* @__PURE__ */ jsx(MCPToolsContext.Provider, {
|
|
2912
2967
|
value,
|
|
@@ -2921,6 +2976,12 @@ function useMCPTools() {
|
|
|
2921
2976
|
if (!context) throw new Error("useMCPTools must be used within an MCPToolsProvider");
|
|
2922
2977
|
return context;
|
|
2923
2978
|
}
|
|
2979
|
+
/**
|
|
2980
|
+
* Hook to optionally access MCP Tools context
|
|
2981
|
+
*/
|
|
2982
|
+
function useOptionalMCPTools() {
|
|
2983
|
+
return useContext(MCPToolsContext);
|
|
2984
|
+
}
|
|
2924
2985
|
|
|
2925
2986
|
//#endregion
|
|
2926
2987
|
//#region src/components/RemoteMCPSettings.tsx
|
|
@@ -4179,7 +4240,7 @@ const ThreadSuggestions = () => {
|
|
|
4179
4240
|
label: "for healthy weight loss",
|
|
4180
4241
|
action: "Create a meal plan for healthy weight loss"
|
|
4181
4242
|
}
|
|
4182
|
-
].map(_temp$
|
|
4243
|
+
].map(_temp$8)
|
|
4183
4244
|
});
|
|
4184
4245
|
$[0] = t0;
|
|
4185
4246
|
} else t0 = $[0];
|
|
@@ -4452,7 +4513,7 @@ const BranchPicker = (t0) => {
|
|
|
4452
4513
|
} else t6 = $[11];
|
|
4453
4514
|
return t6;
|
|
4454
4515
|
};
|
|
4455
|
-
function _temp$
|
|
4516
|
+
function _temp$8(suggestedAction, index) {
|
|
4456
4517
|
return /* @__PURE__ */ jsx(m.div, {
|
|
4457
4518
|
initial: {
|
|
4458
4519
|
opacity: 0,
|
|
@@ -4676,7 +4737,7 @@ function humanizeToolName(toolName, isRunning = false) {
|
|
|
4676
4737
|
*/
|
|
4677
4738
|
function useActions() {
|
|
4678
4739
|
const $ = c(3);
|
|
4679
|
-
const messages = useThread(_temp$
|
|
4740
|
+
const messages = useThread(_temp$7);
|
|
4680
4741
|
let t0;
|
|
4681
4742
|
bb0: {
|
|
4682
4743
|
if (!messages || messages.length === 0) {
|
|
@@ -4723,7 +4784,7 @@ function useActions() {
|
|
|
4723
4784
|
/**
|
|
4724
4785
|
* Hook to get the current running action (if any)
|
|
4725
4786
|
*/
|
|
4726
|
-
function _temp$
|
|
4787
|
+
function _temp$7(thread) {
|
|
4727
4788
|
return thread.messages;
|
|
4728
4789
|
}
|
|
4729
4790
|
function useCurrentAction() {
|
|
@@ -4731,7 +4792,7 @@ function useCurrentAction() {
|
|
|
4731
4792
|
const actions = useActions();
|
|
4732
4793
|
let t0;
|
|
4733
4794
|
if ($[0] !== actions) {
|
|
4734
|
-
t0 = actions.find(_temp2$
|
|
4795
|
+
t0 = actions.find(_temp2$4) ?? null;
|
|
4735
4796
|
$[0] = actions;
|
|
4736
4797
|
$[1] = t0;
|
|
4737
4798
|
} else t0 = $[1];
|
|
@@ -4740,7 +4801,7 @@ function useCurrentAction() {
|
|
|
4740
4801
|
/**
|
|
4741
4802
|
* Hook to get recently completed actions
|
|
4742
4803
|
*/
|
|
4743
|
-
function _temp2$
|
|
4804
|
+
function _temp2$4(a) {
|
|
4744
4805
|
return a.status === "running";
|
|
4745
4806
|
}
|
|
4746
4807
|
function useRecentActions(t0) {
|
|
@@ -4749,7 +4810,7 @@ function useRecentActions(t0) {
|
|
|
4749
4810
|
const actions = useActions();
|
|
4750
4811
|
let t1;
|
|
4751
4812
|
if ($[0] !== actions || $[1] !== limit) {
|
|
4752
|
-
t1 = actions.filter(_temp3$
|
|
4813
|
+
t1 = actions.filter(_temp3$2).slice(-limit);
|
|
4753
4814
|
$[0] = actions;
|
|
4754
4815
|
$[1] = limit;
|
|
4755
4816
|
$[2] = t1;
|
|
@@ -4759,7 +4820,7 @@ function useRecentActions(t0) {
|
|
|
4759
4820
|
/**
|
|
4760
4821
|
* Hook to get action summary stats
|
|
4761
4822
|
*/
|
|
4762
|
-
function _temp3$
|
|
4823
|
+
function _temp3$2(a) {
|
|
4763
4824
|
return a.status === "success" || a.status === "error";
|
|
4764
4825
|
}
|
|
4765
4826
|
|
|
@@ -4999,7 +5060,7 @@ const CurrentActivity = (t0) => {
|
|
|
4999
5060
|
if ($[6] !== recentActions || $[7] !== showRecent) {
|
|
5000
5061
|
t6 = showRecent && recentActions.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
5001
5062
|
className: "ml-1 border-l border-white/20 pl-3 space-y-1",
|
|
5002
|
-
children: recentActions.map(_temp$
|
|
5063
|
+
children: recentActions.map(_temp$6)
|
|
5003
5064
|
});
|
|
5004
5065
|
$[6] = recentActions;
|
|
5005
5066
|
$[7] = showRecent;
|
|
@@ -5145,7 +5206,7 @@ const IdleIndicator = (t0) => {
|
|
|
5145
5206
|
} else t4 = $[5];
|
|
5146
5207
|
return t4;
|
|
5147
5208
|
};
|
|
5148
|
-
function _temp$
|
|
5209
|
+
function _temp$6(action) {
|
|
5149
5210
|
return /* @__PURE__ */ jsxs("div", {
|
|
5150
5211
|
className: "flex items-center gap-2 text-xs text-white/60",
|
|
5151
5212
|
children: [/* @__PURE__ */ jsx(ActionStatusIcon, {
|
|
@@ -5171,7 +5232,7 @@ const ActionList = (t0) => {
|
|
|
5171
5232
|
if (actions.length === 0) return null;
|
|
5172
5233
|
let t2;
|
|
5173
5234
|
if ($[0] !== actions) {
|
|
5174
|
-
t2 = actions.filter(_temp$
|
|
5235
|
+
t2 = actions.filter(_temp$5);
|
|
5175
5236
|
$[0] = actions;
|
|
5176
5237
|
$[1] = t2;
|
|
5177
5238
|
} else t2 = $[1];
|
|
@@ -5259,7 +5320,7 @@ const ActionList = (t0) => {
|
|
|
5259
5320
|
} else t14 = $[21];
|
|
5260
5321
|
let t15;
|
|
5261
5322
|
if ($[22] !== actions) {
|
|
5262
|
-
t15 = actions.map(_temp2$
|
|
5323
|
+
t15 = actions.map(_temp2$3);
|
|
5263
5324
|
$[22] = actions;
|
|
5264
5325
|
$[23] = t15;
|
|
5265
5326
|
} else t15 = $[23];
|
|
@@ -5401,10 +5462,10 @@ function formatDuration(ms) {
|
|
|
5401
5462
|
if (seconds < 60) return `${seconds.toFixed(1)}s`;
|
|
5402
5463
|
return `${Math.floor(seconds / 60)}m ${Math.floor(seconds % 60)}s`;
|
|
5403
5464
|
}
|
|
5404
|
-
function _temp$
|
|
5465
|
+
function _temp$5(a) {
|
|
5405
5466
|
return a.status === "success";
|
|
5406
5467
|
}
|
|
5407
|
-
function _temp2$
|
|
5468
|
+
function _temp2$3(action) {
|
|
5408
5469
|
return /* @__PURE__ */ jsx(ActionItem, { action }, action.id);
|
|
5409
5470
|
}
|
|
5410
5471
|
|
|
@@ -5416,7 +5477,7 @@ const MAX_CHARS = 4e3;
|
|
|
5416
5477
|
*/
|
|
5417
5478
|
const CharacterCount = () => {
|
|
5418
5479
|
const $ = c(5);
|
|
5419
|
-
const charCount = useComposer(_temp$
|
|
5480
|
+
const charCount = useComposer(_temp$4)?.length ?? 0;
|
|
5420
5481
|
if (charCount < MAX_CHARS * .8) return null;
|
|
5421
5482
|
const isOver = charCount > MAX_CHARS;
|
|
5422
5483
|
const remaining = MAX_CHARS - charCount;
|
|
@@ -5555,7 +5616,7 @@ const PillComposer = (t0) => {
|
|
|
5555
5616
|
} else t14 = $[19];
|
|
5556
5617
|
return t14;
|
|
5557
5618
|
};
|
|
5558
|
-
function _temp$
|
|
5619
|
+
function _temp$4(c$1) {
|
|
5559
5620
|
return c$1.text;
|
|
5560
5621
|
}
|
|
5561
5622
|
|
|
@@ -5570,8 +5631,8 @@ const sizeSpring = {
|
|
|
5570
5631
|
const reducedMotionTransition = { duration: 0 };
|
|
5571
5632
|
const containerVariants = {
|
|
5572
5633
|
collapsed: {
|
|
5573
|
-
width: "
|
|
5574
|
-
height: "
|
|
5634
|
+
width: "44px",
|
|
5635
|
+
height: "10px",
|
|
5575
5636
|
padding: "0px",
|
|
5576
5637
|
borderRadius: "9999px"
|
|
5577
5638
|
},
|
|
@@ -5741,7 +5802,7 @@ const PillContainer = (t0) => {
|
|
|
5741
5802
|
const showContent = mode !== "collapsed" && mode !== "hovered";
|
|
5742
5803
|
const currentVariant = containerVariants[mode];
|
|
5743
5804
|
const t8 = !prefersReducedMotion && "will-change-transform";
|
|
5744
|
-
const t9 = mode === "collapsed" && "glass-pill-collapsed
|
|
5805
|
+
const t9 = mode === "collapsed" && "glass-pill-collapsed";
|
|
5745
5806
|
const t10 = mode === "hovered" && "glass-pill-hovered";
|
|
5746
5807
|
const t11 = (mode === "composing" || mode === "expanded") && "glass-pill";
|
|
5747
5808
|
const t12 = mode === "active" && "glass-pill glass-active";
|
|
@@ -5919,7 +5980,7 @@ const PillMessageContent = () => {
|
|
|
5919
5980
|
let t0;
|
|
5920
5981
|
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
5921
5982
|
t0 = /* @__PURE__ */ jsx(ThreadPrimitive.Messages, { components: {
|
|
5922
|
-
UserMessage: _temp$
|
|
5983
|
+
UserMessage: _temp$3,
|
|
5923
5984
|
AssistantMessage: PillAssistantMessage
|
|
5924
5985
|
} });
|
|
5925
5986
|
$[0] = t0;
|
|
@@ -5935,7 +5996,7 @@ const PillAssistantMessage = () => {
|
|
|
5935
5996
|
let t0;
|
|
5936
5997
|
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
5937
5998
|
t0 = /* @__PURE__ */ jsx(MessagePrimitive.Root, { children: /* @__PURE__ */ jsx(MessagePrimitive.Parts, { components: {
|
|
5938
|
-
Text: _temp2$
|
|
5999
|
+
Text: _temp2$2,
|
|
5939
6000
|
tools: { Fallback: PillToolFallback }
|
|
5940
6001
|
} }) });
|
|
5941
6002
|
$[0] = t0;
|
|
@@ -5950,530 +6011,13 @@ const PillAssistantMessage = () => {
|
|
|
5950
6011
|
const PillToolFallback = () => {
|
|
5951
6012
|
return null;
|
|
5952
6013
|
};
|
|
5953
|
-
function _temp$
|
|
6014
|
+
function _temp$3() {
|
|
5954
6015
|
return null;
|
|
5955
6016
|
}
|
|
5956
|
-
function _temp2$
|
|
6017
|
+
function _temp2$2() {
|
|
5957
6018
|
return null;
|
|
5958
6019
|
}
|
|
5959
6020
|
|
|
5960
|
-
//#endregion
|
|
5961
|
-
//#region src/providers/PlanProvider.tsx
|
|
5962
|
-
/**
|
|
5963
|
-
* Plan Provider
|
|
5964
|
-
*
|
|
5965
|
-
* Client-side provider for managing planning/todos state.
|
|
5966
|
-
* Works with the updateTodosTool and askForPlanApprovalTool to provide
|
|
5967
|
-
* a human-in-the-loop planning experience.
|
|
5968
|
-
*
|
|
5969
|
-
* @example Usage
|
|
5970
|
-
* ```tsx
|
|
5971
|
-
* <PlanProvider>
|
|
5972
|
-
* <App />
|
|
5973
|
-
* </PlanProvider>
|
|
5974
|
-
* ```
|
|
5975
|
-
*
|
|
5976
|
-
* @example Using the hook
|
|
5977
|
-
* ```tsx
|
|
5978
|
-
* const { todos, updateTodos, isPlanPending } = usePlan()
|
|
5979
|
-
* ```
|
|
5980
|
-
*/
|
|
5981
|
-
const PlanContext = createContext(null);
|
|
5982
|
-
/**
|
|
5983
|
-
* Helper to update todo statuses at given indices
|
|
5984
|
-
*/
|
|
5985
|
-
function updateTodoStatuses(todos, indices, status) {
|
|
5986
|
-
for (const index of indices) if (index >= 0 && index < todos.length) todos[index] = {
|
|
5987
|
-
...todos[index],
|
|
5988
|
-
status
|
|
5989
|
-
};
|
|
5990
|
-
}
|
|
5991
|
-
/**
|
|
5992
|
-
* Apply todo updates according to the update input
|
|
5993
|
-
*/
|
|
5994
|
-
function applyTodoUpdates(currentTodos, updates) {
|
|
5995
|
-
let updatedTodos = [...currentTodos];
|
|
5996
|
-
updatedTodos = updatedTodos.map((todo, index) => {
|
|
5997
|
-
if (updates.inProgress.includes(index) || updates.done.includes(index)) return todo;
|
|
5998
|
-
if (todo.status === "new") return {
|
|
5999
|
-
...todo,
|
|
6000
|
-
status: "pending"
|
|
6001
|
-
};
|
|
6002
|
-
return todo;
|
|
6003
|
-
});
|
|
6004
|
-
if (updates.clearPreviouslyDone) updatedTodos = updatedTodos.filter((todo) => todo.status !== "done");
|
|
6005
|
-
const newTodos = updates.new.map((text) => ({
|
|
6006
|
-
text,
|
|
6007
|
-
status: "new"
|
|
6008
|
-
}));
|
|
6009
|
-
if (typeof updates.insertAt === "number" && updates.insertAt >= 0) {
|
|
6010
|
-
const insertPosition = Math.min(updates.insertAt, updatedTodos.length);
|
|
6011
|
-
updatedTodos.splice(insertPosition, 0, ...newTodos);
|
|
6012
|
-
} else updatedTodos.push(...newTodos);
|
|
6013
|
-
updateTodoStatuses(updatedTodos, updates.inProgress, "in-progress");
|
|
6014
|
-
updateTodoStatuses(updatedTodos, updates.done, "done");
|
|
6015
|
-
return updatedTodos;
|
|
6016
|
-
}
|
|
6017
|
-
function PlanProvider(t0) {
|
|
6018
|
-
const $ = c(36);
|
|
6019
|
-
const { children, initialTodos: t1, onTodosChange } = t0;
|
|
6020
|
-
let t2;
|
|
6021
|
-
if ($[0] !== t1) {
|
|
6022
|
-
t2 = t1 === void 0 ? [] : t1;
|
|
6023
|
-
$[0] = t1;
|
|
6024
|
-
$[1] = t2;
|
|
6025
|
-
} else t2 = $[1];
|
|
6026
|
-
const [todos, setTodos] = useState(t2);
|
|
6027
|
-
const [isPlanApproved, setIsPlanApproved] = useState(false);
|
|
6028
|
-
const [pendingApproval, setPendingApproval] = useState(null);
|
|
6029
|
-
let t3;
|
|
6030
|
-
if ($[2] !== onTodosChange) {
|
|
6031
|
-
t3 = (newTodos) => {
|
|
6032
|
-
setTodos((prev) => {
|
|
6033
|
-
const result = typeof newTodos === "function" ? newTodos(prev) : newTodos;
|
|
6034
|
-
onTodosChange?.(result);
|
|
6035
|
-
return result;
|
|
6036
|
-
});
|
|
6037
|
-
};
|
|
6038
|
-
$[2] = onTodosChange;
|
|
6039
|
-
$[3] = t3;
|
|
6040
|
-
} else t3 = $[3];
|
|
6041
|
-
const setTodosWithCallback = t3;
|
|
6042
|
-
let t4;
|
|
6043
|
-
if ($[4] !== isPlanApproved || $[5] !== setTodosWithCallback || $[6] !== todos) {
|
|
6044
|
-
t4 = async (input) => {
|
|
6045
|
-
const newTodos_0 = applyTodoUpdates(todos, input);
|
|
6046
|
-
setTodosWithCallback(newTodos_0);
|
|
6047
|
-
if (!isPlanApproved && newTodos_0.length > 0) {
|
|
6048
|
-
const approvalResult = await new Promise((resolve) => {
|
|
6049
|
-
setPendingApproval({
|
|
6050
|
-
explainer: "Review the proposed plan",
|
|
6051
|
-
resolve: (result_0) => {
|
|
6052
|
-
setPendingApproval(null);
|
|
6053
|
-
resolve(result_0);
|
|
6054
|
-
}
|
|
6055
|
-
});
|
|
6056
|
-
});
|
|
6057
|
-
if (approvalResult.approved) {
|
|
6058
|
-
setIsPlanApproved(true);
|
|
6059
|
-
setTodosWithCallback(approvalResult.todos);
|
|
6060
|
-
return { todos: approvalResult.todos };
|
|
6061
|
-
} else {
|
|
6062
|
-
setTodosWithCallback([]);
|
|
6063
|
-
return { todos: [] };
|
|
6064
|
-
}
|
|
6065
|
-
}
|
|
6066
|
-
return { todos: newTodos_0 };
|
|
6067
|
-
};
|
|
6068
|
-
$[4] = isPlanApproved;
|
|
6069
|
-
$[5] = setTodosWithCallback;
|
|
6070
|
-
$[6] = todos;
|
|
6071
|
-
$[7] = t4;
|
|
6072
|
-
} else t4 = $[7];
|
|
6073
|
-
const updateTodos = t4;
|
|
6074
|
-
let t5;
|
|
6075
|
-
if ($[8] !== setTodosWithCallback) {
|
|
6076
|
-
t5 = (explainer) => new Promise((resolve_0) => {
|
|
6077
|
-
setTodosWithCallback(_temp3$3);
|
|
6078
|
-
setPendingApproval({
|
|
6079
|
-
explainer,
|
|
6080
|
-
resolve: (result_1) => {
|
|
6081
|
-
setPendingApproval(null);
|
|
6082
|
-
resolve_0(result_1);
|
|
6083
|
-
}
|
|
6084
|
-
});
|
|
6085
|
-
});
|
|
6086
|
-
$[8] = setTodosWithCallback;
|
|
6087
|
-
$[9] = t5;
|
|
6088
|
-
} else t5 = $[9];
|
|
6089
|
-
const requestPlanApproval = t5;
|
|
6090
|
-
let t6;
|
|
6091
|
-
if ($[10] !== setTodosWithCallback) {
|
|
6092
|
-
t6 = () => {
|
|
6093
|
-
setTodosWithCallback([]);
|
|
6094
|
-
};
|
|
6095
|
-
$[10] = setTodosWithCallback;
|
|
6096
|
-
$[11] = t6;
|
|
6097
|
-
} else t6 = $[11];
|
|
6098
|
-
const clearTodos = t6;
|
|
6099
|
-
let t7;
|
|
6100
|
-
if ($[12] !== setTodosWithCallback) {
|
|
6101
|
-
t7 = (text, t8$1) => {
|
|
6102
|
-
const status = t8$1 === void 0 ? "new" : t8$1;
|
|
6103
|
-
setTodosWithCallback((prev_1) => [...prev_1, {
|
|
6104
|
-
text,
|
|
6105
|
-
status
|
|
6106
|
-
}]);
|
|
6107
|
-
};
|
|
6108
|
-
$[12] = setTodosWithCallback;
|
|
6109
|
-
$[13] = t7;
|
|
6110
|
-
} else t7 = $[13];
|
|
6111
|
-
const addTodo = t7;
|
|
6112
|
-
let t8;
|
|
6113
|
-
if ($[14] !== setTodosWithCallback) {
|
|
6114
|
-
t8 = (index, status_0) => {
|
|
6115
|
-
setTodosWithCallback((prev_2) => {
|
|
6116
|
-
if (index < 0 || index >= prev_2.length) return prev_2;
|
|
6117
|
-
const updated = [...prev_2];
|
|
6118
|
-
updated[index] = {
|
|
6119
|
-
...updated[index],
|
|
6120
|
-
status: status_0
|
|
6121
|
-
};
|
|
6122
|
-
return updated;
|
|
6123
|
-
});
|
|
6124
|
-
};
|
|
6125
|
-
$[14] = setTodosWithCallback;
|
|
6126
|
-
$[15] = t8;
|
|
6127
|
-
} else t8 = $[15];
|
|
6128
|
-
const updateTodoStatus = t8;
|
|
6129
|
-
let t9;
|
|
6130
|
-
if ($[16] !== setTodosWithCallback) {
|
|
6131
|
-
t9 = (index_0) => {
|
|
6132
|
-
setTodosWithCallback((prev_3) => prev_3.filter((_, i) => i !== index_0));
|
|
6133
|
-
};
|
|
6134
|
-
$[16] = setTodosWithCallback;
|
|
6135
|
-
$[17] = t9;
|
|
6136
|
-
} else t9 = $[17];
|
|
6137
|
-
const removeTodo = t9;
|
|
6138
|
-
let t10;
|
|
6139
|
-
if ($[18] !== setTodosWithCallback) {
|
|
6140
|
-
t10 = (index_1, text_0) => {
|
|
6141
|
-
setTodosWithCallback((prev_4) => {
|
|
6142
|
-
if (index_1 < 0 || index_1 >= prev_4.length) return prev_4;
|
|
6143
|
-
const updated_0 = [...prev_4];
|
|
6144
|
-
updated_0[index_1] = {
|
|
6145
|
-
...updated_0[index_1],
|
|
6146
|
-
text: text_0
|
|
6147
|
-
};
|
|
6148
|
-
return updated_0;
|
|
6149
|
-
});
|
|
6150
|
-
};
|
|
6151
|
-
$[18] = setTodosWithCallback;
|
|
6152
|
-
$[19] = t10;
|
|
6153
|
-
} else t10 = $[19];
|
|
6154
|
-
const updateTodoText = t10;
|
|
6155
|
-
const t11 = pendingApproval !== null;
|
|
6156
|
-
const t12 = pendingApproval?.explainer ?? null;
|
|
6157
|
-
const t13 = pendingApproval?.resolve ?? null;
|
|
6158
|
-
let t14;
|
|
6159
|
-
if ($[20] !== addTodo || $[21] !== clearTodos || $[22] !== isPlanApproved || $[23] !== removeTodo || $[24] !== requestPlanApproval || $[25] !== t11 || $[26] !== t12 || $[27] !== t13 || $[28] !== todos || $[29] !== updateTodoStatus || $[30] !== updateTodoText || $[31] !== updateTodos) {
|
|
6160
|
-
t14 = {
|
|
6161
|
-
todos,
|
|
6162
|
-
isPlanPending: t11,
|
|
6163
|
-
isPlanApproved,
|
|
6164
|
-
pendingPlanExplainer: t12,
|
|
6165
|
-
resolvePlanApproval: t13,
|
|
6166
|
-
updateTodos,
|
|
6167
|
-
requestPlanApproval,
|
|
6168
|
-
clearTodos,
|
|
6169
|
-
addTodo,
|
|
6170
|
-
updateTodoStatus,
|
|
6171
|
-
removeTodo,
|
|
6172
|
-
updateTodoText
|
|
6173
|
-
};
|
|
6174
|
-
$[20] = addTodo;
|
|
6175
|
-
$[21] = clearTodos;
|
|
6176
|
-
$[22] = isPlanApproved;
|
|
6177
|
-
$[23] = removeTodo;
|
|
6178
|
-
$[24] = requestPlanApproval;
|
|
6179
|
-
$[25] = t11;
|
|
6180
|
-
$[26] = t12;
|
|
6181
|
-
$[27] = t13;
|
|
6182
|
-
$[28] = todos;
|
|
6183
|
-
$[29] = updateTodoStatus;
|
|
6184
|
-
$[30] = updateTodoText;
|
|
6185
|
-
$[31] = updateTodos;
|
|
6186
|
-
$[32] = t14;
|
|
6187
|
-
} else t14 = $[32];
|
|
6188
|
-
const value = t14;
|
|
6189
|
-
let t15;
|
|
6190
|
-
if ($[33] !== children || $[34] !== value) {
|
|
6191
|
-
t15 = /* @__PURE__ */ jsx(PlanContext.Provider, {
|
|
6192
|
-
value,
|
|
6193
|
-
children
|
|
6194
|
-
});
|
|
6195
|
-
$[33] = children;
|
|
6196
|
-
$[34] = value;
|
|
6197
|
-
$[35] = t15;
|
|
6198
|
-
} else t15 = $[35];
|
|
6199
|
-
return t15;
|
|
6200
|
-
}
|
|
6201
|
-
/**
|
|
6202
|
-
* Hook to access Plan context
|
|
6203
|
-
*/
|
|
6204
|
-
function _temp3$3(prev_0) {
|
|
6205
|
-
return prev_0.filter(_temp$5).map(_temp2$4);
|
|
6206
|
-
}
|
|
6207
|
-
function _temp2$4(todo_0) {
|
|
6208
|
-
return {
|
|
6209
|
-
...todo_0,
|
|
6210
|
-
status: "pending"
|
|
6211
|
-
};
|
|
6212
|
-
}
|
|
6213
|
-
function _temp$5(todo) {
|
|
6214
|
-
return todo.status !== "done";
|
|
6215
|
-
}
|
|
6216
|
-
function usePlan() {
|
|
6217
|
-
const context = useContext(PlanContext);
|
|
6218
|
-
if (!context) throw new Error("usePlan must be used within a PlanProvider");
|
|
6219
|
-
return context;
|
|
6220
|
-
}
|
|
6221
|
-
/**
|
|
6222
|
-
* Hook to optionally access Plan context
|
|
6223
|
-
*/
|
|
6224
|
-
function useOptionalPlan() {
|
|
6225
|
-
return useContext(PlanContext);
|
|
6226
|
-
}
|
|
6227
|
-
|
|
6228
|
-
//#endregion
|
|
6229
|
-
//#region src/components/pill/PillTodoList.tsx
|
|
6230
|
-
/**
|
|
6231
|
-
* PillTodoList Component
|
|
6232
|
-
*
|
|
6233
|
-
* Persistent todo list for the pill.
|
|
6234
|
-
* Shows current todos from PlanProvider context.
|
|
6235
|
-
* Always collapsed by default.
|
|
6236
|
-
*/
|
|
6237
|
-
/**
|
|
6238
|
-
* Persistent todo list for the pill.
|
|
6239
|
-
* Shows current todos from PlanProvider context.
|
|
6240
|
-
* Always collapsed by default.
|
|
6241
|
-
*/
|
|
6242
|
-
const PillTodoList = () => {
|
|
6243
|
-
const $ = c(40);
|
|
6244
|
-
const plan = useOptionalPlan();
|
|
6245
|
-
const [isOpen, setIsOpen] = useState(false);
|
|
6246
|
-
if (!plan || plan.todos.length === 0) return null;
|
|
6247
|
-
if (plan.isPlanPending) return null;
|
|
6248
|
-
if (!plan.isPlanApproved) return null;
|
|
6249
|
-
const { todos } = plan;
|
|
6250
|
-
let t0;
|
|
6251
|
-
if ($[0] !== todos) {
|
|
6252
|
-
t0 = todos.filter(_temp$4);
|
|
6253
|
-
$[0] = todos;
|
|
6254
|
-
$[1] = t0;
|
|
6255
|
-
} else t0 = $[1];
|
|
6256
|
-
const doneCount = t0.length;
|
|
6257
|
-
let t1;
|
|
6258
|
-
if ($[2] !== todos) {
|
|
6259
|
-
t1 = todos.filter(_temp2$3);
|
|
6260
|
-
$[2] = todos;
|
|
6261
|
-
$[3] = t1;
|
|
6262
|
-
} else t1 = $[3];
|
|
6263
|
-
const inProgressCount = t1.length;
|
|
6264
|
-
let t2;
|
|
6265
|
-
if ($[4] !== todos) {
|
|
6266
|
-
t2 = todos.filter(_temp3$2);
|
|
6267
|
-
$[4] = todos;
|
|
6268
|
-
$[5] = t2;
|
|
6269
|
-
} else t2 = $[5];
|
|
6270
|
-
const pendingCount = t2.length;
|
|
6271
|
-
let t3;
|
|
6272
|
-
let t4;
|
|
6273
|
-
if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
|
|
6274
|
-
t3 = () => setIsOpen(_temp4$2);
|
|
6275
|
-
t4 = cn("flex w-full items-center gap-2", "rounded-lg px-3 py-2", "bg-white/5 hover:bg-white/10", "transition-colors duration-200");
|
|
6276
|
-
$[6] = t3;
|
|
6277
|
-
$[7] = t4;
|
|
6278
|
-
} else {
|
|
6279
|
-
t3 = $[6];
|
|
6280
|
-
t4 = $[7];
|
|
6281
|
-
}
|
|
6282
|
-
const t5 = !isOpen && "-rotate-90";
|
|
6283
|
-
let t6;
|
|
6284
|
-
if ($[8] !== t5) {
|
|
6285
|
-
t6 = cn("h-3.5 w-3.5 text-white/50 transition-transform", t5);
|
|
6286
|
-
$[8] = t5;
|
|
6287
|
-
$[9] = t6;
|
|
6288
|
-
} else t6 = $[9];
|
|
6289
|
-
let t7;
|
|
6290
|
-
if ($[10] !== t6) {
|
|
6291
|
-
t7 = /* @__PURE__ */ jsx(ChevronDown, { className: t6 });
|
|
6292
|
-
$[10] = t6;
|
|
6293
|
-
$[11] = t7;
|
|
6294
|
-
} else t7 = $[11];
|
|
6295
|
-
let t8;
|
|
6296
|
-
if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
|
|
6297
|
-
t8 = /* @__PURE__ */ jsx("span", {
|
|
6298
|
-
className: "text-xs font-medium text-white/80",
|
|
6299
|
-
children: "Tasks"
|
|
6300
|
-
});
|
|
6301
|
-
$[12] = t8;
|
|
6302
|
-
} else t8 = $[12];
|
|
6303
|
-
let t9;
|
|
6304
|
-
if ($[13] !== inProgressCount) {
|
|
6305
|
-
t9 = inProgressCount > 0 && /* @__PURE__ */ jsxs("span", {
|
|
6306
|
-
className: "flex items-center gap-1",
|
|
6307
|
-
children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 animate-pulse rounded-full bg-blue-400" }), inProgressCount]
|
|
6308
|
-
});
|
|
6309
|
-
$[13] = inProgressCount;
|
|
6310
|
-
$[14] = t9;
|
|
6311
|
-
} else t9 = $[14];
|
|
6312
|
-
let t10;
|
|
6313
|
-
if ($[15] !== pendingCount) {
|
|
6314
|
-
t10 = pendingCount > 0 && /* @__PURE__ */ jsxs("span", {
|
|
6315
|
-
className: "flex items-center gap-1",
|
|
6316
|
-
children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-white/50" }), pendingCount]
|
|
6317
|
-
});
|
|
6318
|
-
$[15] = pendingCount;
|
|
6319
|
-
$[16] = t10;
|
|
6320
|
-
} else t10 = $[16];
|
|
6321
|
-
let t11;
|
|
6322
|
-
if ($[17] !== doneCount) {
|
|
6323
|
-
t11 = doneCount > 0 && /* @__PURE__ */ jsxs("span", {
|
|
6324
|
-
className: "flex items-center gap-1",
|
|
6325
|
-
children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-green-400" }), doneCount]
|
|
6326
|
-
});
|
|
6327
|
-
$[17] = doneCount;
|
|
6328
|
-
$[18] = t11;
|
|
6329
|
-
} else t11 = $[18];
|
|
6330
|
-
let t12;
|
|
6331
|
-
if ($[19] !== t10 || $[20] !== t11 || $[21] !== t9) {
|
|
6332
|
-
t12 = /* @__PURE__ */ jsxs("div", {
|
|
6333
|
-
className: "ml-auto flex items-center gap-2 text-xs text-white/50",
|
|
6334
|
-
children: [
|
|
6335
|
-
t9,
|
|
6336
|
-
t10,
|
|
6337
|
-
t11
|
|
6338
|
-
]
|
|
6339
|
-
});
|
|
6340
|
-
$[19] = t10;
|
|
6341
|
-
$[20] = t11;
|
|
6342
|
-
$[21] = t9;
|
|
6343
|
-
$[22] = t12;
|
|
6344
|
-
} else t12 = $[22];
|
|
6345
|
-
let t13;
|
|
6346
|
-
if ($[23] !== isOpen || $[24] !== t12 || $[25] !== t7) {
|
|
6347
|
-
t13 = /* @__PURE__ */ jsxs("button", {
|
|
6348
|
-
type: "button",
|
|
6349
|
-
onClick: t3,
|
|
6350
|
-
className: t4,
|
|
6351
|
-
"aria-expanded": isOpen,
|
|
6352
|
-
children: [
|
|
6353
|
-
t7,
|
|
6354
|
-
t8,
|
|
6355
|
-
t12
|
|
6356
|
-
]
|
|
6357
|
-
});
|
|
6358
|
-
$[23] = isOpen;
|
|
6359
|
-
$[24] = t12;
|
|
6360
|
-
$[25] = t7;
|
|
6361
|
-
$[26] = t13;
|
|
6362
|
-
} else t13 = $[26];
|
|
6363
|
-
const t14 = isOpen ? "mt-2 grid-rows-[1fr]" : "grid-rows-[0fr]";
|
|
6364
|
-
let t15;
|
|
6365
|
-
if ($[27] !== t14) {
|
|
6366
|
-
t15 = cn("grid transition-[grid-template-rows] duration-300 ease-in-out", t14);
|
|
6367
|
-
$[27] = t14;
|
|
6368
|
-
$[28] = t15;
|
|
6369
|
-
} else t15 = $[28];
|
|
6370
|
-
const t16 = !isOpen;
|
|
6371
|
-
let t17;
|
|
6372
|
-
if ($[29] !== todos) {
|
|
6373
|
-
t17 = todos.map(_temp5);
|
|
6374
|
-
$[29] = todos;
|
|
6375
|
-
$[30] = t17;
|
|
6376
|
-
} else t17 = $[30];
|
|
6377
|
-
let t18;
|
|
6378
|
-
if ($[31] !== t17) {
|
|
6379
|
-
t18 = /* @__PURE__ */ jsx("div", {
|
|
6380
|
-
className: "overflow-hidden",
|
|
6381
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
6382
|
-
className: "flex max-h-48 flex-col gap-1.5 overflow-y-auto px-1",
|
|
6383
|
-
children: t17
|
|
6384
|
-
})
|
|
6385
|
-
});
|
|
6386
|
-
$[31] = t17;
|
|
6387
|
-
$[32] = t18;
|
|
6388
|
-
} else t18 = $[32];
|
|
6389
|
-
let t19;
|
|
6390
|
-
if ($[33] !== t15 || $[34] !== t16 || $[35] !== t18) {
|
|
6391
|
-
t19 = /* @__PURE__ */ jsx("div", {
|
|
6392
|
-
className: t15,
|
|
6393
|
-
"aria-hidden": t16,
|
|
6394
|
-
children: t18
|
|
6395
|
-
});
|
|
6396
|
-
$[33] = t15;
|
|
6397
|
-
$[34] = t16;
|
|
6398
|
-
$[35] = t18;
|
|
6399
|
-
$[36] = t19;
|
|
6400
|
-
} else t19 = $[36];
|
|
6401
|
-
let t20;
|
|
6402
|
-
if ($[37] !== t13 || $[38] !== t19) {
|
|
6403
|
-
t20 = /* @__PURE__ */ jsxs("div", {
|
|
6404
|
-
className: "my-2",
|
|
6405
|
-
children: [t13, t19]
|
|
6406
|
-
});
|
|
6407
|
-
$[37] = t13;
|
|
6408
|
-
$[38] = t19;
|
|
6409
|
-
$[39] = t20;
|
|
6410
|
-
} else t20 = $[39];
|
|
6411
|
-
return t20;
|
|
6412
|
-
};
|
|
6413
|
-
function TodoItem$1(t0) {
|
|
6414
|
-
const $ = c(13);
|
|
6415
|
-
const { todo } = t0;
|
|
6416
|
-
const isDone = todo.status === "done";
|
|
6417
|
-
const isInProgress = todo.status === "in-progress";
|
|
6418
|
-
let t1;
|
|
6419
|
-
if ($[0] !== isDone || $[1] !== isInProgress) {
|
|
6420
|
-
t1 = isDone ? /* @__PURE__ */ jsx(CheckCircle2, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-green-400/60" }) : isInProgress ? /* @__PURE__ */ jsx("div", {
|
|
6421
|
-
className: "mt-0.5 flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-full border border-blue-400",
|
|
6422
|
-
children: /* @__PURE__ */ jsx("div", { className: "h-1.5 w-1.5 animate-pulse rounded-full bg-blue-400" })
|
|
6423
|
-
}) : /* @__PURE__ */ jsx(Circle, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-white/50" });
|
|
6424
|
-
$[0] = isDone;
|
|
6425
|
-
$[1] = isInProgress;
|
|
6426
|
-
$[2] = t1;
|
|
6427
|
-
} else t1 = $[2];
|
|
6428
|
-
const t2 = isDone && "text-white/40 line-through";
|
|
6429
|
-
const t3 = isInProgress && "text-white";
|
|
6430
|
-
const t4 = !isDone && !isInProgress && "text-white/70";
|
|
6431
|
-
let t5;
|
|
6432
|
-
if ($[3] !== t2 || $[4] !== t3 || $[5] !== t4) {
|
|
6433
|
-
t5 = cn("text-sm leading-snug", t2, t3, t4);
|
|
6434
|
-
$[3] = t2;
|
|
6435
|
-
$[4] = t3;
|
|
6436
|
-
$[5] = t4;
|
|
6437
|
-
$[6] = t5;
|
|
6438
|
-
} else t5 = $[6];
|
|
6439
|
-
let t6;
|
|
6440
|
-
if ($[7] !== t5 || $[8] !== todo.text) {
|
|
6441
|
-
t6 = /* @__PURE__ */ jsx("span", {
|
|
6442
|
-
className: t5,
|
|
6443
|
-
children: todo.text
|
|
6444
|
-
});
|
|
6445
|
-
$[7] = t5;
|
|
6446
|
-
$[8] = todo.text;
|
|
6447
|
-
$[9] = t6;
|
|
6448
|
-
} else t6 = $[9];
|
|
6449
|
-
let t7;
|
|
6450
|
-
if ($[10] !== t1 || $[11] !== t6) {
|
|
6451
|
-
t7 = /* @__PURE__ */ jsxs("div", {
|
|
6452
|
-
className: "flex items-start gap-2.5 px-2 py-1",
|
|
6453
|
-
children: [t1, t6]
|
|
6454
|
-
});
|
|
6455
|
-
$[10] = t1;
|
|
6456
|
-
$[11] = t6;
|
|
6457
|
-
$[12] = t7;
|
|
6458
|
-
} else t7 = $[12];
|
|
6459
|
-
return t7;
|
|
6460
|
-
}
|
|
6461
|
-
function _temp$4(t) {
|
|
6462
|
-
return t.status === "done";
|
|
6463
|
-
}
|
|
6464
|
-
function _temp2$3(t_0) {
|
|
6465
|
-
return t_0.status === "in-progress";
|
|
6466
|
-
}
|
|
6467
|
-
function _temp3$2(t_1) {
|
|
6468
|
-
return t_1.status === "pending" || t_1.status === "new";
|
|
6469
|
-
}
|
|
6470
|
-
function _temp4$2(o) {
|
|
6471
|
-
return !o;
|
|
6472
|
-
}
|
|
6473
|
-
function _temp5(todo, index) {
|
|
6474
|
-
return /* @__PURE__ */ jsx(TodoItem$1, { todo }, `${todo.text}-${index}`);
|
|
6475
|
-
}
|
|
6476
|
-
|
|
6477
6021
|
//#endregion
|
|
6478
6022
|
//#region src/components/pill/PillVoice.tsx
|
|
6479
6023
|
const voiceVariants = {
|
|
@@ -7026,35 +6570,326 @@ function useVoiceBorderStatus() {
|
|
|
7026
6570
|
}
|
|
7027
6571
|
|
|
7028
6572
|
//#endregion
|
|
7029
|
-
//#region src/components/pill/
|
|
6573
|
+
//#region src/components/pill/PromptBadge.tsx
|
|
7030
6574
|
/**
|
|
7031
|
-
*
|
|
7032
|
-
*
|
|
6575
|
+
* PromptBadge
|
|
6576
|
+
*
|
|
6577
|
+
* Floating prompt suggestions that appear above the collapsed pill.
|
|
6578
|
+
* Shows a compact list of available prompts that opens upward.
|
|
7033
6579
|
*/
|
|
7034
6580
|
/**
|
|
7035
|
-
*
|
|
7036
|
-
*
|
|
6581
|
+
* Floating prompts above the pill.
|
|
6582
|
+
* Positioned absolutely above parent - parent should be relative.
|
|
7037
6583
|
*/
|
|
7038
|
-
const
|
|
7039
|
-
const $ = c(
|
|
7040
|
-
const {
|
|
6584
|
+
const PromptBadge = (t0) => {
|
|
6585
|
+
const $ = c(14);
|
|
6586
|
+
const { prompts, onSelect, className } = t0;
|
|
6587
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
7041
6588
|
let t1;
|
|
6589
|
+
if ($[0] !== onSelect) {
|
|
6590
|
+
t1 = (prompt) => {
|
|
6591
|
+
setIsExpanded(false);
|
|
6592
|
+
onSelect(prompt);
|
|
6593
|
+
};
|
|
6594
|
+
$[0] = onSelect;
|
|
6595
|
+
$[1] = t1;
|
|
6596
|
+
} else t1 = $[1];
|
|
6597
|
+
const handleSelect = t1;
|
|
6598
|
+
if (prompts.length === 0) return null;
|
|
6599
|
+
const firstPrompt = prompts[0];
|
|
6600
|
+
const hasMore = prompts.length > 1;
|
|
7042
6601
|
let t2;
|
|
6602
|
+
if ($[2] !== className) {
|
|
6603
|
+
t2 = cn("absolute bottom-full left-1/2 -translate-x-1/2 mb-2 z-20", className);
|
|
6604
|
+
$[2] = className;
|
|
6605
|
+
$[3] = t2;
|
|
6606
|
+
} else t2 = $[3];
|
|
7043
6607
|
let t3;
|
|
6608
|
+
if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
|
|
6609
|
+
t3 = () => setIsExpanded(false);
|
|
6610
|
+
$[4] = t3;
|
|
6611
|
+
} else t3 = $[4];
|
|
7044
6612
|
let t4;
|
|
7045
|
-
|
|
7046
|
-
|
|
7047
|
-
|
|
7048
|
-
|
|
7049
|
-
|
|
7050
|
-
|
|
7051
|
-
|
|
7052
|
-
|
|
7053
|
-
|
|
7054
|
-
|
|
7055
|
-
|
|
7056
|
-
|
|
7057
|
-
|
|
6613
|
+
if ($[5] !== firstPrompt || $[6] !== handleSelect || $[7] !== hasMore || $[8] !== isExpanded || $[9] !== prompts) {
|
|
6614
|
+
t4 = /* @__PURE__ */ jsx(AnimatePresence, {
|
|
6615
|
+
mode: "wait",
|
|
6616
|
+
children: !isExpanded ? /* @__PURE__ */ jsxs(motion.button, {
|
|
6617
|
+
type: "button",
|
|
6618
|
+
initial: {
|
|
6619
|
+
opacity: 0,
|
|
6620
|
+
y: 5
|
|
6621
|
+
},
|
|
6622
|
+
animate: {
|
|
6623
|
+
opacity: 1,
|
|
6624
|
+
y: 0
|
|
6625
|
+
},
|
|
6626
|
+
exit: {
|
|
6627
|
+
opacity: 0,
|
|
6628
|
+
y: 5
|
|
6629
|
+
},
|
|
6630
|
+
transition: { duration: .15 },
|
|
6631
|
+
onClick: () => hasMore ? setIsExpanded(true) : handleSelect(firstPrompt),
|
|
6632
|
+
onMouseEnter: () => hasMore && setIsExpanded(true),
|
|
6633
|
+
className: cn("flex items-center gap-2 px-3 py-1.5", "bg-white dark:bg-zinc-800", "rounded-full", "shadow-lg shadow-black/10 dark:shadow-black/30", "border border-zinc-200/80 dark:border-zinc-700/80", "text-sm text-zinc-700 dark:text-zinc-200", "hover:bg-zinc-50 dark:hover:bg-zinc-700", "transition-colors duration-100", "whitespace-nowrap"),
|
|
6634
|
+
children: [
|
|
6635
|
+
/* @__PURE__ */ jsx("span", {
|
|
6636
|
+
className: "text-zinc-400 dark:text-zinc-500",
|
|
6637
|
+
children: "💬"
|
|
6638
|
+
}),
|
|
6639
|
+
/* @__PURE__ */ jsx("span", {
|
|
6640
|
+
className: "max-w-[150px] truncate",
|
|
6641
|
+
children: firstPrompt.name
|
|
6642
|
+
}),
|
|
6643
|
+
hasMore && /* @__PURE__ */ jsxs("span", {
|
|
6644
|
+
className: "text-xs text-zinc-400 dark:text-zinc-500",
|
|
6645
|
+
children: ["+", prompts.length - 1]
|
|
6646
|
+
})
|
|
6647
|
+
]
|
|
6648
|
+
}, "teaser") : /* @__PURE__ */ jsxs(motion.div, {
|
|
6649
|
+
initial: {
|
|
6650
|
+
opacity: 0,
|
|
6651
|
+
y: 5,
|
|
6652
|
+
scale: .95
|
|
6653
|
+
},
|
|
6654
|
+
animate: {
|
|
6655
|
+
opacity: 1,
|
|
6656
|
+
y: 0,
|
|
6657
|
+
scale: 1
|
|
6658
|
+
},
|
|
6659
|
+
exit: {
|
|
6660
|
+
opacity: 0,
|
|
6661
|
+
y: 5,
|
|
6662
|
+
scale: .95
|
|
6663
|
+
},
|
|
6664
|
+
transition: { duration: .15 },
|
|
6665
|
+
className: cn("min-w-[200px] max-w-[280px]", "py-1.5", "bg-white dark:bg-zinc-800", "rounded-lg", "shadow-xl shadow-black/15 dark:shadow-black/40", "border border-zinc-200/80 dark:border-zinc-700/80", "overflow-hidden"),
|
|
6666
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
6667
|
+
className: "px-3 py-1.5 border-b border-zinc-100 dark:border-zinc-700/50",
|
|
6668
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
6669
|
+
className: "text-xs font-medium text-zinc-400 dark:text-zinc-500 uppercase tracking-wide",
|
|
6670
|
+
children: "Suggestions"
|
|
6671
|
+
})
|
|
6672
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
6673
|
+
className: "py-1 max-h-[200px] overflow-y-auto",
|
|
6674
|
+
children: prompts.map((prompt_0) => /* @__PURE__ */ jsx("button", {
|
|
6675
|
+
type: "button",
|
|
6676
|
+
onClick: () => handleSelect(prompt_0),
|
|
6677
|
+
className: cn("w-full px-3 py-2 text-left", "hover:bg-zinc-50 dark:hover:bg-zinc-700/50", "transition-colors duration-100", "group"),
|
|
6678
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
6679
|
+
className: "flex items-start gap-2",
|
|
6680
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
6681
|
+
className: "text-zinc-400 dark:text-zinc-500 text-sm mt-0.5",
|
|
6682
|
+
children: "💬"
|
|
6683
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
6684
|
+
className: "flex-1 min-w-0",
|
|
6685
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
6686
|
+
className: cn("text-sm font-medium truncate", "text-zinc-700 dark:text-zinc-200", "group-hover:text-zinc-900 dark:group-hover:text-white"),
|
|
6687
|
+
children: prompt_0.name
|
|
6688
|
+
}), prompt_0.description && /* @__PURE__ */ jsx("div", {
|
|
6689
|
+
className: "text-xs text-zinc-500 dark:text-zinc-400 truncate mt-0.5",
|
|
6690
|
+
children: prompt_0.description
|
|
6691
|
+
})]
|
|
6692
|
+
})]
|
|
6693
|
+
})
|
|
6694
|
+
}, prompt_0.name))
|
|
6695
|
+
})]
|
|
6696
|
+
}, "menu")
|
|
6697
|
+
});
|
|
6698
|
+
$[5] = firstPrompt;
|
|
6699
|
+
$[6] = handleSelect;
|
|
6700
|
+
$[7] = hasMore;
|
|
6701
|
+
$[8] = isExpanded;
|
|
6702
|
+
$[9] = prompts;
|
|
6703
|
+
$[10] = t4;
|
|
6704
|
+
} else t4 = $[10];
|
|
6705
|
+
let t5;
|
|
6706
|
+
if ($[11] !== t2 || $[12] !== t4) {
|
|
6707
|
+
t5 = /* @__PURE__ */ jsx("div", {
|
|
6708
|
+
className: t2,
|
|
6709
|
+
onMouseLeave: t3,
|
|
6710
|
+
children: t4
|
|
6711
|
+
});
|
|
6712
|
+
$[11] = t2;
|
|
6713
|
+
$[12] = t4;
|
|
6714
|
+
$[13] = t5;
|
|
6715
|
+
} else t5 = $[13];
|
|
6716
|
+
return t5;
|
|
6717
|
+
};
|
|
6718
|
+
|
|
6719
|
+
//#endregion
|
|
6720
|
+
//#region src/components/pill/PromptSuggestions.tsx
|
|
6721
|
+
/**
|
|
6722
|
+
* PromptSuggestions
|
|
6723
|
+
*
|
|
6724
|
+
* Inline prompt suggestions shown inside the expanded pill.
|
|
6725
|
+
* Compact horizontal scrollable list of prompt chips.
|
|
6726
|
+
*/
|
|
6727
|
+
/**
|
|
6728
|
+
* Inline prompt suggestions for the expanded pill.
|
|
6729
|
+
* Horizontally scrollable list of compact prompt chips.
|
|
6730
|
+
*/
|
|
6731
|
+
const PromptSuggestions = (t0) => {
|
|
6732
|
+
const $ = c(19);
|
|
6733
|
+
const { prompts, onSelect, className } = t0;
|
|
6734
|
+
const scrollRef = useRef(null);
|
|
6735
|
+
let t1;
|
|
6736
|
+
if ($[0] !== onSelect) {
|
|
6737
|
+
t1 = (prompt) => {
|
|
6738
|
+
onSelect(prompt);
|
|
6739
|
+
};
|
|
6740
|
+
$[0] = onSelect;
|
|
6741
|
+
$[1] = t1;
|
|
6742
|
+
} else t1 = $[1];
|
|
6743
|
+
const handleClick = t1;
|
|
6744
|
+
if (prompts.length === 0) return null;
|
|
6745
|
+
let t2;
|
|
6746
|
+
let t3;
|
|
6747
|
+
let t4;
|
|
6748
|
+
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
6749
|
+
t2 = {
|
|
6750
|
+
opacity: 0,
|
|
6751
|
+
height: 0
|
|
6752
|
+
};
|
|
6753
|
+
t3 = {
|
|
6754
|
+
opacity: 1,
|
|
6755
|
+
height: "auto"
|
|
6756
|
+
};
|
|
6757
|
+
t4 = {
|
|
6758
|
+
opacity: 0,
|
|
6759
|
+
height: 0
|
|
6760
|
+
};
|
|
6761
|
+
$[2] = t2;
|
|
6762
|
+
$[3] = t3;
|
|
6763
|
+
$[4] = t4;
|
|
6764
|
+
} else {
|
|
6765
|
+
t2 = $[2];
|
|
6766
|
+
t3 = $[3];
|
|
6767
|
+
t4 = $[4];
|
|
6768
|
+
}
|
|
6769
|
+
let t5;
|
|
6770
|
+
if ($[5] !== className) {
|
|
6771
|
+
t5 = cn("overflow-hidden", className);
|
|
6772
|
+
$[5] = className;
|
|
6773
|
+
$[6] = t5;
|
|
6774
|
+
} else t5 = $[6];
|
|
6775
|
+
let t6;
|
|
6776
|
+
if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
6777
|
+
t6 = /* @__PURE__ */ jsx("div", {
|
|
6778
|
+
className: "flex items-center gap-1.5 mb-2",
|
|
6779
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
6780
|
+
className: "text-xs text-white/40",
|
|
6781
|
+
children: "Suggestions"
|
|
6782
|
+
})
|
|
6783
|
+
});
|
|
6784
|
+
$[7] = t6;
|
|
6785
|
+
} else t6 = $[7];
|
|
6786
|
+
let t7;
|
|
6787
|
+
if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
|
|
6788
|
+
t7 = cn("flex gap-2 overflow-x-auto scrollbar-hide", "pb-1 -mb-1");
|
|
6789
|
+
$[8] = t7;
|
|
6790
|
+
} else t7 = $[8];
|
|
6791
|
+
let t8;
|
|
6792
|
+
if ($[9] !== handleClick || $[10] !== prompts) {
|
|
6793
|
+
let t9$1;
|
|
6794
|
+
if ($[12] !== handleClick) {
|
|
6795
|
+
t9$1 = (prompt_0, index) => /* @__PURE__ */ jsx(motion.button, {
|
|
6796
|
+
type: "button",
|
|
6797
|
+
initial: {
|
|
6798
|
+
opacity: 0,
|
|
6799
|
+
scale: .9
|
|
6800
|
+
},
|
|
6801
|
+
animate: {
|
|
6802
|
+
opacity: 1,
|
|
6803
|
+
scale: 1
|
|
6804
|
+
},
|
|
6805
|
+
exit: {
|
|
6806
|
+
opacity: 0,
|
|
6807
|
+
scale: .9
|
|
6808
|
+
},
|
|
6809
|
+
transition: {
|
|
6810
|
+
type: "spring",
|
|
6811
|
+
stiffness: 400,
|
|
6812
|
+
damping: 25,
|
|
6813
|
+
delay: index * .03
|
|
6814
|
+
},
|
|
6815
|
+
onClick: () => handleClick(prompt_0),
|
|
6816
|
+
className: cn("flex-shrink-0", "px-2.5 py-1 rounded-full", "bg-white/10 hover:bg-white/20", "text-white/80 hover:text-white", "text-xs font-medium", "border border-white/10 hover:border-white/20", "transition-all duration-150", "cursor-pointer", "whitespace-nowrap"),
|
|
6817
|
+
title: prompt_0.description || prompt_0.name,
|
|
6818
|
+
children: /* @__PURE__ */ jsxs("span", {
|
|
6819
|
+
className: "flex items-center gap-1",
|
|
6820
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
6821
|
+
className: "opacity-60",
|
|
6822
|
+
children: "💬"
|
|
6823
|
+
}), prompt_0.name]
|
|
6824
|
+
})
|
|
6825
|
+
}, prompt_0.name);
|
|
6826
|
+
$[12] = handleClick;
|
|
6827
|
+
$[13] = t9$1;
|
|
6828
|
+
} else t9$1 = $[13];
|
|
6829
|
+
t8 = prompts.map(t9$1);
|
|
6830
|
+
$[9] = handleClick;
|
|
6831
|
+
$[10] = prompts;
|
|
6832
|
+
$[11] = t8;
|
|
6833
|
+
} else t8 = $[11];
|
|
6834
|
+
let t9;
|
|
6835
|
+
if ($[14] !== t8) {
|
|
6836
|
+
t9 = /* @__PURE__ */ jsx("div", {
|
|
6837
|
+
ref: scrollRef,
|
|
6838
|
+
className: t7,
|
|
6839
|
+
children: /* @__PURE__ */ jsx(AnimatePresence, {
|
|
6840
|
+
mode: "popLayout",
|
|
6841
|
+
children: t8
|
|
6842
|
+
})
|
|
6843
|
+
});
|
|
6844
|
+
$[14] = t8;
|
|
6845
|
+
$[15] = t9;
|
|
6846
|
+
} else t9 = $[15];
|
|
6847
|
+
let t10;
|
|
6848
|
+
if ($[16] !== t5 || $[17] !== t9) {
|
|
6849
|
+
t10 = /* @__PURE__ */ jsxs(motion.div, {
|
|
6850
|
+
initial: t2,
|
|
6851
|
+
animate: t3,
|
|
6852
|
+
exit: t4,
|
|
6853
|
+
className: t5,
|
|
6854
|
+
children: [t6, t9]
|
|
6855
|
+
});
|
|
6856
|
+
$[16] = t5;
|
|
6857
|
+
$[17] = t9;
|
|
6858
|
+
$[18] = t10;
|
|
6859
|
+
} else t10 = $[18];
|
|
6860
|
+
return t10;
|
|
6861
|
+
};
|
|
6862
|
+
|
|
6863
|
+
//#endregion
|
|
6864
|
+
//#region src/components/pill/PillMarkdown.tsx
|
|
6865
|
+
/**
|
|
6866
|
+
* Markdown renderer for pill components.
|
|
6867
|
+
* Uses the same styling as the main MarkdownText but accepts content as a prop.
|
|
6868
|
+
*/
|
|
6869
|
+
/**
|
|
6870
|
+
* Markdown component for rendering content within pill UI.
|
|
6871
|
+
* Supports GitHub-flavored markdown with compact styling option.
|
|
6872
|
+
*/
|
|
6873
|
+
const PillMarkdown = memo((t0) => {
|
|
6874
|
+
const $ = c(33);
|
|
6875
|
+
const { content, className, compact } = t0;
|
|
6876
|
+
let t1;
|
|
6877
|
+
let t2;
|
|
6878
|
+
let t3;
|
|
6879
|
+
let t4;
|
|
6880
|
+
let t5;
|
|
6881
|
+
let t6;
|
|
6882
|
+
let t7;
|
|
6883
|
+
if ($[0] !== compact) {
|
|
6884
|
+
t1 = (t8$1) => {
|
|
6885
|
+
const { className: cn_, ...props } = t8$1;
|
|
6886
|
+
return /* @__PURE__ */ jsx("h1", {
|
|
6887
|
+
className: cn("aui-md-h1 mb-3 scroll-m-20 font-extrabold tracking-tight last:mb-0", compact ? "text-base" : "text-lg", cn_),
|
|
6888
|
+
...props
|
|
6889
|
+
});
|
|
6890
|
+
};
|
|
6891
|
+
t2 = (t9$1) => {
|
|
6892
|
+
const { className: cn__0, ...props_0 } = t9$1;
|
|
7058
6893
|
return /* @__PURE__ */ jsx("h2", {
|
|
7059
6894
|
className: cn("aui-md-h2 mt-3 mb-2 scroll-m-20 font-semibold tracking-tight first:mt-0 last:mb-0", compact ? "text-sm" : "text-base", cn__0),
|
|
7060
6895
|
...props_0
|
|
@@ -7160,11 +6995,11 @@ const PillMarkdown = memo((t0) => {
|
|
|
7160
6995
|
a: t5,
|
|
7161
6996
|
ul: t6,
|
|
7162
6997
|
ol: t7,
|
|
7163
|
-
li: _temp$
|
|
6998
|
+
li: _temp$2,
|
|
7164
6999
|
blockquote: t8,
|
|
7165
7000
|
code: t9,
|
|
7166
7001
|
pre: t10,
|
|
7167
|
-
hr: _temp2$
|
|
7002
|
+
hr: _temp2$1,
|
|
7168
7003
|
strong: _temp3$1,
|
|
7169
7004
|
em: _temp4$1
|
|
7170
7005
|
};
|
|
@@ -7218,14 +7053,14 @@ const PillMarkdown = memo((t0) => {
|
|
|
7218
7053
|
return t16;
|
|
7219
7054
|
});
|
|
7220
7055
|
PillMarkdown.displayName = "PillMarkdown";
|
|
7221
|
-
function _temp$
|
|
7056
|
+
function _temp$2(t0) {
|
|
7222
7057
|
const { className: cn__6, ...props_6 } = t0;
|
|
7223
7058
|
return /* @__PURE__ */ jsx("li", {
|
|
7224
7059
|
className: cn("aui-md-li", cn__6),
|
|
7225
7060
|
...props_6
|
|
7226
7061
|
});
|
|
7227
7062
|
}
|
|
7228
|
-
function _temp2$
|
|
7063
|
+
function _temp2$1(t0) {
|
|
7229
7064
|
const { className: cn__10, ...props_10 } = t0;
|
|
7230
7065
|
return /* @__PURE__ */ jsx("hr", {
|
|
7231
7066
|
className: cn("aui-md-hr my-2 border-white/10", cn__10),
|
|
@@ -7343,7 +7178,7 @@ const SummaryBlock = (t0) => {
|
|
|
7343
7178
|
if ($[19] !== actions) {
|
|
7344
7179
|
t12 = actions && actions.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
7345
7180
|
className: "flex flex-wrap gap-2 mt-3 pt-2 border-t border-white/10",
|
|
7346
|
-
children: actions.map(_temp$
|
|
7181
|
+
children: actions.map(_temp$1)
|
|
7347
7182
|
});
|
|
7348
7183
|
$[19] = actions;
|
|
7349
7184
|
$[20] = t12;
|
|
@@ -7374,7 +7209,7 @@ const SummaryBlock = (t0) => {
|
|
|
7374
7209
|
*/
|
|
7375
7210
|
function useLatestSummary() {
|
|
7376
7211
|
const $ = c(2);
|
|
7377
|
-
const messages = useThread(_temp2
|
|
7212
|
+
const messages = useThread(_temp2);
|
|
7378
7213
|
let t0;
|
|
7379
7214
|
if ($[0] !== messages) {
|
|
7380
7215
|
bb0: {
|
|
@@ -7408,7 +7243,7 @@ function _temp4(c$1) {
|
|
|
7408
7243
|
function _temp3(m$1) {
|
|
7409
7244
|
return m$1.role === "assistant";
|
|
7410
7245
|
}
|
|
7411
|
-
function _temp2
|
|
7246
|
+
function _temp2(thread) {
|
|
7412
7247
|
return thread.messages;
|
|
7413
7248
|
}
|
|
7414
7249
|
const WelcomeMessage = (t0) => {
|
|
@@ -7448,7 +7283,7 @@ const WelcomeMessage = (t0) => {
|
|
|
7448
7283
|
} else t4 = $[5];
|
|
7449
7284
|
return t4;
|
|
7450
7285
|
};
|
|
7451
|
-
function _temp$
|
|
7286
|
+
function _temp$1(action, i) {
|
|
7452
7287
|
return /* @__PURE__ */ jsx("button", {
|
|
7453
7288
|
onClick: action.onClick,
|
|
7454
7289
|
className: cn("px-2.5 py-1 rounded-lg text-xs font-medium", "transition-colors duration-200", action.variant === "primary" ? "bg-primary text-primary-foreground hover:bg-primary/90" : "bg-white/10 text-white/80 hover:bg-white/20"),
|
|
@@ -7621,75 +7456,36 @@ const AUTO_COLLAPSE_TIMEOUT = 3e4;
|
|
|
7621
7456
|
*
|
|
7622
7457
|
* Uses assistant-ui primitives for data binding.
|
|
7623
7458
|
*/
|
|
7624
|
-
const AgentPill = (
|
|
7625
|
-
const $ = c(113);
|
|
7626
|
-
const { position: t1, onOpenHistory, showVoiceButton: t2, isVoiceActive: t3, onVoiceToggle, autoCollapse: t4, className } = t0;
|
|
7627
|
-
const position = t1 === void 0 ? "bottom-center" : t1;
|
|
7628
|
-
const showVoiceButton = t2 === void 0 ? false : t2;
|
|
7629
|
-
const isVoiceActive = t3 === void 0 ? false : t3;
|
|
7630
|
-
const autoCollapse = t4 === void 0 ? true : t4;
|
|
7459
|
+
const AgentPill = ({ position = "bottom-center", onOpenHistory, showVoiceButton = false, isVoiceActive = false, onVoiceToggle, autoCollapse = true, className }) => {
|
|
7631
7460
|
const [userMode, setUserMode] = useState("collapsed");
|
|
7632
7461
|
const [hasUnread, setHasUnread] = useState(false);
|
|
7633
|
-
|
|
7634
|
-
|
|
7635
|
-
|
|
7636
|
-
|
|
7637
|
-
y: 0
|
|
7638
|
-
};
|
|
7639
|
-
$[0] = t5;
|
|
7640
|
-
} else t5 = $[0];
|
|
7641
|
-
const [dragPosition, setDragPosition] = useState(t5);
|
|
7462
|
+
const [dragPosition, setDragPosition] = useState({
|
|
7463
|
+
x: 0,
|
|
7464
|
+
y: 0
|
|
7465
|
+
});
|
|
7642
7466
|
const dragControls = useDragControls();
|
|
7643
7467
|
const constraintsRef = useRef(null);
|
|
7644
7468
|
const autoCollapseTimeoutRef = useRef(null);
|
|
7645
7469
|
const lastMessageCountRef = useRef(0);
|
|
7646
|
-
const messages = useThread(
|
|
7647
|
-
|
|
7648
|
-
|
|
7649
|
-
|
|
7650
|
-
|
|
7651
|
-
|
|
7652
|
-
|
|
7653
|
-
|
|
7654
|
-
|
|
7655
|
-
|
|
7656
|
-
}
|
|
7657
|
-
|
|
7658
|
-
|
|
7659
|
-
|
|
7660
|
-
|
|
7661
|
-
|
|
7662
|
-
|
|
7663
|
-
|
|
7664
|
-
|
|
7665
|
-
$[2] = messages?.length;
|
|
7666
|
-
$[3] = userMode;
|
|
7667
|
-
$[4] = t7;
|
|
7668
|
-
} else t7 = $[4];
|
|
7669
|
-
const t8 = messages?.length;
|
|
7670
|
-
let t9;
|
|
7671
|
-
if ($[5] !== t8 || $[6] !== userMode) {
|
|
7672
|
-
t9 = [t8, userMode];
|
|
7673
|
-
$[5] = t8;
|
|
7674
|
-
$[6] = userMode;
|
|
7675
|
-
$[7] = t9;
|
|
7676
|
-
} else t9 = $[7];
|
|
7677
|
-
useEffect(t7, t9);
|
|
7678
|
-
let t10;
|
|
7679
|
-
let t11;
|
|
7680
|
-
if ($[8] !== userMode) {
|
|
7681
|
-
t10 = () => {
|
|
7682
|
-
if (userMode !== "collapsed") setHasUnread(false);
|
|
7683
|
-
};
|
|
7684
|
-
t11 = [userMode];
|
|
7685
|
-
$[8] = userMode;
|
|
7686
|
-
$[9] = t10;
|
|
7687
|
-
$[10] = t11;
|
|
7688
|
-
} else {
|
|
7689
|
-
t10 = $[9];
|
|
7690
|
-
t11 = $[10];
|
|
7691
|
-
}
|
|
7692
|
-
useEffect(t10, t11);
|
|
7470
|
+
const messages = useThread((thread) => thread.messages);
|
|
7471
|
+
const mcpTools = useOptionalMCPTools();
|
|
7472
|
+
const prompts = mcpTools?.prompts ?? [];
|
|
7473
|
+
const getPrompt = mcpTools?.getPrompt;
|
|
7474
|
+
const composerRuntime = useComposerRuntime();
|
|
7475
|
+
const handleDragEnd = useCallback((_, info) => {
|
|
7476
|
+
setDragPosition((prev) => ({
|
|
7477
|
+
x: prev.x + info.offset.x,
|
|
7478
|
+
y: prev.y + info.offset.y
|
|
7479
|
+
}));
|
|
7480
|
+
}, []);
|
|
7481
|
+
useEffect(() => {
|
|
7482
|
+
const currentCount = messages?.length ?? 0;
|
|
7483
|
+
if (userMode === "collapsed" && currentCount > lastMessageCountRef.current) setHasUnread(true);
|
|
7484
|
+
lastMessageCountRef.current = currentCount;
|
|
7485
|
+
}, [messages?.length, userMode]);
|
|
7486
|
+
useEffect(() => {
|
|
7487
|
+
if (userMode !== "collapsed") setHasUnread(false);
|
|
7488
|
+
}, [userMode]);
|
|
7693
7489
|
const voiceMode = useOptionalVoiceModeContext();
|
|
7694
7490
|
const voiceBorderStatus = useVoiceBorderStatus();
|
|
7695
7491
|
const isVoiceModeActive = voiceMode?.isActive || voiceMode?.isConnecting || voiceMode?.isError || isVoiceActive;
|
|
@@ -7702,916 +7498,184 @@ const AgentPill = (t0) => {
|
|
|
7702
7498
|
const voiceSummary = useVoiceSummary();
|
|
7703
7499
|
const summary = !isVoiceModeActive && voiceSummary ? voiceSummary.text : textSummary;
|
|
7704
7500
|
const hasMessages = (messages?.length ?? 0) > 0 || !!voiceSummary;
|
|
7705
|
-
|
|
7706
|
-
|
|
7707
|
-
|
|
7708
|
-
|
|
7709
|
-
|
|
7710
|
-
|
|
7711
|
-
|
|
7712
|
-
|
|
7713
|
-
t13$1 = messages.at(-1);
|
|
7714
|
-
$[11] = messages;
|
|
7715
|
-
$[12] = t13$1;
|
|
7716
|
-
} else t13$1 = $[12];
|
|
7717
|
-
const lastMessage = t13$1;
|
|
7718
|
-
t12 = lastMessage?.role === "assistant" && lastMessage.status?.type !== "complete";
|
|
7719
|
-
}
|
|
7720
|
-
const isRunning = t12;
|
|
7721
|
-
let t13;
|
|
7722
|
-
if ($[13] !== actions) {
|
|
7723
|
-
t13 = actions.filter(_temp2).at(-1);
|
|
7724
|
-
$[13] = actions;
|
|
7725
|
-
$[14] = t13;
|
|
7726
|
-
} else t13 = $[14];
|
|
7727
|
-
const lastCompletedAction = t13;
|
|
7501
|
+
const isRunning = useMemo(() => {
|
|
7502
|
+
if (!messages || messages.length === 0) return false;
|
|
7503
|
+
const lastMessage = messages.at(-1);
|
|
7504
|
+
return lastMessage?.role === "assistant" && lastMessage.status?.type !== "complete";
|
|
7505
|
+
}, [messages]);
|
|
7506
|
+
const lastCompletedAction = useMemo(() => {
|
|
7507
|
+
return actions.filter((a) => a.status === "success" || a.status === "error").at(-1);
|
|
7508
|
+
}, [actions]);
|
|
7728
7509
|
const textBorderStatus = useToolBorderStatus(!!currentAction, lastCompletedAction?.status === "success" ? "success" : lastCompletedAction?.status === "error" ? "error" : null);
|
|
7729
7510
|
const borderStatus = isVoiceModeActive ? voiceBorderStatus : textBorderStatus;
|
|
7730
|
-
|
|
7731
|
-
|
|
7732
|
-
if (
|
|
7733
|
-
|
|
7734
|
-
|
|
7735
|
-
|
|
7736
|
-
if (userMode === "
|
|
7737
|
-
|
|
7738
|
-
|
|
7739
|
-
|
|
7740
|
-
|
|
7741
|
-
|
|
7742
|
-
|
|
7743
|
-
|
|
7744
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
|
|
7748
|
-
|
|
7749
|
-
|
|
7750
|
-
|
|
7751
|
-
|
|
7752
|
-
|
|
7753
|
-
|
|
7754
|
-
|
|
7511
|
+
const mode = useMemo(() => {
|
|
7512
|
+
if (isVoiceModeActive) return "active";
|
|
7513
|
+
if (userMode === "collapsed") return "collapsed";
|
|
7514
|
+
if (userMode === "hovered") return "hovered";
|
|
7515
|
+
if (isRunning) return "active";
|
|
7516
|
+
if (hasMessages) return "expanded";
|
|
7517
|
+
if (userMode === "composing") return "composing";
|
|
7518
|
+
return "collapsed";
|
|
7519
|
+
}, [
|
|
7520
|
+
userMode,
|
|
7521
|
+
isRunning,
|
|
7522
|
+
hasMessages,
|
|
7523
|
+
isVoiceModeActive
|
|
7524
|
+
]);
|
|
7525
|
+
const handleModeChange = useCallback((newMode) => {
|
|
7526
|
+
setUserMode(newMode);
|
|
7527
|
+
}, []);
|
|
7528
|
+
const handleCollapse = useCallback(() => {
|
|
7529
|
+
setUserMode("collapsed");
|
|
7530
|
+
}, []);
|
|
7531
|
+
useEffect(() => {
|
|
7532
|
+
if (mode === "collapsed" || mode === "hovered") setDragPosition({
|
|
7533
|
+
x: 0,
|
|
7534
|
+
y: 0
|
|
7535
|
+
});
|
|
7536
|
+
}, [mode]);
|
|
7537
|
+
useEffect(() => {
|
|
7538
|
+
if (!autoCollapse) return;
|
|
7539
|
+
if (autoCollapseTimeoutRef.current) {
|
|
7540
|
+
clearTimeout(autoCollapseTimeoutRef.current);
|
|
7541
|
+
autoCollapseTimeoutRef.current = null;
|
|
7755
7542
|
}
|
|
7756
|
-
|
|
7757
|
-
}
|
|
7758
|
-
const mode = t14;
|
|
7759
|
-
let t15;
|
|
7760
|
-
if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
|
|
7761
|
-
t15 = (newMode) => {
|
|
7762
|
-
setUserMode(newMode);
|
|
7763
|
-
};
|
|
7764
|
-
$[15] = t15;
|
|
7765
|
-
} else t15 = $[15];
|
|
7766
|
-
const handleModeChange = t15;
|
|
7767
|
-
let t16;
|
|
7768
|
-
if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
|
|
7769
|
-
t16 = () => {
|
|
7543
|
+
if (mode === "composing" || mode === "expanded" && !isRunning) autoCollapseTimeoutRef.current = setTimeout(() => {
|
|
7770
7544
|
setUserMode("collapsed");
|
|
7545
|
+
}, AUTO_COLLAPSE_TIMEOUT);
|
|
7546
|
+
return () => {
|
|
7547
|
+
if (autoCollapseTimeoutRef.current) clearTimeout(autoCollapseTimeoutRef.current);
|
|
7771
7548
|
};
|
|
7772
|
-
|
|
7773
|
-
|
|
7774
|
-
|
|
7775
|
-
|
|
7776
|
-
|
|
7777
|
-
|
|
7778
|
-
|
|
7779
|
-
|
|
7780
|
-
|
|
7781
|
-
|
|
7782
|
-
|
|
7783
|
-
|
|
7784
|
-
|
|
7785
|
-
|
|
7786
|
-
|
|
7787
|
-
|
|
7788
|
-
|
|
7789
|
-
|
|
7790
|
-
|
|
7791
|
-
|
|
7792
|
-
|
|
7793
|
-
|
|
7794
|
-
|
|
7795
|
-
if ($[20] !== autoCollapse || $[21] !== isRunning || $[22] !== mode) {
|
|
7796
|
-
t19 = () => {
|
|
7797
|
-
if (!autoCollapse) return;
|
|
7798
|
-
if (autoCollapseTimeoutRef.current) {
|
|
7799
|
-
clearTimeout(autoCollapseTimeoutRef.current);
|
|
7800
|
-
autoCollapseTimeoutRef.current = null;
|
|
7549
|
+
}, [
|
|
7550
|
+
mode,
|
|
7551
|
+
isRunning,
|
|
7552
|
+
autoCollapse
|
|
7553
|
+
]);
|
|
7554
|
+
const handleVoiceToggle = useCallback(() => {
|
|
7555
|
+
if (voiceMode) if (voiceMode.isActive || voiceMode.isConnecting) voiceMode.stopSession();
|
|
7556
|
+
else voiceMode.startSession();
|
|
7557
|
+
onVoiceToggle?.();
|
|
7558
|
+
}, [voiceMode, onVoiceToggle]);
|
|
7559
|
+
const handlePromptSelect = useCallback(async (prompt) => {
|
|
7560
|
+
setUserMode("composing");
|
|
7561
|
+
if (!getPrompt) return;
|
|
7562
|
+
try {
|
|
7563
|
+
const userMessage = (await getPrompt(prompt.name)).messages?.find((m$1) => m$1.role === "user");
|
|
7564
|
+
if (userMessage) {
|
|
7565
|
+
let textContent = "";
|
|
7566
|
+
if (typeof userMessage.content === "string") textContent = userMessage.content;
|
|
7567
|
+
else if (userMessage.content.type === "text") textContent = userMessage.content.text;
|
|
7568
|
+
if (textContent) {
|
|
7569
|
+
composerRuntime.setText(textContent);
|
|
7570
|
+
composerRuntime.send();
|
|
7571
|
+
}
|
|
7801
7572
|
}
|
|
7802
|
-
|
|
7803
|
-
|
|
7804
|
-
|
|
7805
|
-
|
|
7806
|
-
if (autoCollapseTimeoutRef.current) clearTimeout(autoCollapseTimeoutRef.current);
|
|
7807
|
-
};
|
|
7808
|
-
};
|
|
7809
|
-
t20 = [
|
|
7810
|
-
mode,
|
|
7811
|
-
isRunning,
|
|
7812
|
-
autoCollapse
|
|
7813
|
-
];
|
|
7814
|
-
$[20] = autoCollapse;
|
|
7815
|
-
$[21] = isRunning;
|
|
7816
|
-
$[22] = mode;
|
|
7817
|
-
$[23] = t19;
|
|
7818
|
-
$[24] = t20;
|
|
7819
|
-
} else {
|
|
7820
|
-
t19 = $[23];
|
|
7821
|
-
t20 = $[24];
|
|
7822
|
-
}
|
|
7823
|
-
useEffect(t19, t20);
|
|
7824
|
-
let t21;
|
|
7825
|
-
if ($[25] !== onVoiceToggle || $[26] !== voiceMode) {
|
|
7826
|
-
t21 = () => {
|
|
7827
|
-
if (voiceMode) if (voiceMode.isActive || voiceMode.isConnecting) voiceMode.stopSession();
|
|
7828
|
-
else voiceMode.startSession();
|
|
7829
|
-
onVoiceToggle?.();
|
|
7830
|
-
};
|
|
7831
|
-
$[25] = onVoiceToggle;
|
|
7832
|
-
$[26] = voiceMode;
|
|
7833
|
-
$[27] = t21;
|
|
7834
|
-
} else t21 = $[27];
|
|
7835
|
-
const handleVoiceToggle = t21;
|
|
7573
|
+
} catch (err) {
|
|
7574
|
+
console.error("[AgentPill] Failed to get prompt:", err);
|
|
7575
|
+
}
|
|
7576
|
+
}, [getPrompt, composerRuntime]);
|
|
7836
7577
|
const borderRadius = mode === "collapsed" || mode === "hovered" ? "9999px" : "20px";
|
|
7837
7578
|
const canCollapse = mode === "composing" || mode === "active" || mode === "expanded";
|
|
7838
|
-
|
|
7839
|
-
|
|
7840
|
-
|
|
7841
|
-
|
|
7842
|
-
|
|
7843
|
-
|
|
7844
|
-
$[28] = t22;
|
|
7845
|
-
} else t22 = $[28];
|
|
7846
|
-
const t23 = position === "bottom-center" && "bottom-4 left-1/2 -translate-x-1/2";
|
|
7847
|
-
const t24 = position === "bottom-right" && "bottom-4 right-4";
|
|
7848
|
-
let t25;
|
|
7849
|
-
if ($[29] !== className || $[30] !== t23 || $[31] !== t24) {
|
|
7850
|
-
t25 = cn("fixed z-50", t23, t24, className);
|
|
7851
|
-
$[29] = className;
|
|
7852
|
-
$[30] = t23;
|
|
7853
|
-
$[31] = t24;
|
|
7854
|
-
$[32] = t25;
|
|
7855
|
-
} else t25 = $[32];
|
|
7856
|
-
let t26;
|
|
7857
|
-
if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
|
|
7858
|
-
t26 = { scale: 1.02 };
|
|
7859
|
-
$[33] = t26;
|
|
7860
|
-
} else t26 = $[33];
|
|
7861
|
-
let t27;
|
|
7862
|
-
if ($[34] !== dragPosition.x || $[35] !== dragPosition.y) {
|
|
7863
|
-
t27 = {
|
|
7864
|
-
x: dragPosition.x,
|
|
7865
|
-
y: dragPosition.y
|
|
7866
|
-
};
|
|
7867
|
-
$[34] = dragPosition.x;
|
|
7868
|
-
$[35] = dragPosition.y;
|
|
7869
|
-
$[36] = t27;
|
|
7870
|
-
} else t27 = $[36];
|
|
7871
|
-
let t28;
|
|
7872
|
-
if ($[37] === Symbol.for("react.memo_cache_sentinel")) {
|
|
7873
|
-
t28 = {
|
|
7874
|
-
type: "spring",
|
|
7875
|
-
stiffness: 400,
|
|
7876
|
-
damping: 30
|
|
7877
|
-
};
|
|
7878
|
-
$[37] = t28;
|
|
7879
|
-
} else t28 = $[37];
|
|
7880
|
-
let t29;
|
|
7881
|
-
if ($[38] !== hasUnread || $[39] !== mode) {
|
|
7882
|
-
t29 = mode === "collapsed" && hasUnread && /* @__PURE__ */ jsx(motion.div, {
|
|
7883
|
-
initial: { scale: 0 },
|
|
7884
|
-
animate: { scale: 1 },
|
|
7885
|
-
className: "absolute -top-1 -right-1 w-2 h-2 bg-blue-500 rounded-full"
|
|
7886
|
-
});
|
|
7887
|
-
$[38] = hasUnread;
|
|
7888
|
-
$[39] = mode;
|
|
7889
|
-
$[40] = t29;
|
|
7890
|
-
} else t29 = $[40];
|
|
7891
|
-
let t30;
|
|
7892
|
-
if ($[41] !== canCollapse || $[42] !== dragControls || $[43] !== handleVoiceToggle || $[44] !== isVoiceModeActive || $[45] !== onOpenHistory) {
|
|
7893
|
-
t30 = (isVoiceModeActive || canCollapse) && /* @__PURE__ */ jsxs("div", {
|
|
7894
|
-
className: "flex items-center justify-between mb-1 -mt-1",
|
|
7895
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
7896
|
-
className: "flex items-center gap-1 text-white/30 cursor-grab active:cursor-grabbing",
|
|
7897
|
-
onPointerDown: (e) => dragControls.start(e),
|
|
7898
|
-
children: /* @__PURE__ */ jsx(GripHorizontal, { className: "h-3 w-3" })
|
|
7899
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
7900
|
-
className: "flex items-center gap-1",
|
|
7901
|
-
children: [onOpenHistory && /* @__PURE__ */ jsx("button", {
|
|
7902
|
-
type: "button",
|
|
7903
|
-
onClick: onOpenHistory,
|
|
7904
|
-
className: cn("p-1 rounded-full", "hover:bg-white/10", "text-white/40 hover:text-white/70", "transition-colors duration-150"),
|
|
7905
|
-
"aria-label": "View history",
|
|
7906
|
-
children: /* @__PURE__ */ jsx(History, { className: "h-3.5 w-3.5" })
|
|
7907
|
-
}), /* @__PURE__ */ jsx("button", {
|
|
7908
|
-
type: "button",
|
|
7909
|
-
onClick: isVoiceModeActive ? handleVoiceToggle : handleCollapse,
|
|
7910
|
-
className: cn("p-1 rounded-full", "hover:bg-white/10", "text-white/40 hover:text-white/70", "transition-colors duration-150"),
|
|
7911
|
-
"aria-label": isVoiceModeActive ? "End voice session" : "Close",
|
|
7912
|
-
children: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" })
|
|
7913
|
-
})]
|
|
7914
|
-
})]
|
|
7915
|
-
});
|
|
7916
|
-
$[41] = canCollapse;
|
|
7917
|
-
$[42] = dragControls;
|
|
7918
|
-
$[43] = handleVoiceToggle;
|
|
7919
|
-
$[44] = isVoiceModeActive;
|
|
7920
|
-
$[45] = onOpenHistory;
|
|
7921
|
-
$[46] = t30;
|
|
7922
|
-
} else t30 = $[46];
|
|
7923
|
-
let t31;
|
|
7924
|
-
if ($[47] !== handleVoiceToggle || $[48] !== isVoiceModeActive) {
|
|
7925
|
-
t31 = isVoiceModeActive && /* @__PURE__ */ jsx(PillVoice, { onEnd: handleVoiceToggle }, "voice-mode");
|
|
7926
|
-
$[47] = handleVoiceToggle;
|
|
7927
|
-
$[48] = isVoiceModeActive;
|
|
7928
|
-
$[49] = t31;
|
|
7929
|
-
} else t31 = $[49];
|
|
7930
|
-
let t32;
|
|
7931
|
-
if ($[50] !== t31) {
|
|
7932
|
-
t32 = /* @__PURE__ */ jsx(AnimatePresence, {
|
|
7933
|
-
mode: "wait",
|
|
7934
|
-
children: t31
|
|
7935
|
-
});
|
|
7936
|
-
$[50] = t31;
|
|
7937
|
-
$[51] = t32;
|
|
7938
|
-
} else t32 = $[51];
|
|
7939
|
-
let t33;
|
|
7940
|
-
if ($[52] !== hasMessages || $[53] !== isVoiceModeActive || $[54] !== mode) {
|
|
7941
|
-
t33 = !isVoiceModeActive && mode === "composing" && !hasMessages && /* @__PURE__ */ jsx(WelcomeMessage, {});
|
|
7942
|
-
$[52] = hasMessages;
|
|
7943
|
-
$[53] = isVoiceModeActive;
|
|
7944
|
-
$[54] = mode;
|
|
7945
|
-
$[55] = t33;
|
|
7946
|
-
} else t33 = $[55];
|
|
7947
|
-
let t34;
|
|
7948
|
-
if ($[56] !== currentAction || $[57] !== isVoiceModeActive || $[58] !== mode || $[59] !== recentActions) {
|
|
7949
|
-
t34 = !isVoiceModeActive && mode === "active" && /* @__PURE__ */ jsx(CurrentActivity, {
|
|
7950
|
-
currentAction,
|
|
7951
|
-
recentActions,
|
|
7952
|
-
showRecent: false
|
|
7953
|
-
});
|
|
7954
|
-
$[56] = currentAction;
|
|
7955
|
-
$[57] = isVoiceModeActive;
|
|
7956
|
-
$[58] = mode;
|
|
7957
|
-
$[59] = recentActions;
|
|
7958
|
-
$[60] = t34;
|
|
7959
|
-
} else t34 = $[60];
|
|
7960
|
-
let t35;
|
|
7961
|
-
if ($[61] !== isVoiceModeActive || $[62] !== mode) {
|
|
7962
|
-
t35 = !isVoiceModeActive && (mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillTodoList, {});
|
|
7963
|
-
$[61] = isVoiceModeActive;
|
|
7964
|
-
$[62] = mode;
|
|
7965
|
-
$[63] = t35;
|
|
7966
|
-
} else t35 = $[63];
|
|
7967
|
-
let t36;
|
|
7968
|
-
if ($[64] !== isVoiceModeActive || $[65] !== mode) {
|
|
7969
|
-
t36 = !isVoiceModeActive && (mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillMessageContent, {});
|
|
7970
|
-
$[64] = isVoiceModeActive;
|
|
7971
|
-
$[65] = mode;
|
|
7972
|
-
$[66] = t36;
|
|
7973
|
-
} else t36 = $[66];
|
|
7974
|
-
let t37;
|
|
7975
|
-
if ($[67] !== isRunning || $[68] !== isVoiceModeActive || $[69] !== lastCompletedAction?.error || $[70] !== mode || $[71] !== summary) {
|
|
7976
|
-
t37 = !isVoiceModeActive && mode === "expanded" && !isRunning && summary && /* @__PURE__ */ jsx(SummaryBlock, {
|
|
7977
|
-
summary,
|
|
7978
|
-
isSuccess: !lastCompletedAction?.error
|
|
7979
|
-
});
|
|
7980
|
-
$[67] = isRunning;
|
|
7981
|
-
$[68] = isVoiceModeActive;
|
|
7982
|
-
$[69] = lastCompletedAction?.error;
|
|
7983
|
-
$[70] = mode;
|
|
7984
|
-
$[71] = summary;
|
|
7985
|
-
$[72] = t37;
|
|
7986
|
-
} else t37 = $[72];
|
|
7987
|
-
let t38;
|
|
7988
|
-
if ($[73] !== isRunning || $[74] !== isVoiceModeActive || $[75] !== mode || $[76] !== summary) {
|
|
7989
|
-
t38 = !isVoiceModeActive && mode === "expanded" && !isRunning && !summary && /* @__PURE__ */ jsx(IdleIndicator, {});
|
|
7990
|
-
$[73] = isRunning;
|
|
7991
|
-
$[74] = isVoiceModeActive;
|
|
7992
|
-
$[75] = mode;
|
|
7993
|
-
$[76] = summary;
|
|
7994
|
-
$[77] = t38;
|
|
7995
|
-
} else t38 = $[77];
|
|
7996
|
-
let t39;
|
|
7997
|
-
if ($[78] !== actions || $[79] !== isVoiceModeActive || $[80] !== mode) {
|
|
7998
|
-
t39 = (mode === "active" || mode === "expanded" || isVoiceModeActive) && actions.length > 0 && /* @__PURE__ */ jsx(ActionList, {
|
|
7999
|
-
actions,
|
|
8000
|
-
defaultCollapsed: mode === "active"
|
|
8001
|
-
});
|
|
8002
|
-
$[78] = actions;
|
|
8003
|
-
$[79] = isVoiceModeActive;
|
|
8004
|
-
$[80] = mode;
|
|
8005
|
-
$[81] = t39;
|
|
8006
|
-
} else t39 = $[81];
|
|
8007
|
-
let t40;
|
|
8008
|
-
if ($[82] !== handleVoiceToggle || $[83] !== isVoiceActive || $[84] !== isVoiceModeActive || $[85] !== mode || $[86] !== showVoiceButton || $[87] !== voiceMode?.isSupported) {
|
|
8009
|
-
t40 = !isVoiceModeActive && (mode === "composing" || mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillComposer, {
|
|
8010
|
-
showVoiceButton: showVoiceButton || !!voiceMode?.isSupported,
|
|
8011
|
-
isVoiceActive,
|
|
8012
|
-
onVoiceToggle: handleVoiceToggle
|
|
8013
|
-
});
|
|
8014
|
-
$[82] = handleVoiceToggle;
|
|
8015
|
-
$[83] = isVoiceActive;
|
|
8016
|
-
$[84] = isVoiceModeActive;
|
|
8017
|
-
$[85] = mode;
|
|
8018
|
-
$[86] = showVoiceButton;
|
|
8019
|
-
$[87] = voiceMode?.isSupported;
|
|
8020
|
-
$[88] = t40;
|
|
8021
|
-
} else t40 = $[88];
|
|
8022
|
-
let t41;
|
|
8023
|
-
if ($[89] !== mode || $[90] !== t30 || $[91] !== t32 || $[92] !== t33 || $[93] !== t34 || $[94] !== t35 || $[95] !== t36 || $[96] !== t37 || $[97] !== t38 || $[98] !== t39 || $[99] !== t40) {
|
|
8024
|
-
t41 = /* @__PURE__ */ jsxs(PillContainer, {
|
|
8025
|
-
mode,
|
|
8026
|
-
onModeChange: handleModeChange,
|
|
8027
|
-
children: [
|
|
8028
|
-
t30,
|
|
8029
|
-
t32,
|
|
8030
|
-
t33,
|
|
8031
|
-
t34,
|
|
8032
|
-
t35,
|
|
8033
|
-
t36,
|
|
8034
|
-
t37,
|
|
8035
|
-
t38,
|
|
8036
|
-
t39,
|
|
8037
|
-
t40
|
|
8038
|
-
]
|
|
8039
|
-
});
|
|
8040
|
-
$[89] = mode;
|
|
8041
|
-
$[90] = t30;
|
|
8042
|
-
$[91] = t32;
|
|
8043
|
-
$[92] = t33;
|
|
8044
|
-
$[93] = t34;
|
|
8045
|
-
$[94] = t35;
|
|
8046
|
-
$[95] = t36;
|
|
8047
|
-
$[96] = t37;
|
|
8048
|
-
$[97] = t38;
|
|
8049
|
-
$[98] = t39;
|
|
8050
|
-
$[99] = t40;
|
|
8051
|
-
$[100] = t41;
|
|
8052
|
-
} else t41 = $[100];
|
|
8053
|
-
let t42;
|
|
8054
|
-
if ($[101] !== borderRadius || $[102] !== borderStatus || $[103] !== t41) {
|
|
8055
|
-
t42 = /* @__PURE__ */ jsx(ToolStatusBorder, {
|
|
8056
|
-
status: borderStatus,
|
|
8057
|
-
borderRadius,
|
|
8058
|
-
children: t41
|
|
8059
|
-
});
|
|
8060
|
-
$[101] = borderRadius;
|
|
8061
|
-
$[102] = borderStatus;
|
|
8062
|
-
$[103] = t41;
|
|
8063
|
-
$[104] = t42;
|
|
8064
|
-
} else t42 = $[104];
|
|
8065
|
-
let t43;
|
|
8066
|
-
if ($[105] !== dragControls || $[106] !== t27 || $[107] !== t29 || $[108] !== t42) {
|
|
8067
|
-
t43 = /* @__PURE__ */ jsxs(motion.div, {
|
|
7579
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
|
|
7580
|
+
ref: constraintsRef,
|
|
7581
|
+
className: "fixed inset-0 pointer-events-none"
|
|
7582
|
+
}), /* @__PURE__ */ jsx(ThreadPrimitive.Root, {
|
|
7583
|
+
className: cn("fixed z-50", position === "bottom-center" && "bottom-4 left-1/2 -translate-x-1/2", position === "bottom-right" && "bottom-4 right-4", className),
|
|
7584
|
+
children: /* @__PURE__ */ jsxs(motion.div, {
|
|
8068
7585
|
drag: true,
|
|
8069
7586
|
dragControls,
|
|
8070
7587
|
dragConstraints: constraintsRef,
|
|
8071
7588
|
dragElastic: .1,
|
|
8072
7589
|
dragMomentum: false,
|
|
8073
|
-
whileDrag:
|
|
7590
|
+
whileDrag: { scale: 1.02 },
|
|
8074
7591
|
onDragEnd: handleDragEnd,
|
|
8075
7592
|
initial: false,
|
|
8076
|
-
animate:
|
|
8077
|
-
|
|
8078
|
-
|
|
8079
|
-
children: [t29, t42]
|
|
8080
|
-
});
|
|
8081
|
-
$[105] = dragControls;
|
|
8082
|
-
$[106] = t27;
|
|
8083
|
-
$[107] = t29;
|
|
8084
|
-
$[108] = t42;
|
|
8085
|
-
$[109] = t43;
|
|
8086
|
-
} else t43 = $[109];
|
|
8087
|
-
let t44;
|
|
8088
|
-
if ($[110] !== t25 || $[111] !== t43) {
|
|
8089
|
-
t44 = /* @__PURE__ */ jsxs(Fragment, { children: [t22, /* @__PURE__ */ jsx(ThreadPrimitive.Root, {
|
|
8090
|
-
className: t25,
|
|
8091
|
-
children: t43
|
|
8092
|
-
})] });
|
|
8093
|
-
$[110] = t25;
|
|
8094
|
-
$[111] = t43;
|
|
8095
|
-
$[112] = t44;
|
|
8096
|
-
} else t44 = $[112];
|
|
8097
|
-
return t44;
|
|
8098
|
-
};
|
|
8099
|
-
function _temp$1(thread) {
|
|
8100
|
-
return thread.messages;
|
|
8101
|
-
}
|
|
8102
|
-
function _temp2(a) {
|
|
8103
|
-
return a.status === "success" || a.status === "error";
|
|
8104
|
-
}
|
|
8105
|
-
|
|
8106
|
-
//#endregion
|
|
8107
|
-
//#region src/components/planning/PlanToolRegistry.tsx
|
|
8108
|
-
/**
|
|
8109
|
-
* Plan Tool Registry Component
|
|
8110
|
-
*
|
|
8111
|
-
* Registers the planning tools (updateTodosTool, askForPlanApprovalTool) with
|
|
8112
|
-
* the assistant-ui runtime. These tools execute client-side using React state
|
|
8113
|
-
* managed by PlanProvider.
|
|
8114
|
-
*
|
|
8115
|
-
* Usage:
|
|
8116
|
-
* <PlanToolRegistry />
|
|
8117
|
-
*
|
|
8118
|
-
* This component should be placed inside both PlanProvider and AssistantRuntimeProvider.
|
|
8119
|
-
*/
|
|
8120
|
-
/**
|
|
8121
|
-
* Registers updateTodosTool with the runtime
|
|
8122
|
-
*/
|
|
8123
|
-
const UpdateTodosToolBridge = () => {
|
|
8124
|
-
const $ = c(5);
|
|
8125
|
-
const plan = useOptionalPlan();
|
|
8126
|
-
let t0;
|
|
8127
|
-
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
8128
|
-
t0 = {
|
|
8129
|
-
type: "array",
|
|
8130
|
-
items: { type: "string" },
|
|
8131
|
-
description: "Array of new todo items to add"
|
|
8132
|
-
};
|
|
8133
|
-
$[0] = t0;
|
|
8134
|
-
} else t0 = $[0];
|
|
8135
|
-
let t1;
|
|
8136
|
-
if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
|
|
8137
|
-
t1 = {
|
|
8138
|
-
type: "array",
|
|
8139
|
-
items: { type: "number" },
|
|
8140
|
-
description: "Array of indices of todos to mark as in progress"
|
|
8141
|
-
};
|
|
8142
|
-
$[1] = t1;
|
|
8143
|
-
} else t1 = $[1];
|
|
8144
|
-
let t2;
|
|
8145
|
-
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
8146
|
-
t2 = {
|
|
8147
|
-
type: "object",
|
|
8148
|
-
properties: {
|
|
8149
|
-
new: t0,
|
|
8150
|
-
inProgress: t1,
|
|
8151
|
-
done: {
|
|
8152
|
-
type: "array",
|
|
8153
|
-
items: { type: "number" },
|
|
8154
|
-
description: "Array of indices of todos to mark as done"
|
|
8155
|
-
},
|
|
8156
|
-
clearPreviouslyDone: {
|
|
8157
|
-
type: "boolean",
|
|
8158
|
-
default: false,
|
|
8159
|
-
description: "Whether to remove all previously completed todos from the list"
|
|
8160
|
-
},
|
|
8161
|
-
insertAt: {
|
|
8162
|
-
type: "number",
|
|
8163
|
-
description: "Index at which to insert new items (0 for beginning, defaults to end of list)"
|
|
8164
|
-
}
|
|
7593
|
+
animate: {
|
|
7594
|
+
x: dragPosition.x,
|
|
7595
|
+
y: dragPosition.y
|
|
8165
7596
|
},
|
|
8166
|
-
|
|
8167
|
-
"
|
|
8168
|
-
|
|
8169
|
-
|
|
8170
|
-
|
|
8171
|
-
|
|
8172
|
-
|
|
8173
|
-
|
|
8174
|
-
|
|
8175
|
-
|
|
8176
|
-
|
|
8177
|
-
|
|
8178
|
-
|
|
8179
|
-
|
|
8180
|
-
|
|
8181
|
-
|
|
8182
|
-
|
|
8183
|
-
|
|
8184
|
-
|
|
8185
|
-
|
|
8186
|
-
|
|
8187
|
-
|
|
8188
|
-
insertAt: args.insertAt
|
|
8189
|
-
};
|
|
8190
|
-
return plan.updateTodos(input);
|
|
8191
|
-
}
|
|
8192
|
-
};
|
|
8193
|
-
$[3] = plan;
|
|
8194
|
-
$[4] = t3;
|
|
8195
|
-
} else t3 = $[4];
|
|
8196
|
-
useAssistantTool(t3);
|
|
8197
|
-
return null;
|
|
8198
|
-
};
|
|
8199
|
-
/**
|
|
8200
|
-
* Registers askForPlanApprovalTool with the runtime
|
|
8201
|
-
*/
|
|
8202
|
-
const AskForPlanApprovalToolBridge = () => {
|
|
8203
|
-
const $ = c(3);
|
|
8204
|
-
const plan = useOptionalPlan();
|
|
8205
|
-
let t0;
|
|
8206
|
-
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
8207
|
-
t0 = {
|
|
8208
|
-
type: "object",
|
|
8209
|
-
properties: { explainer: {
|
|
8210
|
-
type: "string",
|
|
8211
|
-
description: "One-line explanation of the plan."
|
|
8212
|
-
} },
|
|
8213
|
-
required: ["explainer"]
|
|
8214
|
-
};
|
|
8215
|
-
$[0] = t0;
|
|
8216
|
-
} else t0 = $[0];
|
|
8217
|
-
let t1;
|
|
8218
|
-
if ($[1] !== plan) {
|
|
8219
|
-
t1 = {
|
|
8220
|
-
toolName: "askForPlanApprovalTool",
|
|
8221
|
-
description: "Request user approval before executing planned actions. Presents pending tasks for review, allowing the user to approve, reject, or modify the plan. Returns the updated task list after user review, which may include modifications made by the user.",
|
|
8222
|
-
parameters: t0,
|
|
8223
|
-
execute: async (args) => {
|
|
8224
|
-
if (!plan) throw new Error("PlanProvider not available");
|
|
8225
|
-
const explainer = args.explainer;
|
|
8226
|
-
return await plan.requestPlanApproval(explainer);
|
|
8227
|
-
}
|
|
8228
|
-
};
|
|
8229
|
-
$[1] = plan;
|
|
8230
|
-
$[2] = t1;
|
|
8231
|
-
} else t1 = $[2];
|
|
8232
|
-
useAssistantTool(t1);
|
|
8233
|
-
return null;
|
|
8234
|
-
};
|
|
8235
|
-
/**
|
|
8236
|
-
* Tool registry that registers all planning tools with assistant-ui.
|
|
8237
|
-
* These tools execute client-side using React state from PlanProvider.
|
|
8238
|
-
*/
|
|
8239
|
-
const PlanToolRegistry = () => {
|
|
8240
|
-
const $ = c(1);
|
|
8241
|
-
if (!useOptionalPlan()) return null;
|
|
8242
|
-
let t0;
|
|
8243
|
-
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
8244
|
-
t0 = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(UpdateTodosToolBridge, {}), /* @__PURE__ */ jsx(AskForPlanApprovalToolBridge, {})] });
|
|
8245
|
-
$[0] = t0;
|
|
8246
|
-
} else t0 = $[0];
|
|
8247
|
-
return t0;
|
|
8248
|
-
};
|
|
8249
|
-
|
|
8250
|
-
//#endregion
|
|
8251
|
-
//#region src/components/planning/UpdateTodosUI.tsx
|
|
8252
|
-
/**
|
|
8253
|
-
* UpdateTodosUI Component
|
|
8254
|
-
*
|
|
8255
|
-
* UI component for displaying the result of updateTodosTool calls.
|
|
8256
|
-
* Shows a collapsible list of todos with status indicators.
|
|
8257
|
-
* Designed for the pill's dark theme.
|
|
8258
|
-
*/
|
|
8259
|
-
const statusConfig$1 = {
|
|
8260
|
-
new: {
|
|
8261
|
-
icon: Circle,
|
|
8262
|
-
color: "text-purple-400",
|
|
8263
|
-
bgColor: "bg-purple-400"
|
|
8264
|
-
},
|
|
8265
|
-
pending: {
|
|
8266
|
-
icon: Circle,
|
|
8267
|
-
color: "text-white/50",
|
|
8268
|
-
bgColor: "bg-white/50"
|
|
8269
|
-
},
|
|
8270
|
-
"in-progress": {
|
|
8271
|
-
icon: Clock,
|
|
8272
|
-
color: "text-blue-400",
|
|
8273
|
-
bgColor: "bg-blue-400"
|
|
8274
|
-
},
|
|
8275
|
-
done: {
|
|
8276
|
-
icon: CheckCircle2,
|
|
8277
|
-
color: "text-green-400",
|
|
8278
|
-
bgColor: "bg-green-400"
|
|
8279
|
-
}
|
|
8280
|
-
};
|
|
8281
|
-
const UpdateTodosUI = makeAssistantToolUI({
|
|
8282
|
-
toolName: "updateTodosTool",
|
|
8283
|
-
render: function Render({ args, result }) {
|
|
8284
|
-
const [isManualOpen, setIsOpen] = useState(void 0);
|
|
8285
|
-
const plan = useOptionalPlan();
|
|
8286
|
-
const emphasisedIndexes = useMemo(() => {
|
|
8287
|
-
const targets = /* @__PURE__ */ new Set();
|
|
8288
|
-
(args?.inProgress ?? []).forEach((index) => targets.add(index));
|
|
8289
|
-
(args?.done ?? []).forEach((index) => targets.add(index));
|
|
8290
|
-
return targets;
|
|
8291
|
-
}, [args]);
|
|
8292
|
-
if (plan?.isPlanPending) return null;
|
|
8293
|
-
if (!plan?.isPlanApproved) return null;
|
|
8294
|
-
const todos = result?.todos ?? [];
|
|
8295
|
-
const isOpen = isManualOpen ?? false;
|
|
8296
|
-
if (!result) return /* @__PURE__ */ jsxs("div", {
|
|
8297
|
-
className: "my-2 flex w-full animate-pulse items-center gap-2 text-sm text-white/60",
|
|
8298
|
-
children: [/* @__PURE__ */ jsx(Clock, { className: "h-3.5 w-3.5 animate-spin" }), "Updating tasks..."]
|
|
8299
|
-
});
|
|
8300
|
-
if (todos.length === 0) return null;
|
|
8301
|
-
const doneCount = todos.filter((t) => t.status === "done").length;
|
|
8302
|
-
const inProgressCount = todos.filter((t) => t.status === "in-progress").length;
|
|
8303
|
-
const pendingCount = todos.filter((t) => t.status === "pending" || t.status === "new").length;
|
|
8304
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
8305
|
-
className: "my-2",
|
|
8306
|
-
children: [/* @__PURE__ */ jsxs("button", {
|
|
8307
|
-
type: "button",
|
|
8308
|
-
onClick: () => setIsOpen((open) => !open),
|
|
8309
|
-
className: cn("flex w-full items-center gap-2", "rounded-lg px-3 py-2", "bg-white/5 hover:bg-white/10", "transition-colors duration-200"),
|
|
8310
|
-
"aria-expanded": isOpen,
|
|
8311
|
-
children: [
|
|
8312
|
-
/* @__PURE__ */ jsx(ChevronDown, { className: cn("h-3.5 w-3.5 text-white/50 transition-transform", !isOpen && "-rotate-90") }),
|
|
8313
|
-
/* @__PURE__ */ jsx("span", {
|
|
8314
|
-
className: "text-xs font-medium text-white/80",
|
|
8315
|
-
children: "Tasks"
|
|
8316
|
-
}),
|
|
8317
|
-
/* @__PURE__ */ jsxs("div", {
|
|
8318
|
-
className: "flex items-center gap-2 ml-auto text-xs text-white/50",
|
|
7597
|
+
transition: {
|
|
7598
|
+
type: "spring",
|
|
7599
|
+
stiffness: 400,
|
|
7600
|
+
damping: 30
|
|
7601
|
+
},
|
|
7602
|
+
className: "cursor-grab active:cursor-grabbing relative",
|
|
7603
|
+
children: [
|
|
7604
|
+
mode === "collapsed" && prompts.length > 0 && /* @__PURE__ */ jsx(PromptBadge, {
|
|
7605
|
+
prompts,
|
|
7606
|
+
onSelect: handlePromptSelect
|
|
7607
|
+
}),
|
|
7608
|
+
mode === "collapsed" && hasUnread && /* @__PURE__ */ jsx(motion.div, {
|
|
7609
|
+
initial: { scale: 0 },
|
|
7610
|
+
animate: { scale: 1 },
|
|
7611
|
+
className: "absolute -top-1 -right-1 w-2 h-2 bg-blue-500 rounded-full z-10"
|
|
7612
|
+
}),
|
|
7613
|
+
/* @__PURE__ */ jsx(ToolStatusBorder, {
|
|
7614
|
+
status: borderStatus,
|
|
7615
|
+
borderRadius,
|
|
7616
|
+
children: /* @__PURE__ */ jsxs(PillContainer, {
|
|
7617
|
+
mode,
|
|
7618
|
+
onModeChange: handleModeChange,
|
|
8319
7619
|
children: [
|
|
8320
|
-
|
|
8321
|
-
className: "flex items-center
|
|
8322
|
-
children: [/* @__PURE__ */ jsx("
|
|
7620
|
+
(isVoiceModeActive || canCollapse) && /* @__PURE__ */ jsxs("div", {
|
|
7621
|
+
className: "flex items-center justify-between mb-1 -mt-1",
|
|
7622
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
7623
|
+
className: "flex items-center gap-1 text-white/30 cursor-grab active:cursor-grabbing",
|
|
7624
|
+
onPointerDown: (e) => dragControls.start(e),
|
|
7625
|
+
children: /* @__PURE__ */ jsx(GripHorizontal, { className: "h-3 w-3" })
|
|
7626
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
7627
|
+
className: "flex items-center gap-1",
|
|
7628
|
+
children: [onOpenHistory && /* @__PURE__ */ jsx("button", {
|
|
7629
|
+
type: "button",
|
|
7630
|
+
onClick: onOpenHistory,
|
|
7631
|
+
className: cn("p-1 rounded-full", "hover:bg-white/10", "text-white/40 hover:text-white/70", "transition-colors duration-150"),
|
|
7632
|
+
"aria-label": "View history",
|
|
7633
|
+
children: /* @__PURE__ */ jsx(History, { className: "h-3.5 w-3.5" })
|
|
7634
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
7635
|
+
type: "button",
|
|
7636
|
+
onClick: isVoiceModeActive ? handleVoiceToggle : handleCollapse,
|
|
7637
|
+
className: cn("p-1 rounded-full", "hover:bg-white/10", "text-white/40 hover:text-white/70", "transition-colors duration-150"),
|
|
7638
|
+
"aria-label": isVoiceModeActive ? "End voice session" : "Close",
|
|
7639
|
+
children: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" })
|
|
7640
|
+
})]
|
|
7641
|
+
})]
|
|
7642
|
+
}),
|
|
7643
|
+
/* @__PURE__ */ jsx(AnimatePresence, {
|
|
7644
|
+
mode: "wait",
|
|
7645
|
+
children: isVoiceModeActive && /* @__PURE__ */ jsx(PillVoice, { onEnd: handleVoiceToggle }, "voice-mode")
|
|
8323
7646
|
}),
|
|
8324
|
-
|
|
8325
|
-
|
|
8326
|
-
|
|
7647
|
+
!isVoiceModeActive && mode === "composing" && !hasMessages && /* @__PURE__ */ jsx(WelcomeMessage, {}),
|
|
7648
|
+
!isVoiceModeActive && mode === "active" && /* @__PURE__ */ jsx(CurrentActivity, {
|
|
7649
|
+
currentAction,
|
|
7650
|
+
recentActions,
|
|
7651
|
+
showRecent: false
|
|
8327
7652
|
}),
|
|
8328
|
-
|
|
8329
|
-
|
|
8330
|
-
|
|
7653
|
+
!isVoiceModeActive && (mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillMessageContent, {}),
|
|
7654
|
+
!isVoiceModeActive && mode === "expanded" && !isRunning && summary && /* @__PURE__ */ jsx(SummaryBlock, {
|
|
7655
|
+
summary,
|
|
7656
|
+
isSuccess: !lastCompletedAction?.error
|
|
7657
|
+
}),
|
|
7658
|
+
!isVoiceModeActive && mode === "expanded" && !isRunning && !summary && /* @__PURE__ */ jsx(IdleIndicator, {}),
|
|
7659
|
+
(mode === "active" || mode === "expanded" || isVoiceModeActive) && actions.length > 0 && /* @__PURE__ */ jsx(ActionList, {
|
|
7660
|
+
actions,
|
|
7661
|
+
defaultCollapsed: mode === "active"
|
|
7662
|
+
}),
|
|
7663
|
+
!isVoiceModeActive && (mode === "composing" || mode === "expanded") && !isRunning && prompts.length > 0 && /* @__PURE__ */ jsx(PromptSuggestions, {
|
|
7664
|
+
prompts,
|
|
7665
|
+
onSelect: handlePromptSelect
|
|
7666
|
+
}),
|
|
7667
|
+
!isVoiceModeActive && (mode === "composing" || mode === "active" || mode === "expanded") && /* @__PURE__ */ jsx(PillComposer, {
|
|
7668
|
+
showVoiceButton: showVoiceButton || !!voiceMode?.isSupported,
|
|
7669
|
+
isVoiceActive,
|
|
7670
|
+
onVoiceToggle: handleVoiceToggle
|
|
8331
7671
|
})
|
|
8332
7672
|
]
|
|
8333
7673
|
})
|
|
8334
|
-
]
|
|
8335
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
8336
|
-
className: cn("grid transition-[grid-template-rows] duration-300 ease-in-out", isOpen ? "mt-2 grid-rows-[1fr]" : "grid-rows-[0fr]"),
|
|
8337
|
-
"aria-hidden": !isOpen,
|
|
8338
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
8339
|
-
className: "overflow-hidden",
|
|
8340
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
8341
|
-
className: "flex flex-col gap-1.5 px-1 max-h-48 overflow-y-auto",
|
|
8342
|
-
children: todos.map((todo, index) => /* @__PURE__ */ jsx(TodoItem, {
|
|
8343
|
-
todo,
|
|
8344
|
-
emphasized: emphasisedIndexes.has(index) || todo.status === "new"
|
|
8345
|
-
}, `${todo.text}-${index}`))
|
|
8346
|
-
})
|
|
8347
|
-
})
|
|
8348
|
-
})]
|
|
8349
|
-
});
|
|
8350
|
-
}
|
|
8351
|
-
});
|
|
8352
|
-
function TodoItem(t0) {
|
|
8353
|
-
const $ = c(16);
|
|
8354
|
-
const { todo, emphasized } = t0;
|
|
8355
|
-
const config = statusConfig$1[todo.status];
|
|
8356
|
-
const StatusIcon = config.icon;
|
|
8357
|
-
const isDone = todo.status === "done";
|
|
8358
|
-
const isInProgress = todo.status === "in-progress";
|
|
8359
|
-
let t1;
|
|
8360
|
-
if ($[0] !== StatusIcon || $[1] !== config.color || $[2] !== isDone || $[3] !== isInProgress) {
|
|
8361
|
-
t1 = isDone ? /* @__PURE__ */ jsx(CheckCircle2, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-green-400/60" }) : isInProgress ? /* @__PURE__ */ jsx("div", {
|
|
8362
|
-
className: "mt-0.5 flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-full border border-blue-400",
|
|
8363
|
-
children: /* @__PURE__ */ jsx("div", { className: "h-1.5 w-1.5 rounded-full bg-blue-400 animate-pulse" })
|
|
8364
|
-
}) : /* @__PURE__ */ jsx(StatusIcon, { className: cn("mt-0.5 h-3.5 w-3.5 shrink-0", config.color) });
|
|
8365
|
-
$[0] = StatusIcon;
|
|
8366
|
-
$[1] = config.color;
|
|
8367
|
-
$[2] = isDone;
|
|
8368
|
-
$[3] = isInProgress;
|
|
8369
|
-
$[4] = t1;
|
|
8370
|
-
} else t1 = $[4];
|
|
8371
|
-
const t2 = isDone && "text-white/40 line-through";
|
|
8372
|
-
const t3 = isInProgress && "text-white";
|
|
8373
|
-
const t4 = !isDone && !isInProgress && "text-white/70";
|
|
8374
|
-
const t5 = emphasized && !isDone && "font-medium";
|
|
8375
|
-
let t6;
|
|
8376
|
-
if ($[5] !== t2 || $[6] !== t3 || $[7] !== t4 || $[8] !== t5) {
|
|
8377
|
-
t6 = cn("text-sm leading-snug", t2, t3, t4, t5);
|
|
8378
|
-
$[5] = t2;
|
|
8379
|
-
$[6] = t3;
|
|
8380
|
-
$[7] = t4;
|
|
8381
|
-
$[8] = t5;
|
|
8382
|
-
$[9] = t6;
|
|
8383
|
-
} else t6 = $[9];
|
|
8384
|
-
let t7;
|
|
8385
|
-
if ($[10] !== t6 || $[11] !== todo.text) {
|
|
8386
|
-
t7 = /* @__PURE__ */ jsx("span", {
|
|
8387
|
-
className: t6,
|
|
8388
|
-
children: todo.text
|
|
8389
|
-
});
|
|
8390
|
-
$[10] = t6;
|
|
8391
|
-
$[11] = todo.text;
|
|
8392
|
-
$[12] = t7;
|
|
8393
|
-
} else t7 = $[12];
|
|
8394
|
-
let t8;
|
|
8395
|
-
if ($[13] !== t1 || $[14] !== t7) {
|
|
8396
|
-
t8 = /* @__PURE__ */ jsxs("div", {
|
|
8397
|
-
className: "flex items-start gap-2.5 px-2 py-1",
|
|
8398
|
-
children: [t1, t7]
|
|
8399
|
-
});
|
|
8400
|
-
$[13] = t1;
|
|
8401
|
-
$[14] = t7;
|
|
8402
|
-
$[15] = t8;
|
|
8403
|
-
} else t8 = $[15];
|
|
8404
|
-
return t8;
|
|
8405
|
-
}
|
|
8406
|
-
|
|
8407
|
-
//#endregion
|
|
8408
|
-
//#region src/components/planning/PlanApprovalUI.tsx
|
|
8409
|
-
/**
|
|
8410
|
-
* PlanApprovalUI Component
|
|
8411
|
-
*
|
|
8412
|
-
* UI component for the askForPlanApprovalTool.
|
|
8413
|
-
* Displays pending tasks for user review with approve/reject controls.
|
|
8414
|
-
* Users can also add, modify, or delete tasks before approving.
|
|
8415
|
-
* Designed for the pill's dark theme.
|
|
8416
|
-
*/
|
|
8417
|
-
const statusConfig = {
|
|
8418
|
-
new: {
|
|
8419
|
-
icon: Circle,
|
|
8420
|
-
color: "text-purple-400"
|
|
8421
|
-
},
|
|
8422
|
-
pending: {
|
|
8423
|
-
icon: Circle,
|
|
8424
|
-
color: "text-white/50"
|
|
8425
|
-
},
|
|
8426
|
-
"in-progress": {
|
|
8427
|
-
icon: Clock,
|
|
8428
|
-
color: "text-blue-400"
|
|
8429
|
-
},
|
|
8430
|
-
done: {
|
|
8431
|
-
icon: CheckCircle2,
|
|
8432
|
-
color: "text-green-400"
|
|
8433
|
-
}
|
|
8434
|
-
};
|
|
8435
|
-
const PlanApprovalUI = makeAssistantToolUI({
|
|
8436
|
-
toolName: "askForPlanApprovalTool",
|
|
8437
|
-
render: function Render({ args, status, result, addResult }) {
|
|
8438
|
-
const { todos: contextTodos } = usePlan();
|
|
8439
|
-
const isCompleted = status.type === "complete";
|
|
8440
|
-
const isApproved = result?.approved;
|
|
8441
|
-
const isRejected = status.type === "incomplete" || isCompleted && isApproved === false;
|
|
8442
|
-
const [todos, setTodos] = useState(contextTodos.filter((todo) => todo.status !== "done").map((todo) => ({
|
|
8443
|
-
...todo,
|
|
8444
|
-
status: "pending"
|
|
8445
|
-
})));
|
|
8446
|
-
const [draftValue, setDraftValue] = useState("");
|
|
8447
|
-
const itemRefs = useRef([]);
|
|
8448
|
-
const [pendingFocusIndex, setPendingFocusIndex] = useState(null);
|
|
8449
|
-
useEffect(() => {
|
|
8450
|
-
itemRefs.current = itemRefs.current.slice(0, todos.length);
|
|
8451
|
-
}, [todos.length]);
|
|
8452
|
-
useEffect(() => {
|
|
8453
|
-
if (pendingFocusIndex === null) return;
|
|
8454
|
-
const target = itemRefs.current[pendingFocusIndex];
|
|
8455
|
-
if (target) {
|
|
8456
|
-
target.focus();
|
|
8457
|
-
const length = target.value.length;
|
|
8458
|
-
target.setSelectionRange(length, length);
|
|
8459
|
-
}
|
|
8460
|
-
setPendingFocusIndex(null);
|
|
8461
|
-
}, [pendingFocusIndex]);
|
|
8462
|
-
const handleTodoChange = useCallback((index, value) => {
|
|
8463
|
-
setTodos((prev) => {
|
|
8464
|
-
const next = [...prev];
|
|
8465
|
-
next[index] = {
|
|
8466
|
-
...next[index],
|
|
8467
|
-
text: value
|
|
8468
|
-
};
|
|
8469
|
-
return next;
|
|
8470
|
-
});
|
|
8471
|
-
}, []);
|
|
8472
|
-
const handleDelete = useCallback((index) => {
|
|
8473
|
-
setTodos((prev) => prev.filter((_, i) => i !== index));
|
|
8474
|
-
}, []);
|
|
8475
|
-
const handleCreateFromDraft = useCallback((value) => {
|
|
8476
|
-
if (!value.trim()) {
|
|
8477
|
-
setDraftValue(value);
|
|
8478
|
-
return;
|
|
8479
|
-
}
|
|
8480
|
-
setDraftValue("");
|
|
8481
|
-
setTodos((prev) => {
|
|
8482
|
-
const next = [...prev, {
|
|
8483
|
-
text: value.trim(),
|
|
8484
|
-
status: "pending"
|
|
8485
|
-
}];
|
|
8486
|
-
setPendingFocusIndex(next.length - 1);
|
|
8487
|
-
return next;
|
|
8488
|
-
});
|
|
8489
|
-
}, []);
|
|
8490
|
-
const handleKeyDown = useCallback((e) => {
|
|
8491
|
-
if (e.key === "Enter" && draftValue.trim()) {
|
|
8492
|
-
e.preventDefault();
|
|
8493
|
-
handleCreateFromDraft(draftValue);
|
|
8494
|
-
}
|
|
8495
|
-
}, [draftValue, handleCreateFromDraft]);
|
|
8496
|
-
const handleApprove = useCallback(() => {
|
|
8497
|
-
addResult({
|
|
8498
|
-
todos,
|
|
8499
|
-
approved: true
|
|
8500
|
-
});
|
|
8501
|
-
}, [todos, addResult]);
|
|
8502
|
-
const handleReject = useCallback(() => {
|
|
8503
|
-
addResult({
|
|
8504
|
-
todos: [],
|
|
8505
|
-
approved: false
|
|
8506
|
-
});
|
|
8507
|
-
}, [addResult]);
|
|
8508
|
-
if (isCompleted && isApproved) return null;
|
|
8509
|
-
const headerStatus = isCompleted ? {
|
|
8510
|
-
icon: isApproved ? CheckCircle2 : AlertCircle,
|
|
8511
|
-
label: isApproved ? "Plan Approved" : "Plan Rejected",
|
|
8512
|
-
className: isApproved ? "text-green-400" : "text-red-400"
|
|
8513
|
-
} : null;
|
|
8514
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
8515
|
-
className: cn("my-3 overflow-hidden rounded-xl border shadow-lg", isRejected ? "border-red-500/50 bg-red-950/20" : "border-white/10 bg-white/5"),
|
|
8516
|
-
children: [
|
|
8517
|
-
/* @__PURE__ */ jsxs("div", {
|
|
8518
|
-
className: "flex items-center gap-2 border-b border-white/10 px-4 py-2 text-xs font-medium tracking-wide text-white/50 uppercase",
|
|
8519
|
-
children: ["Plan Approval", headerStatus && /* @__PURE__ */ jsxs("span", {
|
|
8520
|
-
className: cn("ml-auto flex items-center gap-1 text-xs font-semibold normal-case", headerStatus.className),
|
|
8521
|
-
children: [/* @__PURE__ */ jsx(headerStatus.icon, {
|
|
8522
|
-
className: "h-4 w-4",
|
|
8523
|
-
"aria-hidden": true
|
|
8524
|
-
}), headerStatus.label]
|
|
8525
|
-
})]
|
|
8526
|
-
}),
|
|
8527
|
-
args?.explainer && /* @__PURE__ */ jsx("div", {
|
|
8528
|
-
className: "border-b border-white/5 px-4 py-2 text-sm text-white/70",
|
|
8529
|
-
children: args.explainer
|
|
8530
|
-
}),
|
|
8531
|
-
/* @__PURE__ */ jsx("div", {
|
|
8532
|
-
className: "px-4 py-3",
|
|
8533
|
-
children: isCompleted ? isApproved ? todos.length > 0 ? /* @__PURE__ */ jsx("ul", {
|
|
8534
|
-
className: "flex flex-col gap-1",
|
|
8535
|
-
children: todos.map((todo, index) => {
|
|
8536
|
-
const StatusIcon = statusConfig[todo.status].icon;
|
|
8537
|
-
return /* @__PURE__ */ jsxs("li", {
|
|
8538
|
-
className: "flex items-center gap-2 rounded-md px-2 py-1 text-sm text-white/70",
|
|
8539
|
-
children: [/* @__PURE__ */ jsx(StatusIcon, { className: cn("h-3.5 w-3.5 flex-shrink-0", statusConfig[todo.status].color) }), /* @__PURE__ */ jsx("span", { children: todo.text })]
|
|
8540
|
-
}, `approved-todo-${index}`);
|
|
8541
|
-
})
|
|
8542
|
-
}) : /* @__PURE__ */ jsx("p", {
|
|
8543
|
-
className: "text-sm text-white/60",
|
|
8544
|
-
children: "Approved with no tasks in the queue."
|
|
8545
|
-
}) : /* @__PURE__ */ jsx("p", {
|
|
8546
|
-
className: "text-sm text-white/60",
|
|
8547
|
-
children: "Plan rejected. The assistant will revise next steps."
|
|
8548
|
-
}) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("ul", {
|
|
8549
|
-
className: "flex flex-col",
|
|
8550
|
-
children: [todos.map((todo, index) => {
|
|
8551
|
-
const StatusIcon = statusConfig[todo.status].icon;
|
|
8552
|
-
return /* @__PURE__ */ jsxs("li", {
|
|
8553
|
-
className: "group flex items-center gap-2 rounded-md px-2 py-1 text-sm text-white/70 hover:bg-white/5",
|
|
8554
|
-
children: [
|
|
8555
|
-
/* @__PURE__ */ jsx(StatusIcon, { className: cn("h-3.5 w-3.5 flex-shrink-0", statusConfig[todo.status].color) }),
|
|
8556
|
-
/* @__PURE__ */ jsx("input", {
|
|
8557
|
-
ref: (el) => {
|
|
8558
|
-
itemRefs.current[index] = el;
|
|
8559
|
-
},
|
|
8560
|
-
value: todo.text,
|
|
8561
|
-
onChange: (e) => handleTodoChange(index, e.target.value),
|
|
8562
|
-
className: "flex-1 bg-transparent text-sm text-white/80 outline-none placeholder:text-white/30"
|
|
8563
|
-
}),
|
|
8564
|
-
/* @__PURE__ */ jsx("button", {
|
|
8565
|
-
type: "button",
|
|
8566
|
-
onClick: () => handleDelete(index),
|
|
8567
|
-
className: "opacity-0 transition-opacity duration-150 group-hover:opacity-100",
|
|
8568
|
-
"aria-label": "Delete task",
|
|
8569
|
-
children: /* @__PURE__ */ jsx(Trash2, { className: "h-3.5 w-3.5 text-white/30 hover:text-red-400" })
|
|
8570
|
-
})
|
|
8571
|
-
]
|
|
8572
|
-
}, `todo-${index}`);
|
|
8573
|
-
}), /* @__PURE__ */ jsxs("li", {
|
|
8574
|
-
className: "flex items-center gap-2 px-2 py-1 text-sm text-white/40",
|
|
8575
|
-
children: [/* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ jsx("input", {
|
|
8576
|
-
value: draftValue,
|
|
8577
|
-
onChange: (e) => setDraftValue(e.target.value),
|
|
8578
|
-
onBlur: () => handleCreateFromDraft(draftValue),
|
|
8579
|
-
onKeyDown: handleKeyDown,
|
|
8580
|
-
placeholder: "Add a task...",
|
|
8581
|
-
className: "flex-1 bg-transparent text-sm text-white/60 outline-none placeholder:text-white/30"
|
|
8582
|
-
})]
|
|
8583
|
-
})]
|
|
8584
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
8585
|
-
className: "mt-4 flex justify-end gap-2",
|
|
8586
|
-
children: [/* @__PURE__ */ jsx("button", {
|
|
8587
|
-
type: "button",
|
|
8588
|
-
onClick: handleReject,
|
|
8589
|
-
disabled: isCompleted,
|
|
8590
|
-
className: cn("h-8 px-4 rounded-lg text-sm font-medium", "bg-white/5 text-white/70 hover:bg-white/10 hover:text-white", "border border-white/10", "transition-colors duration-200", "disabled:opacity-50 disabled:cursor-not-allowed"),
|
|
8591
|
-
children: "Reject"
|
|
8592
|
-
}), /* @__PURE__ */ jsx("button", {
|
|
8593
|
-
type: "button",
|
|
8594
|
-
onClick: handleApprove,
|
|
8595
|
-
disabled: isCompleted || todos.length === 0,
|
|
8596
|
-
className: cn("h-8 px-4 rounded-lg text-sm font-medium", "bg-green-600 text-white hover:bg-green-500", "transition-colors duration-200", "disabled:opacity-50 disabled:cursor-not-allowed"),
|
|
8597
|
-
children: "Approve & Continue"
|
|
8598
|
-
})]
|
|
8599
|
-
})] })
|
|
8600
7674
|
})
|
|
8601
7675
|
]
|
|
8602
|
-
})
|
|
8603
|
-
}
|
|
8604
|
-
}
|
|
8605
|
-
|
|
8606
|
-
//#endregion
|
|
8607
|
-
//#region src/components/planning/PlanSection.tsx
|
|
8608
|
-
/**
|
|
8609
|
-
* PlanSection Component
|
|
8610
|
-
*
|
|
8611
|
-
* A standalone component for displaying the current plan/todos in the pill.
|
|
8612
|
-
* Uses PlanProvider context to get the current todos state.
|
|
8613
|
-
* Can be used independently of the tool UI components.
|
|
8614
|
-
*/
|
|
7676
|
+
})
|
|
7677
|
+
})] });
|
|
7678
|
+
};
|
|
8615
7679
|
|
|
8616
7680
|
//#endregion
|
|
8617
7681
|
//#region src/generated/inline-styles.ts
|
|
@@ -8621,7 +7685,7 @@ const PlanApprovalUI = makeAssistantToolUI({
|
|
|
8621
7685
|
*
|
|
8622
7686
|
* Contains the compiled CSS for the web component standalone build.
|
|
8623
7687
|
*/
|
|
8624
|
-
const WEBMCP_STYLES = "/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */\n@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-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-outline-style:solid;--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;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tool-border-angle:0deg}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-950:oklch(25.8% .092 26.042);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-emerald-500:oklch(69.6% .17 162.48);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-500:oklch(58.5% .233 277.117);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-600:oklch(55.8% .288 302.321);--color-slate-900:oklch(20.8% .042 265.755);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-xl:0 9px 7px #0000001a;--drop-shadow-2xl:0 25px 25px #00000026;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--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(--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(--default-font-feature-settings,normal);font-variation-settings:var(--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(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--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}:root{--radius:.75rem;--background:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(21% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938)}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklch,var(--ring),transparent 50%)}}body{background-color:var(--background);color:var(--foreground)}}@layer components{.app-shell{z-index:0;background-color:var(--background);background-image:radial-gradient(80% 60% at -10% -10%,oklch(82% .15 270/.15),#0000),radial-gradient(60% 50% at 110% 10%,oklch(85% .1 220/.12),#0000),radial-gradient(50% 45% at 50% 120%,oklch(95% .02 250/.08),#0000);position:relative}.dark .app-shell{background-image:radial-gradient(80% 60% at -10% -10%,oklch(55% .14 270/.25),#0000),radial-gradient(60% 50% at 110% 15%,oklch(60% .12 220/.22),#0000),radial-gradient(50% 45% at 50% 120%,oklch(35% .04 250/.16),#0000)}.app-shell:before,.app-shell:after{content:\"\";pointer-events:none;filter:blur(32px);opacity:.6;z-index:-1;border-radius:9999px;position:absolute;inset:auto}.app-shell:before{background:radial-gradient(60% 60% at 40% 40%,oklch(80% .12 270/.3),#0000);width:260px;height:260px;top:-60px;left:-80px}.app-shell:after{background:radial-gradient(60% 60% at 60% 60%,oklch(84% .1 220/.25),#0000);width:300px;height:300px;bottom:-80px;right:-60px}.toolbar-surface{border-top:1px solid var(--border);background:linear-gradient(to right,var(--background),var(--background),var(--background))}@supports (color:color-mix(in lab, red, red)){.toolbar-surface{background:linear-gradient(to right,var(--background),color-mix(in oklch,var(--background),transparent 5%),var(--background))}}.toolbar-surface{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.toolbar-surface{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.toolbar-surface{background:color-mix(in oklch,var(--background),transparent 20%)}}}.toolbar-surface-top{border-bottom:1px solid var(--border);background:linear-gradient(to right,var(--background),var(--background),var(--background))}@supports (color:color-mix(in lab, red, red)){.toolbar-surface-top{background:linear-gradient(to right,var(--background),color-mix(in oklch,var(--background),transparent 5%),var(--background))}}.toolbar-surface-top{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.toolbar-surface-top{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.toolbar-surface-top{background:color-mix(in oklch,var(--background),transparent 20%)}}}.toolbar-inner{justify-content:space-between;align-items:center;padding:.5rem .75rem;display:flex}.toolbar-card{background:var(--card);justify-content:space-between;align-items:center;gap:.5rem;display:flex}@supports (color:color-mix(in lab, red, red)){.toolbar-card{background:color-mix(in oklch,var(--card),transparent 60%)}}.toolbar-card{border:1px solid var(--border);border-radius:.75rem;padding:.5rem .75rem}.toolbar-group{align-items:center;gap:.25rem;display:flex}.btn-toolbar-primary{background:linear-gradient(to right,var(--primary),var(--primary));border-radius:.75rem;align-items:center;gap:.5rem;height:2.25rem;padding:0 .75rem;display:flex}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary{background:linear-gradient(to right,color-mix(in oklch,var(--primary),transparent 95%),color-mix(in oklch,var(--primary),transparent 90%))}}.btn-toolbar-primary{border:1px solid var(--primary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary{border:1px solid color-mix(in oklch,var(--primary),transparent 80%)}}.btn-toolbar-primary{transition:all .2s}.btn-toolbar-primary:hover{background:linear-gradient(to right,var(--primary),var(--primary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary:hover{background:linear-gradient(to right,color-mix(in oklch,var(--primary),transparent 90%),color-mix(in oklch,var(--primary),transparent 80%))}}.btn-toolbar-icon-primary{background:linear-gradient(to bottom right,var(--primary),var(--primary));border-radius:9999px;width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--primary),transparent 90%),color-mix(in oklch,var(--primary),transparent 80%))}}.btn-toolbar-icon-primary{border:1px solid var(--primary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary{border:1px solid color-mix(in oklch,var(--primary),transparent 70%)}}.btn-toolbar-icon-primary{transition:all .2s;box-shadow:0 1px 2px #0000000d}.btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,var(--primary),var(--primary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--primary),transparent 80%),color-mix(in oklch,var(--primary),transparent 70%))}}.btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,var(--secondary),var(--secondary));border-radius:9999px;width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--secondary),transparent 90%),color-mix(in oklch,var(--secondary),transparent 80%))}}.btn-toolbar-icon-secondary{border:1px solid var(--secondary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary{border:1px solid color-mix(in oklch,var(--secondary),transparent 70%)}}.btn-toolbar-icon-secondary{transition:all .2s;box-shadow:0 1px 2px #0000000d}.btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,var(--secondary),var(--secondary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--secondary),transparent 80%),color-mix(in oklch,var(--secondary),transparent 70%))}}.badge-compact{height:1.25rem;padding:0 .5rem;font-size:10px}.badge-mini{height:1rem;padding:0 .375rem;font-size:10px}@keyframes shimmer-bg{0%{background-position:-1000px 0}to{background-position:1000px 0}}.shimmer{background:linear-gradient(90deg,#0000,#ffffff1a,#0000) 0 0/1000px 100%;animation:3s linear infinite shimmer-bg}.animate-shimmer{animation:2s linear infinite shimmer}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px rgba(var(--primary),.1)}50%{box-shadow:0 0 30px rgba(var(--primary),.2)}}.pulse-glow{animation:2s ease-in-out infinite pulse-glow}@keyframes gradient-x{0%,to{background-position:0%}50%{background-position:100%}}.animate-gradient-x{animation:8s ease-in-out infinite gradient-x}.gradient-text{background:linear-gradient(to right,var(--foreground),var(--foreground))}@supports (color:color-mix(in lab, red, red)){.gradient-text{background:linear-gradient(to right,var(--foreground),color-mix(in oklch,var(--foreground),transparent 30%))}}.gradient-text{-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.glass{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.glass{background:color-mix(in oklch,var(--background),transparent 50%)}}.glass{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border)}@supports (color:color-mix(in lab, red, red)){.glass{border:1px solid color-mix(in oklch,var(--border),transparent 50%)}}.tool-card{transition:all .3s ease-out}.tool-card:hover{transform:scale(1.02);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:6px;height:6px}.scrollbar-thin::-webkit-scrollbar-track{background:0 0}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.scrollbar-thin::-webkit-scrollbar-thumb{background-color:color-mix(in oklch,var(--primary),transparent 80%)}}.scrollbar-thin::-webkit-scrollbar-thumb{border-radius:3px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklch,var(--primary),transparent 70%)}}}@layer utilities{.\\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.-inset-\\[1px\\]{inset:-1px}.inset-0{inset:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-1\\.5{top:calc(var(--spacing)*1.5)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\\[50\\%\\]{top:50%}.-right-1{right:calc(var(--spacing)*-1)}.right-0{right:calc(var(--spacing)*0)}.right-1\\.5{right:calc(var(--spacing)*1.5)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-6{right:calc(var(--spacing)*6)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-6{bottom:calc(var(--spacing)*6)}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2,.left-\\[50\\%\\]{left:50%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-auto{margin-block:auto}.-mt-1{margin-top:calc(var(--spacing)*-1)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.mr-1\\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-2{margin-left:calc(var(--spacing)*-2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-2\\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-14{width:calc(var(--spacing)*14);height:calc(var(--spacing)*14)}.size-\\[34px\\]{width:34px;height:34px}.size-full{width:100%;height:100%}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-\\[600px\\]{height:600px}.h-\\[calc\\(100\\%-60px\\)\\]{height:calc(100% - 60px)}.h-auto{height:auto}.h-full{height:100%}.max-h-24{max-height:calc(var(--spacing)*24)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-\\[80dvh\\]{max-height:80dvh}.max-h-\\[80vh\\]{max-height:80vh}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-\\[60px\\]{min-height:60px}.min-h-screen{min-height:100vh}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-2\\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-\\[500px\\]{width:500px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-7\\/8{max-width:87.5%}.max-w-16{max-width:calc(var(--spacing)*16)}.max-w-24{max-width:calc(var(--spacing)*24)}.max-w-\\[80\\%\\]{max-width:80%}.max-w-\\[80px\\]{max-width:80px}.max-w-\\[85\\%\\]{max-width:85%}.max-w-\\[100px\\]{max-width:100px}.max-w-\\[calc\\(100\\%-2rem\\)\\]{max-width:calc(100% - 2rem)}.max-w-\\[var\\(--thread-max-width\\)\\]{max-width:var(--thread-max-width)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.origin-\\(--radix-tooltip-content-transform-origin\\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\\[-50\\%\\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[-50\\%\\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[calc\\(-50\\%_-_2px\\)\\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.auto-rows-auto{grid-auto-rows:auto}.grid-cols-\\[minmax\\(72px\\,1fr\\)_auto\\]{grid-template-columns:minmax(72px,1fr) auto}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-y-2{row-gap:calc(var(--spacing)*2)}.self-center{align-self:center}.self-end{align-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[2px\\]{border-radius:2px}.rounded-\\[14px\\]{border-radius:14px}.rounded-\\[inherit\\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.\\!rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-tr-sm{border-top-right-radius:calc(var(--radius) - 4px)}.rounded-b-lg{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-blue-400{border-color:var(--color-blue-400)}.border-blue-500\\/40{border-color:#3080ff66}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/40{border-color:color-mix(in oklab,var(--color-blue-500)40%,transparent)}}.border-blue-500\\/60{border-color:#3080ff99}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/60{border-color:color-mix(in oklab,var(--color-blue-500)60%,transparent)}}.border-border,.border-border\\/20{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/20{border-color:color-mix(in oklab,var(--border)20%,transparent)}}.border-border\\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.border-border\\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-destructive,.border-destructive\\/60{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\/60{border-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.border-foreground\\/20{border-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/20{border-color:color-mix(in oklab,var(--foreground)20%,transparent)}}.border-green-500\\/20{border-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/20{border-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.border-green-500\\/40{border-color:#00c75866}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/40{border-color:color-mix(in oklab,var(--color-green-500)40%,transparent)}}.border-green-500\\/60{border-color:#00c75899}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/60{border-color:color-mix(in oklab,var(--color-green-500)60%,transparent)}}.border-input{border-color:var(--input)}.border-muted-foreground\\/20{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\\/20{border-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.border-primary\\/60{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\\/60{border-color:color-mix(in oklab,var(--primary)60%,transparent)}}.border-red-500\\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/20{border-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.border-red-500\\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/40{border-color:color-mix(in oklab,var(--color-red-500)40%,transparent)}}.border-red-500\\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/50{border-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-red-500\\/60{border-color:#fb2c3699}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/60{border-color:color-mix(in oklab,var(--color-red-500)60%,transparent)}}.border-transparent{border-color:#0000}.border-white\\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.border-white\\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.border-white\\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.border-white\\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_20\\%\\,transparent\\)\\]{background-color:rgb(var(--background))}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_20\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,rgb(var(--background))20%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background,.bg-background\\/50{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/50{background-color:color-mix(in oklab,var(--background)50%,transparent)}}.bg-background\\/80{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/80{background-color:color-mix(in oklab,var(--background)80%,transparent)}}.bg-background\\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\\/5{background-color:#3080ff0d}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/5{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}}.bg-blue-500\\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.bg-border{background-color:var(--border)}.bg-destructive,.bg-destructive\\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-400\\/60{background-color:#05df7299}@supports (color:color-mix(in lab, red, red)){.bg-green-400\\/60{background-color:color-mix(in oklab,var(--color-green-400)60%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\\/5{background-color:#00c7580d}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/5{background-color:color-mix(in oklab,var(--color-green-500)5%,transparent)}}.bg-green-500\\/10{background-color:#00c7581a}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.bg-green-600{background-color:var(--color-green-600)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\\/15{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/15{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.bg-muted\\/5{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/5{background-color:color-mix(in oklab,var(--muted)5%,transparent)}}.bg-muted\\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-popover\\/95{background-color:var(--popover)}@supports (color:color-mix(in lab, red, red)){.bg-popover\\/95{background-color:color-mix(in oklab,var(--popover)95%,transparent)}}.bg-primary,.bg-primary\\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-purple-400{background-color:var(--color-purple-400)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/5{background-color:color-mix(in oklab,var(--color-red-500)5%,transparent)}}.bg-red-500\\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.bg-red-500\\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.bg-red-950\\/20{background-color:#46080933}@supports (color:color-mix(in lab, red, red)){.bg-red-950\\/20{background-color:color-mix(in oklab,var(--color-red-950)20%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-slate-900\\/95{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\\/95{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.bg-white\\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-white\\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-white\\/50{background-color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.bg-white\\/50{background-color:color-mix(in oklab,var(--color-white)50%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\\/20{background-color:#edb20033}@supports (color:color-mix(in lab, red, red)){.bg-yellow-500\\/20{background-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-indigo-500{--tw-gradient-from:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.fill-foreground{fill:var(--foreground)}.stroke-\\[1\\.5px\\]{stroke-width:1.5px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-px{padding:1px}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.pt-0\\.5{padding-top:calc(var(--spacing)*.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.text-\\[17px\\]{font-size:17px}.text-\\[19px\\]{font-size:19px}.text-\\[21px\\]{font-size:21px}.text-\\[25px\\]{font-size:25px}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--background)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-emerald-500{color:var(--color-emerald-500)}.text-foreground,.text-foreground\\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-green-400{color:var(--color-green-400)}.text-green-400\\/60{color:#05df7299}@supports (color:color-mix(in lab, red, red)){.text-green-400\\/60{color:color-mix(in oklab,var(--color-green-400)60%,transparent)}}.text-green-600{color:var(--color-green-600)}.text-muted-foreground,.text-muted-foreground\\/65{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/65{color:color-mix(in oklab,var(--muted-foreground)65%,transparent)}}.text-muted-foreground\\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-400{color:var(--color-purple-400)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.text-white\\/20{color:#fff3}@supports (color:color-mix(in lab, red, red)){.text-white\\/20{color:color-mix(in oklab,var(--color-white)20%,transparent)}}.text-white\\/30{color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.text-white\\/30{color:color-mix(in oklab,var(--color-white)30%,transparent)}}.text-white\\/40{color:#fff6}@supports (color:color-mix(in lab, red, red)){.text-white\\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\\/50{color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.text-white\\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.text-white\\/60{color:#fff9}@supports (color:color-mix(in lab, red, red)){.text-white\\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\\/80{color:#fffc}@supports (color:color-mix(in lab, red, red)){.text-white\\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-white\\/90{color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){.text-white\\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}}.text-yellow-400{color:var(--color-yellow-400)}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.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,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-70{opacity:.7}.opacity-100{opacity:1}.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)}.shadow-\\[0_0_12px_rgba\\(34\\,197\\,94\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#22c55e4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(59\\,130\\,246\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#3b82f64d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(239\\,68\\,68\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#ef44444d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_12px_24px_-16px_rgba\\(37\\,99\\,235\\,0\\.55\\)\\]{--tw-shadow:0 12px 24px -16px var(--tw-shadow-color,#2563eb8c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_12px_24px_-18px_rgba\\(220\\,38\\,38\\,0\\.55\\)\\]{--tw-shadow:0 12px 24px -18px var(--tw-shadow-color,#dc26268c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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)}.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)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px 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)}.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)}.ring,.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)}.\\[box-shadow\\:inset_0_1px_2px_0_rgba\\(255\\,255\\,255\\,0\\.15\\)\\]{box-shadow:inset 0 1px 2px #ffffff26}.shadow-black\\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)20%,transparent)var(--tw-shadow-alpha),transparent)}}.ring-yellow-500\\/50{--tw-ring-color:#edb20080}@supports (color:color-mix(in lab, red, red)){.ring-yellow-500\\/50{--tw-ring-color:color-mix(in oklab,var(--color-yellow-500)50%,transparent)}}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.drop-shadow-xl{--tw-drop-shadow-size:drop-shadow(0 9px 7px var(--tw-drop-shadow-color,#0000001a));--tw-drop-shadow:drop-shadow(var(--drop-shadow-xl));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,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--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,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[color\\,box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.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(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-transform{will-change:transform}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-muted-foreground::placeholder,.placeholder\\:text-muted-foreground\\/70::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-muted-foreground\\/70::placeholder{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.placeholder\\:text-white\\/30::placeholder{color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-white\\/30::placeholder{color:color-mix(in oklab,var(--color-white)30%,transparent)}}.placeholder\\:text-white\\/40::placeholder{color:#fff6}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-white\\/40::placeholder{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.first\\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\\:mt-3:first-child{margin-top:calc(var(--spacing)*3)}.first\\:mt-4:first-child{margin-top:calc(var(--spacing)*4)}.first\\:rounded-tl-lg:first-child{border-top-left-radius:var(--radius)}.first\\:border-t:first-child{border-top-style:var(--tw-border-style);border-top-width:1px}.last\\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\\:mb-5:last-child{margin-bottom:calc(var(--spacing)*5)}.last\\:mb-24:last-child{margin-bottom:calc(var(--spacing)*24)}.last\\:rounded-tr-lg:last-child{border-top-right-radius:var(--radius)}.last\\:border-r:last-child{border-right-style:var(--tw-border-style);border-right-width:1px}.empty\\:hidden:empty{display:none}.focus-within\\:border-ring\\/50:focus-within{border-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-ring\\/50:focus-within{border-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-within\\:border-white\\/20:focus-within{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-white\\/20:focus-within{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.focus-within\\:bg-white\\/15:focus-within{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.focus-within\\:bg-white\\/15:focus-within{background-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.focus-within\\:shadow-2xl:focus-within{--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)}.focus-within\\:shadow-md:focus-within{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:ring-2:focus-within{--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)}.focus-within\\:shadow-black\\/30:focus-within{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.focus-within\\:shadow-black\\/30:focus-within{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)30%,transparent)var(--tw-shadow-alpha),transparent)}}.focus-within\\:ring-ring:focus-within{--tw-ring-color:var(--ring)}.focus-within\\:ring-offset-2:focus-within{--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)}@media (hover:hover){.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-accent:hover{border-color:var(--accent)}.hover\\:border-border\\/60:hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.hover\\:border-border\\/60:hover{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.hover\\:border-white\\/15:hover{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/15:hover{border-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.hover\\:\\!bg-white:hover{background-color:var(--color-white)!important}.hover\\:bg-accent:hover,.hover\\:bg-accent\\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.hover\\:bg-destructive\\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/10:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.hover\\:bg-destructive\\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}}.hover\\:bg-destructive\\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\\:bg-green-500:hover{background-color:var(--color-green-500)}.hover\\:bg-muted-foreground\\/15:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/15:hover{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.hover\\:bg-primary\\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/80:hover{background-color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\\:bg-red-500\\/30:hover{background-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-red-500\\/30:hover{background-color:color-mix(in oklab,var(--color-red-500)30%,transparent)}}.hover\\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\\:bg-secondary\\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\\:bg-transparent:hover{background-color:#0000}.hover\\:bg-white\\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.hover\\:bg-white\\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.hover\\:bg-white\\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.hover\\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\\:text-destructive:hover{color:var(--destructive)}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-primary\\/80:hover{color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:text-primary\\/80:hover{color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\\:text-red-200:hover{color:var(--color-red-200)}.hover\\:text-red-300:hover{color:var(--color-red-300)}.hover\\:text-red-400:hover{color:var(--color-red-400)}.hover\\:text-white:hover{color:var(--color-white)}.hover\\:text-white\\/60:hover{color:#fff9}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/60:hover{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.hover\\:text-white\\/70:hover{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-75:hover{opacity:.75}.hover\\:opacity-100:hover{opacity:1}.hover\\:shadow-2xl:hover{--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)}.hover\\:shadow-\\[0_14px_24px_-14px_rgba\\(37\\,99\\,235\\,0\\.6\\)\\]:hover{--tw-shadow:0 14px 24px -14px var(--tw-shadow-color,#2563eb99);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-\\[0_14px_24px_-16px_rgba\\(220\\,38\\,38\\,0\\.6\\)\\]:hover{--tw-shadow:0 14px 24px -16px var(--tw-shadow-color,#dc262699);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:drop-shadow-2xl:hover{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.focus\\:ring-2:focus{--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)}.focus\\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\\:ring-offset-2:focus{--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)}.focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}.focus-visible\\:ring-1:focus-visible{--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)}.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)}.focus-visible\\:ring-\\[3px\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + 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)}.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.focus-visible\\:ring-primary\\/40:focus-visible{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-primary\\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--primary)40%,transparent)}}.focus-visible\\:ring-ring:focus-visible,.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\\:ring-white\\/30:focus-visible{--tw-ring-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-white\\/30:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.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)}.focus-visible\\:ring-offset-transparent:focus-visible{--tw-ring-offset-color:transparent}.focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.active\\:cursor-grabbing:active{cursor:grabbing}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:invisible:disabled{visibility:hidden}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.has-\\[\\>svg\\]\\:px-2\\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\\[\\>svg\\]\\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\\[\\>svg\\]\\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-floating\\:absolute[data-floating]{position:absolute}.data-floating\\:rounded-md[data-floating]{border-radius:calc(var(--radius) - 2px)}.data-floating\\:border[data-floating]{border-style:var(--tw-border-style);border-width:1px}.data-floating\\:bg-background[data-floating]{background-color:var(--background)}.data-floating\\:p-1[data-floating]{padding:calc(var(--spacing)*1)}.data-floating\\:shadow-sm[data-floating]{--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)}.data-\\[orientation\\=horizontal\\]\\:h-px[data-orientation=horizontal]{height:1px}.data-\\[orientation\\=horizontal\\]\\:w-full[data-orientation=horizontal]{width:100%}.data-\\[orientation\\=vertical\\]\\:h-full[data-orientation=vertical]{height:100%}.data-\\[orientation\\=vertical\\]\\:w-px[data-orientation=vertical]{width:1px}.data-\\[state\\=closed\\]\\:scale-0[data-state=closed]{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=closed\\]\\:scale-100[data-state=closed]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=closed\\]\\:-rotate-90[data-state=closed]{rotate:-90deg}.data-\\[state\\=closed\\]\\:rotate-0[data-state=closed]{rotate:none}.data-\\[state\\=open\\]\\:scale-0[data-state=open]{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=open\\]\\:scale-100[data-state=open]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=open\\]\\:rotate-0[data-state=open]{rotate:none}.data-\\[state\\=open\\]\\:rotate-90[data-state=open]{rotate:90deg}.data-\\[state\\=open\\]\\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}@media (min-width:40rem){.sm\\:max-w-3xl{max-width:var(--container-3xl)}.sm\\:max-w-lg{max-width:var(--container-lg)}.sm\\:max-w-md{max-width:var(--container-md)}.sm\\:flex-row{flex-direction:row}.sm\\:justify-end{justify-content:flex-end}.sm\\:text-left{text-align:left}}@media (min-width:48rem){.md\\:pb-6{padding-bottom:calc(var(--spacing)*6)}}@container (min-width:28rem){.\\@md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\\@md\\:flex-col{flex-direction:column}}.dark\\:border-input:is(.dark *){border-color:var(--input)}.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.dark\\:bg-background:is(.dark *){background-color:var(--background)}.dark\\:bg-destructive\\/5:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/5:is(.dark *){background-color:color-mix(in oklab,var(--destructive)5%,transparent)}}.dark\\:bg-destructive\\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\\:bg-input\\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\\:bg-muted-foreground\\/20:is(.dark *){background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-muted-foreground\\/20:is(.dark *){background-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.dark\\:stroke-\\[2\\.5px\\]:is(.dark *){stroke-width:2.5px}.dark\\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\\:text-red-200:is(.dark *){color:var(--color-red-200)}@media (hover:hover){.dark\\:hover\\:bg-accent:is(.dark *):hover,.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\\:hover\\:bg-accent\\/60:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/60:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)60%,transparent)}}.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:color-mix(in oklab,var(--muted-foreground)30%,transparent)}}}.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&_svg\\]\\:text-background svg{color:var(--background)}.\\[\\&_svg\\]\\:text-black svg{color:var(--color-black)}@media (hover:hover){.hover\\:\\[\\&_svg\\]\\:text-destructive:hover svg{color:var(--destructive)}}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\\[\\&\\:last-child\\>td\\:first-child\\]\\:rounded-bl-lg:last-child>td:first-child{border-bottom-left-radius:var(--radius)}.\\[\\&\\:last-child\\>td\\:last-child\\]\\:rounded-br-lg:last-child>td:last-child{border-bottom-right-radius:var(--radius)}.\\[\\&\\:nth-child\\(n\\+3\\)\\]\\:hidden:nth-child(n+3){display:none}@container (min-width:28rem){.\\@md\\:\\[\\&\\:nth-child\\(n\\+3\\)\\]\\:block:nth-child(n+3){display:block}}.\\[\\&\\:where\\(\\>\\*\\)\\]\\:col-start-2:where(){grid-column-start:2}.only\\:\\[\\&\\>\\#attachment-tile\\]\\:size-24:only-child>#attachment-tile{width:calc(var(--spacing)*24);height:calc(var(--spacing)*24)}.\\[\\&\\>\\.aui-thread-root\\]\\:bg-inherit>.aui-thread-root{background-color:inherit}.\\[\\&\\>a\\]\\:text-xs>a{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\>a\\]\\:no-underline>a{text-decoration-line:none}.\\[\\&\\>button\\]\\:rounded-full>button{border-radius:3.40282e38px}.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:color-mix(in oklab,var(--foreground)60%,transparent)}}.\\[\\&\\>button\\]\\:p-1>button{padding:calc(var(--spacing)*1)}.\\[\\&\\>button\\]\\:opacity-100>button{opacity:1}.\\[\\&\\>button\\]\\:\\!ring-0>button{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}@media (hover:hover){.\\[\\&\\>button\\]\\:hover\\:\\[\\&_svg\\]\\:text-destructive>button:hover svg{color:var(--destructive)}}.\\[\\&\\>li\\]\\:mt-0\\.5>li{margin-top:calc(var(--spacing)*.5)}.\\[\\&\\>li\\]\\:mt-1>li{margin-top:calc(var(--spacing)*1)}.\\[\\&\\>span\\]\\:text-xs>span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\[align\\=center\\]\\]\\:text-center[align=center]{text-align:center}.\\[\\&\\[align\\=right\\]\\]\\:text-right[align=right]{text-align:right}}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(200%)}}@keyframes subtle-pulse{0%,to{opacity:1}50%{opacity:.85}}@keyframes smooth-slide-down{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes gradient-shift{0%,to{transform:translate(0%)translateY(0%)}25%{transform:translate(100%)translateY(100%)}50%{transform:translate(100%)translateY(0%)}75%{transform:translate(0%)translateY(100%)}}@keyframes float{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(-30px)translate(20px)}66%{transform:translateY(20px)translate(-20px)}}@keyframes float-delayed{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(30px)translate(-30px)}66%{transform:translateY(-20px)translate(20px)}}.tool-card-transition{transition:all .4s cubic-bezier(.34,1.56,.64,1)}.tool-card-smooth{transition:all .35s cubic-bezier(.4,0,.2,1)}.animate-fadeInUp{opacity:0;animation:.5s ease-out forwards fadeInUp}.animate-gradient-shift{background-size:200% 200%;animation:20s ease-in-out infinite gradient-shift}.animate-float-slow{animation:20s ease-in-out infinite float}.animate-float-delayed{animation:25s ease-in-out 5s infinite float-delayed}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}@keyframes tool-border-rotate{0%{--tool-border-angle:0deg}to{--tool-border-angle:360deg}}@property --tool-border-angle{syntax:\"<angle>\";inherits:false;initial-value:0deg}.tool-border-calling{background:conic-gradient(from var(--tool-border-angle),transparent 0deg,transparent 60deg,#3b82f680 90deg,#60a5fab3 120deg,#93c5fd80 150deg,transparent 180deg,transparent 360deg);animation:1.5s linear infinite tool-border-rotate}.tool-border-success{background:#22c55e66;box-shadow:0 0 12px #22c55e4d,inset 0 0 8px #22c55e1a}.tool-border-error{background:#ef444466;box-shadow:0 0 12px #ef44444d,inset 0 0 8px #ef44441a}@keyframes pulse-success{0%,to{box-shadow:0 0 #22c55e66}50%{box-shadow:0 0 0 8px #22c55e00}}@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.animate-pulse-success{animation:.6s ease-out pulse-success}.animate-shake{animation:.3s ease-out shake}@keyframes aui-pulse{50%{opacity:.5}}:where(.aui-md[data-status=running]):empty:after,:where(.aui-md[data-status=running])>:where(:not(ol):not(ul):not(pre)):last-child:after,:where(.aui-md[data-status=running])>pre:last-child code:after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child):after{--aui-content:\"●\";content:var(--aui-content);margin-left:.25rem;margin-right:.25rem;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;animation:2s cubic-bezier(.4,0,.6,1) infinite aui-pulse}.glass-pill{-webkit-backdrop-filter:blur(20px)saturate(150%);background:#0f172ad9;border:1px solid #ffffff0f;box-shadow:0 4px 16px #0003,inset 0 .5px #ffffff14}.glass-pill:before{content:\"\";border-radius:inherit;pointer-events:none;z-index:1;background:linear-gradient(#ffffff0a 0%,#0000 40%);position:absolute;inset:0}.glass-pill:after{display:none}.glass-pill-collapsed{-webkit-backdrop-filter:blur(12px);background:#ffffff1f;border:none;box-shadow:0 1px 4px #00000026}.glass-pill-collapsed:before,.glass-pill-collapsed:after{display:none}.glass-pill-hovered{-webkit-backdrop-filter:blur(16px)saturate(140%);background:#0f172acc;border:1px solid #ffffff0f;box-shadow:0 2px 12px #0000002e}.glass-pill-hovered:before,.glass-pill-hovered:after{display:none}@keyframes glass-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.glass-shimmer{background:linear-gradient(90deg,#ffffff14 0%,#ffffff26 50%,#ffffff14 100%) 0 0/200% 100%;animation:4s ease-in-out infinite glass-shimmer}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:#fff3 transparent}.scrollbar-thin::-webkit-scrollbar{width:4px;height:4px}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:#fff3;border-radius:9999px}.scrollbar-thin::-webkit-scrollbar-track{background-color:#0000}@property --tw-border-spacing-x{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:\"<length>\";inherits:false;initial-value:0}@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-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{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-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@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}@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}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
|
|
7688
|
+
const WEBMCP_STYLES = "/*! tailwindcss v4.1.17 | MIT License | https://tailwindcss.com */\n@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-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking: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-outline-style:solid;--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;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tool-border-angle:0deg}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-500:oklch(79.5% .184 86.047);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-emerald-500:oklch(69.6% .17 162.48);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-indigo-500:oklch(58.5% .233 277.117);--color-purple-600:oklch(55.8% .288 302.321);--color-slate-900:oklch(20.8% .042 265.755);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--drop-shadow-xl:0 9px 7px #0000001a;--drop-shadow-2xl:0 25px 25px #00000026;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--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(--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(--default-font-feature-settings,normal);font-variation-settings:var(--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(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--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}:root{--radius:.75rem;--background:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--card:oklch(100% 0 0);--card-foreground:oklch(14.1% .005 285.823);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.1% .005 285.823);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--accent-foreground:oklch(21% .006 285.885);--destructive:oklch(57.7% .245 27.325);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--ring:oklch(70.5% .015 286.067)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--card:oklch(21% .006 285.885);--card-foreground:oklch(98.5% 0 0);--popover:oklch(21% .006 285.885);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(70.5% .015 286.067);--accent:oklch(27.4% .006 286.033);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--destructive-foreground:oklch(98.5% 0 0);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.2% .016 285.938)}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklch,var(--ring),transparent 50%)}}body{background-color:var(--background);color:var(--foreground)}}@layer components{.app-shell{z-index:0;background-color:var(--background);background-image:radial-gradient(80% 60% at -10% -10%,oklch(82% .15 270/.15),#0000),radial-gradient(60% 50% at 110% 10%,oklch(85% .1 220/.12),#0000),radial-gradient(50% 45% at 50% 120%,oklch(95% .02 250/.08),#0000);position:relative}.dark .app-shell{background-image:radial-gradient(80% 60% at -10% -10%,oklch(55% .14 270/.25),#0000),radial-gradient(60% 50% at 110% 15%,oklch(60% .12 220/.22),#0000),radial-gradient(50% 45% at 50% 120%,oklch(35% .04 250/.16),#0000)}.app-shell:before,.app-shell:after{content:\"\";pointer-events:none;filter:blur(32px);opacity:.6;z-index:-1;border-radius:9999px;position:absolute;inset:auto}.app-shell:before{background:radial-gradient(60% 60% at 40% 40%,oklch(80% .12 270/.3),#0000);width:260px;height:260px;top:-60px;left:-80px}.app-shell:after{background:radial-gradient(60% 60% at 60% 60%,oklch(84% .1 220/.25),#0000);width:300px;height:300px;bottom:-80px;right:-60px}.toolbar-surface{border-top:1px solid var(--border);background:linear-gradient(to right,var(--background),var(--background),var(--background))}@supports (color:color-mix(in lab, red, red)){.toolbar-surface{background:linear-gradient(to right,var(--background),color-mix(in oklch,var(--background),transparent 5%),var(--background))}}.toolbar-surface{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.toolbar-surface{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.toolbar-surface{background:color-mix(in oklch,var(--background),transparent 20%)}}}.toolbar-surface-top{border-bottom:1px solid var(--border);background:linear-gradient(to right,var(--background),var(--background),var(--background))}@supports (color:color-mix(in lab, red, red)){.toolbar-surface-top{background:linear-gradient(to right,var(--background),color-mix(in oklch,var(--background),transparent 5%),var(--background))}}.toolbar-surface-top{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@supports ((-webkit-backdrop-filter:blur(12px)) or (backdrop-filter:blur(12px))){.toolbar-surface-top{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.toolbar-surface-top{background:color-mix(in oklch,var(--background),transparent 20%)}}}.toolbar-inner{justify-content:space-between;align-items:center;padding:.5rem .75rem;display:flex}.toolbar-card{background:var(--card);justify-content:space-between;align-items:center;gap:.5rem;display:flex}@supports (color:color-mix(in lab, red, red)){.toolbar-card{background:color-mix(in oklch,var(--card),transparent 60%)}}.toolbar-card{border:1px solid var(--border);border-radius:.75rem;padding:.5rem .75rem}.toolbar-group{align-items:center;gap:.25rem;display:flex}.btn-toolbar-primary{background:linear-gradient(to right,var(--primary),var(--primary));border-radius:.75rem;align-items:center;gap:.5rem;height:2.25rem;padding:0 .75rem;display:flex}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary{background:linear-gradient(to right,color-mix(in oklch,var(--primary),transparent 95%),color-mix(in oklch,var(--primary),transparent 90%))}}.btn-toolbar-primary{border:1px solid var(--primary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary{border:1px solid color-mix(in oklch,var(--primary),transparent 80%)}}.btn-toolbar-primary{transition:all .2s}.btn-toolbar-primary:hover{background:linear-gradient(to right,var(--primary),var(--primary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-primary:hover{background:linear-gradient(to right,color-mix(in oklch,var(--primary),transparent 90%),color-mix(in oklch,var(--primary),transparent 80%))}}.btn-toolbar-icon-primary{background:linear-gradient(to bottom right,var(--primary),var(--primary));border-radius:9999px;width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--primary),transparent 90%),color-mix(in oklch,var(--primary),transparent 80%))}}.btn-toolbar-icon-primary{border:1px solid var(--primary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary{border:1px solid color-mix(in oklch,var(--primary),transparent 70%)}}.btn-toolbar-icon-primary{transition:all .2s;box-shadow:0 1px 2px #0000000d}.btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,var(--primary),var(--primary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-primary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--primary),transparent 80%),color-mix(in oklch,var(--primary),transparent 70%))}}.btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,var(--secondary),var(--secondary));border-radius:9999px;width:2rem;height:2rem;padding:0}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary{background:linear-gradient(to bottom right,color-mix(in oklch,var(--secondary),transparent 90%),color-mix(in oklch,var(--secondary),transparent 80%))}}.btn-toolbar-icon-secondary{border:1px solid var(--secondary)}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary{border:1px solid color-mix(in oklch,var(--secondary),transparent 70%)}}.btn-toolbar-icon-secondary{transition:all .2s;box-shadow:0 1px 2px #0000000d}.btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,var(--secondary),var(--secondary))}@supports (color:color-mix(in lab, red, red)){.btn-toolbar-icon-secondary:hover{background:linear-gradient(to bottom right,color-mix(in oklch,var(--secondary),transparent 80%),color-mix(in oklch,var(--secondary),transparent 70%))}}.badge-compact{height:1.25rem;padding:0 .5rem;font-size:10px}.badge-mini{height:1rem;padding:0 .375rem;font-size:10px}@keyframes shimmer-bg{0%{background-position:-1000px 0}to{background-position:1000px 0}}.shimmer{background:linear-gradient(90deg,#0000,#ffffff1a,#0000) 0 0/1000px 100%;animation:3s linear infinite shimmer-bg}.animate-shimmer{animation:2s linear infinite shimmer}@keyframes pulse-glow{0%,to{box-shadow:0 0 20px rgba(var(--primary),.1)}50%{box-shadow:0 0 30px rgba(var(--primary),.2)}}.pulse-glow{animation:2s ease-in-out infinite pulse-glow}@keyframes gradient-x{0%,to{background-position:0%}50%{background-position:100%}}.animate-gradient-x{animation:8s ease-in-out infinite gradient-x}.gradient-text{background:linear-gradient(to right,var(--foreground),var(--foreground))}@supports (color:color-mix(in lab, red, red)){.gradient-text{background:linear-gradient(to right,var(--foreground),color-mix(in oklch,var(--foreground),transparent 30%))}}.gradient-text{-webkit-text-fill-color:transparent;-webkit-background-clip:text;background-clip:text}.glass{background:var(--background)}@supports (color:color-mix(in lab, red, red)){.glass{background:color-mix(in oklch,var(--background),transparent 50%)}}.glass{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border:1px solid var(--border)}@supports (color:color-mix(in lab, red, red)){.glass{border:1px solid color-mix(in oklch,var(--border),transparent 50%)}}.tool-card{transition:all .3s ease-out}.tool-card:hover{transform:scale(1.02);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -2px #0000000d}.scrollbar-thin{scrollbar-width:thin}.scrollbar-thin::-webkit-scrollbar{width:6px;height:6px}.scrollbar-thin::-webkit-scrollbar-track{background:0 0}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.scrollbar-thin::-webkit-scrollbar-thumb{background-color:color-mix(in oklch,var(--primary),transparent 80%)}}.scrollbar-thin::-webkit-scrollbar-thumb{border-radius:3px}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklch,var(--primary),transparent 70%)}}}@layer utilities{.\\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.-inset-\\[1px\\]{inset:-1px}.inset-0{inset:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.-top-12{top:calc(var(--spacing)*-12)}.top-0{top:calc(var(--spacing)*0)}.top-1\\.5{top:calc(var(--spacing)*1.5)}.top-1\\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\\[50\\%\\]{top:50%}.-right-1{right:calc(var(--spacing)*-1)}.right-0{right:calc(var(--spacing)*0)}.right-1\\.5{right:calc(var(--spacing)*1.5)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-6{right:calc(var(--spacing)*6)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-6{bottom:calc(var(--spacing)*6)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing)*0)}.left-1\\/2,.left-\\[50\\%\\]{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-2{margin-block:calc(var(--spacing)*2)}.my-auto{margin-block:auto}.-mt-1{margin-top:calc(var(--spacing)*-1)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.-mr-1{margin-right:calc(var(--spacing)*-1)}.mr-1\\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.-mb-1{margin-bottom:calc(var(--spacing)*-1)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.-ml-2{margin-left:calc(var(--spacing)*-2)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1}.size-2\\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-6{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.size-8{width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-14{width:calc(var(--spacing)*14);height:calc(var(--spacing)*14)}.size-\\[34px\\]{width:34px;height:34px}.size-full{width:100%;height:100%}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-\\[600px\\]{height:600px}.h-\\[calc\\(100\\%-60px\\)\\]{height:calc(100% - 60px)}.h-auto{height:auto}.h-full{height:100%}.max-h-24{max-height:calc(var(--spacing)*24)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-\\[80dvh\\]{max-height:80dvh}.max-h-\\[80vh\\]{max-height:80vh}.max-h-\\[200px\\]{max-height:200px}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-\\[60px\\]{min-height:60px}.min-h-screen{min-height:100vh}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-2\\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-\\[500px\\]{width:500px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-7\\/8{max-width:87.5%}.max-w-16{max-width:calc(var(--spacing)*16)}.max-w-24{max-width:calc(var(--spacing)*24)}.max-w-\\[80\\%\\]{max-width:80%}.max-w-\\[80px\\]{max-width:80px}.max-w-\\[85\\%\\]{max-width:85%}.max-w-\\[100px\\]{max-width:100px}.max-w-\\[150px\\]{max-width:150px}.max-w-\\[200px\\]{max-width:200px}.max-w-\\[250px\\]{max-width:250px}.max-w-\\[280px\\]{max-width:280px}.max-w-\\[calc\\(100\\%-2rem\\)\\]{max-width:calc(100% - 2rem)}.max-w-\\[var\\(--thread-max-width\\)\\]{max-width:var(--thread-max-width)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[200px\\]{min-width:200px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y)}.origin-\\(--radix-tooltip-content-transform-origin\\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\\[-50\\%\\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[-50\\%\\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\\[calc\\(-50\\%_-_2px\\)\\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize-none{resize:none}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.auto-rows-auto{grid-auto-rows:auto}.grid-cols-\\[minmax\\(72px\\,1fr\\)_auto\\]{grid-template-columns:minmax(72px,1fr) auto}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.gap-y-2{row-gap:calc(var(--spacing)*2)}.self-center{align-self:center}.self-end{align-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\\[2px\\]{border-radius:2px}.rounded-\\[14px\\]{border-radius:14px}.rounded-\\[inherit\\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.\\!rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-tr-sm{border-top-right-radius:calc(var(--radius) - 4px)}.rounded-b-lg{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-dotted{--tw-border-style:dotted;border-style:dotted}.border-blue-500\\/40{border-color:#3080ff66}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/40{border-color:color-mix(in oklab,var(--color-blue-500)40%,transparent)}}.border-blue-500\\/60{border-color:#3080ff99}@supports (color:color-mix(in lab, red, red)){.border-blue-500\\/60{border-color:color-mix(in oklab,var(--color-blue-500)60%,transparent)}}.border-border,.border-border\\/20{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/20{border-color:color-mix(in oklab,var(--border)20%,transparent)}}.border-border\\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.border-border\\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-destructive,.border-destructive\\/60{border-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.border-destructive\\/60{border-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.border-foreground\\/20{border-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.border-foreground\\/20{border-color:color-mix(in oklab,var(--foreground)20%,transparent)}}.border-green-500\\/20{border-color:#00c75833}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/20{border-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.border-green-500\\/40{border-color:#00c75866}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/40{border-color:color-mix(in oklab,var(--color-green-500)40%,transparent)}}.border-green-500\\/60{border-color:#00c75899}@supports (color:color-mix(in lab, red, red)){.border-green-500\\/60{border-color:color-mix(in oklab,var(--color-green-500)60%,transparent)}}.border-input{border-color:var(--input)}.border-muted-foreground\\/20{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\\/20{border-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.border-primary\\/60{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.border-primary\\/60{border-color:color-mix(in oklab,var(--primary)60%,transparent)}}.border-red-500\\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/20{border-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.border-red-500\\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/40{border-color:color-mix(in oklab,var(--color-red-500)40%,transparent)}}.border-red-500\\/60{border-color:#fb2c3699}@supports (color:color-mix(in lab, red, red)){.border-red-500\\/60{border-color:color-mix(in oklab,var(--color-red-500)60%,transparent)}}.border-transparent{border-color:#0000}.border-white\\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.border-white\\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200\\/50{border-color:#e4e4e780}@supports (color:color-mix(in lab, red, red)){.border-zinc-200\\/50{border-color:color-mix(in oklab,var(--color-zinc-200)50%,transparent)}}.border-zinc-200\\/80{border-color:#e4e4e7cc}@supports (color:color-mix(in lab, red, red)){.border-zinc-200\\/80{border-color:color-mix(in oklab,var(--color-zinc-200)80%,transparent)}}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_20\\%\\,transparent\\)\\]{background-color:rgb(var(--background))}@supports (color:color-mix(in lab, red, red)){.bg-\\[color-mix\\(in_oklab\\,rgb\\(var\\(--background\\)\\)_20\\%\\,transparent\\)\\]{background-color:color-mix(in oklab,rgb(var(--background))20%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background,.bg-background\\/50{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/50{background-color:color-mix(in oklab,var(--background)50%,transparent)}}.bg-background\\/80{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/80{background-color:color-mix(in oklab,var(--background)80%,transparent)}}.bg-background\\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-400{background-color:var(--color-blue-400)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\\/5{background-color:#3080ff0d}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/5{background-color:color-mix(in oklab,var(--color-blue-500)5%,transparent)}}.bg-blue-500\\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab, red, red)){.bg-blue-500\\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.bg-border{background-color:var(--border)}.bg-destructive,.bg-destructive\\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-400\\/60{background-color:#05df7299}@supports (color:color-mix(in lab, red, red)){.bg-green-400\\/60{background-color:color-mix(in oklab,var(--color-green-400)60%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\\/5{background-color:#00c7580d}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/5{background-color:color-mix(in oklab,var(--color-green-500)5%,transparent)}}.bg-green-500\\/10{background-color:#00c7581a}@supports (color:color-mix(in lab, red, red)){.bg-green-500\\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\\/15{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.bg-muted-foreground\\/15{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.bg-muted\\/5{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/5{background-color:color-mix(in oklab,var(--muted)5%,transparent)}}.bg-muted\\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-popover\\/95{background-color:var(--popover)}@supports (color:color-mix(in lab, red, red)){.bg-popover\\/95{background-color:color-mix(in oklab,var(--popover)95%,transparent)}}.bg-primary,.bg-primary\\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/5{background-color:color-mix(in oklab,var(--color-red-500)5%,transparent)}}.bg-red-500\\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.bg-red-500\\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.bg-red-500\\/20{background-color:color-mix(in oklab,var(--color-red-500)20%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-slate-900\\/95{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.bg-slate-900\\/95{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.bg-white\\/5{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-white\\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\\/10{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.bg-white\\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-indigo-500{--tw-gradient-from:var(--color-indigo-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.fill-foreground{fill:var(--foreground)}.stroke-\\[1\\.5px\\]{stroke-width:1.5px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-px{padding:1px}.px-0{padding-inline:calc(var(--spacing)*0)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.pt-0\\.5{padding-top:calc(var(--spacing)*.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.text-\\[15px\\]{font-size:15px}.text-\\[17px\\]{font-size:17px}.text-\\[19px\\]{font-size:19px}.text-\\[21px\\]{font-size:21px}.text-\\[25px\\]{font-size:25px}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--background)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-emerald-500{color:var(--color-emerald-500)}.text-foreground,.text-foreground\\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-green-400{color:var(--color-green-400)}.text-green-600{color:var(--color-green-600)}.text-muted-foreground,.text-muted-foreground\\/65{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/65{color:color-mix(in oklab,var(--muted-foreground)65%,transparent)}}.text-muted-foreground\\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.text-white\\/20{color:#fff3}@supports (color:color-mix(in lab, red, red)){.text-white\\/20{color:color-mix(in oklab,var(--color-white)20%,transparent)}}.text-white\\/30{color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.text-white\\/30{color:color-mix(in oklab,var(--color-white)30%,transparent)}}.text-white\\/40{color:#fff6}@supports (color:color-mix(in lab, red, red)){.text-white\\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\\/50{color:#ffffff80}@supports (color:color-mix(in lab, red, red)){.text-white\\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.text-white\\/60{color:#fff9}@supports (color:color-mix(in lab, red, red)){.text-white\\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-white\\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\\/70{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.text-white\\/80{color:#fffc}@supports (color:color-mix(in lab, red, red)){.text-white\\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-white\\/90{color:#ffffffe6}@supports (color:color-mix(in lab, red, red)){.text-white\\/90{color:color-mix(in oklab,var(--color-white)90%,transparent)}}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-700{color:var(--color-zinc-700)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.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,)}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.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)}.shadow-\\[0_0_12px_rgba\\(34\\,197\\,94\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#22c55e4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(59\\,130\\,246\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#3b82f64d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_12px_rgba\\(239\\,68\\,68\\,0\\.3\\)\\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#ef44444d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_12px_24px_-16px_rgba\\(37\\,99\\,235\\,0\\.55\\)\\]{--tw-shadow:0 12px 24px -16px var(--tw-shadow-color,#2563eb8c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_12px_24px_-18px_rgba\\(220\\,38\\,38\\,0\\.55\\)\\]{--tw-shadow:0 12px 24px -18px var(--tw-shadow-color,#dc26268c);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px 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)}.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)}.ring{--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)}.\\[box-shadow\\:inset_0_1px_2px_0_rgba\\(255\\,255\\,255\\,0\\.15\\)\\]{box-shadow:inset 0 1px 2px #ffffff26}.shadow-black\\/10{--tw-shadow-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/10{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)10%,transparent)var(--tw-shadow-alpha),transparent)}}.shadow-black\\/15{--tw-shadow-color:#00000026}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/15{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)15%,transparent)var(--tw-shadow-alpha),transparent)}}.shadow-black\\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.shadow-black\\/20{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)20%,transparent)var(--tw-shadow-alpha),transparent)}}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.drop-shadow-xl{--tw-drop-shadow-size:drop-shadow(0 9px 7px var(--tw-drop-shadow-color,#0000001a));--tw-drop-shadow:drop-shadow(var(--drop-shadow-xl));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,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--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,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[color\\,box-shadow\\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.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(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-transform{will-change:transform}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:text-zinc-900:is(:where(.group):hover *){color:var(--color-zinc-900)}.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-muted-foreground::placeholder,.placeholder\\:text-muted-foreground\\/70::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-muted-foreground\\/70::placeholder{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.placeholder\\:text-white\\/40::placeholder{color:#fff6}@supports (color:color-mix(in lab, red, red)){.placeholder\\:text-white\\/40::placeholder{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.first\\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\\:mt-3:first-child{margin-top:calc(var(--spacing)*3)}.first\\:mt-4:first-child{margin-top:calc(var(--spacing)*4)}.first\\:rounded-tl-lg:first-child{border-top-left-radius:var(--radius)}.first\\:border-t:first-child{border-top-style:var(--tw-border-style);border-top-width:1px}.last\\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\\:mb-5:last-child{margin-bottom:calc(var(--spacing)*5)}.last\\:mb-24:last-child{margin-bottom:calc(var(--spacing)*24)}.last\\:rounded-tr-lg:last-child{border-top-right-radius:var(--radius)}.last\\:border-r:last-child{border-right-style:var(--tw-border-style);border-right-width:1px}.empty\\:hidden:empty{display:none}.focus-within\\:border-ring\\/50:focus-within{border-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-ring\\/50:focus-within{border-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-within\\:border-white\\/20:focus-within{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.focus-within\\:border-white\\/20:focus-within{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.focus-within\\:bg-white\\/15:focus-within{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.focus-within\\:bg-white\\/15:focus-within{background-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.focus-within\\:shadow-2xl:focus-within{--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)}.focus-within\\:shadow-md:focus-within{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\\:ring-2:focus-within{--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)}.focus-within\\:shadow-black\\/30:focus-within{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.focus-within\\:shadow-black\\/30:focus-within{--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)30%,transparent)var(--tw-shadow-alpha),transparent)}}.focus-within\\:ring-ring:focus-within{--tw-ring-color:var(--ring)}.focus-within\\:ring-offset-2:focus-within{--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)}@media (hover:hover){.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-accent:hover{border-color:var(--accent)}.hover\\:border-border\\/60:hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.hover\\:border-border\\/60:hover{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.hover\\:border-white\\/15:hover{border-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/15:hover{border-color:color-mix(in oklab,var(--color-white)15%,transparent)}}.hover\\:border-white\\/20:hover{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/20:hover{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.hover\\:\\!bg-white:hover{background-color:var(--color-white)!important}.hover\\:bg-accent:hover,.hover\\:bg-accent\\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-accent\\/50:hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.hover\\:bg-destructive\\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/10:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.hover\\:bg-destructive\\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}}.hover\\:bg-destructive\\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-destructive\\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\\:bg-muted-foreground\\/15:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-muted-foreground\\/15:hover{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.hover\\:bg-primary\\/80:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/80:hover{background-color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\\:bg-primary\\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-primary\\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\\:bg-red-500\\/30:hover{background-color:#fb2c364d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-red-500\\/30:hover{background-color:color-mix(in oklab,var(--color-red-500)30%,transparent)}}.hover\\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\\:bg-secondary\\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-secondary\\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\\:bg-transparent:hover{background-color:#0000}.hover\\:bg-white:hover{background-color:var(--color-white)}.hover\\:bg-white\\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/5:hover{background-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.hover\\:bg-white\\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/10:hover{background-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.hover\\:bg-white\\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-white\\/20:hover{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.hover\\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\\:text-destructive:hover{color:var(--destructive)}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-primary\\/80:hover{color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\\:text-primary\\/80:hover{color:color-mix(in oklab,var(--primary)80%,transparent)}}.hover\\:text-red-200:hover{color:var(--color-red-200)}.hover\\:text-red-300:hover{color:var(--color-red-300)}.hover\\:text-white:hover{color:var(--color-white)}.hover\\:text-white\\/70:hover{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.hover\\:text-white\\/70:hover{color:color-mix(in oklab,var(--color-white)70%,transparent)}}.hover\\:underline:hover{text-decoration-line:underline}.hover\\:opacity-75:hover{opacity:.75}.hover\\:opacity-100:hover{opacity:1}.hover\\:shadow-2xl:hover{--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)}.hover\\:shadow-\\[0_14px_24px_-14px_rgba\\(37\\,99\\,235\\,0\\.6\\)\\]:hover{--tw-shadow:0 14px 24px -14px var(--tw-shadow-color,#2563eb99);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:shadow-\\[0_14px_24px_-16px_rgba\\(220\\,38\\,38\\,0\\.6\\)\\]:hover{--tw-shadow:0 14px 24px -16px var(--tw-shadow-color,#dc262699);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\\:drop-shadow-2xl:hover{--tw-drop-shadow-size:drop-shadow(0 25px 25px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-2xl));filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}.focus\\:ring-2:focus{--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)}.focus\\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\\:ring-offset-2:focus{--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)}.focus\\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + 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)}.focus-visible\\:ring-1:focus-visible{--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)}.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)}.focus-visible\\:ring-\\[3px\\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + 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)}.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-destructive\\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.focus-visible\\:ring-primary\\/40:focus-visible{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-primary\\/40:focus-visible{--tw-ring-color:color-mix(in oklab,var(--primary)40%,transparent)}}.focus-visible\\:ring-ring:focus-visible,.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-ring\\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\\:ring-white\\/30:focus-visible{--tw-ring-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.focus-visible\\:ring-white\\/30:focus-visible{--tw-ring-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.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)}.focus-visible\\:ring-offset-transparent:focus-visible{--tw-ring-offset-color:transparent}.focus-visible\\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.active\\:cursor-grabbing:active{cursor:grabbing}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:invisible:disabled{visibility:hidden}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:opacity-50:disabled{opacity:.5}.has-\\[\\>svg\\]\\:px-2\\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\\[\\>svg\\]\\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\\[\\>svg\\]\\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-invalid\\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\\:ring-destructive\\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-floating\\:absolute[data-floating]{position:absolute}.data-floating\\:rounded-md[data-floating]{border-radius:calc(var(--radius) - 2px)}.data-floating\\:border[data-floating]{border-style:var(--tw-border-style);border-width:1px}.data-floating\\:bg-background[data-floating]{background-color:var(--background)}.data-floating\\:p-1[data-floating]{padding:calc(var(--spacing)*1)}.data-floating\\:shadow-sm[data-floating]{--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)}.data-\\[orientation\\=horizontal\\]\\:h-px[data-orientation=horizontal]{height:1px}.data-\\[orientation\\=horizontal\\]\\:w-full[data-orientation=horizontal]{width:100%}.data-\\[orientation\\=vertical\\]\\:h-full[data-orientation=vertical]{height:100%}.data-\\[orientation\\=vertical\\]\\:w-px[data-orientation=vertical]{width:1px}.data-\\[state\\=closed\\]\\:scale-0[data-state=closed]{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=closed\\]\\:scale-100[data-state=closed]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=closed\\]\\:-rotate-90[data-state=closed]{rotate:-90deg}.data-\\[state\\=closed\\]\\:rotate-0[data-state=closed]{rotate:none}.data-\\[state\\=open\\]\\:scale-0[data-state=open]{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=open\\]\\:scale-100[data-state=open]{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y)}.data-\\[state\\=open\\]\\:rotate-0[data-state=open]{rotate:none}.data-\\[state\\=open\\]\\:rotate-90[data-state=open]{rotate:90deg}.data-\\[state\\=open\\]\\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}@media (min-width:40rem){.sm\\:max-w-3xl{max-width:var(--container-3xl)}.sm\\:max-w-lg{max-width:var(--container-lg)}.sm\\:max-w-md{max-width:var(--container-md)}.sm\\:flex-row{flex-direction:row}.sm\\:justify-end{justify-content:flex-end}.sm\\:text-left{text-align:left}}@media (min-width:48rem){.md\\:pb-6{padding-bottom:calc(var(--spacing)*6)}}@container (min-width:28rem){.\\@md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\\@md\\:flex-col{flex-direction:column}}.dark\\:border-input:is(.dark *){border-color:var(--input)}.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:border-muted-foreground\\/15:is(.dark *){border-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.dark\\:border-zinc-700\\/50:is(.dark *){border-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){.dark\\:border-zinc-700\\/50:is(.dark *){border-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}.dark\\:border-zinc-700\\/80:is(.dark *){border-color:#3f3f46cc}@supports (color:color-mix(in lab, red, red)){.dark\\:border-zinc-700\\/80:is(.dark *){border-color:color-mix(in oklab,var(--color-zinc-700)80%,transparent)}}.dark\\:bg-background:is(.dark *){background-color:var(--background)}.dark\\:bg-destructive\\/5:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/5:is(.dark *){background-color:color-mix(in oklab,var(--destructive)5%,transparent)}}.dark\\:bg-destructive\\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-destructive\\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\\:bg-input\\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-input\\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\\:bg-muted-foreground\\/20:is(.dark *){background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-muted-foreground\\/20:is(.dark *){background-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.dark\\:bg-zinc-700:is(.dark *){background-color:var(--color-zinc-700)}.dark\\:bg-zinc-800:is(.dark *){background-color:var(--color-zinc-800)}.dark\\:bg-zinc-800\\/95:is(.dark *){background-color:#27272af2}@supports (color:color-mix(in lab, red, red)){.dark\\:bg-zinc-800\\/95:is(.dark *){background-color:color-mix(in oklab,var(--color-zinc-800)95%,transparent)}}.dark\\:stroke-\\[2\\.5px\\]:is(.dark *){stroke-width:2.5px}.dark\\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\\:text-red-200:is(.dark *){color:var(--color-red-200)}.dark\\:text-zinc-200:is(.dark *){color:var(--color-zinc-200)}.dark\\:text-zinc-400:is(.dark *){color:var(--color-zinc-400)}.dark\\:text-zinc-500:is(.dark *){color:var(--color-zinc-500)}.dark\\:shadow-black\\/30:is(.dark *){--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.dark\\:shadow-black\\/30:is(.dark *){--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)30%,transparent)var(--tw-shadow-alpha),transparent)}}.dark\\:shadow-black\\/40:is(.dark *){--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.dark\\:shadow-black\\/40:is(.dark *){--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-black)40%,transparent)var(--tw-shadow-alpha),transparent)}}@media (hover:hover){.dark\\:group-hover\\:text-white:is(.dark *):is(:where(.group):hover *){color:var(--color-white)}.dark\\:hover\\:bg-accent:is(.dark *):hover,.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\\:hover\\:bg-accent\\/60:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-accent\\/60:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)60%,transparent)}}.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-input\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-muted-foreground\\/30:is(.dark *):hover{background-color:color-mix(in oklab,var(--muted-foreground)30%,transparent)}}.dark\\:hover\\:bg-zinc-700:is(.dark *):hover{background-color:var(--color-zinc-700)}.dark\\:hover\\:bg-zinc-700\\/50:is(.dark *):hover{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){.dark\\:hover\\:bg-zinc-700\\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}}.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:focus-visible\\:ring-destructive\\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\\:aria-invalid\\:ring-destructive\\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.\\[\\&_svg\\]\\:pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:shrink-0 svg{flex-shrink:0}.\\[\\&_svg\\]\\:text-background svg{color:var(--background)}.\\[\\&_svg\\]\\:text-black svg{color:var(--color-black)}@media (hover:hover){.hover\\:\\[\\&_svg\\]\\:text-destructive:hover svg{color:var(--destructive)}}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\\[\\&\\:last-child\\>td\\:first-child\\]\\:rounded-bl-lg:last-child>td:first-child{border-bottom-left-radius:var(--radius)}.\\[\\&\\:last-child\\>td\\:last-child\\]\\:rounded-br-lg:last-child>td:last-child{border-bottom-right-radius:var(--radius)}.\\[\\&\\:nth-child\\(n\\+3\\)\\]\\:hidden:nth-child(n+3){display:none}@container (min-width:28rem){.\\@md\\:\\[\\&\\:nth-child\\(n\\+3\\)\\]\\:block:nth-child(n+3){display:block}}.\\[\\&\\:where\\(\\>\\*\\)\\]\\:col-start-2:where(){grid-column-start:2}.only\\:\\[\\&\\>\\#attachment-tile\\]\\:size-24:only-child>#attachment-tile{width:calc(var(--spacing)*24);height:calc(var(--spacing)*24)}.\\[\\&\\>\\.aui-thread-root\\]\\:bg-inherit>.aui-thread-root{background-color:inherit}.\\[\\&\\>a\\]\\:text-xs>a{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\>a\\]\\:no-underline>a{text-decoration-line:none}.\\[\\&\\>button\\]\\:rounded-full>button{border-radius:3.40282e38px}.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.\\[\\&\\>button\\]\\:bg-foreground\\/60>button{background-color:color-mix(in oklab,var(--foreground)60%,transparent)}}.\\[\\&\\>button\\]\\:p-1>button{padding:calc(var(--spacing)*1)}.\\[\\&\\>button\\]\\:opacity-100>button{opacity:1}.\\[\\&\\>button\\]\\:\\!ring-0>button{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}@media (hover:hover){.\\[\\&\\>button\\]\\:hover\\:\\[\\&_svg\\]\\:text-destructive>button:hover svg{color:var(--destructive)}}.\\[\\&\\>li\\]\\:mt-0\\.5>li{margin-top:calc(var(--spacing)*.5)}.\\[\\&\\>li\\]\\:mt-1>li{margin-top:calc(var(--spacing)*1)}.\\[\\&\\>span\\]\\:text-xs>span{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\\[\\&\\[align\\=center\\]\\]\\:text-center[align=center]{text-align:center}.\\[\\&\\[align\\=right\\]\\]\\:text-right[align=right]{text-align:right}}@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(200%)}}@keyframes subtle-pulse{0%,to{opacity:1}50%{opacity:.85}}@keyframes smooth-slide-down{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes gradient-shift{0%,to{transform:translate(0%)translateY(0%)}25%{transform:translate(100%)translateY(100%)}50%{transform:translate(100%)translateY(0%)}75%{transform:translate(0%)translateY(100%)}}@keyframes float{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(-30px)translate(20px)}66%{transform:translateY(20px)translate(-20px)}}@keyframes float-delayed{0%,to{transform:translateY(0)translate(0)}33%{transform:translateY(30px)translate(-30px)}66%{transform:translateY(-20px)translate(20px)}}.tool-card-transition{transition:all .4s cubic-bezier(.34,1.56,.64,1)}.tool-card-smooth{transition:all .35s cubic-bezier(.4,0,.2,1)}.animate-fadeInUp{opacity:0;animation:.5s ease-out forwards fadeInUp}.animate-gradient-shift{background-size:200% 200%;animation:20s ease-in-out infinite gradient-shift}.animate-float-slow{animation:20s ease-in-out infinite float}.animate-float-delayed{animation:25s ease-in-out 5s infinite float-delayed}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}@keyframes tool-border-rotate{0%{--tool-border-angle:0deg}to{--tool-border-angle:360deg}}@property --tool-border-angle{syntax:\"<angle>\";inherits:false;initial-value:0deg}.tool-border-calling{background:conic-gradient(from var(--tool-border-angle),transparent 0deg,transparent 60deg,#3b82f680 90deg,#60a5fab3 120deg,#93c5fd80 150deg,transparent 180deg,transparent 360deg);animation:1.5s linear infinite tool-border-rotate}.tool-border-success{background:#22c55e66;box-shadow:0 0 12px #22c55e4d,inset 0 0 8px #22c55e1a}.tool-border-error{background:#ef444466;box-shadow:0 0 12px #ef44444d,inset 0 0 8px #ef44441a}@keyframes pulse-success{0%,to{box-shadow:0 0 #22c55e66}50%{box-shadow:0 0 0 8px #22c55e00}}@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.animate-pulse-success{animation:.6s ease-out pulse-success}.animate-shake{animation:.3s ease-out shake}@keyframes aui-pulse{50%{opacity:.5}}:where(.aui-md[data-status=running]):empty:after,:where(.aui-md[data-status=running])>:where(:not(ol):not(ul):not(pre)):last-child:after,:where(.aui-md[data-status=running])>pre:last-child code:after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child:not(:has(*>li))):after,:where(.aui-md[data-status=running])>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child)>:where(:is(ol,ul):last-child)>:where(li:last-child):after{--aui-content:\"●\";content:var(--aui-content);margin-left:.25rem;margin-right:.25rem;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;animation:2s cubic-bezier(.4,0,.6,1) infinite aui-pulse}.glass-pill{-webkit-backdrop-filter:blur(20px)saturate(150%);background:#0f172ad9;border:1px solid #ffffff0f;box-shadow:0 4px 16px #0003,inset 0 .5px #ffffff14}.glass-pill:before{content:\"\";border-radius:inherit;pointer-events:none;z-index:1;background:linear-gradient(#ffffff0a 0%,#0000 40%);position:absolute;inset:0}.glass-pill:after{display:none}.glass-pill-collapsed{-webkit-backdrop-filter:blur(20px)saturate(150%);background:#0f172ad9;border:1px solid #ffffff0f;box-shadow:0 2px 8px #0003,inset 0 .5px #ffffff14}.glass-pill-collapsed:before,.glass-pill-collapsed:after{display:none}.glass-pill-hovered{-webkit-backdrop-filter:blur(16px)saturate(140%);background:#0f172acc;border:1px solid #ffffff0f;box-shadow:0 2px 12px #0000002e}.glass-pill-hovered:before,.glass-pill-hovered:after{display:none}@keyframes glass-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.glass-shimmer{background:linear-gradient(90deg,#ffffff14 0%,#ffffff26 50%,#ffffff14 100%) 0 0/200% 100%;animation:4s ease-in-out infinite glass-shimmer}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:#fff3 transparent}.scrollbar-thin::-webkit-scrollbar{width:4px;height:4px}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:#fff3;border-radius:9999px}.scrollbar-thin::-webkit-scrollbar-track{background-color:#0000}@property --tw-border-spacing-x{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:\"<length>\";inherits:false;initial-value:0}@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-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:\"*\";inherits:false}@property --tw-gradient-from{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:\"<color>\";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:\"*\";inherits:false}@property --tw-gradient-via-stops{syntax:\"*\";inherits:false}@property --tw-gradient-from-position{syntax:\"<length-percentage>\";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:\"<length-percentage>\";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:\"<length-percentage>\";inherits:false;initial-value:100%}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{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-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@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}@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}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
|
|
8625
7689
|
/**
|
|
8626
7690
|
* Inject the WebMCP styles into the document head.
|
|
8627
7691
|
* This is called automatically when registering the web component.
|
|
@@ -8734,93 +7798,64 @@ const VoiceMCPBridge = ({ children, tokenEndpoint, onError, onConnect, onDisconn
|
|
|
8734
7798
|
* Can be used as a React component or converted to a web component.
|
|
8735
7799
|
*/
|
|
8736
7800
|
const EmbeddedAgent = (t0) => {
|
|
8737
|
-
const $ = c(
|
|
8738
|
-
const { appId, apiBase, tokenEndpoint, autoConnectLocal: t1, viewMode: t2,
|
|
7801
|
+
const $ = c(20);
|
|
7802
|
+
const { appId, apiBase, tokenEndpoint, autoConnectLocal: t1, viewMode: t2, onToolsChange, onVoiceError, onVoiceConnect, onVoiceDisconnect } = t0;
|
|
8739
7803
|
const autoConnectLocal = t1 === void 0 ? true : t1;
|
|
8740
7804
|
const viewMode = t2 === void 0 ? "pill" : t2;
|
|
8741
|
-
const enablePlanning = t3 === void 0 ? false : t3;
|
|
8742
7805
|
const chatApi = apiBase ? `${apiBase}/api/chat` : "/api/chat";
|
|
8743
|
-
let
|
|
7806
|
+
let t3;
|
|
8744
7807
|
if ($[0] !== chatApi) {
|
|
8745
|
-
|
|
7808
|
+
t3 = new AssistantChatTransport({ api: chatApi });
|
|
8746
7809
|
$[0] = chatApi;
|
|
8747
|
-
$[1] =
|
|
8748
|
-
} else
|
|
8749
|
-
const transport =
|
|
8750
|
-
let
|
|
7810
|
+
$[1] = t3;
|
|
7811
|
+
} else t3 = $[1];
|
|
7812
|
+
const transport = t3;
|
|
7813
|
+
let t4;
|
|
8751
7814
|
if ($[2] !== transport) {
|
|
8752
|
-
|
|
7815
|
+
t4 = {
|
|
8753
7816
|
transport,
|
|
8754
7817
|
sendAutomaticallyWhen: _temp
|
|
8755
7818
|
};
|
|
8756
7819
|
$[2] = transport;
|
|
8757
|
-
$[3] =
|
|
8758
|
-
} else
|
|
8759
|
-
const runtime = useChatRuntime(
|
|
7820
|
+
$[3] = t4;
|
|
7821
|
+
} else t4 = $[3];
|
|
7822
|
+
const runtime = useChatRuntime(t4);
|
|
8760
7823
|
const [, setIsHistoryOpen] = useState(false);
|
|
8761
|
-
let
|
|
7824
|
+
let t5;
|
|
8762
7825
|
if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
|
|
8763
|
-
|
|
8764
|
-
$[4] =
|
|
8765
|
-
} else
|
|
8766
|
-
useState(
|
|
8767
|
-
let
|
|
7826
|
+
t5 = [];
|
|
7827
|
+
$[4] = t5;
|
|
7828
|
+
} else t5 = $[4];
|
|
7829
|
+
useState(t5);
|
|
7830
|
+
let t6;
|
|
8768
7831
|
if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
|
|
8769
|
-
|
|
7832
|
+
t6 = () => {
|
|
8770
7833
|
setIsHistoryOpen(true);
|
|
8771
7834
|
};
|
|
8772
|
-
$[5] =
|
|
8773
|
-
} else
|
|
8774
|
-
const handleOpenHistory =
|
|
7835
|
+
$[5] = t6;
|
|
7836
|
+
} else t6 = $[5];
|
|
7837
|
+
const handleOpenHistory = t6;
|
|
8775
7838
|
const resolvedTokenEndpoint = tokenEndpoint || (apiBase ? `${apiBase}/api/realtime/session` : void 0);
|
|
8776
7839
|
if (appId && typeof window !== "undefined") console.debug("[WebMCP] Initialized with app_id:", appId, "viewMode:", viewMode);
|
|
8777
|
-
let
|
|
7840
|
+
let t7;
|
|
8778
7841
|
if ($[6] !== resolvedTokenEndpoint || $[7] !== viewMode) {
|
|
8779
|
-
|
|
8780
|
-
if (viewMode === "pill") return /* @__PURE__ */ jsx(
|
|
7842
|
+
const renderUI = () => {
|
|
7843
|
+
if (viewMode === "pill") return /* @__PURE__ */ jsx(AgentPill, {
|
|
8781
7844
|
position: "bottom-center",
|
|
8782
7845
|
onOpenHistory: handleOpenHistory,
|
|
8783
7846
|
showVoiceButton: !!resolvedTokenEndpoint
|
|
8784
|
-
})
|
|
7847
|
+
});
|
|
8785
7848
|
return /* @__PURE__ */ jsx(AssistantModal, {});
|
|
8786
7849
|
};
|
|
7850
|
+
t7 = () => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MCPToolRegistry, {}), renderUI()] });
|
|
8787
7851
|
$[6] = resolvedTokenEndpoint;
|
|
8788
7852
|
$[7] = viewMode;
|
|
8789
|
-
$[8] =
|
|
8790
|
-
} else
|
|
8791
|
-
const
|
|
8792
|
-
let
|
|
8793
|
-
if ($[9] !==
|
|
8794
|
-
|
|
8795
|
-
/* @__PURE__ */ jsx(MCPToolRegistry, {}),
|
|
8796
|
-
enablePlanning && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
8797
|
-
/* @__PURE__ */ jsx(PlanToolRegistry, {}),
|
|
8798
|
-
/* @__PURE__ */ jsx(UpdateTodosUI, {}),
|
|
8799
|
-
/* @__PURE__ */ jsx(PlanApprovalUI, {})
|
|
8800
|
-
] }),
|
|
8801
|
-
renderUI()
|
|
8802
|
-
] });
|
|
8803
|
-
$[9] = enablePlanning;
|
|
8804
|
-
$[10] = renderUI;
|
|
8805
|
-
$[11] = t9;
|
|
8806
|
-
} else t9 = $[11];
|
|
8807
|
-
const renderRuntimeContent = t9;
|
|
8808
|
-
let t10;
|
|
8809
|
-
if ($[12] !== enablePlanning || $[13] !== initialTodos || $[14] !== onTodosChange) {
|
|
8810
|
-
t10 = (content) => enablePlanning ? /* @__PURE__ */ jsx(PlanProvider, {
|
|
8811
|
-
initialTodos,
|
|
8812
|
-
onTodosChange,
|
|
8813
|
-
children: content
|
|
8814
|
-
}) : content;
|
|
8815
|
-
$[12] = enablePlanning;
|
|
8816
|
-
$[13] = initialTodos;
|
|
8817
|
-
$[14] = onTodosChange;
|
|
8818
|
-
$[15] = t10;
|
|
8819
|
-
} else t10 = $[15];
|
|
8820
|
-
const wrapWithPlanProvider = t10;
|
|
8821
|
-
let t11;
|
|
8822
|
-
if ($[16] !== onVoiceConnect || $[17] !== onVoiceDisconnect || $[18] !== onVoiceError || $[19] !== renderRuntimeContent || $[20] !== resolvedTokenEndpoint || $[21] !== runtime) {
|
|
8823
|
-
t11 = resolvedTokenEndpoint ? /* @__PURE__ */ jsx(VoiceMCPBridge, {
|
|
7853
|
+
$[8] = t7;
|
|
7854
|
+
} else t7 = $[8];
|
|
7855
|
+
const renderRuntimeContent = t7;
|
|
7856
|
+
let t8;
|
|
7857
|
+
if ($[9] !== onVoiceConnect || $[10] !== onVoiceDisconnect || $[11] !== onVoiceError || $[12] !== renderRuntimeContent || $[13] !== resolvedTokenEndpoint || $[14] !== runtime) {
|
|
7858
|
+
t8 = resolvedTokenEndpoint ? /* @__PURE__ */ jsx(VoiceMCPBridge, {
|
|
8824
7859
|
tokenEndpoint: resolvedTokenEndpoint,
|
|
8825
7860
|
onError: onVoiceError,
|
|
8826
7861
|
onConnect: onVoiceConnect,
|
|
@@ -8833,34 +7868,27 @@ const EmbeddedAgent = (t0) => {
|
|
|
8833
7868
|
runtime,
|
|
8834
7869
|
children: renderRuntimeContent()
|
|
8835
7870
|
});
|
|
8836
|
-
$[
|
|
8837
|
-
$[
|
|
8838
|
-
$[
|
|
8839
|
-
$[
|
|
8840
|
-
$[
|
|
8841
|
-
$[
|
|
8842
|
-
$[
|
|
8843
|
-
} else
|
|
8844
|
-
let
|
|
8845
|
-
if ($[
|
|
8846
|
-
|
|
8847
|
-
$[23] = t11;
|
|
8848
|
-
$[24] = wrapWithPlanProvider;
|
|
8849
|
-
$[25] = t12;
|
|
8850
|
-
} else t12 = $[25];
|
|
8851
|
-
let t13;
|
|
8852
|
-
if ($[26] !== autoConnectLocal || $[27] !== onToolsChange || $[28] !== t12) {
|
|
8853
|
-
t13 = /* @__PURE__ */ jsx(MCPToolsProvider, {
|
|
7871
|
+
$[9] = onVoiceConnect;
|
|
7872
|
+
$[10] = onVoiceDisconnect;
|
|
7873
|
+
$[11] = onVoiceError;
|
|
7874
|
+
$[12] = renderRuntimeContent;
|
|
7875
|
+
$[13] = resolvedTokenEndpoint;
|
|
7876
|
+
$[14] = runtime;
|
|
7877
|
+
$[15] = t8;
|
|
7878
|
+
} else t8 = $[15];
|
|
7879
|
+
let t9;
|
|
7880
|
+
if ($[16] !== autoConnectLocal || $[17] !== onToolsChange || $[18] !== t8) {
|
|
7881
|
+
t9 = /* @__PURE__ */ jsx(MCPToolsProvider, {
|
|
8854
7882
|
autoConnectLocal,
|
|
8855
7883
|
onToolsChange,
|
|
8856
|
-
children:
|
|
7884
|
+
children: t8
|
|
8857
7885
|
});
|
|
8858
|
-
$[
|
|
8859
|
-
$[
|
|
8860
|
-
$[
|
|
8861
|
-
$[
|
|
8862
|
-
} else
|
|
8863
|
-
return
|
|
7886
|
+
$[16] = autoConnectLocal;
|
|
7887
|
+
$[17] = onToolsChange;
|
|
7888
|
+
$[18] = t8;
|
|
7889
|
+
$[19] = t9;
|
|
7890
|
+
} else t9 = $[19];
|
|
7891
|
+
return t9;
|
|
8864
7892
|
};
|
|
8865
7893
|
/**
|
|
8866
7894
|
* Web Component Definition
|
|
@@ -8873,8 +7901,7 @@ const WebMCPAgentElement = r2wc(EmbeddedAgent, { props: {
|
|
|
8873
7901
|
apiBase: "string",
|
|
8874
7902
|
tokenEndpoint: "string",
|
|
8875
7903
|
autoConnectLocal: "boolean",
|
|
8876
|
-
viewMode: "string"
|
|
8877
|
-
enablePlanning: "boolean"
|
|
7904
|
+
viewMode: "string"
|
|
8878
7905
|
} });
|
|
8879
7906
|
/**
|
|
8880
7907
|
* Register the custom element
|