@superinterface/react 2.0.8 → 2.0.9
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.cjs +83 -68
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +31 -16
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/misc/merge/index.ts","../src/lib/misc/merge/customizer.ts","../src/contexts/core/SuperinterfaceContext/index.tsx","../src/hooks/core/useSuperinterfaceContext/index.ts","../src/components/core/SuperinterfaceProvider/index.tsx","../src/components/threads/Thread/Messages/index.tsx","../src/components/threads/Thread/Messages/Content/index.tsx","../src/hooks/messages/useMessages/index.tsx","../src/lib/threads/queryOptions/index.ts","../src/lib/messages/messagesQueryOptions.ts","../src/hooks/messageGroups/useMessageGroups/index.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts","../src/lib/messages/order.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/newGroupItem.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/index.ts","../src/components/skeletons/MessagesSkeleton/index.tsx","../src/components/messageGroups/MessageGroupBase/index.tsx","../src/components/messageGroups/MessageGroupBase/Name.tsx","../src/hooks/toasts/useToasts/index.ts","../src/contexts/toasts/ToastsContext/index.ts","../src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx","../src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx","../src/contexts/assistants/AssistantAvatarContext/index.tsx","../src/contexts/assistants/AssistantNameContext/index.tsx","../src/components/threads/Thread/Messages/Content/MessageGroup/Content/index.tsx","../src/components/threads/Thread/Message/index.tsx","../src/components/runSteps/RunSteps/index.tsx","../src/components/runSteps/RunStep/ToolCalls/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx","../src/contexts/functions/FunctionComponentsContext/index.tsx","../src/components/functions/FunctionBase/index.tsx","../src/components/toolCalls/ToolCallBase/index.tsx","../src/components/toolCalls/ToolCallBase/ToolCallTitle.tsx","../src/components/functions/FunctionBase/Icon.tsx","../src/components/functions/FunctionBase/Content.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/lib/title.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx","../src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx","../src/components/runSteps/RunStep/index.tsx","../src/contexts/messages/MessageContext/index.ts","../src/components/threads/Thread/Message/Provider.tsx","../src/components/threads/Thread/Message/TextContent.tsx","../src/hooks/markdown/useMarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Link.tsx","../src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/OrderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/ListItem.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Code.tsx","../src/contexts/markdown/MarkdownContext/lib/components/index.tsx","../src/components/threads/Thread/Messages/Progress/index.tsx","../src/components/skeletons/StartingContentSkeleton/index.tsx","../src/components/skeletons/StartingSkeleton/index.tsx","../src/hooks/messages/useLatestMessage/index.ts","../src/hooks/runs/useIsRunActive/index.tsx","../src/hooks/runs/useLatestRun/index.ts","../src/hooks/runs/useRuns/index.tsx","../src/lib/runs/runsQueryOptions.ts","../src/hooks/runs/useRuns/lib/getRuns.ts","../src/lib/runs/isRunEditingMessage/index.ts","../src/hooks/runs/usePollingContext/index.ts","../src/contexts/runs/PollingContext/index.tsx","../src/components/threads/Thread/Messages/Root/index.tsx","../src/hooks/misc/useInfiniteScroll/index.tsx","../src/hooks/misc/useThrottledEffect/index.tsx","../src/hooks/runs/useManageRuns/index.tsx","../src/hooks/runs/useCreateRun/index.ts","../src/lib/threads/mutationOptions/index.ts","../src/hooks/runs/useCreateRun/lib/onSuccess.ts","../src/hooks/runs/useCreateRun/lib/onSettled.ts","../src/lib/optimistic/optimisticId.ts","../src/hooks/runs/useCreateRun/lib/onMutate/data.ts","../src/hooks/runs/useCreateRun/lib/onMutate/index.ts","../src/lib/optimistic/isOptimistic.ts","../src/hooks/runs/usePolling/index.tsx","../src/hooks/runs/usePolling/lib/refetch.ts","../src/hooks/actions/useManageActions/index.tsx","../src/hooks/actions/useHandleAction/index.tsx","../src/hooks/actions/useHandleAction/lib/onSettled.ts","../src/hooks/threads/useLifecycle/index.tsx","../src/components/threads/Thread/Messages/NextPageSkeleton.tsx","../src/components/threads/Thread/MessageForm/index.tsx","../src/components/threads/Thread/MessageForm/Submit/index.tsx","../src/hooks/messages/useMessageFormContext/index.ts","../src/contexts/messages/MessageFormContext/index.ts","../src/components/threads/Thread/MessageForm/Root/index.tsx","../src/hooks/messages/useCreateMessage/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onSettled.ts","../src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts","../src/components/threads/Thread/MessageForm/Field/index.tsx","../src/components/textareas/TextareaBase/index.tsx","../src/components/threads/Thread/Root/index.tsx","../src/components/runs/PollingProvider/index.tsx","../src/components/threads/Thread/Provider/index.tsx","../src/components/threads/Thread/index.tsx","../src/hooks/messages/useMessageContext/index.ts","../src/components/threads/ThreadDialog/Root/index.tsx","../src/components/threads/ThreadDialog/Provider/index.tsx","../src/contexts/threads/ThreadDialogContext/index.ts","../src/hooks/threads/useThreadDialogContext/index.ts","../src/components/toasts/ToastsProvider/index.tsx","../src/components/toasts/ToastsProvider/CustomToast.tsx","../src/components/threads/ThreadDialog/Trigger/index.tsx","../src/components/threads/ThreadDialog/Button/index.tsx","../src/components/threads/ThreadDialog/Content/index.tsx","../src/components/threads/ThreadDialog/index.tsx","../src/components/threads/AudioThread/Root/index.tsx","../src/contexts/threads/AudioThreadContext/index.ts","../src/components/threads/AudioThread/Root/lib/blobToData.ts","../src/hooks/audioThreads/useStatus/index.ts","../src/hooks/audioThreads/useRecorder/index.ts","../src/hooks/audioThreads/useMessageAudio/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/input.ts","../src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts","../src/components/threads/AudioThread/Visualization/index.tsx","../src/hooks/threads/useAudioThreadContext/index.ts","../src/components/threads/AudioThread/Form/index.tsx","../src/components/threads/AudioThread/Form/Visualizer/index.tsx","../src/components/threads/AudioThread/Form/ActionButton/index.tsx","../src/components/threads/AudioThread/index.tsx","../src/components/threads/AudioThreadDialog/index.tsx","../src/components/suggestions/Suggestions/index.tsx","../src/components/suggestions/Suggestions/Content.tsx","../src/components/suggestions/Suggestions/Item.tsx","../src/components/markdown/MarkdownProvider/index.tsx"],"names":["import_lodash","_","import_react","import_themes","import_react_query","queryKey","import_radash","messages","import_jsx_runtime","MessageGroupBase","MessagesSkeleton","import_react_icons","title","RadixLink","RadixStrong","Code","RadixCode","laterRunSteps","olderRunSteps","Content","messageGroups","data","isRunActive","onSettled","onMutate","import_zod","Root","import_react_use","TextareaBase","TextareaAutosize","import_react_hook_form","Provider","Toast","Button","silenceStart","dayjs","noiseStart","import_react_use_audio_player","input","visualizationAnalyser"],"mappings":"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","sourcesContent":["export { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nexport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport { Thread } from '@/components/threads/Thread'\nexport { useThreadContext } from '@/hooks/threads/useThreadContext'\nexport { useLifecycle } from '@/hooks/threads/useLifecycle'\nexport { useMessages } from '@/hooks/messages/useMessages'\nexport { useMessageContext } from '@/hooks/messages/useMessageContext'\nexport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nexport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\n\nexport { ThreadDialog } from '@/components/threads/ThreadDialog'\nexport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nexport { AudioThreadDialog } from '@/components/threads/AudioThreadDialog'\nexport { AudioThread } from '@/components/threads/AudioThread'\n\nexport { useCreateRun } from '@/hooks/runs/useCreateRun'\nexport { useRuns } from '@/hooks/runs/useRuns'\nexport { useLatestRun } from '@/hooks/runs/useLatestRun'\nexport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\n\nexport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nexport { MarkdownProvider } from '@/components/markdown/MarkdownProvider'\nexport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\nexport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nexport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\nexport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nexport { FunctionBase } from '@/components/functions/FunctionBase'\n","import _ from 'lodash'\nimport { customizer } from './customizer'\n\n// @ts-ignore-next-line\nexport const merge = (obj, ...sources) =>\n _.mergeWith(_.cloneDeep(obj), ...sources, customizer)\n","import _ from 'lodash'\n\n// @ts-ignore-next-line\nexport const customizer = (objectValue, srcValue) => {\n if (!_.isArray(objectValue)) return\n\n return srcValue\n}\n","'use client'\nimport { createContext } from 'react'\n\nexport const SuperinterfaceContext = createContext<{\n baseUrl: string | null\n variables: Record<string, any>\n defaultOptions: {\n queries: Record<string, any>\n mutations: Record<string, any>\n }\n publicApiKey?: string\n}>({\n baseUrl: 'https://superinterface.ai/api/cloud',\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {},\n },\n})\n","import { useContext } from 'react'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\n\nexport const useSuperinterfaceContext = () => (\n useContext(SuperinterfaceContext)\n)\n","import { MessagesPage } from '@/types'\nimport {\n InfiniteData,\n UseInfiniteQueryOptions,\n UseMutationOptions,\n} from '@tanstack/react-query'\nimport { merge } from '@/lib/misc/merge'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport type Args = {\n children: React.ReactNode\n baseUrl?: string\n publicApiKey?: string\n variables?: {\n [key: string]: any\n }\n defaultOptions?: {\n queries?: UseInfiniteQueryOptions<InfiniteData<MessagesPage>>\n mutations?: UseMutationOptions\n }\n}\n\nexport const SuperinterfaceProvider = ({\n children,\n baseUrl,\n publicApiKey,\n variables,\n defaultOptions,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n\n const value = merge(\n superinterfaceContext,\n {\n ...(baseUrl ? { baseUrl } : {}),\n ...(publicApiKey ? { publicApiKey } : {}),\n ...(variables ? { variables } : {}),\n ...(defaultOptions ? { defaultOptions } : {}),\n }\n )\n\n return (\n <SuperinterfaceContext.Provider\n value={value}\n >\n {children}\n </SuperinterfaceContext.Provider>\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Content } from './Content'\nimport { Progress } from './Progress'\nimport { Root } from './Root'\nimport { NextPageSkeleton } from './NextPageSkeleton'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n children?: React.ReactNode\n style?: React.CSSProperties\n}\n\nexport const Messages = ({\n children,\n style = {},\n}: Args) => (\n <Root style={style}>\n <Flex\n flexShrink=\"0\"\n height=\"var(--space-3)\"\n />\n\n <Progress />\n\n {children}\n\n <Content />\n\n <NextPageSkeleton />\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Root>\n)\n\nMessages.Root = Root\nMessages.Message = Message\nMessages.NextPageSkeleton = NextPageSkeleton\n","import { useEffect } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useMessageGroups } from '@/hooks/messageGroups/useMessageGroups'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { MessageGroup } from './MessageGroup'\n\nexport const Content = () => {\n const {\n messages,\n isLoading,\n isLoadingError,\n } = useMessages()\n\n const { addToast } = useToasts()\n\n const { messageGroups } = useMessageGroups({\n messages,\n })\n\n useEffect(() => {\n if (isLoadingError) {\n addToast({ type: 'error', message: 'Could not load messages. Please try again.' })\n }\n }, [isLoadingError, addToast])\n\n if (isLoading || isLoadingError) {\n return (\n <MessagesSkeleton />\n )\n }\n\n return (\n <>\n {messageGroups.map((messageGroup: MessageGroupType) => (\n <MessageGroup\n key={messageGroup.id}\n messageGroup={messageGroup}\n />\n ))}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport {\n InfiniteData,\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { Message, MessagesPage } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { messagesQueryOptions } from '@/lib/messages/messagesQueryOptions'\n\nconst messages = ({\n props,\n}: {\n props: {\n data: InfiniteData<MessagesPage> | undefined\n },\n}) => {\n if (!props.data) return []\n\n return props.data.pages.reduce<Message[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n\n\nexport const useMessages = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props }),\n }), [props])\n}\n","import {\n useQueryClient,\n infiniteQueryOptions,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { MessagesPage } from '@/types'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<[string, { [key: string]: any }]>\n pageParam?: string\n}\n\nexport const queryOptions = ({\n queryKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables]\n\n return infiniteQueryOptions<MessagesPage>({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey,\n }: QueryFunctionArgs) => {\n const [_key, variables] = queryKey\n const params = new URLSearchParams({\n ...(pageParam ? { pageParam } : {}),\n ...variables,\n })\n\n return fetch(`${superinterfaceContext.baseUrl}${path}?${params}`, {\n credentials: 'include',\n ...(superinterfaceContext.publicApiKey ? {\n headers: {\n Authorization: `Bearer ${superinterfaceContext.publicApiKey}`,\n },\n } : {}),\n })\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<MessagesPage>\n })\n },\n initialPageParam: undefined,\n getNextPageParam: (lastPage: MessagesPage) => {\n if (!lastPage.hasNextPage) return null\n\n return lastPage.lastId\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey,\n })\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['messages'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { useMemo } from 'react'\nimport { messageGroups as getMessageGroups } from './lib/messageGroups'\nimport { Message } from '@/types'\n\ntype Args = {\n messages: Message[]\n}\n\nexport const useMessageGroups = ({\n messages,\n}: Args) => (\n useMemo(\n () => ({\n messageGroups: getMessageGroups({ messages }),\n }),\n [messages]\n )\n)\n","import _ from 'lodash'\nimport { last } from 'radash'\nimport { Message, MessageGroup } from '@/types'\nimport { order } from '@/lib/messages/order'\nimport { newGroup } from './newGroup'\n\ntype Args = {\n messages: Message[]\n}\n\nexport const messageGroups = ({\n messages,\n}: Args) =>\n _.reduce(\n order({ messages }),\n (groups: MessageGroup[], message: Message) => {\n const group = last(groups)\n\n if (!group) return newGroup({ groups, message })\n\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message,\n })\n }\n\n return [\n ..._.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message],\n },\n ]\n },\n []\n )\n","import { sort } from 'radash'\nimport { Message } from '@/types'\n\ntype Args = {\n messages: Message[]\n}\n\nexport const order = ({ messages }: Args) =>\n sort(messages, m => m.created_at, true)\n","import { Message } from '@/types'\n\ntype Args = {\n message: Message\n}\n\nexport const newGroupItem = ({ message }: Args) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message],\n})\n","import { Message, MessageGroup } from '@/types'\nimport { newGroupItem } from './newGroupItem'\n\ntype Args = {\n groups: MessageGroup[]\n message: Message\n}\n\nexport const newGroup = ({ groups, message }: Args) => [\n ...groups,\n newGroupItem({\n message,\n }),\n]\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Avatar,\n Box,\n Skeleton,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\n\nexport const MessagesSkeleton = forwardRef(function MessagesSkeleton(_props, ref) {\n return (\n <MessageGroupBase ref={ref}>\n <Skeleton loading>\n <Avatar\n fallback={<Flex />}\n size=\"1\"\n />\n </Skeleton>\n\n <Box\n pb=\"3\"\n >\n <Name>\n <Skeleton\n loading\n style={{\n width: '128px',\n }}\n />\n </Name>\n\n <Skeleton\n loading\n style={{\n width: '256px',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n </Box>\n </MessageGroupBase>\n )\n})\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Container,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const MessageGroupBase = forwardRef(function MessageGroupBase({\n children,\n}: Args, ref) {\n return (\n <Container\n // @ts-ignore-next-line\n ref={ref}\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n flexShrink=\"0\"\n gap=\"3\"\n >\n {children}\n </Flex>\n </Container>\n )\n})\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Name = ({\n children,\n}: Args) => (\n <Flex\n align=\"center\"\n height=\"var(--space-5)\"\n >\n <Text\n size=\"2\"\n weight=\"bold\"\n >\n {children}\n </Text>\n </Flex>\n)\n","import { useContext } from 'react'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\n\nexport const useToasts = () => (\n useContext(ToastsContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { Toast } from '@/types'\n\nexport const ToastsContext = createContext<{\n toasts: Toast[]\n addToast: (toast: Toast) => void\n}>({\n toasts: [],\n addToast: () => {},\n})\n","import { useContext } from 'react'\nimport {\n Box,\n Avatar,\n} from '@radix-ui/themes'\nimport {\n PersonIcon,\n} from '@radix-ui/react-icons'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { Content } from './Content'\n\ntype Args = {\n messageGroup: MessageGroupType\n}\n\nexport const MessageGroup = ({\n messageGroup,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n {messageGroup.role === 'user' ? (\n <Avatar\n fallback={<PersonIcon />}\n size=\"1\"\n />\n ) : (\n <AssistantAvatar />\n )}\n\n <Box flexGrow=\"1\">\n <Name>\n {messageGroup.role === 'user' ? 'You' : assistantNameContext}\n </Name>\n\n <Content\n messageGroup={messageGroup}\n />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\n\nexport const AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext(AssistantAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {AssistantAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n LightningBoltIcon,\n} from '@radix-ui/react-icons'\n\nexport const AssistantAvatarContext = createContext(\n <Avatar\n fallback={<LightningBoltIcon />}\n size=\"1\"\n />\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const AssistantNameContext = createContext('Assistant')\n","import { Flex } from '@radix-ui/themes'\nimport { MessageGroup } from '@/types'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n messageGroup: MessageGroup\n}\n\nexport const Content = ({\n messageGroup,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {messageGroup.messages.map((message) => (\n <Message\n key={message.id}\n message={message}\n />\n ))}\n </Flex>\n)\n","import _ from 'lodash'\nimport { useMemo } from 'react'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { Message as MessageType } from '@/types'\nimport { RunSteps } from '@/components/runSteps/RunSteps'\nimport { Provider } from './Provider'\nimport { TextContent } from './TextContent'\n\ntype Args = {\n message: MessageType\n}\n\nexport const Message = ({\n message,\n}: Args) => {\n const [olderRunSteps, laterRunSteps] = useMemo(() => {\n if (!message.runSteps.length) return [[], []]\n\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== 'message_creation') return\n\n return runStep.step_details.message_creation.message_id === message.id\n })\n\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0\n }\n const laterRunSteps = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex)\n\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n\n let olderRunSteps\n\n if (prevRunStepIndex === -1) {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1)\n } else {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex)\n }\n\n return [olderRunSteps, laterRunSteps]\n }, [message])\n\n return (\n <Provider value={{ message }}>\n <Box>\n <RunSteps\n runSteps={olderRunSteps}\n />\n\n {message.content.map((content, index) => (\n <Box\n key={index}\n >\n {content.type === 'text' && (\n <TextContent content={content} />\n )}\n </Box>\n ))}\n\n <RunSteps\n runSteps={laterRunSteps}\n />\n </Box>\n </Provider>\n )\n}\n","import OpenAI from 'openai'\nimport { Flex } from '@radix-ui/themes'\nimport { RunStep } from '@/components/runSteps/RunStep'\n\ntype Args = {\n runSteps: OpenAI.Beta.Threads.Runs.RunStep[]\n}\n\nexport const RunSteps = ({\n runSteps,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {runSteps.map((runStep) => (\n <RunStep\n key={runStep.id}\n runStep={runStep}\n />\n ))}\n </Flex>\n)\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCall } from './ToolCall'\nimport { Starting } from './Starting'\n\ntype Args = {\n stepDetails: OpenAI.Beta.Threads.Runs.ToolCallsStepDetails\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const ToolCalls = ({\n stepDetails,\n runStep,\n}: Args) => (\n <Flex\n direction=\"column\"\n >\n {!stepDetails.tool_calls.length && (\n <Starting />\n )}\n {stepDetails.tool_calls.map((toolCall) => (\n <ToolCall\n key={toolCall.id}\n toolCall={toolCall}\n runStep={runStep}\n />\n ))}\n </Flex>\n)\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { Fn } from './Fn'\nimport { CodeInterpreter } from './CodeInterpreter'\n\ntype ToolCall = OpenAI.Beta.Threads.Runs.CodeToolCall\n | OpenAI.Beta.Threads.Runs.RetrievalToolCall\n | OpenAI.Beta.Threads.Runs.FunctionToolCall\n\ntype Args = {\n toolCall: ToolCall\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const ToolCall = ({\n toolCall,\n runStep,\n}: Args) => {\n if (toolCall.type === 'function') {\n return (\n <Fn\n fn={toolCall.function}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'code_interpreter') {\n return (\n <CodeInterpreter\n codeInterpreter={toolCall.code_interpreter}\n runStep={runStep}\n />\n )\n }\n\n return (\n <Flex>\n {toolCall.type}\n </Flex>\n )\n}\n","import { useContext } from 'react'\nimport OpenAI from 'openai'\n// import { Availabilities } from './Availabilities'\n// import { Scores } from './Scores'\nimport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nimport { DefaultFunction } from './DefaultFunction'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const Fn = ({\n fn,\n runStep,\n}: Args) => {\n const functionComponentsContext = useContext(FunctionComponentsContext)\n const Component = functionComponentsContext[fn.name] || DefaultFunction\n\n return (\n // @ts-ignore-next-line\n <Component\n fn={fn}\n runStep={runStep}\n />\n )\n}\n","'use client'\nimport { createContext } from 'react'\n\ntype FunctionComponents = {\n [key: string]: React.ReactNode\n}\n\nexport const FunctionComponentsContext = createContext({} as FunctionComponents)\n","import OpenAI from 'openai'\nimport {\n PopoverRoot,\n PopoverContent,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { Icon } from './Icon'\nimport { Content } from './Content'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n title: string\n}\n\nexport const FunctionBase = ({\n fn,\n runStep,\n title,\n}: Args) => (\n <PopoverRoot>\n <ToolCallBase>\n <Icon runStep={runStep} />\n <ToolCallTitle>\n {title}\n </ToolCallTitle>\n </ToolCallBase>\n <PopoverContent\n style={{\n maxHeight: '500px',\n }}\n >\n <Content fn={fn} />\n </PopoverContent>\n </PopoverRoot>\n)\n","import {\n Flex,\n Button,\n PopoverTrigger\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallBase = ({\n children,\n}: Args) => (\n <Flex\n py=\"1\"\n ml=\"-2\"\n >\n <PopoverTrigger>\n <Button\n size=\"1\"\n color=\"gold\"\n variant=\"outline\"\n style={{\n boxShadow: 'none',\n }}\n >\n {children}\n </Button>\n </PopoverTrigger>\n </Flex>\n)\n","import {\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallTitle = ({\n children,\n}: Args) => (\n <Text\n weight=\"regular\"\n >\n {children}\n </Text>\n)\n","import OpenAI from 'openai'\nimport {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon,\n} from '@radix-ui/react-icons'\n\ntype Args = {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const Icon = ({\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return (\n <CheckCircledIcon />\n )\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === 'expired') {\n return (\n <CircleBackslashIcon />\n )\n } else {\n return (\n <CircleIcon />\n )\n }\n}\n","import { useMemo } from 'react'\nimport { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n}\n\nexport const Content = ({\n fn,\n}: Args) => {\n const args = useMemo(() => {\n let result = null\n\n try {\n result = JSON.parse(fn.arguments)\n } catch (error) {\n console.error(error)\n }\n\n return result\n }, [fn])\n\n const output = useMemo(() => {\n if (!fn.output) {\n return null\n }\n\n let result = null\n\n try {\n result = JSON.parse(fn.output)\n } catch (error) {\n console.error(error)\n }\n\n return result\n }, [fn])\n\n if (!args) {\n return null\n }\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n <Box>\n {args && JSON.stringify(args, null, 2)}\n </Box>\n <Box>\n {output && JSON.stringify(output, null, 2)}\n </Box>\n </Code>\n )\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const title = ({\n fn,\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`\n } else {\n return `Calling ${fn.name}`\n }\n}\n","import OpenAI from 'openai'\nimport { FunctionBase } from '@/components/functions/FunctionBase'\nimport { title } from './lib/title'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const DefaultFunction = ({\n fn,\n runStep,\n}: Args) => (\n <FunctionBase\n fn={fn}\n runStep={runStep}\n title={title({ runStep, fn })}\n />\n)\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\n\ntype Args = {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeToolCall.CodeInterpreter\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const CodeInterpreter = ({\n codeInterpreter,\n}: Args) => (\n <Flex>\n {codeInterpreter.input}\n </Flex>\n)\n","import {\n PopoverRoot,\n PopoverContent,\n Text,\n} from '@radix-ui/themes'\nimport {\n CircleIcon,\n} from '@radix-ui/react-icons'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\n\nexport const Starting = () => (\n <PopoverRoot>\n <ToolCallBase>\n <CircleIcon />\n <ToolCallTitle>\n Starting actions\n </ToolCallTitle>\n </ToolCallBase>\n <PopoverContent\n style={{\n maxHeight: '500px',\n }}\n >\n <Text>\n Getting ready to connect to domain API\n </Text>\n </PopoverContent>\n </PopoverRoot>\n)\n","import OpenAI from 'openai'\nimport { ToolCalls } from './ToolCalls'\n\ntype Args = {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const RunStep = ({\n runStep,\n}: Args) => {\n if (runStep.step_details.type === 'tool_calls') {\n return (\n <ToolCalls\n stepDetails={runStep.step_details}\n runStep={runStep}\n />\n )\n }\n\n return null\n}\n","'use client'\nimport { createContext } from 'react'\nimport { Message } from '@/types'\n\nexport const MessageContext = createContext<{\n message: Message | null\n}>({\n message: null,\n})\n","import { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const Provider = MessageContext.Provider\n","import OpenAI from 'openai'\nimport { useRemarkSync } from 'react-remark'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\ntype Args = {\n content: OpenAI.Beta.Threads.Messages.MessageContentText\n}\n\nexport const TextContent = ({\n content,\n}: Args) => {\n const markdownContext = useMarkdownContext()\n\n return useRemarkSync(content.text.value, markdownContext)\n}\n","import { useContext } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\n\nexport const useMarkdownContext = () => (\n useContext(MarkdownContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { components } from './lib/components'\n\nexport const MarkdownContext = createContext({\n remarkPlugins: [] as any[],\n rehypeReactOptions: {\n components,\n }\n})\n","import {\n Box,\n Text,\n} from '@radix-ui/themes'\n\nexport const Paragraph = ({ children }: JSX.IntrinsicElements['p']) => (\n <Box\n pb=\"3\"\n >\n <Text\n size=\"3\"\n style={{\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Text>\n </Box>\n)\n","import {\n Link as RadixLink,\n} from '@radix-ui/themes'\n\ntype Args = JSX.IntrinsicElements['a']\n\nexport const Link = ({ children, href }: Args) => (\n <RadixLink\n href={href}\n >\n {children}\n </RadixLink>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const UnorderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ul\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ul>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const OrderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ol\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ol>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ListItem = ({ children }: JSX.IntrinsicElements['li']) => (\n <Box\n pb=\"1\"\n >\n <li>\n {children}\n </li>\n </Box>\n)\n","import {\n Strong as RadixStrong,\n} from '@radix-ui/themes'\n\nexport const Strong = ({ children }: JSX.IntrinsicElements['strong']) => (\n <RadixStrong>\n {children}\n </RadixStrong>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Pre = ({ children }: JSX.IntrinsicElements['pre']) => (\n <Box\n style={{\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Box>\n)\n","import {\n Code as RadixCode,\n} from '@radix-ui/themes'\n\nexport const Code = ({ children }: JSX.IntrinsicElements['code']) => (\n <RadixCode>\n {children}\n </RadixCode>\n)\n","import { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\n\nexport const components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n}\n","import { Box } from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { StartingSkeleton } from '@/components/skeletons/StartingSkeleton'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\n\nexport const Progress = () => {\n const { isRunActive } = useIsRunActive()\n const { latestMessage } = useLatestMessage()\n\n if (!latestMessage) return null\n if (!isRunActive) return null\n\n if (latestMessage.role === 'user') {\n return (\n <StartingSkeleton />\n )\n }\n\n return (\n <MessageGroupBase>\n <Box pl=\"5\" />\n <StartingContentSkeleton />\n </MessageGroupBase>\n )\n}\n","import {\n Skeleton,\n} from '@radix-ui/themes'\n\nexport const StartingContentSkeleton = () => (\n <Skeleton\n loading\n mt=\"1\"\n height=\"var(--space-4)\"\n width=\"var(--space-4)\"\n style={{\n borderRadius: 'var(--radius-6)',\n flexShrink: 0,\n }}\n />\n)\n","import { useContext } from 'react'\nimport { Box } from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\ntype Args = {\n children?: React.ReactNode\n}\n\nexport const StartingSkeleton = ({\n children,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n <AssistantAvatar />\n\n <Box>\n <Name>\n {assistantNameContext}\n </Name>\n\n {children}\n\n <StartingContentSkeleton />\n </Box>\n </MessageGroupBase>\n )\n}\n","import { useMemo } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const useLatestMessage = () => {\n const props = useMessages()\n\n return useMemo(() => ({\n ...props,\n latestMessage: props.messages[0] || null,\n }), [props])\n}\n","import { useMemo } from 'react'\nimport { useIsMutating } from '@tanstack/react-query'\nimport { useLatestRun } from '@/hooks/runs/useLatestRun'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { isRunEditingMessage } from '@/lib/runs/isRunEditingMessage'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { usePollingContext } from '@/hooks/runs/usePollingContext'\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'cancelling',\n 'requires_action',\n]\n\nconst stoppedStatuses = [\n 'expired',\n 'cancelled',\n 'failed',\n]\n\nconst isRunActive = ({\n pollingContext,\n latestRunProps,\n latestMessageProps,\n isMutating,\n}: {\n pollingContext: ReturnType<typeof usePollingContext>,\n latestRunProps: ReturnType<typeof useLatestRun>,\n latestMessageProps: ReturnType<typeof useLatestMessage>,\n isMutating: boolean,\n}) => {\n if (pollingContext.isPollRefetching) return true\n // @ts-ignore-next-line\n if (latestMessageProps.latestMessage?.metadata?.isBlocking) return false\n if (isMutating) return true\n if (!latestRunProps.latestRun) return false\n if (progressStatuses.includes(latestRunProps.latestRun.status)) return true\n if (stoppedStatuses.includes(latestRunProps.latestRun.status)) return false\n\n return isRunEditingMessage({ message: latestMessageProps.latestMessage })\n}\n\nexport const useIsRunActive = () => {\n const latestRunProps = useLatestRun()\n const latestMessageProps = useLatestMessage()\n const threadContext = useThreadContext()\n const pollingContext = usePollingContext()\n const isMutatingCreateRun = useIsMutating({\n mutationKey: ['createRun', threadContext.variables],\n })\n const isMutatingCreateMessage = useIsMutating({\n mutationKey: ['createMessage', threadContext.variables],\n })\n const isMutatingCreateHandleAction = useIsMutating({\n mutationKey: ['handleAction', threadContext.variables],\n })\n\n return useMemo(() => ({\n ...latestRunProps,\n isRunActive: isRunActive({\n pollingContext,\n latestRunProps,\n latestMessageProps,\n isMutating: isMutatingCreateRun > 0 || isMutatingCreateMessage > 0 || isMutatingCreateHandleAction > 0,\n }),\n }), [\n latestRunProps,\n latestMessageProps,\n pollingContext,\n isMutatingCreateRun,\n isMutatingCreateMessage,\n isMutatingCreateHandleAction,\n ])\n}\n","import { useMemo } from 'react'\nimport { useRuns } from '@/hooks/runs/useRuns'\n\nexport const useLatestRun = () => {\n const props = useRuns()\n\n return useMemo(() => ({\n ...props,\n latestRun: props.runs[0],\n }), [props])\n}\n","import { useMemo } from 'react'\nimport {\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { runsQueryOptions } from '@/lib/runs/runsQueryOptions'\nimport { getRuns } from './lib/getRuns'\n\nexport const useRuns = () => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useInfiniteQuery(runsQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n runs: getRuns({ data: props.data }),\n }), [props])\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const runsQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['runs'],\n path: '/runs',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { InfiniteData } from '@tanstack/react-query'\nimport { RunsPage, Run } from '@/types'\n\ntype Args = {\n data: InfiniteData<RunsPage> | undefined\n}\n\nexport const getRuns = ({\n data,\n}: Args) => {\n if (!data) return []\n\n return data.pages.reduce<Run[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n","import OpenAI from 'openai'\nimport _ from 'lodash'\n\ntype Args = {\n message: OpenAI.Beta.Threads.ThreadMessage\n}\n\nexport const isRunEditingMessage = ({\n message,\n}: Args) => {\n if (!message) return false\n if (message.role === 'user') return false\n if (!message.run_id) return false\n\n const hasContent = _.some(message.content, (content) => (\n content.type !== 'text' ||\n (content.type === 'text' && content.text?.value !== '')\n ))\n\n return !hasContent\n}\n","import { useContext } from 'react'\nimport { PollingContext } from '@/contexts/runs/PollingContext'\n\nexport const usePollingContext = () => (\n useContext(PollingContext)\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const PollingContext = createContext<{\n isPollRefetching: boolean\n setIsPollRefetching: (isPollRefetching: boolean) => void\n}>({\n isPollRefetching: false,\n setIsPollRefetching: () => {},\n})\n","'use client'\n\nimport { Flex } from '@radix-ui/themes'\nimport { useInfiniteScroll } from '@/hooks/misc/useInfiniteScroll'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useLifecycle } from '@/hooks/threads/useLifecycle'\n\nexport const Root = ({\n children,\n style = {},\n}: {\n children: React.ReactNode\n style?: React.CSSProperties\n}) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n } = useMessages()\n\n useLifecycle()\n\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n })\n\n return (\n <Flex\n ref={containerRef}\n direction=\"column-reverse\"\n flexGrow=\"1\"\n style={{\n ...style,\n overflow: 'auto',\n }}\n >\n {children}\n\n {hasNextPage && (\n <Flex\n ref={loaderRef}\n />\n )}\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Flex>\n )\n}\n","import { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { useThrottledEffect } from '@/hooks/misc/useThrottledEffect'\n\ntype Args = {\n isFetchingNextPage: boolean\n hasNextPage: boolean\n fetchNextPage: () => void\n}\n\nexport const useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: Args) => {\n const containerRef = useRef(null)\n\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: '0px',\n threshold: 0.1,\n })\n\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return\n if (!inView) return\n if (!hasNextPage) return\n\n console.log('Fetching next page')\n fetchNextPage()\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n )\n\n return {\n containerRef,\n loaderRef,\n inView,\n }\n}\n","import _ from 'lodash'\nimport { useRef, useEffect, useCallback } from 'react'\n\nexport const useThrottledEffect = (cb: Function, delay: number, additionalDeps: any[]) => {\n const cbRef = useRef(cb)\n\n const throttledCb = useCallback(\n _.throttle((...args: any[]) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true,\n }),\n [delay]\n )\n useEffect(() => {\n cbRef.current = cb\n })\n // set additionalDeps to execute effect, when other values change (not only on delay change)\n useEffect(throttledCb, [throttledCb, ...additionalDeps])\n}\n","import { useToasts } from '@/hooks/toasts/useToasts'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { useEffect, useState } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useLatestRun } from '@/hooks/runs/useLatestRun'\nimport { useCreateRun } from '@/hooks/runs/useCreateRun'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useManageRuns = () => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const latestRunProps = useLatestRun()\n const latestMessageProps = useLatestMessage()\n const createRunProps = useCreateRun({\n onError: (error: any) => (\n addToast({ type: 'error', message: error.message })\n ),\n })\n const threadContext = useThreadContext()\n\n const [toastedErrorRunIds, setToastedErrorRunIds] = useState<string[]>([])\n\n useEffect(() => {\n if (latestRunProps.latestRun?.status !== 'failed') return\n if (toastedErrorRunIds.includes(latestRunProps.latestRun.id)) return\n\n setToastedErrorRunIds((prev) => [...prev, latestRunProps.latestRun.id])\n\n addToast({ type: 'error', message: 'AI run failed. Please try again.' })\n }, [latestRunProps, toastedErrorRunIds, addToast])\n\n useEffect(() => {\n if (createRunProps.isPending) return\n if (latestRunProps.isFetching) return\n if (latestMessageProps.isFetching) return\n\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'user') return\n if (isOptimistic({ id: latestMessageProps.latestMessage.id })) return\n if (latestRunProps.latestRun && latestRunProps.latestRun.created_at > latestMessageProps.latestMessage.created_at) {\n return\n }\n\n const isMutating = queryClient.isMutating({\n mutationKey: ['createRun', threadContext.variables],\n })\n\n if (isMutating) return\n\n // @ts-ignore-next-line\n createRunProps.createRun()\n }, [\n threadContext,\n queryClient,\n createRunProps,\n latestRunProps,\n latestMessageProps,\n ])\n\n return null\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from '@/lib/threads/mutationOptions'\nimport { onSuccess } from './lib/onSuccess'\nimport { onSettled } from './lib/onSettled'\nimport { onMutate } from './lib/onMutate'\n\nexport const useCreateRun = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation({\n onSuccess: onSuccess({ queryClient }),\n onSettled: onSettled({ queryClient }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...mutationOptions({\n mutationKeyBase: ['createRun'],\n path: '/runs',\n queryClient,\n threadContext,\n superinterfaceContext,\n }),\n })\n\n return {\n ...props,\n createRun: partob(props.mutate, threadContext.variables),\n }\n}\n","import {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\ntype VariablesArgs = {\n content: string\n [key: string]: any\n}\n\nexport const mutationOptions = ({\n mutationKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n mutationKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const mutationKey = [...mutationKeyBase, threadContext.variables]\n\n return {\n mutationFn: (variables: VariablesArgs) => (\n fetch(`${superinterfaceContext.baseUrl}${path}`, {\n method: 'POST',\n body: JSON.stringify(variables),\n credentials: 'include',\n ...(superinterfaceContext.publicApiKey ? {\n headers: {\n Authorization: `Bearer ${superinterfaceContext.publicApiKey}`,\n },\n } : {}),\n }).then(async (response) => {\n if (response.status !== 200) {\n let errorResponse\n\n try {\n console.log('response', response)\n errorResponse = await response.json() as { error: string }\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n\n throw new Error(errorResponse.error)\n }\n\n return response.json()\n })\n ),\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { Response } from '@/lib/runs/createRunMutationFn'\n\ntype Variables = {\n [key: string]: any\n}\n\nexport const onSuccess = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n data: Response,\n variables: Variables,\n) => (\n queryClient.setQueryData(\n ['runs', variables],\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [data.run],\n hasNextPage: false,\n lastId: data.run.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n data.run,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\n\ntype Variables = {\n [key: string]: any\n}\n\nexport const onSettled = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n _data: any,\n _error: any,\n variables: Variables,\n) => {\n await queryClient.invalidateQueries({\n queryKey: ['messages', variables],\n })\n\n await queryClient.invalidateQueries({\n queryKey: ['runs', variables],\n })\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\nexport const data = (prevData: any) => {\n const run = {\n id: optimisticId(),\n object: 'thread.run' as OpenAI.Beta.Threads.Runs.Run['object'],\n created_at: +new Date(),\n assistant_id: null,\n thread_id: null,\n status: 'in_progress' as OpenAI.Beta.Threads.Runs.Run['status'],\n expires_at: +new Date() + 1000 * 60 * 60 * 24,\n cancelled_at: null,\n failed_at: null,\n completed_at: null,\n required_action: null,\n last_error: null,\n model: null,\n instructions: null,\n tools: [],\n file_ids: [],\n metadata: {},\n usage: null,\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [run],\n hasNextPage: false,\n lastId: run.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n run,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (variables: Variables) => {\n const queryKey = ['runs', variables]\n await queryClient.cancelQueries({ queryKey })\n\n const prevRuns = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data,\n )\n\n return {\n prevRuns,\n variables,\n }\n}\n","import _ from 'lodash'\n\ntype Args = {\n id: string\n}\n\nexport const isOptimistic = ({\n id,\n}: Args) => (\n _.startsWith(id, '-')\n)\n","import {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useInterval } from 'react-use'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { usePollingContext } from '@/hooks/runs/usePollingContext'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\nimport { refetch } from './lib/refetch'\n\nexport const usePolling = () => {\n const threadContext = useThreadContext()\n const queryClient = useQueryClient()\n const { setIsPollRefetching } = usePollingContext()\n\n const isRunActiveProps = useIsRunActive()\n\n useInterval(async () => {\n setIsPollRefetching(true)\n await refetch({\n queryClient,\n threadContext,\n })\n setIsPollRefetching(false)\n console.log('Polling...')\n },\n isRunActiveProps.isRunActive ? 3000 : null\n )\n\n return null\n}\n","import {\n QueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\ntype Args = {\n queryClient: QueryClient\n threadContext: ReturnType<typeof useThreadContext>,\n}\n\nexport const refetch = async ({\n queryClient,\n threadContext,\n}: Args) => {\n await queryClient.invalidateQueries({\n queryKey: threadContext.defaultOptions.queries.queryKey ?? ['messages', threadContext.variables],\n })\n\n await queryClient.invalidateQueries({\n queryKey: threadContext.defaultOptions.queries.queryKey ?? ['runs', threadContext.variables],\n })\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useEffect } from 'react'\nimport { useLatestRun } from '@/hooks/runs/useLatestRun'\nimport { useHandleAction } from '@/hooks/actions/useHandleAction'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useManageActions = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const latestRunProps = useLatestRun()\n const handleActionProps = useHandleAction()\n\n useEffect(() => {\n if (handleActionProps.isPending) return\n if (latestRunProps.isFetching) return\n if (!latestRunProps.latestRun) return\n if (latestRunProps.latestRun.status !== 'requires_action') return\n\n const isMutating = queryClient.isMutating({\n mutationKey: ['handleAction', threadContext.variables],\n })\n\n if (isMutating) return\n\n console.log('requires action', {\n latestRunProps,\n })\n\n handleActionProps.handleAction({\n latestRun: latestRunProps.latestRun,\n })\n }, [\n handleActionProps,\n latestRunProps,\n ])\n\n return null\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from '@/lib/threads/mutationOptions'\nimport { onSettled } from './lib/onSettled'\n\nexport const useHandleAction = () => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation({\n onSettled: onSettled({ queryClient }),\n ...mutationOptions({\n mutationKeyBase: ['handleAction'],\n path: '/actions',\n queryClient,\n threadContext,\n superinterfaceContext,\n }),\n })\n\n return {\n ...props,\n handleAction: partob(props.mutate, threadContext.variables),\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { Response } from '@/lib/actions/handleActionMutationFn'\n\ntype Variables = {\n [key: string]: any\n}\n\nexport const onSettled = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n _data: Response,\n _error: any,\n variables: Variables,\n) => {\n await queryClient.invalidateQueries({\n queryKey: ['messages', variables],\n })\n\n await queryClient.invalidateQueries({\n queryKey: ['runs', variables],\n })\n}\n","import { useManageRuns } from '@/hooks/runs/useManageRuns'\nimport { usePolling } from '@/hooks/runs/usePolling'\nimport { useManageActions } from '@/hooks/actions/useManageActions'\n\nexport const useLifecycle = () => {\n useManageRuns()\n useManageActions()\n usePolling()\n\n return null\n}\n","'use client'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\n\nexport const NextPageSkeleton = () => {\n const {\n hasNextPage,\n } = useMessages()\n\n if (!hasNextPage) {\n return null\n }\n\n return (\n <MessagesSkeleton />\n )\n}\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\nimport { Submit } from './Submit'\nimport { Root } from './Root'\nimport { Field } from './Field'\n\nexport const MessageForm = () => (\n <Root>\n <Field.Root>\n <Text\n size=\"2\"\n style={{\n flexGrow: 1,\n }}\n >\n <Flex\n flexGrow=\"1\"\n direction=\"column\"\n >\n <Field.Control />\n </Flex>\n </Text>\n\n <Flex\n flexShrink=\"0\"\n align=\"end\"\n >\n <Submit />\n </Flex>\n </Field.Root>\n </Root>\n)\n\nMessageForm.Root = Root\nMessageForm.Field = Field\nMessageForm.Submit = Submit\n","import {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\n\nexport const Submit = () => {\n const { isDisabled, isLoading } = useMessageFormContext()\n\n return (\n <Button\n type=\"submit\"\n radius=\"large\"\n disabled={isDisabled || isLoading}\n >\n <Spinner loading={isLoading}>\n <ArrowUpIcon />\n </Spinner>\n </Button>\n )\n}\n","import { useContext } from 'react'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\n\nexport const useMessageFormContext = () => (\n useContext(MessageFormContext)\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const MessageFormContext = createContext({\n isDisabled: false,\n isLoading: false,\n})\n","import { useMemo } from 'react'\nimport { useForm, SubmitHandler, FormProvider } from 'react-hook-form'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { formOptions } from './lib/formOptions'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\n\ntype Inputs = {\n content: string\n}\n\nexport const Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const formProps = useForm<Inputs>(formOptions)\n\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n } = formProps\n\n const { isRunActive } = useIsRunActive()\n\n const isLoading = useMemo(() => (\n isRunActive || isSubmitting\n ), [\n isRunActive,\n isSubmitting,\n ])\n\n const { addToast } = useToasts()\n\n const { createMessage } = useCreateMessage({\n onError: (error: any) => (\n addToast({ type: 'error', message: error.message })\n ),\n })\n\n const onSubmit: SubmitHandler<Inputs> = async (data) => {\n reset()\n // @ts-ignore-next-line\n await createMessage({ content: data.content })\n }\n\n const { latestMessage } = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking\n ), [latestMessage, isLoading])\n\n return (\n <MessageFormContext.Provider value={{ isDisabled, isLoading }}>\n <FormProvider {...formProps}>\n <form\n onSubmit={handleSubmit(onSubmit)}\n >\n {children}\n </form>\n </FormProvider>\n </MessageFormContext.Provider>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from '@/lib/threads/mutationOptions'\nimport { onMutate } from './lib/mutationOptions/onMutate'\nimport { onSettled } from './lib/mutationOptions/onSettled'\n\nexport const useCreateMessage = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation({\n onMutate: onMutate({ queryClient }),\n onSettled: onSettled({ queryClient }),\n onError,\n ...mutationOptions({\n mutationKeyBase: ['createMessage'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n }),\n })\n\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables),\n }\n}\n","import { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n content: string\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n newMessage: Variables,\n) => {\n const queryKey = ['messages', omit(newMessage, ['content'])]\n await queryClient.cancelQueries({ queryKey })\n\n const prevMessages = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n )\n\n return {\n prevMessages,\n newMessage,\n }\n}\n","import OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n newMessage: {\n content: string\n }\n}\n\nexport const data = ({\n newMessage,\n}: Args) => (prevData: any) => {\n const message = {\n id: optimisticId(),\n role: 'user' as OpenAI.Beta.Threads.Messages.ThreadMessage['role'],\n created_at: +new Date(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.ThreadMessage['object'],\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: newMessage.content,\n },\n } as OpenAI.Beta.Threads.Messages.MessageContentText,\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n file_ids: [],\n metadata: {},\n runSteps: [],\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { Response } from '@/lib/messages/createMessageMutationFn'\n\ntype Variables = {\n content: string\n [key: string]: any\n}\n\nexport const onSettled = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n _data: Response,\n _error: any,\n variables: Variables,\n) => {\n await queryClient.invalidateQueries({\n queryKey: ['messages', omit(variables, ['content'])],\n })\n\n await queryClient.invalidateQueries({\n queryKey: ['runs', omit(variables, ['content'])],\n })\n}\n","import { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\n\nconst schema = z.object({\n content: z.string().min(1),\n})\n\nexport const formOptions = {\n resolver: zodResolver(schema),\n}\n","import { usePrevious } from 'react-use'\nimport { useContext, useMemo, useRef, useEffect } from 'react'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { TextareaBase } from '@/components/textareas/TextareaBase'\nimport { useFormContext } from 'react-hook-form'\nimport {\n Container,\n Flex,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const {\n formState: {\n errors,\n },\n } = useFormContext()\n\n return (\n <Container\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n style={{\n borderRadius: 'var(--radius-2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: errors.content ? 'var(--red-9)' : 'var(--gray-5)',\n ...(errors.content ? { backgroundColor: 'var(--red-2)' } : {}),\n }}\n p=\"2\"\n pl=\"4\"\n >\n {children}\n </Flex>\n </Flex>\n </Flex>\n </Container>\n )\n}\n\nconst Control = () => {\n const assistantNameContext = useContext(AssistantNameContext)\n const {\n register,\n } = useFormContext()\n\n const { isDisabled, isLoading } = useMessageFormContext()\n\n const isSubmitDisabled = useMemo(() => (\n isDisabled || isLoading\n ), [isDisabled, isLoading])\n\n const isDisabledPrevious = usePrevious(isDisabled)\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const textareaProps = register('content')\n\n useEffect(() => {\n if (isDisabled) return\n if (!isDisabledPrevious) return\n if (!textareaRef.current) return\n\n textareaRef.current.focus()\n }, [isDisabled, isDisabledPrevious, textareaProps])\n\n return (\n <TextareaBase\n minRows={1}\n placeholder={`Message ${assistantNameContext}...`}\n disabled={isDisabled}\n onKeyDown={(e: any) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n\n if (isSubmitDisabled) return\n e.currentTarget.form?.requestSubmit()\n }\n }}\n {...textareaProps}\n ref={(e: any) => {\n textareaProps.ref(e)\n // @ts-ignore-next-line\n textareaRef.current = e\n }}\n />\n )\n}\n\nexport const Field = {\n Root,\n Control,\n}\n","import { forwardRef } from 'react'\nimport TextareaAutosize from 'react-textarea-autosize'\n\nconst UPSCALE_RATIO = 16 / 14\n\ntype Props = React.ComponentProps<typeof TextareaAutosize>\n\nexport const TextareaBase = forwardRef(function TextareaBase(props: Props, ref) {\n return (\n <>\n <style>\n {`.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }`}\n </style>\n\n <TextareaAutosize\n // @ts-ignore-next-line\n ref={ref}\n className=\"rt-reset superinterface-textarea\"\n style={{\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n resize: 'none',\n color: 'var(--gray-12)',\n fontSize: `${14 * UPSCALE_RATIO}px`,\n lineHeight: `${24 * UPSCALE_RATIO}px`,\n transform: `scale(${1 / UPSCALE_RATIO})`,\n margin: `0 ${(-100 * UPSCALE_RATIO + 100) / 2}%`,\n width: `${100 * UPSCALE_RATIO}%`,\n maxWidth: `${100 * UPSCALE_RATIO}%`,\n flexGrow: 1,\n display: 'flex',\n }}\n {...props}\n />\n </>\n )\n})\n","import { Flex } from '@radix-ui/themes'\nimport {\n Provider,\n Args as ThreadProviderArgs,\n} from '@/components/threads/Thread/Provider'\n\nexport type Args = ThreadProviderArgs\n\nexport const Root = ({\n children,\n ...rest\n}: Args) => (\n <Provider {...rest}>\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n >\n {children}\n </Flex>\n </Provider>\n)\n","import { useState } from 'react'\nimport { PollingContext } from '@/contexts/runs/PollingContext'\n\nexport const PollingProvider = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const [isPollRefetching, setIsPollRefetching] = useState(false)\n\n return (\n <PollingContext.Provider\n value={{\n isPollRefetching,\n setIsPollRefetching,\n }}\n >\n {children}\n </PollingContext.Provider>\n )\n}\n","'use client'\n\nimport { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nimport type { Args as SuperinterfaceProviderArgs } from '@/components/core/SuperinterfaceProvider'\nimport { PollingProvider } from '@/components/runs/PollingProvider'\n\nexport type Args = SuperinterfaceProviderArgs\n\nexport const Provider = (args: Args) => (\n <PollingProvider>\n <SuperinterfaceProvider {...args} />\n </PollingProvider>\n)\n","import { Messages } from '@/components/threads/Thread/Messages'\nimport { MessageForm } from '@/components/threads/Thread/MessageForm'\nimport { Root, Args as RootArgs } from '@/components/threads/Thread/Root'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const Thread = (props: Args) => (\n <Root {...props}>\n <Messages />\n <MessageForm />\n </Root>\n)\n\nThread.Root = Root\nThread.Messages = Messages\nThread.MessageForm = MessageForm\n","import { useContext } from 'react'\nimport { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const useMessageContext = () => (\n useContext(MessageContext)\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Provider } from '@/components/threads/ThreadDialog/Provider'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\ntype Args = {\n children: React.ReactNode\n style?: React.CSSProperties\n}\n\nexport const Root = ({\n children,\n style = {},\n}: Args) => (\n <ToastsProvider>\n <Provider>\n <Flex\n direction=\"column\"\n justify=\"end\"\n align=\"end\"\n position=\"fixed\"\n style={{\n bottom: '24px',\n right: '24px',\n top: '24px',\n zIndex: 9999999999,\n ...style,\n }}\n >\n {children}\n </Flex>\n </Provider>\n </ToastsProvider>\n)\n","import { useState } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Provider = ({\n children,\n}: Args) => {\n const threadDialogContext = useThreadDialogContext()\n const [isOpen, setIsOpen] = useState<boolean>(threadDialogContext.isOpen)\n\n return (\n <ThreadDialogContext.Provider\n value={{\n isOpen,\n setIsOpen,\n }}\n >\n {children}\n </ThreadDialogContext.Provider>\n )\n}\n","'use client'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const ThreadDialogContext = createContext<{\n isOpen: boolean\n setIsOpen: Dispatch<SetStateAction<boolean>>\n}>({\n isOpen: false,\n setIsOpen: () => {},\n})\n","import { useContext } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\n\nexport const useThreadDialogContext = () => (\n useContext(ThreadDialogContext)\n)\n","import { useState, useCallback } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\nimport { CustomToast } from './CustomToast'\nimport { Toast as ToastType } from '@/types'\n\nexport const ToastsProvider = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const [toasts, setToasts] = useState<ToastType[]>([])\n const addToast = useCallback((toast: ToastType) => (\n setToasts((prevToasts) => [\n ...prevToasts,\n toast,\n ])\n ), [])\n\n return (\n <ToastsContext.Provider\n value={{\n toasts,\n addToast,\n }}\n >\n <Toast.Provider>\n {children}\n\n {Array.from(toasts).map((toast: ToastType, index: number) => (\n <CustomToast\n key={index}\n toast={toast}\n />\n ))}\n\n <Toast.Viewport\n style={{\n position: 'absolute',\n bottom: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--space-5)',\n gap: 'var(--space-3)',\n width: '390px',\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 99999999999999,\n outline: 'none',\n }}\n />\n </Toast.Provider>\n </ToastsContext.Provider>\n )\n}\n","import * as Toast from '@radix-ui/react-toast'\nimport {\n Card,\n Text,\n Flex,\n} from '@radix-ui/themes'\nimport {\n CheckCircledIcon,\n CrossCircledIcon,\n} from '@radix-ui/react-icons'\nimport { Toast as ToastType } from '@/types'\n\nexport const CustomToast = ({\n toast,\n}: {\n toast: ToastType,\n}) => (\n <Toast.Root>\n <Card>\n <Toast.Title>\n <Flex>\n <Flex\n pr=\"2\"\n height=\"14px\"\n align=\"center\"\n >\n {toast.type === 'success' ? (\n <CheckCircledIcon\n color=\"var(--mint-9)\"\n />\n ) : (\n <CrossCircledIcon\n color=\"var(--red-9)\"\n />\n )}\n </Flex>\n <Text\n weight=\"medium\"\n size=\"1\"\n >\n {toast.message}\n </Text>\n </Flex>\n </Toast.Title>\n </Card>\n </Toast.Root>\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Trigger = ({\n children,\n}: Args) => {\n const { setIsOpen } = useThreadDialogContext()\n\n return (\n <Flex\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n >\n {children}\n </Flex>\n )\n}\n","import {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n ChatBubbleIcon,\n} from '@radix-ui/react-icons'\n\nexport const Button = () => (\n <IconButton\n size=\"4\"\n radius=\"full\"\n >\n <ChatBubbleIcon />\n </IconButton>\n)\n","import {\n Card,\n Inset,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Thread } from '@/components/threads/Thread'\n\ntype Args = {\n children: React.ReactNode\n}\n\nconst Root = ({\n children,\n}: Args) => {\n const { isOpen } = useThreadDialogContext()\n if (!isOpen) return null\n\n return (\n <Card\n mb=\"3\"\n style={{\n display: 'flex',\n flexGrow: 1,\n width: '100vw',\n maxWidth: '400px',\n maxHeight: '720px',\n }}\n >\n <Inset\n clip=\"padding-box\"\n side=\"all\"\n pb=\"current\"\n style={{\n display: 'flex',\n flexGrow: 1,\n }}\n >\n {children}\n </Inset>\n </Card>\n )\n}\n\nexport const Content = () => (\n <Root>\n <Thread.Root>\n <Thread.Messages\n style={{\n paddingTop: 'var(--space-5)',\n paddingRight: 'var(--space-5)',\n paddingLeft: 'var(--space-5)',\n }}\n />\n <Flex\n direction=\"column\"\n pl=\"5\"\n pr=\"5\"\n pb=\"3\"\n flexShrink=\"0\"\n >\n <Thread.MessageForm />\n </Flex>\n </Thread.Root>\n </Root>\n)\n\nContent.Root = Root\n","import { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Button } from '@/components/threads/ThreadDialog/Button'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const ThreadDialog = () => (\n <Root>\n <Content />\n <Trigger>\n <Button />\n </Trigger>\n </Root>\n)\n\nThreadDialog.Root = Root\nThreadDialog.Trigger = Trigger\nThreadDialog.Button = Button\nThreadDialog.Content = Content\n","'use client'\n\nimport 'regenerator-runtime/runtime'\n// import { useEffect, useRef } from 'react'\nimport { Flex } from '@radix-ui/themes'\nimport _ from 'lodash'\n// import SpeechRecognition, { useSpeechRecognition } from 'react-speech-recognition'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\nimport { useLifecycle } from '@/hooks/threads/useLifecycle'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { usePermission } from 'react-use'\nimport { blobToData } from './lib/blobToData'\nimport { useStatus } from '@/hooks/audioThreads/useStatus'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport type Args = {\n children: React.ReactNode\n}\n\nexport const Root = ({\n children,\n}: Args) => {\n useLifecycle()\n\n const createMessageProps = useCreateMessage()\n\n // const {\n // transcript,\n // resetTranscript,\n // } = useSpeechRecognition()\n\n // const transcriptRef = useRef(transcript)\n //\n // useEffect(() => {\n // transcriptRef.current = transcript\n // }, [transcript])\n\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n console.log('start')\n // resetTranscript()\n // // @ts-ignore-next-line\n // SpeechRecognition.default.startListening({ continuous: true })\n },\n onStop: async (_event: any, chunks: BlobPart[]) => {\n // console.log({ transcript: transcriptRef.current })\n // return createMessageProps.createMessage({\n // // @ts-ignore-next-line\n // content: transcriptRef.current,\n // })\n\n // @ts-ignore-next-line\n const blob = new Blob(chunks, { type: chunks[0].type })\n const audioContent = await blobToData(blob)\n\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent,\n })\n },\n })\n\n const microphonePermission = usePermission({ name: 'microphone' })\n\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === 'granted') {\n recorderProps.start()\n }\n }\n })\n\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps,\n })\n\n return (\n <AudioThreadContext.Provider\n value={{\n status,\n recorderProps,\n messageAudioProps,\n }}\n >\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n p=\"5\"\n >\n {children}\n </Flex>\n </AudioThreadContext.Provider>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport { statusMessages } from '@/hooks/audioThreads/useStatus/lib/statusMessages'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport const AudioThreadContext = createContext<{\n status: keyof typeof statusMessages\n recorderProps: ReturnType<typeof useRecorder>\n messageAudioProps: ReturnType<typeof useMessageAudio>\n}>({\n status: 'idle',\n recorderProps: {\n status: 'idle',\n start: async () => {},\n stop: async () => {},\n pause: async () => {},\n resume: async () => {},\n visualizationAnalyser: null,\n },\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {},\n pause: async () => {},\n },\n})\n","export const blobToData = (blob: Blob) => (\n new Promise((resolve) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result)\n reader.readAsDataURL(blob)\n })\n)\n","import { useMemo } from 'react'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport { statusMessages } from './lib/statusMessages'\n\ntype Args = {\n messageAudioProps: ReturnType<typeof useMessageAudio>\n recorderProps: ReturnType<typeof useRecorder>\n createMessageProps: ReturnType<typeof useCreateMessage>\n}\n\nexport const useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps,\n}: Args) => {\n const isRunActiveProps = useIsRunActive()\n\n const status = useMemo((): keyof typeof statusMessages => {\n if (recorderProps.status === 'recording') return 'recording'\n if (createMessageProps.isPending) return 'creatingMessage'\n if (isRunActiveProps.isRunActive) return 'runActive'\n\n if (messageAudioProps.playing) return 'playing'\n if (messageAudioProps.paused) return 'playerPaused'\n if (!messageAudioProps.isReady) return 'loading'\n if (recorderProps.status === 'idle') return 'idle'\n if (recorderProps.status === 'paused') return 'recorderPaused'\n\n return 'loading'\n }, [\n messageAudioProps,\n recorderProps,\n createMessageProps,\n isRunActiveProps,\n ])\n\n return {\n status,\n }\n}\n","import dayjs, { Dayjs } from 'dayjs'\nimport { useAudioCapture, UseAudioCaptureProps } from 'use-audio-capture'\nimport { useMemo, useRef, useState, useCallback, useEffect } from 'react'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useInterval } from 'react-use'\nimport { AudioEngine } from '@/types'\n\ntype Args = UseAudioCaptureProps & {\n isStopOnSilence: boolean\n}\n\nexport const useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop,\n}: Args) => {\n const [silenceStart, setSilenceStart] = useState<Dayjs | null>(null)\n const [noiseStart, setNoiseStart] = useState<Dayjs | null>(null)\n const [mediaStream, setMediaStream] = useState<MediaStream | null>(null)\n const [status, setStatus] = useState<'idle' | 'recording' | 'stopped' | 'paused'>('idle')\n const startAudioPlayer = useAudioPlayer()\n const endAudioPlayer = useAudioPlayer()\n const [isLoaded, setIsLoaded] = useState(false)\n\n useEffect(() => {\n if (isLoaded) return\n setIsLoaded(true)\n\n // startAudioPlayer.load('/sounds/warning.wav', {\n // html5: true,\n // })\n // endAudioPlayer.load('/sounds/success.wav', {\n // html5: true,\n // })\n }, [isLoaded, startAudioPlayer, endAudioPlayer])\n\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n // startAudioPlayer.play()\n setStatus('recording')\n setMediaStream(opts.mediaStream)\n isInited.current = false\n if (onStart) onStart(event, opts)\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onStop: async (...args) => {\n // endAudioPlayer.play()\n setStatus('stopped')\n if (onStop) await onStop(...args)\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onPause: () => {\n setStatus('paused')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onResume: () => {\n setStatus('recording')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n })\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isInited = useRef(false)\n\n useEffect(() => {\n if (!mediaStream) return\n if (isInited.current) return\n isInited.current = true\n\n const audioContext = new AudioContext()\n\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext,\n })\n }, [isInited, mediaStream])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const silenceAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n result.minDecibels = -45\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const handleSilence = useCallback(() => {\n if (!silenceAnalyser) return\n\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount)\n silenceAnalyser.getByteFrequencyData(frequencyData)\n\n const isSilent = frequencyData.every((f) => f === 0)\n\n setSilenceStart((silenceStart: Dayjs | null) => {\n if (isSilent) return silenceStart || dayjs()\n\n return null\n })\n\n setNoiseStart((noiseStart: Dayjs | null) => {\n if (isSilent) return noiseStart\n\n return noiseStart || dayjs()\n })\n\n requestAnimationFrame(() => handleSilence())\n }, [silenceAnalyser, setNoiseStart, setSilenceStart])\n\n useEffect(() => {\n if (!isStopOnSilence) return\n\n requestAnimationFrame(() => handleSilence())\n }, [handleSilence, isStopOnSilence])\n\n useInterval(() => {\n if (!isStopOnSilence) return\n if (status !== 'recording') return\n if (!silenceStart) return\n if (!noiseStart) return\n if (!silenceStart.isBefore(dayjs().subtract(1, 'second'))) return\n\n audioCaptureProps.stop()\n }, 100)\n\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser,\n }\n}\n","import { useMemo, useRef, useState, useEffect } from 'react'\nimport { Howler } from 'howler'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AudioEngine } from '@/types'\nimport { input as getInput } from './lib/input'\nimport { isHtmlAudioSupported } from './lib/isHtmlAudioSupported'\n\ntype Args = {\n onEnd: () => void\n}\n\nexport const useMessageAudio = ({\n onEnd,\n}: Args) => {\n const [playedMessageIds, setPlayedMessageIds] = useState<string[]>([])\n const audioPlayer = useAudioPlayer()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const latestMessageProps = useLatestMessage()\n\n useEffect(() => {\n if (audioPlayer.playing) return\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'assistant') return\n if (playedMessageIds.includes(latestMessageProps.latestMessage.id)) return\n\n const input = getInput({\n message: latestMessageProps.latestMessage,\n })\n\n if (!input) return\n\n setPlayedMessageIds((prev) => [...prev, latestMessageProps.latestMessage.id])\n\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?input=${input}`, {\n format: 'mp3',\n autoplay: true,\n html5: isHtmlAudioSupported,\n onend: onEnd,\n xhr: {\n ...(superinterfaceContext.publicApiKey ? {\n headers: {\n Authorization: `Bearer ${superinterfaceContext.publicApiKey}`,\n },\n } : {}),\n withCredentials: true,\n }\n })\n }, [\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n playedMessageIds,\n onEnd,\n ])\n\n\n const isInited = useRef(false)\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n useEffect(() => {\n if (!audioPlayer.playing) return\n if (isInited.current) return\n isInited.current = true\n\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext()\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext,\n })\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx,\n })\n }\n }, [audioPlayer, isInited])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(audioEngine.audioContext.destination)\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n return {\n ...audioPlayer,\n visualizationAnalyser,\n }\n}\n","import OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { Message } from '@/types'\n\ntype Args = {\n message: Message\n}\n\nexport const input = ({\n message,\n}: Args) => {\n const textContents = message.content.filter((c) => c.type === 'text') as OpenAI.Beta.Threads.Messages.MessageContentText[]\n const result = textContents.map((c) => c.text.value).join(' ')\n\n if (isEmpty(result)) return null\n\n return result\n}\n","import { detect } from 'detect-browser'\n\nconst unsupportedNames = [\n 'safari',\n 'ios',\n]\n\nexport const isHtmlAudioSupported = !unsupportedNames.includes(detect()?.name || '')\n","import _ from 'lodash'\nimport { Flex } from '@radix-ui/themes'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\n\nexport const Visualization = () => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n mb=\"3\"\n flexGrow=\"1\"\n >\n <Flex\n align=\"center\"\n justify=\"center\"\n height=\"200px\"\n width=\"200px\"\n style={{\n backgroundColor: `var(--${audioThreadContext.status === 'playing' ? 'mint' : 'gray'}-4)`,\n borderRadius: '9999px',\n }}\n >\n </Flex>\n </Flex>\n )\n}\n // className={`transition duration-300 ${audioThreadContext.status === 'playing' ? 'bg-mint-4' : 'bg-gray-4'}`}\n// import { Visualizer } from '@/components/audio/Visualizer'\n// <Visualizer\n// visualizationAnalyser={visualizationAnalyser}\n// bgColorClassName={audioThreadContext.status === 'playing' ? 'bg-mint-12' : 'bg-gray-11'}\n// />\n","import { useContext } from 'react'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\n\nexport const useAudioThreadContext = () => (\n useContext(AudioThreadContext)\n)\n","import { SpeakerModerateIcon } from '@radix-ui/react-icons'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { Visualizer } from './Visualizer'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { ActionButton } from './ActionButton'\n\nexport const Form = () => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n >\n <Flex\n pb=\"3\"\n align=\"center\"\n >\n <Flex\n ml=\"-5\"\n mr=\"2\"\n align=\"center\"\n >\n <SpeakerModerateIcon\n style={{\n color: `var(--${audioThreadContext.status === 'recording' ? 'mint' : 'gray'}-12)`,\n }}\n />\n </Flex>\n\n <Flex\n px=\"2\"\n py=\"1\"\n style= {{\n backgroundColor: `var(--${audioThreadContext.status === 'recording' ? 'mint' : 'gray'}-4)`,\n borderRadius: 'var(--radius-6)',\n }}\n >\n <Visualizer />\n </Flex>\n </Flex>\n\n <ActionButton />\n </Flex>\n )\n}\n","import _ from 'lodash'\nimport {\n Flex,\n Grid,\n} from '@radix-ui/themes'\nimport { useState, useEffect, useCallback } from 'react'\nimport { cluster } from 'radash'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\n\nconst barCount = 4\n\nexport const Visualizer = () => {\n const audioThreadContext = useAudioThreadContext()\n const visualizationAnalyser = audioThreadContext.recorderProps.visualizationAnalyser\n const [emptyVisualizer] = useState(() => new AudioContext().createAnalyser())\n const [barHeights, setBarHeights] = useState<number[]>([])\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode }) => {\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n // @ts-ignore-next-line\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount)\n\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => (\n _.mean(frequencyDataCluster) / 255 * 100\n ))\n )\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser: visualizationAnalyser || emptyVisualizer })\n }, [draw, visualizationAnalyser, emptyVisualizer])\n\n return (\n <Grid\n columns={`${barCount}`}\n gap=\"1\"\n width=\"auto\"\n style={{\n // TODO not sure why we need this\n gridTemplateColumns: 'repeat(4, minmax(0, 1fr))',\n }}\n >\n {barHeights.map((barHeight, index) => (\n <Flex\n key={index}\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n height=\"20px\"\n >\n <Flex\n minHeight=\"50%\"\n maxHeight=\"100%\"\n height={`${barHeight + 20}%`}\n width=\"12px\"\n style={{\n backgroundColor: `var(--${audioThreadContext.status === 'recording' ? 'mint' : 'gray'}-11)`,\n borderRadius: 'var(--radius-6)',\n }}\n />\n </Flex>\n ))}\n </Grid>\n )\n}\n // className={`${audioThreadContext.status === 'recording' ? 'bg-mint-12' : 'bg-gray-11'} rounded-6 transition duration-300`}\n","import {\n Flex,\n IconButton,\n Tooltip,\n} from '@radix-ui/themes'\nimport {\n PauseIcon,\n ArrowUpIcon,\n ResumeIcon,\n} from '@radix-ui/react-icons'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\n\nexport const ActionButton = () => {\n const audioThreadContext = useAudioThreadContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <Flex\n align=\"center\"\n >\n <Flex\n mr=\"3\"\n ml=\"-7\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.pause}\n color=\"gray\"\n radius=\"full\"\n size=\"1\"\n >\n <PauseIcon />\n </IconButton>\n </Flex>\n\n <Tooltip\n open\n content=\"Send your message\"\n side=\"bottom\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.stop}\n color=\"gray\"\n highContrast\n radius=\"full\"\n size=\"4\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n >\n <ArrowUpIcon />\n </IconButton>\n </Tooltip>\n </Flex>\n )\n }\n\n if (audioThreadContext.status === 'recorderPaused') {\n return (\n <IconButton\n onClick={audioThreadContext.recorderProps.resume}\n color=\"red\"\n radius=\"full\"\n size=\"4\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'idle') {\n return (\n <IconButton\n onClick={() => audioThreadContext.recorderProps.start()}\n size=\"4\"\n color=\"red\"\n radius=\"full\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.pause()}\n size=\"4\"\n color=\"gray\"\n radius=\"full\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n >\n <PauseIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'playerPaused') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.play()}\n size=\"4\"\n color=\"gray\"\n radius=\"full\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n size=\"4\"\n color=\"red\"\n radius=\"full\"\n disabled\n style={{\n border: '2px solid var(--gray-8)',\n }}\n />\n )\n}\n","import { Root, Args as RootArgs } from './Root'\nimport { Visualization } from './Visualization'\nimport { Form } from './Form'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const AudioThread = (props: Args) => (\n <Root {...props}>\n <Visualization />\n <Form />\n </Root>\n)\n\nAudioThread.Root = Root\nAudioThread.Visualization = Visualization\nAudioThread.Form = Form\n","import { AudioThread } from '@/components/threads/AudioThread'\nimport { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Button } from '@/components/threads/ThreadDialog/Button'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const AudioThreadDialog = () => (\n <Root>\n <Content.Root>\n <AudioThread />\n </Content.Root>\n <Trigger>\n <Button />\n </Trigger>\n </Root>\n)\n\nAudioThreadDialog.Root = Root\nAudioThreadDialog.Trigger = Trigger\nAudioThreadDialog.Button = Button\nAudioThreadDialog.Content = Content\n","import { useMemo } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { Content } from './Content'\nimport { Item } from './Item'\n\nexport const Suggestions = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const latestMessageProps = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps])\n\n if (latestMessageProps.isLoading) return null\n if (isDisabled) return null\n\n return (\n <Content>\n {children}\n </Content>\n )\n}\n\nSuggestions.Item = Item\n","import { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport { onlyText } from 'react-children-utilities'\nimport { useMessageContext } from '@/hooks/messages/useMessageContext'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { Item } from './Item'\n\nexport const Content = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const messageContext = useMessageContext()\n const latestMessageProps = useLatestMessage()\n\n const isRunActiveProps = useIsRunActive()\n\n const suggestions = useMemo(() => (\n onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim())\n ), [children])\n\n const isDisabled = useMemo(() => (\n messageContext.message?.id !== latestMessageProps.latestMessage.id || isRunActiveProps.isRunActive\n ), [messageContext, latestMessageProps, isRunActiveProps])\n\n if (isEmpty(suggestions)) return null\n\n return (\n <Flex\n gap=\"2\"\n py=\"2\"\n wrap=\"wrap\"\n >\n {suggestions.map((suggestion) => (\n <Item\n key={suggestion}\n suggestion={suggestion}\n isDisabled={isDisabled}\n />\n ))}\n </Flex>\n )\n}\n","import {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Text,\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\n\nexport const Item = ({\n suggestion,\n isDisabled,\n}: {\n suggestion: string\n isDisabled: boolean\n}) => {\n const { createMessage, isPending } = useCreateMessage()\n\n return (\n <Content\n onClick={() => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion,\n })\n }}\n isDisabled={isDisabled}\n isPending={isPending}\n >\n {suggestion}\n </Content>\n )\n}\n\nconst Content = ({\n onClick,\n isDisabled,\n isPending,\n children,\n}: {\n onClick: () => void\n isDisabled: boolean\n isPending: boolean\n children: React.ReactNode\n}) => (\n <Button\n variant=\"soft\"\n onClick={onClick}\n disabled={isDisabled}\n >\n <Text\n size=\"1\"\n weight=\"regular\"\n >\n {children}\n </Text>\n\n <Spinner loading={isPending}>\n <ArrowUpIcon />\n </Spinner>\n </Button>\n)\n\nItem.Content = Content\n","import { useMemo } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { merge } from '@/lib/misc/merge'\n\nexport const MarkdownProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevMarkdownContext = useMarkdownContext()\n\n const value = useMemo(() => (\n merge(prevMarkdownContext, rest)\n ), [rest, prevMarkdownContext])\n\n return (\n <MarkdownContext.Provider\n value={value}\n >\n {children}\n </MarkdownContext.Provider>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/lib/misc/merge/index.ts","../src/lib/misc/merge/customizer.ts","../src/contexts/core/SuperinterfaceContext/index.tsx","../src/hooks/core/useSuperinterfaceContext/index.ts","../src/components/core/SuperinterfaceProvider/index.tsx","../src/components/threads/Thread/Messages/index.tsx","../src/components/threads/Thread/Messages/Content/index.tsx","../src/hooks/messages/useMessages/index.tsx","../src/lib/threads/queryOptions/index.ts","../src/lib/messages/messagesQueryOptions.ts","../src/hooks/messageGroups/useMessageGroups/index.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/index.ts","../src/lib/messages/order.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/newGroupItem.ts","../src/hooks/messageGroups/useMessageGroups/lib/messageGroups/newGroup/index.ts","../src/components/skeletons/MessagesSkeleton/index.tsx","../src/components/messageGroups/MessageGroupBase/index.tsx","../src/components/messageGroups/MessageGroupBase/Name.tsx","../src/hooks/toasts/useToasts/index.ts","../src/contexts/toasts/ToastsContext/index.ts","../src/components/threads/Thread/Messages/Content/MessageGroup/index.tsx","../src/components/messageGroups/MessageGroupBase/AssistantAvatar.tsx","../src/contexts/assistants/AssistantAvatarContext/index.tsx","../src/contexts/assistants/AssistantNameContext/index.tsx","../src/components/threads/Thread/Messages/Content/MessageGroup/Content/index.tsx","../src/components/threads/Thread/Message/index.tsx","../src/components/runSteps/RunSteps/index.tsx","../src/components/runSteps/RunStep/ToolCalls/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/index.tsx","../src/contexts/functions/FunctionComponentsContext/index.tsx","../src/components/functions/FunctionBase/index.tsx","../src/components/toolCalls/ToolCallBase/index.tsx","../src/components/toolCalls/ToolCallBase/ToolCallTitle.tsx","../src/components/functions/FunctionBase/Icon.tsx","../src/components/functions/FunctionBase/Content.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/lib/title.ts","../src/components/runSteps/RunStep/ToolCalls/ToolCall/Fn/DefaultFunction/index.tsx","../src/components/runSteps/RunStep/ToolCalls/ToolCall/CodeInterpreter/index.tsx","../src/components/runSteps/RunStep/ToolCalls/Starting/index.tsx","../src/components/runSteps/RunStep/index.tsx","../src/contexts/messages/MessageContext/index.ts","../src/components/threads/Thread/Message/Provider.tsx","../src/components/threads/Thread/Message/TextContent.tsx","../src/hooks/markdown/useMarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/index.ts","../src/contexts/markdown/MarkdownContext/lib/components/Paragraph.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Link.tsx","../src/contexts/markdown/MarkdownContext/lib/components/UnorderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/OrderedList.tsx","../src/contexts/markdown/MarkdownContext/lib/components/ListItem.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Strong.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Pre.tsx","../src/contexts/markdown/MarkdownContext/lib/components/Code.tsx","../src/contexts/markdown/MarkdownContext/lib/components/index.tsx","../src/components/threads/Thread/Messages/Progress/index.tsx","../src/components/skeletons/StartingContentSkeleton/index.tsx","../src/components/skeletons/StartingSkeleton/index.tsx","../src/hooks/messages/useLatestMessage/index.ts","../src/hooks/runs/useIsRunActive/index.tsx","../src/hooks/runs/useLatestRun/index.ts","../src/hooks/runs/useRuns/index.tsx","../src/lib/runs/runsQueryOptions.ts","../src/hooks/runs/useRuns/lib/getRuns.ts","../src/lib/runs/isRunEditingMessage/index.ts","../src/hooks/runs/usePollingContext/index.ts","../src/contexts/runs/PollingContext/index.tsx","../src/components/threads/Thread/Messages/Root/index.tsx","../src/hooks/misc/useInfiniteScroll/index.tsx","../src/hooks/misc/useThrottledEffect/index.tsx","../src/hooks/runs/useManageRuns/index.tsx","../src/hooks/runs/useCreateRun/index.ts","../src/lib/threads/mutationOptions/index.ts","../src/hooks/runs/useCreateRun/lib/onSuccess.ts","../src/hooks/runs/useCreateRun/lib/onSettled.ts","../src/lib/optimistic/optimisticId.ts","../src/hooks/runs/useCreateRun/lib/onMutate/data.ts","../src/hooks/runs/useCreateRun/lib/onMutate/index.ts","../src/lib/optimistic/isOptimistic.ts","../src/hooks/runs/usePolling/index.tsx","../src/hooks/runs/usePolling/lib/refetch.ts","../src/hooks/actions/useManageActions/index.tsx","../src/hooks/actions/useHandleAction/index.tsx","../src/hooks/actions/useHandleAction/lib/onSettled.ts","../src/hooks/threads/useLifecycle/index.tsx","../src/components/threads/Thread/Messages/NextPageSkeleton.tsx","../src/components/threads/Thread/MessageForm/index.tsx","../src/components/threads/Thread/MessageForm/Submit/index.tsx","../src/hooks/messages/useMessageFormContext/index.ts","../src/contexts/messages/MessageFormContext/index.ts","../src/components/threads/Thread/MessageForm/Root/index.tsx","../src/hooks/messages/useCreateMessage/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/index.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onMutate/data.ts","../src/hooks/messages/useCreateMessage/lib/mutationOptions/onSettled.ts","../src/components/threads/Thread/MessageForm/Root/lib/formOptions.ts","../src/components/threads/Thread/MessageForm/Field/index.tsx","../src/components/textareas/TextareaBase/index.tsx","../src/components/threads/Thread/Root/index.tsx","../src/components/runs/PollingProvider/index.tsx","../src/components/threads/Thread/Provider/index.tsx","../src/components/threads/Thread/index.tsx","../src/hooks/messages/useMessageContext/index.ts","../src/components/threads/ThreadDialog/Root/index.tsx","../src/components/threads/ThreadDialog/Provider/index.tsx","../src/contexts/threads/ThreadDialogContext/index.ts","../src/hooks/threads/useThreadDialogContext/index.ts","../src/components/toasts/ToastsProvider/index.tsx","../src/components/toasts/ToastsProvider/CustomToast.tsx","../src/components/threads/ThreadDialog/Trigger/index.tsx","../src/components/threads/ThreadDialog/Button/index.tsx","../src/components/threads/ThreadDialog/Content/index.tsx","../src/components/threads/ThreadDialog/index.tsx","../src/components/threads/AudioThread/Root/index.tsx","../src/contexts/threads/AudioThreadContext/index.ts","../src/components/threads/AudioThread/Root/lib/blobToData.ts","../src/hooks/audioThreads/useStatus/index.ts","../src/hooks/audioThreads/useRecorder/index.ts","../src/hooks/audioThreads/useMessageAudio/index.ts","../src/hooks/audioThreads/useMessageAudio/lib/input.ts","../src/hooks/audioThreads/useMessageAudio/lib/isHtmlAudioSupported.ts","../src/components/threads/AudioThread/Visualization/index.tsx","../src/hooks/threads/useAudioThreadContext/index.ts","../src/components/threads/AudioThread/Form/index.tsx","../src/components/threads/AudioThread/Form/Visualizer/index.tsx","../src/components/threads/AudioThread/Form/ActionButton/index.tsx","../src/components/threads/AudioThread/index.tsx","../src/components/threads/AudioThreadDialog/index.tsx","../src/components/suggestions/Suggestions/index.tsx","../src/components/suggestions/Suggestions/Content.tsx","../src/components/suggestions/Suggestions/Item.tsx","../src/components/markdown/MarkdownProvider/index.tsx"],"names":["import_lodash","_","import_react","import_themes","import_react_query","queryKey","import_radash","messages","import_jsx_runtime","MessageGroupBase","MessagesSkeleton","import_react_icons","title","RadixLink","RadixStrong","Code","RadixCode","laterRunSteps","olderRunSteps","Content","messageGroups","data","isRunActive","onSettled","onMutate","import_zod","Root","import_react_use","TextareaBase","TextareaAutosize","import_react_hook_form","Provider","Toast","Button","silenceStart","dayjs","noiseStart","import_react_use_audio_player","input","visualizationAnalyser"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,iBAAc;;;ACAd,oBAAc;AAGP,IAAM,aAAa,CAAC,aAAa,aAAa;AACnD,MAAI,CAAC,cAAAC,QAAE,QAAQ,WAAW;AAAG;AAE7B,SAAO;AACT;;;ADHO,IAAM,QAAQ,CAAC,QAAQ,YAC5B,eAAAA,QAAE,UAAU,eAAAA,QAAE,UAAU,GAAG,GAAG,GAAG,SAAS,UAAU;;;AEJtD,mBAA8B;AAEvB,IAAM,4BAAwB,4BAQlC;AAAA,EACD,SAAS;AAAA,EACT,WAAW,CAAC;AAAA,EACZ,gBAAgB;AAAA,IACd,SAAS,CAAC;AAAA,IACV,WAAW,CAAC;AAAA,EACd;AACF,CAAC;;;AClBD,IAAAC,gBAA2B;AAGpB,IAAM,2BAA2B,UACtC,0BAAW,qBAAqB;;;ACuC9B;AApBG,IAAM,yBAAyB,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAY;AACV,QAAM,wBAAwB,yBAAyB;AAEvD,QAAM,QAAQ;AAAA,IACZ;AAAA,IACA;AAAA,MACE,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC7B,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,MACvC,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,MACjC,GAAI,iBAAiB,EAAE,eAAe,IAAI,CAAC;AAAA,IAC7C;AAAA,EACF;AAEA,SACE;AAAA,IAAC,sBAAsB;AAAA,IAAtB;AAAA,MACC;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACjDA,IAAAC,kBAEO;;;ACFP,IAAAD,iBAA0B;;;ACA1B,IAAAA,gBAAwB;AACxB,IAAAE,sBAIO;;;ACLP,yBAGO;AAUA,IAAM,eAAe,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,WAAW,CAAC,GAAG,cAAc,cAAc,SAAS;AAE1D,aAAO,yCAAmC;AAAA;AAAA,IAExC,SAAS,OAAO;AAAA,MACd;AAAA,MACA,UAAAC;AAAA,IACF,MAAyB;AACvB,YAAM,CAAC,MAAM,SAAS,IAAIA;AAC1B,YAAM,SAAS,IAAI,gBAAgB;AAAA,QACjC,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,QACjC,GAAG;AAAA,MACL,CAAC;AAED,aAAO,MAAM,GAAG,sBAAsB,OAAO,GAAG,IAAI,IAAI,MAAM,IAAI;AAAA,QAChE,aAAa;AAAA,QACb,GAAI,sBAAsB,eAAe;AAAA,UACvC,SAAS;AAAA,YACP,eAAe,UAAU,sBAAsB,YAAY;AAAA,UAC7D;AAAA,QACF,IAAI,CAAC;AAAA,MACP,CAAC,EACE,KAAK,OAAO,aAAa;AACxB,YAAI,SAAS,WAAW,KAAK;AAC3B,cAAI;AACF,kBAAM,gBAAgB,MAAM,SAAS,KAAK;AAC1C,kBAAM,IAAI,MAAM,cAAc,KAAK;AAAA,UACrC,SAAS,OAAO;AACd,kBAAM,IAAI,MAAM,iBAAiB;AAAA,UACnC;AAAA,QACF;AAEA,eAAO,SAAS,KAAK;AAAA,MACvB,CAAC;AAAA,IACL;AAAA,IACA,kBAAkB;AAAA,IAClB,kBAAkB,CAAC,aAA2B;AAC5C,UAAI,CAAC,SAAS;AAAa,eAAO;AAElC,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,IACP,GAAG,cAAc,eAAe;AAAA,IAChC,GAAG,YAAY,iBAAiB,QAAQ;AAAA,IACxC;AAAA,EACF,CAAC;AACH;;;ACnEO,IAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,MAKE,aAAa;AAAA,EACX,cAAc,CAAC,UAAU;AAAA,EACzB,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;AFTH,IAAM,WAAW,CAAC;AAAA,EAChB;AACF,MAIM;AACJ,MAAI,CAAC,MAAM;AAAM,WAAO,CAAC;AAEzB,SAAO,MAAM,KAAK,MAAM,OAAkB,CAAC,KAAK,SAC9C,IAAI,OAAO,KAAK,IAAI,GACnB,CAAC,CAAC;AACP;AAGO,IAAM,cAAc,MAAM;AAC/B,QAAM,kBAAc,oCAAe;AACnC,QAAM,gBAAgB,yBAAiB;AACvC,QAAM,wBAAwB,yBAAyB;AAEvD,QAAM,YAAQ,sCAAiB,qBAAqB;AAAA,IAClD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,CAAC;AAEF,aAAO,uBAAQ,OAAO;AAAA,IACpB,GAAG;AAAA;AAAA,IAEH,UAAU,SAAS,EAAE,MAAM,CAAC;AAAA,EAC9B,IAAI,CAAC,KAAK,CAAC;AACb;;;AG1CA,IAAAH,gBAAwB;;;ACAxB,IAAAF,iBAAc;AACd,IAAAM,iBAAqB;;;ACDrB,oBAAqB;AAOd,IAAM,QAAQ,CAAC,EAAE,UAAAC,UAAS,UAC/B,oBAAKA,WAAU,OAAK,EAAE,YAAY,IAAI;;;ACFjC,IAAM,eAAe,CAAC,EAAE,QAAQ,OAAa;AAAA,EAClD,IAAI,QAAQ;AAAA,EACZ,MAAM,QAAQ;AAAA,EACd,WAAW,QAAQ;AAAA,EACnB,UAAU,CAAC,OAAO;AACpB;;;ACHO,IAAM,WAAW,CAAC,EAAE,QAAQ,QAAQ,MAAY;AAAA,EACrD,GAAG;AAAA,EACH,aAAa;AAAA,IACX;AAAA,EACF,CAAC;AACH;;;AHHO,IAAM,gBAAgB,CAAC;AAAA,EAC5B,UAAAA;AACF,MACE,eAAAN,QAAE;AAAA,EACA,MAAM,EAAE,UAAAM,UAAS,CAAC;AAAA,EAClB,CAAC,QAAwB,YAAqB;AAC5C,UAAM,YAAQ,qBAAK,MAAM;AAEzB,QAAI,CAAC;AAAO,aAAO,SAAS,EAAE,QAAQ,QAAQ,CAAC;AAE/C,QAAI,MAAM,SAAS,QAAQ,MAAM;AAC/B,aAAO,SAAS;AAAA,QACd;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,GAAG,eAAAN,QAAE,UAAU,MAAM;AAAA,MACrB;AAAA,QACE,GAAG;AAAA,QACH,UAAU,CAAC,GAAG,MAAM,UAAU,OAAO;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAAA,EACA,CAAC;AACH;;;AD5BK,IAAM,mBAAmB,CAAC;AAAA,EAC/B,UAAAM;AACF,UACE;AAAA,EACE,OAAO;AAAA,IACL,eAAe,cAAiB,EAAE,UAAAA,UAAS,CAAC;AAAA,EAC9C;AAAA,EACA,CAACA,SAAQ;AACX;;;AKhBF,IAAAL,gBAA2B;AAC3B,IAAAC,iBAKO;;;ACNP,IAAAD,gBAA2B;AAC3B,oBAGO;AAgBD,IAAAM,sBAAA;AAVC,IAAM,uBAAmB,0BAAW,SAASC,kBAAiB;AAAA,EACnE;AACF,GAAS,KAAK;AACZ,SACE;AAAA,IAAC;AAAA;AAAA,MAEC;AAAA,MACA,MAAK;AAAA,MACL,UAAS;AAAA,MAET;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX,KAAI;AAAA,UAEH;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ,CAAC;;;AC5BD,IAAAN,iBAGO;AAaH,IAAAK,sBAAA;AAPG,IAAM,OAAO,CAAC;AAAA,EACnB;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAO;AAAA,IAEP;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,QAAO;AAAA,QAEN;AAAA;AAAA,IACH;AAAA;AACF;;;AFPkB,IAAAA,sBAAA;AALb,IAAM,uBAAmB,0BAAW,SAASE,kBAAiB,QAAQ,KAAK;AAChF,SACE,8CAAC,oBAAiB,KAChB;AAAA,iDAAC,2BAAS,SAAO,MACf;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,6CAAC,uBAAK;AAAA,QAChB,MAAK;AAAA;AAAA,IACP,GACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QAEH;AAAA,uDAAC,QACC;AAAA,YAAC;AAAA;AAAA,cACC,SAAO;AAAA,cACP,OAAO;AAAA,gBACL,OAAO;AAAA,cACT;AAAA;AAAA,UACF,GACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,SAAO;AAAA,cACP,OAAO;AAAA,gBACL,OAAO;AAAA,cACT;AAAA;AAAA,UACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,SAAO;AAAA,cACP,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,WAAW;AAAA,cACb;AAAA;AAAA,UACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,SAAO;AAAA,cACP,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,WAAW;AAAA,cACb;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ,CAAC;;;AGzDD,IAAAR,gBAA2B;;;ACC3B,IAAAA,gBAA8B;AAGvB,IAAM,oBAAgB,6BAG1B;AAAA,EACD,QAAQ,CAAC;AAAA,EACT,UAAU,MAAM;AAAA,EAAC;AACnB,CAAC;;;ADPM,IAAM,YAAY,UACvB,0BAAW,aAAa;;;AEJ1B,IAAAA,iBAA2B;AAC3B,IAAAC,kBAGO;AACP,IAAAQ,sBAEO;;;ACNP,IAAAT,iBAA2B;AAC3B,IAAAC,iBAEO;;;ACHP,IAAAD,gBAA8B;AAC9B,IAAAC,iBAEO;AACP,yBAEO;AAIO,IAAAK,sBAAA;AAFP,IAAM,6BAAyB;AAAA,EACpC;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,6CAAC,wCAAkB;AAAA,MAC7B,MAAK;AAAA;AAAA,EACP;AACF;;;ADHI,IAAAA,sBAAA;AAJG,IAAM,kBAAkB,MAAM;AACnC,QAAM,kCAA8B,2BAAW,sBAAsB;AAErE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,YAAW;AAAA,MACX,QAAO;AAAA,MACP,OAAM;AAAA,MACN,OAAO;AAAA,QACL,cAAc;AAAA,QACd,UAAU;AAAA,MACZ;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AEtBA,IAAAN,iBAA8B;AAEvB,IAAM,2BAAuB,8BAAc,WAAW;;;ACH7D,IAAAC,kBAAqB;;;ACCrB,IAAAD,iBAAwB;AACxB,IAAAC,kBAEO;;;ACHP,IAAAA,kBAAqB;;;ACArB,IAAAA,kBAEO;;;ACFP,IAAAA,kBAEO;;;ACHP,IAAAD,iBAA2B;;;ACC3B,IAAAA,iBAA8B;AAMvB,IAAM,gCAA4B,8BAAc,CAAC,CAAuB;;;ACN/E,IAAAC,iBAGO;;;ACJP,IAAAA,iBAIO;AAcD,IAAAK,sBAAA;AARC,IAAM,eAAe,CAAC;AAAA,EAC3B;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,IAAG;AAAA,IACH,IAAG;AAAA,IAEH,uDAAC,iCACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,OAAO;AAAA,UACL,WAAW;AAAA,QACb;AAAA,QAEC;AAAA;AAAA,IACH,GACF;AAAA;AACF;;;AC7BF,IAAAL,iBAEO;AASL,IAAAK,sBAAA;AAHK,IAAM,gBAAgB,CAAC;AAAA,EAC5B;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,QAAO;AAAA,IAEN;AAAA;AACH;;;ACdF,IAAAG,sBAIO;AAWD,IAAAH,sBAAA;AALC,IAAM,OAAO,CAAC;AAAA,EACnB;AACF,MAAY;AACV,MAAI,QAAQ,cAAc;AACxB,WACE,6CAAC,wCAAiB;AAAA,EAEtB,WAAW,QAAQ,gBAAgB,QAAQ,aAAa,QAAQ,WAAW,WAAW;AACpF,WACE,6CAAC,2CAAoB;AAAA,EAEzB,OAAO;AACL,WACE,6CAAC,kCAAW;AAAA,EAEhB;AACF;;;AC3BA,IAAAN,iBAAwB;AACxB,IAAAC,iBAA0B;AA2CtB,IAAAK,uBAAA;AApCG,IAAM,UAAU,CAAC;AAAA,EACtB;AACF,MAAY;AACV,QAAM,WAAO,wBAAQ,MAAM;AACzB,QAAI,SAAS;AAEb,QAAI;AACF,eAAS,KAAK,MAAM,GAAG,SAAS;AAAA,IAClC,SAAS,OAAO;AACd,cAAQ,MAAM,KAAK;AAAA,IACrB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,EAAE,CAAC;AAEP,QAAM,aAAS,wBAAQ,MAAM;AAC3B,QAAI,CAAC,GAAG,QAAQ;AACd,aAAO;AAAA,IACT;AAEA,QAAI,SAAS;AAEb,QAAI;AACF,eAAS,KAAK,MAAM,GAAG,MAAM;AAAA,IAC/B,SAAS,OAAO;AACd,cAAQ,MAAM,KAAK;AAAA,IACrB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,EAAE,CAAC;AAEP,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,MAEA;AAAA,sDAAC,sBACE,kBAAQ,KAAK,UAAU,MAAM,MAAM,CAAC,GACvC;AAAA,QACA,8CAAC,sBACE,oBAAU,KAAK,UAAU,QAAQ,MAAM,CAAC,GAC3C;AAAA;AAAA;AAAA,EACF;AAEJ;;;AJtCI,IAAAA,uBAAA;AANG,IAAM,eAAe,CAAC;AAAA,EAC3B;AAAA,EACA;AAAA,EACA,OAAAI;AACF,MACE,+CAAC,8BACC;AAAA,iDAAC,gBACC;AAAA,kDAAC,QAAK,SAAkB;AAAA,IACxB,8CAAC,iBACE,UAAAA,QACH;AAAA,KACF;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,WAAW;AAAA,MACb;AAAA,MAEA,wDAAC,WAAQ,IAAQ;AAAA;AAAA,EACnB;AAAA,GACF;;;AK5BK,IAAM,QAAQ,CAAC;AAAA,EACpB;AAAA,EACA;AACF,MAAY;AACV,MAAI,QAAQ,cAAc;AACxB,WAAO,YAAY,GAAG,IAAI;AAAA,EAC5B,WAAW,QAAQ,cAAc;AAC/B,WAAO,aAAa,GAAG,IAAI;AAAA,EAC7B,OAAO;AACL,WAAO,WAAW,GAAG,IAAI;AAAA,EAC3B;AACF;;;ACLE,IAAAJ,uBAAA;AAJK,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA;AAAA,IACA,OAAO,MAAM,EAAE,SAAS,GAAG,CAAC;AAAA;AAC9B;;;ARIE,IAAAA;AAAA;AAAA,EAAA;AAAA;AATG,IAAM,KAAK,CAAC;AAAA,EACjB;AAAA,EACA;AACF,MAAY;AACV,QAAM,gCAA4B,2BAAW,yBAAyB;AACtE,QAAM,YAAY,0BAA0B,GAAG,IAAI,KAAK;AAExD,SAEE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;;;ASzBA,IAAAL,kBAEO;AAUL,IAAAK,uBAAA;AAHK,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AACF,MACE,8CAAC,wBACE,0BAAgB,OACnB;;;AVOI,IAAAA,uBAAA;AANC,IAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAAY;AACV,MAAI,SAAS,SAAS,YAAY;AAChC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,IAAI,SAAS;AAAA,QACb;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,SAAS,SAAS,oBAAoB;AACxC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,iBAAiB,SAAS;AAAA,QAC1B;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,8CAAC,wBACE,mBAAS,MACZ;AAEJ;;;AW3CA,IAAAL,kBAIO;AACP,IAAAQ,sBAEO;AAMH,IAAAH,uBAAA;AAFG,IAAM,WAAW,MACtB,+CAAC,+BACC;AAAA,iDAAC,gBACC;AAAA,kDAAC,kCAAW;AAAA,IACZ,8CAAC,iBAAc,8BAEf;AAAA,KACF;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,WAAW;AAAA,MACb;AAAA,MAEA,wDAAC,wBAAK,oDAEN;AAAA;AAAA,EACF;AAAA,GACF;;;AZZA,IAAAA,uBAAA;AAJK,IAAM,YAAY,CAAC;AAAA,EACxB;AAAA,EACA;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAU;AAAA,IAET;AAAA,OAAC,YAAY,WAAW,UACvB,8CAAC,YAAS;AAAA,MAEX,YAAY,WAAW,IAAI,CAAC,aAC3B;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA;AAAA;AAAA,QAFK,SAAS;AAAA,MAGhB,CACD;AAAA;AAAA;AACH;;;AajBI,IAAAA,uBAAA;AALC,IAAM,UAAU,CAAC;AAAA,EACtB;AACF,MAAY;AACV,MAAI,QAAQ,aAAa,SAAS,cAAc;AAC9C,WACE;AAAA,MAAC;AAAA;AAAA,QACC,aAAa,QAAQ;AAAA,QACrB;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SAAO;AACT;;;AdLM,IAAAA,uBAAA;AAPC,IAAM,WAAW,CAAC;AAAA,EACvB;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAU;AAAA,IAET,mBAAS,IAAI,CAAC,YACb;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA;AAAA,MADK,QAAQ;AAAA,IAEf,CACD;AAAA;AACH;;;AenBF,IAAAN,iBAA8B;AAGvB,IAAM,qBAAiB,8BAE3B;AAAA,EACD,SAAS;AACX,CAAC;;;ACNM,IAAM,WAAW,eAAe;;;ACDvC,0BAA8B;;;ACD9B,IAAAA,iBAA2B;;;ACC3B,IAAAA,iBAA8B;;;ACD9B,IAAAC,kBAGO;AAMH,IAAAK,uBAAA;AAJG,IAAM,YAAY,CAAC,EAAE,SAAS,MACnC;AAAA,EAAC;AAAA;AAAA,IACC,IAAG;AAAA,IAEH;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAO;AAAA,UACL,YAAY;AAAA,UACZ,WAAW;AAAA,QACb;AAAA,QAEC;AAAA;AAAA,IACH;AAAA;AACF;;;AClBF,IAAAL,kBAEO;AAKL,IAAAK,uBAAA;AADK,IAAM,OAAO,CAAC,EAAE,UAAU,KAAK,MACpC;AAAA,EAAC,gBAAAK;AAAA,EAAA;AAAA,IACC;AAAA,IAEC;AAAA;AACH;;;ACXF,IAAAV,kBAEO;AAOH,IAAAK,uBAAA;AALG,IAAM,gBAAgB,CAAC,EAAE,SAAS,MACvC;AAAA,EAAC;AAAA;AAAA,IACC,IAAG;AAAA,IACH,SAAO;AAAA,IAEP;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,mBAAmB;AAAA,QACrB;AAAA,QAEC;AAAA;AAAA,IACH;AAAA;AACF;;;AChBF,IAAAL,kBAEO;AAOH,IAAAK,uBAAA;AALG,IAAM,cAAc,CAAC,EAAE,SAAS,MACrC;AAAA,EAAC;AAAA;AAAA,IACC,IAAG;AAAA,IACH,SAAO;AAAA,IAEP;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,mBAAmB;AAAA,QACrB;AAAA,QAEC;AAAA;AAAA,IACH;AAAA;AACF;;;AChBF,IAAAL,kBAEO;AAMH,IAAAK,uBAAA;AAJG,IAAM,WAAW,CAAC,EAAE,SAAS,MAClC;AAAA,EAAC;AAAA;AAAA,IACC,IAAG;AAAA,IAEH,wDAAC,QACE,UACH;AAAA;AACF;;;ACXF,IAAAL,kBAEO;AAGL,IAAAK,uBAAA;AADK,IAAM,SAAS,CAAC,EAAE,SAAS,MAChC,8CAAC,gBAAAM,QAAA,EACE,UACH;;;ACPF,IAAAX,kBAEO;AAGL,IAAAK,uBAAA;AADK,IAAM,MAAM,CAAC,EAAE,SAAS,MAC7B;AAAA,EAAC;AAAA;AAAA,IACC,OAAO;AAAA,MACL,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IAEC;AAAA;AACH;;;ACZF,IAAAL,kBAEO;AAGL,IAAAK,uBAAA;AADK,IAAMO,QAAO,CAAC,EAAE,SAAS,MAC9B,8CAAC,gBAAAC,MAAA,EACE,UACH;;;ACEK,IAAM,aAAa;AAAA,EACxB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,MAAMD;AACR;;;ATdO,IAAM,sBAAkB,8BAAc;AAAA,EAC3C,eAAe,CAAC;AAAA,EAChB,oBAAoB;AAAA,IAClB;AAAA,EACF;AACF,CAAC;;;ADNM,IAAM,qBAAqB,UAChC,2BAAW,eAAe;;;ADIrB,IAAM,cAAc,CAAC;AAAA,EAC1B;AACF,MAAY;AACV,QAAM,kBAAkB,mBAAmB;AAE3C,aAAO,mCAAc,QAAQ,KAAK,OAAO,eAAe;AAC1D;;;AlBqCM,IAAAP,uBAAA;AArCC,IAAM,UAAU,CAAC;AAAA,EACtB;AACF,MAAY;AACV,QAAM,CAAC,eAAe,aAAa,QAAI,wBAAQ,MAAM;AACnD,QAAI,CAAC,QAAQ,SAAS;AAAQ,aAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AAE5C,UAAM,8BAA8B,QAAQ,SAAS,UAAU,CAAC,YAAY;AAC1E,UAAI,QAAQ,aAAa,SAAS;AAAoB;AAEtD,aAAO,QAAQ,aAAa,iBAAiB,eAAe,QAAQ;AAAA,IACtE,CAAC;AAED,QAAI,mBAAmB,QAAQ,SAAS,MAAM,GAAG,2BAA2B,EAAE,cAAc,CAAC,YAC3F,QAAQ,aAAa,SAAS,kBAC/B;AACD,QAAI,qBAAqB,IAAI;AAC3B,yBAAmB;AAAA,IACrB;AACA,UAAMS,iBAAgB,QAAQ,SAAS,MAAM,kBAAkB,2BAA2B;AAE1F,UAAM,mBAAmB,QAAQ,SAAS,MAAM,8BAA8B,CAAC,EAAE,UAAU,CAAC,YAC1F,QAAQ,aAAa,SAAS,kBAC/B;AAED,QAAIC;AAEJ,QAAI,qBAAqB,IAAI;AAC3B,MAAAA,iBAAgB,QAAQ,SAAS,MAAM,8BAA8B,CAAC;AAAA,IACxE,OAAO;AACL,MAAAA,iBAAgB,QAAQ,SAAS,MAAM,8BAA8B,GAAG,8BAA8B,gBAAgB;AAAA,IACxH;AAEA,WAAO,CAACA,gBAAeD,cAAa;AAAA,EACtC,GAAG,CAAC,OAAO,CAAC;AAEZ,SACE,8CAAC,YAAS,OAAO,EAAE,QAAQ,GACzB,yDAAC,uBACC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA;AAAA,IACZ;AAAA,IAEC,QAAQ,QAAQ,IAAI,CAAC,SAAS,UAC7B;AAAA,MAAC;AAAA;AAAA,QAGE,kBAAQ,SAAS,UAChB,8CAAC,eAAY,SAAkB;AAAA;AAAA,MAH5B;AAAA,IAKP,CACD;AAAA,IAED;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA;AAAA,IACZ;AAAA,KACF,GACF;AAEJ;;;ADzDM,IAAAT,uBAAA;AAPC,IAAMW,WAAU,CAAC;AAAA,EACtB;AACF,MACE;AAAA,EAAC;AAAA;AAAA,IACC,WAAU;AAAA,IAET,uBAAa,SAAS,IAAI,CAAC,YAC1B;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA;AAAA,MADK,QAAQ;AAAA,IAEf,CACD;AAAA;AACH;;;AJQkB,IAAAX,uBAAA;AATb,IAAM,eAAe,CAAC;AAAA,EAC3B;AACF,MAAY;AACV,QAAM,2BAAuB,2BAAW,oBAAoB;AAE5D,SACE,+CAAC,oBACE;AAAA,iBAAa,SAAS,SACrB;AAAA,MAAC;AAAA;AAAA,QACC,UAAU,8CAAC,kCAAW;AAAA,QACtB,MAAK;AAAA;AAAA,IACP,IAEA,8CAAC,mBAAgB;AAAA,IAGnB,+CAAC,uBAAI,UAAS,KACZ;AAAA,oDAAC,QACE,uBAAa,SAAS,SAAS,QAAQ,sBAC1C;AAAA,MAEA;AAAA,QAACW;AAAA,QAAA;AAAA,UACC;AAAA;AAAA,MACF;AAAA,OACF;AAAA,KACF;AAEJ;;;AdjBM,IAAAX,uBAAA;AArBC,IAAMW,WAAU,MAAM;AAC3B,QAAM;AAAA,IACJ,UAAAZ;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,YAAY;AAEhB,QAAM,EAAE,SAAS,IAAI,UAAU;AAE/B,QAAM,EAAE,eAAAa,eAAc,IAAI,iBAAiB;AAAA,IACzC,UAAAb;AAAA,EACF,CAAC;AAED,gCAAU,MAAM;AACd,QAAI,gBAAgB;AAClB,eAAS,EAAE,MAAM,SAAS,SAAS,6CAA6C,CAAC;AAAA,IACnF;AAAA,EACF,GAAG,CAAC,gBAAgB,QAAQ,CAAC;AAE7B,MAAI,aAAa,gBAAgB;AAC/B,WACE,8CAAC,oBAAiB;AAAA,EAEtB;AAEA,SACE,+EACG,UAAAa,eAAc,IAAI,CAAC,iBAClB;AAAA,IAAC;AAAA;AAAA,MAEC;AAAA;AAAA,IADK,aAAa;AAAA,EAEpB,CACD,GACH;AAEJ;;;AiD3CA,IAAAjB,kBAAoB;;;ACApB,IAAAA,kBAEO;AAGL,IAAAK,uBAAA;AADK,IAAM,0BAA0B,MACrC;AAAA,EAAC;AAAA;AAAA,IACC,SAAO;AAAA,IACP,IAAG;AAAA,IACH,QAAO;AAAA,IACP,OAAM;AAAA,IACN,OAAO;AAAA,MACL,cAAc;AAAA,MACd,YAAY;AAAA,IACd;AAAA;AACF;;;ACdF,IAAAN,iBAA2B;AAC3B,IAAAC,kBAAoB;AAkBd,IAAAK,uBAAA;AAPC,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AACF,MAAY;AACV,QAAM,2BAAuB,2BAAW,oBAAoB;AAE5D,SACE,+CAAC,oBACC;AAAA,kDAAC,mBAAgB;AAAA,IAEjB,+CAAC,uBACC;AAAA,oDAAC,QACE,gCACH;AAAA,MAEC;AAAA,MAED,8CAAC,2BAAwB;AAAA,OAC3B;AAAA,KACF;AAEJ;;;AChCA,IAAAN,iBAAwB;AAGjB,IAAM,mBAAmB,MAAM;AACpC,QAAM,QAAQ,YAAY;AAE1B,aAAO,wBAAQ,OAAO;AAAA,IACpB,GAAG;AAAA,IACH,eAAe,MAAM,SAAS,CAAC,KAAK;AAAA,EACtC,IAAI,CAAC,KAAK,CAAC;AACb;;;ACVA,IAAAA,iBAAwB;AACxB,IAAAE,sBAA8B;;;ACD9B,IAAAF,iBAAwB;;;ACAxB,IAAAA,iBAAwB;AACxB,IAAAE,sBAGO;;;ACCA,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AACF,MAKE,aAAa;AAAA,EACX,cAAc,CAAC,MAAM;AAAA,EACrB,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;ACbI,IAAM,UAAU,CAAC;AAAA,EACtB,MAAAiB;AACF,MAAY;AACV,MAAI,CAACA;AAAM,WAAO,CAAC;AAEnB,SAAOA,MAAK,MAAM,OAAc,CAAC,KAAK,SACpC,IAAI,OAAO,KAAK,IAAI,GACnB,CAAC,CAAC;AACP;;;AFLO,IAAM,UAAU,MAAM;AAC3B,QAAM,kBAAc,oCAAe;AACnC,QAAM,wBAAwB,yBAAyB;AACvD,QAAM,gBAAgB,yBAAiB;AAEvC,QAAM,YAAQ,sCAAiB,iBAAiB;AAAA,IAC9C;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC,CAAC;AAEF,aAAO,wBAAQ,OAAO;AAAA,IACpB,GAAG;AAAA;AAAA,IAEH,MAAM,QAAQ,EAAE,MAAM,MAAM,KAAK,CAAC;AAAA,EACpC,IAAI,CAAC,KAAK,CAAC;AACb;;;ADvBO,IAAM,eAAe,MAAM;AAChC,QAAM,QAAQ,QAAQ;AAEtB,aAAO,wBAAQ,OAAO;AAAA,IACpB,GAAG;AAAA,IACH,WAAW,MAAM,KAAK,CAAC;AAAA,EACzB,IAAI,CAAC,KAAK,CAAC;AACb;;;AITA,IAAArB,iBAAc;AAMP,IAAM,sBAAsB,CAAC;AAAA,EAClC;AACF,MAAY;AACV,MAAI,CAAC;AAAS,WAAO;AACrB,MAAI,QAAQ,SAAS;AAAQ,WAAO;AACpC,MAAI,CAAC,QAAQ;AAAQ,WAAO;AAE5B,QAAM,aAAa,eAAAC,QAAE,KAAK,QAAQ,SAAS,CAAC,YAC1C,QAAQ,SAAS,UACd,QAAQ,SAAS,UAAU,QAAQ,MAAM,UAAU,EACvD;AAED,SAAO,CAAC;AACV;;;ACpBA,IAAAC,iBAA2B;;;ACC3B,IAAAA,iBAA8B;AAEvB,IAAM,qBAAiB,8BAG3B;AAAA,EACD,kBAAkB;AAAA,EAClB,qBAAqB,MAAM;AAAA,EAAC;AAC9B,CAAC;;;ADNM,IAAM,oBAAoB,UAC/B,2BAAW,cAAc;;;ANI3B,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,MAAI,eAAe;AAAkB,WAAO;AAE5C,MAAI,mBAAmB,eAAe,UAAU;AAAY,WAAO;AACnE,MAAI;AAAY,WAAO;AACvB,MAAI,CAAC,eAAe;AAAW,WAAO;AACtC,MAAI,iBAAiB,SAAS,eAAe,UAAU,MAAM;AAAG,WAAO;AACvE,MAAI,gBAAgB,SAAS,eAAe,UAAU,MAAM;AAAG,WAAO;AAEtE,SAAO,oBAAoB,EAAE,SAAS,mBAAmB,cAAc,CAAC;AAC1E;AAEO,IAAM,iBAAiB,MAAM;AAClC,QAAM,iBAAiB,aAAa;AACpC,QAAM,qBAAqB,iBAAiB;AAC5C,QAAM,gBAAgB,yBAAiB;AACvC,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,0BAAsB,mCAAc;AAAA,IACxC,aAAa,CAAC,aAAa,cAAc,SAAS;AAAA,EACpD,CAAC;AACD,QAAM,8BAA0B,mCAAc;AAAA,IAC5C,aAAa,CAAC,iBAAiB,cAAc,SAAS;AAAA,EACxD,CAAC;AACD,QAAM,mCAA+B,mCAAc;AAAA,IACjD,aAAa,CAAC,gBAAgB,cAAc,SAAS;AAAA,EACvD,CAAC;AAED,aAAO,wBAAQ,OAAO;AAAA,IACpB,GAAG;AAAA,IACH,aAAa,YAAY;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,sBAAsB,KAAK,0BAA0B,KAAK,+BAA+B;AAAA,IACvG,CAAC;AAAA,EACH,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;;;AJ1DM,IAAAM,uBAAA;AATC,IAAM,WAAW,MAAM;AAC5B,QAAM,EAAE,aAAAc,aAAY,IAAI,eAAe;AACvC,QAAM,EAAE,cAAc,IAAI,iBAAiB;AAE3C,MAAI,CAAC;AAAe,WAAO;AAC3B,MAAI,CAACA;AAAa,WAAO;AAEzB,MAAI,cAAc,SAAS,QAAQ;AACjC,WACE,8CAAC,oBAAiB;AAAA,EAEtB;AAEA,SACE,+CAAC,oBACC;AAAA,kDAAC,uBAAI,IAAG,KAAI;AAAA,IACZ,8CAAC,2BAAwB;AAAA,KAC3B;AAEJ;;;AYxBA,IAAAnB,kBAAqB;;;ACFrB,IAAAD,iBAAuB;AACvB,yCAA0B;;;ACD1B,IAAAF,iBAAc;AACd,IAAAE,iBAA+C;AAExC,IAAM,qBAAqB,CAAC,IAAc,OAAe,mBAA0B;AACxF,QAAM,YAAQ,uBAAO,EAAE;AAEvB,QAAM,kBAAc;AAAA,IAClB,eAAAD,QAAE,SAAS,IAAI,SAAgB,MAAM,QAAQ,GAAG,IAAI,GAAG,OAAO;AAAA,MAC5D,SAAS;AAAA,MACT,UAAU;AAAA,IACZ,CAAC;AAAA,IACD,CAAC,KAAK;AAAA,EACR;AACA,gCAAU,MAAM;AACd,UAAM,UAAU;AAAA,EAClB,CAAC;AAED,gCAAU,aAAa,CAAC,aAAa,GAAG,cAAc,CAAC;AACzD;;;ADRO,IAAM,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,MAAY;AACV,QAAM,mBAAe,uBAAO,IAAI;AAEhC,QAAM,EAAE,KAAK,WAAW,OAAO,QAAI,8CAAU;AAAA,IAC3C,MAAM,aAAa;AAAA,IACnB,YAAY;AAAA,IACZ,WAAW;AAAA,EACb,CAAC;AAED;AAAA,IACE,MAAM;AACJ,UAAI;AAAoB;AACxB,UAAI,CAAC;AAAQ;AACb,UAAI,CAAC;AAAa;AAElB,cAAQ,IAAI,oBAAoB;AAChC,oBAAc;AAAA,IAChB;AAAA,IACA;AAAA,IACA,CAAC,QAAQ,oBAAoB,aAAa,aAAa;AAAA,EACzD;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AExCA,IAAAG,sBAA+B;AAC/B,IAAAF,iBAAoC;;;ACFpC,IAAAI,iBAAuB;AACvB,IAAAF,sBAGO;;;ACOA,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,cAAc,CAAC,GAAG,iBAAiB,cAAc,SAAS;AAEhE,SAAO;AAAA,IACL,YAAY,CAAC,cACX,MAAM,GAAG,sBAAsB,OAAO,GAAG,IAAI,IAAI;AAAA,MAC/C,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,SAAS;AAAA,MAC9B,aAAa;AAAA,MACb,GAAI,sBAAsB,eAAe;AAAA,QACvC,SAAS;AAAA,UACP,eAAe,UAAU,sBAAsB,YAAY;AAAA,QAC7D;AAAA,MACF,IAAI,CAAC;AAAA,IACP,CAAC,EAAE,KAAK,OAAO,aAAa;AAC1B,UAAI,SAAS,WAAW,KAAK;AAC3B,YAAI;AAEJ,YAAI;AACF,kBAAQ,IAAI,YAAY,QAAQ;AAChC,0BAAgB,MAAM,SAAS,KAAK;AAAA,QACtC,SAAS,OAAO;AACd,gBAAM,IAAI,MAAM,iBAAiB;AAAA,QACnC;AAEA,cAAM,IAAI,MAAM,cAAc,KAAK;AAAA,MACrC;AAEA,aAAO,SAAS,KAAK;AAAA,IACvB,CAAC;AAAA,IAEH,GAAG,cAAc,eAAe;AAAA,IAChC,GAAG,YAAY,oBAAoB,WAAW;AAAA,IAC9C;AAAA,EACF;AACF;;;ACnDO,IAAM,YAAY,CAAC;AAAA,EACxB;AACF,MAEM,OACJiB,OACA,cAEA,YAAY;AAAA,EACV,CAAC,QAAQ,SAAS;AAAA,EAClB,CAAC,aAAkB;AACjB,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,YAAY,CAAC;AAAA,QACb,OAAO;AAAA,UACL;AAAA,YACE,MAAM,CAACA,MAAK,GAAG;AAAA,YACf,aAAa;AAAA,YACb,QAAQA,MAAK,IAAI;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,CAAC,YAAY,GAAG,SAAS,IAAI,SAAS;AAE5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,OAAO;AAAA,QACL;AAAA,UACE,GAAG;AAAA,UACH,MAAM;AAAA,YACJA,MAAK;AAAA,YACL,GAAG,WAAW;AAAA,UAChB;AAAA,QACF;AAAA,QACA,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF;AACF;;;ACzCK,IAAM,YAAY,CAAC;AAAA,EACxB;AACF,MAEM,OACJ,OACA,QACA,cACG;AACH,QAAM,YAAY,kBAAkB;AAAA,IAClC,UAAU,CAAC,YAAY,SAAS;AAAA,EAClC,CAAC;AAED,QAAM,YAAY,kBAAkB;AAAA,IAClC,UAAU,CAAC,QAAQ,SAAS;AAAA,EAC9B,CAAC;AACH;;;ACtBA,IAAAf,iBAAoB;AAEb,IAAM,eAAe,MAC1B,QAAI,oBAAI,EAAE,CAAC;;;ACAN,IAAM,OAAO,CAAC,aAAkB;AACrC,QAAM,MAAM;AAAA,IACV,IAAI,aAAa;AAAA,IACjB,QAAQ;AAAA,IACR,YAAY,CAAC,oBAAI,KAAK;AAAA,IACtB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,YAAY,CAAC,oBAAI,KAAK,IAAI,MAAO,KAAK,KAAK;AAAA,IAC3C,cAAc;AAAA,IACd,WAAW;AAAA,IACX,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,cAAc;AAAA,IACd,OAAO,CAAC;AAAA,IACR,UAAU,CAAC;AAAA,IACX,UAAU,CAAC;AAAA,IACX,OAAO;AAAA,EACT;AAEA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL,YAAY,CAAC;AAAA,MACb,OAAO;AAAA,QACL;AAAA,UACE,MAAM,CAAC,GAAG;AAAA,UACV,aAAa;AAAA,UACb,QAAQ,IAAI;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,CAAC,YAAY,GAAG,SAAS,IAAI,SAAS;AAE5C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,MACL;AAAA,QACE,GAAG;AAAA,QACH,MAAM;AAAA,UACJ;AAAA,UACA,GAAG,WAAW;AAAA,QAChB;AAAA,MACF;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AACF;;;AC9CO,IAAM,WAAW,CAAC;AAAA,EACvB;AACF,MAEM,OAAO,cAAyB;AACpC,QAAM,WAAW,CAAC,QAAQ,SAAS;AACnC,QAAM,YAAY,cAAc,EAAE,SAAS,CAAC;AAE5C,QAAM,WAAW,YAAY,aAAa,QAAQ;AAElD,cAAY;AAAA,IACV;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ANdO,IAAM,eAAe,CAAC;AAAA,EAC3B,UAAU,MAAM;AAAA,EAAC;AACnB,IAEI;AAAA,EACF,SAAS,MAAM;AAAA,EAAC;AAClB,MAAM;AACJ,QAAM,kBAAc,oCAAe;AACnC,QAAM,wBAAwB,yBAAyB;AACvD,QAAM,gBAAgB,yBAAiB;AAEvC,QAAM,YAAQ,iCAAY;AAAA,IACxB,WAAW,UAAU,EAAE,YAAY,CAAC;AAAA,IACpC,WAAW,UAAU,EAAE,YAAY,CAAC;AAAA,IACpC,UAAU,SAAS,EAAE,YAAY,CAAC;AAAA,IAClC;AAAA,IACA,GAAG,gBAAgB;AAAA,MACjB,iBAAiB,CAAC,WAAW;AAAA,MAC7B,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AAAA,IACL,GAAG;AAAA,IACH,eAAW,uBAAO,MAAM,QAAQ,cAAc,SAAS;AAAA,EACzD;AACF;;;AOzCA,IAAAN,iBAAc;AAMP,IAAM,eAAe,CAAC;AAAA,EAC3B;AACF,MACE,eAAAC,QAAE,WAAW,IAAI,GAAG;;;ARAf,IAAM,gBAAgB,MAAM;AACjC,QAAM,EAAE,SAAS,IAAI,UAAU;AAC/B,QAAM,kBAAc,oCAAe;AACnC,QAAM,iBAAiB,aAAa;AACpC,QAAM,qBAAqB,iBAAiB;AAC5C,QAAM,iBAAiB,aAAa;AAAA,IAClC,SAAS,CAAC,UACR,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM,QAAQ,CAAC;AAAA,EAEtD,CAAC;AACD,QAAM,gBAAgB,yBAAiB;AAEvC,QAAM,CAAC,oBAAoB,qBAAqB,QAAI,yBAAmB,CAAC,CAAC;AAEzE,gCAAU,MAAM;AACd,QAAI,eAAe,WAAW,WAAW;AAAU;AACnD,QAAI,mBAAmB,SAAS,eAAe,UAAU,EAAE;AAAG;AAE9D,0BAAsB,CAAC,SAAS,CAAC,GAAG,MAAM,eAAe,UAAU,EAAE,CAAC;AAEtE,aAAS,EAAE,MAAM,SAAS,SAAS,mCAAmC,CAAC;AAAA,EACzE,GAAG,CAAC,gBAAgB,oBAAoB,QAAQ,CAAC;AAEjD,gCAAU,MAAM;AACd,QAAI,eAAe;AAAW;AAC9B,QAAI,eAAe;AAAY;AAC/B,QAAI,mBAAmB;AAAY;AAEnC,QAAI,CAAC,mBAAmB;AAAe;AACvC,QAAI,mBAAmB,cAAc,SAAS;AAAQ;AACtD,QAAI,aAAa,EAAE,IAAI,mBAAmB,cAAc,GAAG,CAAC;AAAG;AAC/D,QAAI,eAAe,aAAa,eAAe,UAAU,aAAa,mBAAmB,cAAc,YAAY;AACjH;AAAA,IACF;AAEA,UAAM,aAAa,YAAY,WAAW;AAAA,MACxC,aAAa,CAAC,aAAa,cAAc,SAAS;AAAA,IACpD,CAAC;AAED,QAAI;AAAY;AAGhB,mBAAe,UAAU;AAAA,EAC3B,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AS7DA,IAAAC,iBAA0B;AAC1B,IAAAE,sBAEO;AACP,uBAAyC;;;ACMlC,IAAM,UAAU,OAAO;AAAA,EAC5B;AAAA,EACA;AACF,MAAY;AACV,QAAM,YAAY,kBAAkB;AAAA,IAClC,UAAU,cAAc,eAAe,QAAQ,YAAY,CAAC,YAAY,cAAc,SAAS;AAAA,EACjG,CAAC;AAED,QAAM,YAAY,kBAAkB;AAAA,IAClC,UAAU,cAAc,eAAe,QAAQ,YAAY,CAAC,QAAQ,cAAc,SAAS;AAAA,EAC7F,CAAC;AACH;;;ADXO,IAAM,aAAa,MAAM;AAC9B,QAAM,gBAAgB,yBAAiB;AACvC,QAAM,kBAAc,oCAAe;AACnC,QAAM,EAAE,oBAAoB,IAAI,kBAAkB;AAElD,QAAM,mBAAmB,eAAe;AAExC;AAAA,IAAY,YAAY;AACtB,0BAAoB,IAAI;AACxB,YAAM,QAAQ;AAAA,QACZ;AAAA,QACA;AAAA,MACF,CAAC;AACD,0BAAoB,KAAK;AACzB,cAAQ,IAAI,YAAY;AAAA,IAC1B;AAAA,IACE,iBAAiB,cAAc,MAAO;AAAA,EACxC;AAEA,QAAM,sBAAkB,8BAAY,iBAAiB,WAAW;AAEhE,gCAAU,MAAM;AACd,QAAI,mBAAmB,CAAC,iBAAiB,aAAa;AACpD,cAAQ;AAAA,QACN;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,aAAa,eAAe,kBAAkB,eAAe,CAAC;AAElE,SAAO;AACT;;;AEzCA,IAAAA,sBAA+B;AAC/B,IAAAF,iBAA0B;;;ACD1B,IAAAI,iBAAuB;AACvB,IAAAF,sBAGO;;;ACGA,IAAMmB,aAAY,CAAC;AAAA,EACxB;AACF,MAEM,OACJ,OACA,QACA,cACG;AACH,QAAM,YAAY,kBAAkB;AAAA,IAClC,UAAU,CAAC,YAAY,SAAS;AAAA,EAClC,CAAC;AAED,QAAM,YAAY,kBAAkB;AAAA,IAClC,UAAU,CAAC,QAAQ,SAAS;AAAA,EAC9B,CAAC;AACH;;;ADbO,IAAM,kBAAkB,MAAM;AACnC,QAAM,kBAAc,oCAAe;AACnC,QAAM,wBAAwB,yBAAyB;AACvD,QAAM,gBAAgB,yBAAiB;AAEvC,QAAM,YAAQ,iCAAY;AAAA,IACxB,WAAWA,WAAU,EAAE,YAAY,CAAC;AAAA,IACpC,GAAG,gBAAgB;AAAA,MACjB,iBAAiB,CAAC,cAAc;AAAA,MAChC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AAAA,IACL,GAAG;AAAA,IACH,kBAAc,uBAAO,MAAM,QAAQ,cAAc,SAAS;AAAA,EAC5D;AACF;;;ADxBO,IAAM,mBAAmB,MAAM;AACpC,QAAM,kBAAc,oCAAe;AACnC,QAAM,gBAAgB,yBAAiB;AACvC,QAAM,iBAAiB,aAAa;AACpC,QAAM,oBAAoB,gBAAgB;AAE1C,gCAAU,MAAM;AACd,QAAI,kBAAkB;AAAW;AACjC,QAAI,eAAe;AAAY;AAC/B,QAAI,CAAC,eAAe;AAAW;AAC/B,QAAI,eAAe,UAAU,WAAW;AAAmB;AAE3D,UAAM,aAAa,YAAY,WAAW;AAAA,MACxC,aAAa,CAAC,gBAAgB,cAAc,SAAS;AAAA,IACvD,CAAC;AAED,QAAI;AAAY;AAEhB,YAAQ,IAAI,mBAAmB;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,sBAAkB,aAAa;AAAA,MAC7B,WAAW,eAAe;AAAA,IAC5B,CAAC;AAAA,EACH,GAAG;AAAA,IACD;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;AGjCO,IAAM,eAAe,MAAM;AAChC,gBAAc;AACd,mBAAiB;AACjB,aAAW;AAEX,SAAO;AACT;;;AjBmBI,IAAAf,uBAAA;AAtBG,IAAM,OAAO,CAAC;AAAA,EACnB;AAAA,EACA,QAAQ,CAAC;AACX,MAGM;AACJ,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,YAAY;AAEhB,eAAa;AAEb,QAAM,EAAE,cAAc,UAAU,IAAI,kBAAkB;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAU;AAAA,MACV,UAAS;AAAA,MACT,OAAO;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,MACZ;AAAA,MAEC;AAAA;AAAA,QAEA,eACC;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA;AAAA,QACP;AAAA,QAGF;AAAA,UAAC;AAAA;AAAA,YACC,YAAW;AAAA,YACX,UAAS;AAAA;AAAA,QACX;AAAA;AAAA;AAAA,EACF;AAEJ;;;AkBtCI,IAAAA,uBAAA;AAVG,IAAM,mBAAmB,MAAM;AACpC,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,YAAY;AAEhB,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AAEA,SACE,8CAAC,oBAAiB;AAEtB;;;AhFEE,IAAAA,uBAAA;AAJK,IAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,QAAQ,CAAC;AACX,MACE,+CAAC,QAAK,OACJ;AAAA;AAAA,IAAC;AAAA;AAAA,MACC,YAAW;AAAA,MACX,QAAO;AAAA;AAAA,EACT;AAAA,EAEA,8CAAC,YAAS;AAAA,EAET;AAAA,EAED,8CAACW,UAAA,EAAQ;AAAA,EAET,8CAAC,oBAAiB;AAAA,EAElB;AAAA,IAAC;AAAA;AAAA,MACC,YAAW;AAAA,MACX,UAAS;AAAA;AAAA,EACX;AAAA,GACF;AAGF,SAAS,OAAO;AAChB,SAAS,UAAU;AACnB,SAAS,mBAAmB;;;AiFzC5B,IAAAhB,kBAGO;;;ACFP,IAAAQ,sBAEO;AACP,IAAAR,kBAGO;;;ACPP,IAAAD,iBAA2B;;;ACC3B,IAAAA,iBAA8B;AAEvB,IAAM,yBAAqB,8BAAc;AAAA,EAC9C,YAAY;AAAA,EACZ,WAAW;AACb,CAAC;;;ADHM,IAAM,wBAAwB,UACnC,2BAAW,kBAAkB;;;ADgBvB,IAAAM,uBAAA;AAVD,IAAM,SAAS,MAAM;AAC1B,QAAM,EAAE,YAAY,UAAU,IAAI,sBAAsB;AAExD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,QAAO;AAAA,MACP,UAAU,cAAc;AAAA,MAExB,wDAAC,2BAAQ,SAAS,WAChB,wDAAC,mCAAY,GACf;AAAA;AAAA,EACF;AAEJ;;;AGxBA,IAAAN,iBAAwB;AACxB,6BAAqD;;;ACDrD,IAAAI,iBAAuB;AACvB,IAAAF,uBAGO;;;ACJP,IAAAE,iBAAqB;;;ACSd,IAAMe,QAAO,CAAC;AAAA,EACnB;AACF,MAAY,CAAC,aAAkB;AAC7B,QAAM,UAAU;AAAA,IACd,IAAI,aAAa;AAAA,IACjB,MAAM;AAAA,IACN,YAAY,CAAC,oBAAI,KAAK;AAAA,IACtB,QAAQ;AAAA,IACR,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,aAAa,CAAC;AAAA,UACd,OAAO,WAAW;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,WAAW;AAAA,IACX,UAAU,CAAC;AAAA,IACX,UAAU,CAAC;AAAA,IACX,UAAU,CAAC;AAAA,EACb;AAEA,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL,YAAY,CAAC;AAAA,MACb,OAAO;AAAA,QACL;AAAA,UACE,MAAM,CAAC,OAAO;AAAA,UACd,aAAa;AAAA,UACb,QAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,CAAC,YAAY,GAAG,SAAS,IAAI,SAAS;AAE5C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,MACL;AAAA,QACE,GAAG;AAAA,QACH,MAAM;AAAA,UACJ;AAAA,UACA,GAAG,WAAW;AAAA,QAChB;AAAA,MACF;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AACF;;;ADrDO,IAAMG,YAAW,CAAC;AAAA,EACvB;AACF,MAEM,OACJ,eACG;AACH,QAAM,WAAW,CAAC,gBAAY,qBAAK,YAAY,CAAC,SAAS,CAAC,CAAC;AAC3D,QAAM,YAAY,cAAc,EAAE,SAAS,CAAC;AAE5C,QAAM,eAAe,YAAY,aAAa,QAAQ;AAEtD,cAAY;AAAA,IACV;AAAA,IACAH,MAAK,EAAE,WAAW,CAAC;AAAA,EACrB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AE9BA,IAAAf,iBAAqB;AASd,IAAMiB,aAAY,CAAC;AAAA,EACxB;AACF,MAEM,OACJ,OACA,QACA,cACG;AACH,QAAM,YAAY,kBAAkB;AAAA,IAClC,UAAU,CAAC,gBAAY,qBAAK,WAAW,CAAC,SAAS,CAAC,CAAC;AAAA,EACrD,CAAC;AAED,QAAM,YAAY,kBAAkB;AAAA,IAClC,UAAU,CAAC,YAAQ,qBAAK,WAAW,CAAC,SAAS,CAAC,CAAC;AAAA,EACjD,CAAC;AACH;;;AHdO,IAAM,mBAAmB,CAAC;AAAA,EAC/B,UAAU,MAAM;AAAA,EAAC;AACnB,IAEI;AAAA,EACF,SAAS,MAAM;AAAA,EAAC;AAClB,MAAM;AACJ,QAAM,kBAAc,qCAAe;AACnC,QAAM,wBAAwB,yBAAyB;AACvD,QAAM,gBAAgB,yBAAiB;AAEvC,QAAM,YAAQ,kCAAY;AAAA,IACxB,UAAUC,UAAS,EAAE,YAAY,CAAC;AAAA,IAClC,WAAWD,WAAU,EAAE,YAAY,CAAC;AAAA,IACpC;AAAA,IACA,GAAG,gBAAgB;AAAA,MACjB,iBAAiB,CAAC,eAAe;AAAA,MACjC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAe,uBAAO,MAAM,aAAa,cAAc,SAAS;AAAA,EAClE;AACF;;;AIvCA,iBAAkB;AAClB,IAAAE,cAA4B;AAE5B,IAAM,SAAS,aAAE,OAAO;AAAA,EACtB,SAAS,aAAE,OAAO,EAAE,IAAI,CAAC;AAC3B,CAAC;AAEM,IAAM,cAAc;AAAA,EACzB,cAAU,yBAAY,MAAM;AAC9B;;;ALkDQ,IAAAjB,uBAAA;AA9CD,IAAMkB,QAAO,CAAC;AAAA,EACnB;AACF,MAEM;AACJ,QAAM,gBAAY,gCAAgB,WAAW;AAE7C,QAAM;AAAA,IACJ;AAAA,IACA,WAAW,EAAE,aAAa;AAAA,IAC1B;AAAA,EACF,IAAI;AAEJ,QAAM,EAAE,aAAAJ,aAAY,IAAI,eAAe;AAEvC,QAAM,gBAAY,wBAAQ,MACxBA,gBAAe,cACd;AAAA,IACDA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,EAAE,SAAS,IAAI,UAAU;AAE/B,QAAM,EAAE,cAAc,IAAI,iBAAiB;AAAA,IACzC,SAAS,CAAC,UACR,SAAS,EAAE,MAAM,SAAS,SAAS,MAAM,QAAQ,CAAC;AAAA,EAEtD,CAAC;AAED,QAAM,WAAkC,OAAOD,UAAS;AACtD,UAAM;AAEN,UAAM,cAAc,EAAE,SAASA,MAAK,QAAQ,CAAC;AAAA,EAC/C;AAEA,QAAM,EAAE,cAAc,IAAI,iBAAiB;AAE3C,QAAM,iBAAa,wBAAQ;AAAA;AAAA,IAEzB,eAAe,UAAU;AAAA,KACxB,CAAC,eAAe,SAAS,CAAC;AAE7B,SACE,8CAAC,mBAAmB,UAAnB,EAA4B,OAAO,EAAE,YAAY,UAAU,GAC1D,wDAAC,uCAAc,GAAG,WAChB;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,aAAa,QAAQ;AAAA,MAE9B;AAAA;AAAA,EACH,GACF,GACF;AAEJ;;;AMlEA,IAAAM,oBAA4B;AAC5B,IAAAzB,iBAAuD;;;ACFvD,IAAAA,iBAA2B;AAC3B,qCAA6B;AAQzB,IAAAM,uBAAA;AANJ,IAAM,gBAAgB,KAAK;AAIpB,IAAM,mBAAe,2BAAW,SAASoB,cAAa,OAAc,KAAK;AAC9E,SACE,gFACE;AAAA,kDAAC,WACE;AAAA,oEAEH;AAAA,IAEA;AAAA,MAAC,+BAAAC;AAAA,MAAA;AAAA,QAEC;AAAA,QACA,WAAU;AAAA,QACV,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,UAAU,GAAG,KAAK,aAAa;AAAA,UAC/B,YAAY,GAAG,KAAK,aAAa;AAAA,UACjC,WAAW,SAAS,IAAI,aAAa;AAAA,UACrC,QAAQ,MAAM,OAAO,gBAAgB,OAAO,CAAC;AAAA,UAC7C,OAAO,GAAG,MAAM,aAAa;AAAA,UAC7B,UAAU,GAAG,MAAM,aAAa;AAAA,UAChC,UAAU;AAAA,UACV,SAAS;AAAA,QACX;AAAA,QACC,GAAG;AAAA;AAAA,IACN;AAAA,KACF;AAEJ,CAAC;;;ADjCD,IAAAC,0BAA+B;AAC/B,IAAA3B,kBAGO;AA2BG,IAAAK,uBAAA;AAxBV,IAAMkB,QAAO,CAAC;AAAA,EACZ;AACF,MAEM;AACJ,QAAM;AAAA,IACJ,WAAW;AAAA,MACT;AAAA,IACF;AAAA,EACF,QAAI,wCAAe;AAEnB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAS;AAAA,MAET;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,YAAW;AAAA,UAEX;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,YAAW;AAAA,cAEX;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO;AAAA,oBACL,cAAc;AAAA,oBACd,aAAa;AAAA,oBACb,aAAa;AAAA,oBACb,aAAa,OAAO,UAAU,iBAAiB;AAAA,oBAC/C,GAAI,OAAO,UAAU,EAAE,iBAAiB,eAAe,IAAI,CAAC;AAAA,kBAC9D;AAAA,kBACA,GAAE;AAAA,kBACF,IAAG;AAAA,kBAEF;AAAA;AAAA,cACH;AAAA;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;AAEA,IAAM,UAAU,MAAM;AACpB,QAAM,2BAAuB,2BAAW,oBAAoB;AAC5D,QAAM;AAAA,IACJ;AAAA,EACF,QAAI,wCAAe;AAEnB,QAAM,EAAE,YAAY,UAAU,IAAI,sBAAsB;AAExD,QAAM,uBAAmB,wBAAQ,MAC/B,cAAc,WACb,CAAC,YAAY,SAAS,CAAC;AAE1B,QAAM,yBAAqB,+BAAY,UAAU;AAEjD,QAAM,kBAAc,uBAA4B,IAAI;AACpD,QAAM,gBAAgB,SAAS,SAAS;AAExC,gCAAU,MAAM;AACd,QAAI;AAAY;AAChB,QAAI,CAAC;AAAoB;AACzB,QAAI,CAAC,YAAY;AAAS;AAE1B,gBAAY,QAAQ,MAAM;AAAA,EAC5B,GAAG,CAAC,YAAY,oBAAoB,aAAa,CAAC;AAElD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,aAAa,WAAW,oBAAoB;AAAA,MAC5C,UAAU;AAAA,MACV,WAAW,CAAC,MAAW;AACrB,YAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,UAAU;AACpC,YAAE,eAAe;AAEjB,cAAI;AAAkB;AACtB,YAAE,cAAc,MAAM,cAAc;AAAA,QACtC;AAAA,MACF;AAAA,MACC,GAAG;AAAA,MACJ,KAAK,CAAC,MAAW;AACf,sBAAc,IAAI,CAAC;AAEnB,oBAAY,UAAU;AAAA,MACxB;AAAA;AAAA,EACF;AAEJ;AAEO,IAAM,QAAQ;AAAA,EACnB,MAAAA;AAAA,EACA;AACF;;;AVhGI,IAAAlB,uBAAA;AAFG,IAAM,cAAc,MACzB,8CAACkB,OAAA,EACC,yDAAC,MAAM,MAAN,EACC;AAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAO;AAAA,QACL,UAAU;AAAA,MACZ;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,UAAS;AAAA,UACT,WAAU;AAAA,UAEV,wDAAC,MAAM,SAAN,EAAc;AAAA;AAAA,MACjB;AAAA;AAAA,EACF;AAAA,EAEA;AAAA,IAAC;AAAA;AAAA,MACC,YAAW;AAAA,MACX,OAAM;AAAA,MAEN,wDAAC,UAAO;AAAA;AAAA,EACV;AAAA,GACF,GACF;AAGF,YAAY,OAAOA;AACnB,YAAY,QAAQ;AACpB,YAAY,SAAS;;;AYrCrB,IAAAvB,kBAAqB;;;ACArB,IAAAD,iBAAyB;AAWrB,IAAAM,uBAAA;AARG,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AACF,MAEM;AACJ,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAS,KAAK;AAE9D,SACE;AAAA,IAAC,eAAe;AAAA,IAAf;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACVI,IAAAA,uBAAA;AAFG,IAAMuB,YAAW,CAAC,SACvB,8CAAC,mBACC,wDAAC,0BAAwB,GAAG,MAAM,GACpC;;;AFEE,IAAAvB,uBAAA;AALG,IAAMkB,QAAO,CAAC;AAAA,EACnB;AAAA,EACA,GAAG;AACL,MACE,8CAACK,WAAA,EAAU,GAAG,MACZ;AAAA,EAAC;AAAA;AAAA,IACC,WAAU;AAAA,IACV,UAAS;AAAA,IAER;AAAA;AACH,GACF;;;AGZA,IAAAvB,uBAAA;AADK,IAAM,SAAS,CAAC,UACrB,+CAACkB,OAAA,EAAM,GAAG,OACR;AAAA,gDAAC,YAAS;AAAA,EACV,8CAAC,eAAY;AAAA,GACf;AAGF,OAAO,OAAOA;AACd,OAAO,WAAW;AAClB,OAAO,cAAc;;;ACfrB,IAAAxB,iBAA2B;AAGpB,IAAM,oBAAoB,UAC/B,2BAAW,cAAc;;;ACJ3B,IAAAC,kBAEO;;;ACFP,IAAAD,iBAAyB;;;ACCzB,IAAAA,iBAAwD;AAEjD,IAAM,0BAAsB,8BAGhC;AAAA,EACD,QAAQ;AAAA,EACR,WAAW,MAAM;AAAA,EAAC;AACpB,CAAC;;;ACTD,IAAAA,iBAA2B;AAGpB,IAAM,yBAAyB,UACpC,2BAAW,mBAAmB;;;AFW5B,IAAAM,uBAAA;AAPG,IAAMuB,YAAW,CAAC;AAAA,EACvB;AACF,MAAY;AACV,QAAM,sBAAsB,uBAAuB;AACnD,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAkB,oBAAoB,MAAM;AAExE,SACE;AAAA,IAAC,oBAAoB;AAAA,IAApB;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AGxBA,IAAA7B,iBAAsC;AACtC,IAAA8B,SAAuB;;;ACDvB,YAAuB;AACvB,IAAA7B,kBAIO;AACP,IAAAQ,sBAGO;AAWC,IAAAH,uBAAA;AARD,IAAM,cAAc,CAAC;AAAA,EAC1B;AACF,MAGE,8CAAO,YAAN,EACC,wDAAC,wBACC,wDAAO,aAAN,EACC,yDAAC,wBACC;AAAA;AAAA,IAAC;AAAA;AAAA,MACC,IAAG;AAAA,MACH,QAAO;AAAA,MACP,OAAM;AAAA,MAEL,gBAAM,SAAS,YACd;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA;AAAA,MACR,IAEA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA;AAAA,MACR;AAAA;AAAA,EAEJ;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,QAAO;AAAA,MACP,MAAK;AAAA,MAEJ,gBAAM;AAAA;AAAA,EACT;AAAA,GACF,GACF,GACF,GACF;;;ADnBI,IAAAA,uBAAA;AApBC,IAAM,iBAAiB,CAAC;AAAA,EAC7B;AACF,MAEM;AACJ,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAsB,CAAC,CAAC;AACpD,QAAM,eAAW,4BAAY,CAAC,UAC5B,UAAU,CAAC,eAAe;AAAA,IACxB,GAAG;AAAA,IACH;AAAA,EACF,CAAC,GACA,CAAC,CAAC;AAEL,SACE;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,MAEA,yDAAO,iBAAN,EACE;AAAA;AAAA,QAEA,MAAM,KAAK,MAAM,EAAE,IAAI,CAAC,OAAkB,UACzC;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA;AAAA,UADK;AAAA,QAEP,CACD;AAAA,QAED;AAAA,UAAO;AAAA,UAAN;AAAA,YACC,OAAO;AAAA,cACL,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,SAAS;AAAA,cACT,eAAe;AAAA,cACf,SAAS;AAAA,cACT,KAAK;AAAA,cACL,OAAO;AAAA,cACP,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,WAAW;AAAA,cACX,QAAQ;AAAA,cACR,SAAS;AAAA,YACX;AAAA;AAAA,QACF;AAAA,SACF;AAAA;AAAA,EACF;AAEJ;;;AJvCM,IAAAA,uBAAA;AANC,IAAMkB,QAAO,CAAC;AAAA,EACnB;AAAA,EACA,QAAQ,CAAC;AACX,MACE,8CAAC,kBACC,wDAACK,WAAA,EACC;AAAA,EAAC;AAAA;AAAA,IACC,WAAU;AAAA,IACV,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,UAAS;AAAA,IACT,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,GAAG;AAAA,IACL;AAAA,IAEC;AAAA;AACH,GACF,GACF;;;AMjCF,IAAA5B,kBAEO;AAaH,IAAAK,uBAAA;AANG,IAAM,UAAU,CAAC;AAAA,EACtB;AACF,MAAY;AACV,QAAM,EAAE,UAAU,IAAI,uBAAuB;AAE7C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI;AAAA,MACxC,WAAU;AAAA,MACV,YAAW;AAAA,MAEV;AAAA;AAAA,EACH;AAEJ;;;ACvBA,IAAAL,kBAEO;AACP,IAAAQ,sBAEO;AAOH,IAAAH,uBAAA;AALG,IAAMyB,UAAS,MACpB;AAAA,EAAC;AAAA;AAAA,IACC,MAAK;AAAA,IACL,QAAO;AAAA,IAEP,wDAAC,sCAAe;AAAA;AAClB;;;ACbF,IAAA9B,kBAIO;AAyBD,IAAAK,uBAAA;AAjBN,IAAMkB,QAAO,CAAC;AAAA,EACZ;AACF,MAAY;AACV,QAAM,EAAE,OAAO,IAAI,uBAAuB;AAC1C,MAAI,CAAC;AAAQ,WAAO;AAEpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,IAAG;AAAA,MACH,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,MACb;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,IAAG;AAAA,UACH,OAAO;AAAA,YACL,SAAS;AAAA,YACT,UAAU;AAAA,UACZ;AAAA,UAEC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAEO,IAAMP,WAAU,MACrB,8CAACO,OAAA,EACC,yDAAC,OAAO,MAAP,EACC;AAAA;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,aAAa;AAAA,MACf;AAAA;AAAA,EACF;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,IAAG;AAAA,MACH,IAAG;AAAA,MACH,IAAG;AAAA,MACH,YAAW;AAAA,MAEX,wDAAC,OAAO,aAAP,EAAmB;AAAA;AAAA,EACtB;AAAA,GACF,GACF;AAGFP,SAAQ,OAAOO;;;AC7Db,IAAAlB,uBAAA;AADK,IAAM,eAAe,MAC1B,+CAACkB,OAAA,EACC;AAAA,gDAACP,UAAA,EAAQ;AAAA,EACT,8CAAC,WACC,wDAACc,SAAA,EAAO,GACV;AAAA,GACF;AAGF,aAAa,OAAOP;AACpB,aAAa,UAAU;AACvB,aAAa,SAASO;AACtB,aAAa,UAAUd;;;ACfvB,qBAAO;AAEP,IAAAhB,kBAAqB;;;ACHrB,IAAAD,iBAA8B;AAKvB,IAAM,yBAAqB,8BAI/B;AAAA,EACD,QAAQ;AAAA,EACR,eAAe;AAAA,IACb,QAAQ;AAAA,IACR,OAAO,YAAY;AAAA,IAAC;AAAA,IACpB,MAAM,YAAY;AAAA,IAAC;AAAA,IACnB,OAAO,YAAY;AAAA,IAAC;AAAA,IACpB,QAAQ,YAAY;AAAA,IAAC;AAAA,IACrB,uBAAuB;AAAA,EACzB;AAAA,EACA,mBAAmB;AAAA,IACjB,uBAAuB;AAAA,IACvB,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM,YAAY;AAAA,IAAC;AAAA,IACnB,OAAO,YAAY;AAAA,IAAC;AAAA,EACtB;AACF,CAAC;;;ADlBD,IAAAyB,oBAA8B;;;AEVvB,IAAM,aAAa,CAAC,SACzB,IAAI,QAAQ,CAAC,YAAY;AACvB,QAAM,SAAS,IAAI,WAAW;AAC9B,SAAO,YAAY,MAAM,QAAQ,OAAO,MAAM;AAC9C,SAAO,cAAc,IAAI;AAC3B,CAAC;;;ACLH,IAAAzB,iBAAwB;AAajB,IAAM,YAAY,CAAC;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,MAAY;AACV,QAAM,mBAAmB,eAAe;AAExC,QAAM,aAAS,wBAAQ,MAAmC;AACxD,QAAI,cAAc,WAAW;AAAa,aAAO;AACjD,QAAI,mBAAmB;AAAW,aAAO;AACzC,QAAI,iBAAiB;AAAa,aAAO;AAEzC,QAAI,kBAAkB;AAAS,aAAO;AACtC,QAAI,kBAAkB;AAAQ,aAAO;AACrC,QAAI,CAAC,kBAAkB;AAAS,aAAO;AACvC,QAAI,cAAc,WAAW;AAAQ,aAAO;AAC5C,QAAI,cAAc,WAAW;AAAU,aAAO;AAE9C,WAAO;AAAA,EACT,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,EACF;AACF;;;AC1CA,mBAA6B;AAC7B,+BAAsD;AACtD,IAAAA,iBAAkE;AAClE,oCAA+B;AAC/B,IAAAyB,oBAA4B;AAOrB,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,MAAY;AACV,QAAM,CAAC,cAAc,eAAe,QAAI,yBAAuB,IAAI;AACnE,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAuB,IAAI;AAC/D,QAAM,CAAC,aAAa,cAAc,QAAI,yBAA6B,IAAI;AACvE,QAAM,CAAC,QAAQ,SAAS,QAAI,yBAAsD,MAAM;AACxF,QAAM,uBAAmB,8CAAe;AACxC,QAAM,qBAAiB,8CAAe;AACtC,QAAM,CAAC,UAAU,WAAW,QAAI,yBAAS,KAAK;AAE9C,gCAAU,MAAM;AACd,QAAI;AAAU;AACd,gBAAY,IAAI;AAAA,EAQlB,GAAG,CAAC,UAAU,kBAAkB,cAAc,CAAC;AAE/C,QAAM,wBAAoB,0CAAgB;AAAA,IACxC,SAAS,CAAC,OAAO,SAAS;AAExB,gBAAU,WAAW;AACrB,qBAAe,KAAK,WAAW;AAC/B,eAAS,UAAU;AACnB,UAAI;AAAS,gBAAQ,OAAO,IAAI;AAEhC,sBAAgB,IAAI;AACpB,oBAAc,IAAI;AAAA,IACpB;AAAA,IACA,QAAQ,UAAU,SAAS;AAEzB,gBAAU,SAAS;AACnB,UAAI;AAAQ,cAAM,OAAO,GAAG,IAAI;AAChC,sBAAgB,IAAI;AACpB,oBAAc,IAAI;AAAA,IACpB;AAAA,IACA,SAAS,MAAM;AACb,gBAAU,QAAQ;AAElB,sBAAgB,IAAI;AACpB,oBAAc,IAAI;AAAA,IACpB;AAAA,IACA,UAAU,MAAM;AACd,gBAAU,WAAW;AAErB,sBAAgB,IAAI;AACpB,oBAAc,IAAI;AAAA,IACpB;AAAA,EACF,CAAC;AAED,QAAM,CAAC,aAAa,cAAc,QAAI,yBAA6B,IAAI;AAEvE,QAAM,eAAW,uBAAO,KAAK;AAE7B,gCAAU,MAAM;AACd,QAAI,CAAC;AAAa;AAClB,QAAI,SAAS;AAAS;AACtB,aAAS,UAAU;AAEnB,UAAM,eAAe,IAAI,aAAa;AAEtC,mBAAe;AAAA,MACb,QAAQ,aAAa,wBAAwB,WAAW;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,UAAU,WAAW,CAAC;AAE1B,QAAM,4BAAwB,wBAAQ,MAAM;AAC1C,QAAI,CAAC;AAAa,aAAO;AAEzB,UAAM,SAAS,YAAY,aAAa,eAAe;AAEvD,gBAAY,OAAO,QAAQ,MAAM;AACjC,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,sBAAkB,wBAAQ,MAAM;AACpC,QAAI,CAAC;AAAa,aAAO;AAEzB,UAAM,SAAS,YAAY,aAAa,eAAe;AACvD,WAAO,cAAc;AAErB,gBAAY,OAAO,QAAQ,MAAM;AACjC,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,oBAAgB,4BAAY,MAAM;AACtC,QAAI,CAAC;AAAiB;AAEtB,UAAM,gBAAgB,IAAI,WAAW,gBAAgB,iBAAiB;AACtE,oBAAgB,qBAAqB,aAAa;AAElD,UAAM,WAAW,cAAc,MAAM,CAAC,MAAM,MAAM,CAAC;AAEnD,oBAAgB,CAACO,kBAA+B;AAC9C,UAAI;AAAU,eAAOA,qBAAgB,aAAAC,SAAM;AAE3C,aAAO;AAAA,IACT,CAAC;AAED,kBAAc,CAACC,gBAA6B;AAC1C,UAAI;AAAU,eAAOA;AAErB,aAAOA,mBAAc,aAAAD,SAAM;AAAA,IAC7B,CAAC;AAED,0BAAsB,MAAM,cAAc,CAAC;AAAA,EAC7C,GAAG,CAAC,iBAAiB,eAAe,eAAe,CAAC;AAEpD,gCAAU,MAAM;AACd,QAAI,CAAC;AAAiB;AAEtB,0BAAsB,MAAM,cAAc,CAAC;AAAA,EAC7C,GAAG,CAAC,eAAe,eAAe,CAAC;AAEnC,qCAAY,MAAM;AAChB,QAAI,CAAC;AAAiB;AACtB,QAAI,WAAW;AAAa;AAC5B,QAAI,CAAC;AAAc;AACnB,QAAI,CAAC;AAAY;AACjB,QAAI,CAAC,aAAa,aAAS,aAAAA,SAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;AAAG;AAE3D,sBAAkB,KAAK;AAAA,EACzB,GAAG,GAAG;AAEN,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF;AACF;;;ACpJA,IAAAjC,iBAAqD;AACrD,oBAAuB;AACvB,IAAAmC,iCAA+B;;;ACD/B,IAAA/B,iBAAwB;AAOjB,IAAM,QAAQ,CAAC;AAAA,EACpB;AACF,MAAY;AACV,QAAM,eAAe,QAAQ,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM;AACpE,QAAM,SAAS,aAAa,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,EAAE,KAAK,GAAG;AAE7D,UAAI,wBAAQ,MAAM;AAAG,WAAO;AAE5B,SAAO;AACT;;;ACjBA,4BAAuB;AAEvB,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AACF;AAEO,IAAM,uBAAuB,CAAC,iBAAiB,aAAS,8BAAO,GAAG,QAAQ,EAAE;;;AFM5E,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AACF,MAAY;AACV,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAmB,CAAC,CAAC;AACrE,QAAM,kBAAc,+CAAe;AACnC,QAAM,wBAAwB,yBAAyB;AAEvD,QAAM,qBAAqB,iBAAiB;AAE5C,gCAAU,MAAM;AACd,QAAI,YAAY;AAAS;AACzB,QAAI,CAAC,mBAAmB;AAAe;AACvC,QAAI,mBAAmB,cAAc,SAAS;AAAa;AAC3D,QAAI,iBAAiB,SAAS,mBAAmB,cAAc,EAAE;AAAG;AAEpE,UAAMgC,SAAQ,MAAS;AAAA,MACrB,SAAS,mBAAmB;AAAA,IAC9B,CAAC;AAED,QAAI,CAACA;AAAO;AAEZ,wBAAoB,CAAC,SAAS,CAAC,GAAG,MAAM,mBAAmB,cAAc,EAAE,CAAC;AAE5E,gBAAY,KAAK,GAAG,sBAAsB,OAAO,cAAcA,MAAK,IAAI;AAAA,MACtE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,KAAK;AAAA,QACH,GAAI,sBAAsB,eAAe;AAAA,UACvC,SAAS;AAAA,YACP,eAAe,UAAU,sBAAsB,YAAY;AAAA,UAC7D;AAAA,QACF,IAAI,CAAC;AAAA,QACL,iBAAiB;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAGD,QAAM,eAAW,uBAAO,KAAK;AAC7B,QAAM,CAAC,aAAa,cAAc,QAAI,yBAA6B,IAAI;AAEvE,gCAAU,MAAM;AACd,QAAI,CAAC,YAAY;AAAS;AAC1B,QAAI,SAAS;AAAS;AACtB,aAAS,UAAU;AAEnB,QAAI,sBAAsB;AACxB,YAAM,eAAe,IAAI,aAAa;AACtC,qBAAe;AAAA;AAAA,QAEb,QAAQ,aAAa,yBAAyB,qBAAO,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE,KAAK;AAAA,QAC/E;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,qBAAe;AAAA,QACb,QAAQ,qBAAO;AAAA,QACf,cAAc,qBAAO;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,aAAa,QAAQ,CAAC;AAE1B,QAAM,4BAAwB,wBAAQ,MAAM;AAC1C,QAAI,CAAC;AAAa,aAAO;AAEzB,UAAM,SAAS,YAAY,aAAa,eAAe;AAEvD,gBAAY,OAAO,QAAQ,YAAY,aAAa,WAAW;AAC/D,gBAAY,OAAO,QAAQ,MAAM;AACjC,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,CAAC;AAEhB,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;;;ALRM,IAAA9B,uBAAA;AApEC,IAAMkB,QAAO,CAAC;AAAA,EACnB;AACF,MAAY;AACV,eAAa;AAEb,QAAM,qBAAqB,iBAAiB;AAa5C,QAAM,gBAAgB,YAAY;AAAA,IAChC,iBAAiB;AAAA,IACjB,SAAS,YAAY;AACnB,cAAQ,IAAI,OAAO;AAAA,IAIrB;AAAA,IACA,QAAQ,OAAO,QAAa,WAAuB;AAQjD,YAAM,OAAO,IAAI,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC;AACtD,YAAM,eAAe,MAAM,WAAW,IAAI;AAE1C,aAAO,mBAAmB,cAAc;AAAA;AAAA,QAEtC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,QAAM,2BAAuB,iCAAc,EAAE,MAAM,aAAa,CAAC;AAEjE,QAAM,oBAAoB,gBAAgB;AAAA,IACxC,OAAO,MAAM;AACX,UAAI,yBAAyB,WAAW;AACtC,sBAAc,MAAM;AAAA,MACtB;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,EAAE,OAAO,IAAI,UAAU;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC,mBAAmB;AAAA,IAAnB;AAAA,MACC,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,UAAS;AAAA,UACT,GAAE;AAAA,UAED;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;;;AQhGA,IAAAvB,kBAAqB;;;ACDrB,IAAAD,iBAA2B;AAGpB,IAAM,wBAAwB,UACnC,2BAAW,kBAAkB;;;ADWzB,IAAAM,uBAAA;AAXC,IAAM,gBAAgB,MAAM;AACjC,QAAM,qBAAqB,sBAAsB;AAEjD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,IAAG;AAAA,MACH,UAAS;AAAA,MAET;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,QAAO;AAAA,UACP,OAAM;AAAA,UACN,OAAO;AAAA,YACL,iBAAiB,SAAS,mBAAmB,WAAW,YAAY,SAAS,MAAM;AAAA,YACnF,cAAc;AAAA,UAChB;AAAA;AAAA,MAEF;AAAA;AAAA,EACF;AAEJ;;;AE5BA,IAAAG,sBAAoC;AACpC,IAAAR,kBAEO;;;ACHP,IAAAH,iBAAc;AACd,IAAAG,kBAGO;AACP,IAAAD,iBAAiD;AACjD,IAAAI,kBAAwB;AAiDd,IAAAE,uBAAA;AA9CV,IAAM,WAAW;AAEV,IAAM,aAAa,MAAM;AAC9B,QAAM,qBAAqB,sBAAsB;AACjD,QAAM,wBAAwB,mBAAmB,cAAc;AAC/D,QAAM,CAAC,eAAe,QAAI,yBAAS,MAAM,IAAI,aAAa,EAAE,eAAe,CAAC;AAC5E,QAAM,CAAC,YAAY,aAAa,QAAI,yBAAmB,CAAC,CAAC;AAEzD,QAAM,WAAO,4BAAY,CAAC,EAAE,uBAAA+B,uBAAsB,MAA+C;AAC/F,UAAM,gBAAgB,IAAI,WAAWA,uBAAsB,oBAAoB,EAAE;AACjF,IAAAA,uBAAsB,qBAAqB,aAAa;AAGxD,UAAM,6BAAyB,yBAAQ,eAAe,cAAc,SAAS,QAAQ;AAErF;AAAA,MACE,uBAAuB,IAAI,CAAC,yBACzB,eAAAtC,QAAE,KAAK,oBAAoB,IAAI,MAAM,GACvC;AAAA,IACH;AAEA,0BAAsB,MAAM,KAAK,EAAE,uBAAAsC,uBAAsB,CAAC,CAAC;AAAA,EAC7D,GAAG,CAAC,CAAC;AAEL,gCAAU,MAAM;AACd,SAAK,EAAE,uBAAuB,yBAAyB,gBAAgB,CAAC;AAAA,EAC1E,GAAG,CAAC,MAAM,uBAAuB,eAAe,CAAC;AAEjD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,GAAG,QAAQ;AAAA,MACpB,KAAI;AAAA,MACJ,OAAM;AAAA,MACN,OAAO;AAAA;AAAA,QAEL,qBAAqB;AAAA,MACvB;AAAA,MAEC,qBAAW,IAAI,CAAC,WAAW,UAC1B;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UACV,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,QAAO;AAAA,UAEP;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,WAAU;AAAA,cACV,QAAQ,GAAG,YAAY,EAAE;AAAA,cACzB,OAAM;AAAA,cACN,OAAO;AAAA,gBACL,iBAAiB,SAAS,mBAAmB,WAAW,cAAc,SAAS,MAAM;AAAA,gBACrF,cAAc;AAAA,cAChB;AAAA;AAAA,UACF;AAAA;AAAA,QAfK;AAAA,MAgBP,CACD;AAAA;AAAA,EACH;AAEJ;;;ACrEA,IAAApC,kBAIO;AACP,IAAAQ,sBAIO;AAQD,IAAAH,uBAAA;AALC,IAAM,eAAe,MAAM;AAChC,QAAM,qBAAqB,sBAAsB;AAEjD,MAAI,mBAAmB,WAAW,aAAa;AAC7C,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QAEN;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,IAAG;AAAA,cACH,IAAG;AAAA,cAEH;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS,mBAAmB,cAAc;AAAA,kBAC1C,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,MAAK;AAAA,kBAEL,wDAAC,iCAAU;AAAA;AAAA,cACb;AAAA;AAAA,UACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,MAAI;AAAA,cACJ,SAAQ;AAAA,cACR,MAAK;AAAA,cAEL;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS,mBAAmB,cAAc;AAAA,kBAC1C,OAAM;AAAA,kBACN,cAAY;AAAA,kBACZ,QAAO;AAAA,kBACP,MAAK;AAAA,kBACL,OAAO;AAAA,oBACL,QAAQ;AAAA,kBACV;AAAA,kBAEA,wDAAC,mCAAY;AAAA;AAAA,cACf;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,mBAAmB,WAAW,kBAAkB;AAClD,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,mBAAmB,cAAc;AAAA,QAC1C,OAAM;AAAA,QACN,QAAO;AAAA,QACP,MAAK;AAAA,QACL,OAAO;AAAA,UACL,QAAQ;AAAA,QACV;AAAA,QAEA,wDAAC,kCAAW;AAAA;AAAA,IACd;AAAA,EAEJ;AAEA,MAAI,mBAAmB,WAAW,QAAQ;AACxC,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM,mBAAmB,cAAc,MAAM;AAAA,QACtD,MAAK;AAAA,QACL,OAAM;AAAA,QACN,QAAO;AAAA,QACP,OAAO;AAAA,UACL,QAAQ;AAAA,QACV;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,MAAI,mBAAmB,WAAW,WAAW;AAC3C,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM,mBAAmB,kBAAkB,MAAM;AAAA,QAC1D,MAAK;AAAA,QACL,OAAM;AAAA,QACN,QAAO;AAAA,QACP,OAAO;AAAA,UACL,QAAQ;AAAA,QACV;AAAA,QAEA,wDAAC,iCAAU;AAAA;AAAA,IACb;AAAA,EAEJ;AAEA,MAAI,mBAAmB,WAAW,gBAAgB;AAChD,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM,mBAAmB,kBAAkB,KAAK;AAAA,QACzD,MAAK;AAAA,QACL,OAAM;AAAA,QACN,QAAO;AAAA,QACP,OAAO;AAAA,UACL,QAAQ;AAAA,QACV;AAAA,QAEA,wDAAC,kCAAW;AAAA;AAAA,IACd;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAM;AAAA,MACN,QAAO;AAAA,MACP,UAAQ;AAAA,MACR,OAAO;AAAA,QACL,QAAQ;AAAA,MACV;AAAA;AAAA,EACF;AAEJ;;;AFjHM,IAAAA,uBAAA;AARC,IAAM,OAAO,MAAM;AACxB,QAAM,qBAAqB,sBAAsB;AAEjD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAM;AAAA,MAEN;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAG;AAAA,YACH,OAAM;AAAA,YAEN;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAG;AAAA,kBACH,IAAG;AAAA,kBACH,OAAM;AAAA,kBAEN;AAAA,oBAAC;AAAA;AAAA,sBACC,OAAO;AAAA,wBACL,OAAO,SAAS,mBAAmB,WAAW,cAAc,SAAS,MAAM;AAAA,sBAC7E;AAAA;AAAA,kBACF;AAAA;AAAA,cACF;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAG;AAAA,kBACH,IAAG;AAAA,kBACH,OAAQ;AAAA,oBACN,iBAAiB,SAAS,mBAAmB,WAAW,cAAc,SAAS,MAAM;AAAA,oBACrF,cAAc;AAAA,kBAChB;AAAA,kBAEA,wDAAC,cAAW;AAAA;AAAA,cACd;AAAA;AAAA;AAAA,QACF;AAAA,QAEA,8CAAC,gBAAa;AAAA;AAAA;AAAA,EAChB;AAEJ;;;AGxCE,IAAAA,uBAAA;AADK,IAAM,cAAc,CAAC,UAC1B,+CAACkB,OAAA,EAAM,GAAG,OACR;AAAA,gDAAC,iBAAc;AAAA,EACf,8CAAC,QAAK;AAAA,GACR;AAGF,YAAY,OAAOA;AACnB,YAAY,gBAAgB;AAC5B,YAAY,OAAO;;;ACRjB,IAAAlB,uBAAA;AADK,IAAM,oBAAoB,MAC/B,+CAACkB,OAAA,EACC;AAAA,gDAACP,SAAQ,MAAR,EACC,wDAAC,eAAY,GACf;AAAA,EACA,8CAAC,WACC,wDAACc,SAAA,EAAO,GACV;AAAA,GACF;AAGF,kBAAkB,OAAOP;AACzB,kBAAkB,UAAU;AAC5B,kBAAkB,SAASO;AAC3B,kBAAkB,UAAUd;;;ACpB5B,IAAAjB,iBAAwB;;;ACAxB,IAAAA,iBAAwB;AACxB,IAAAI,kBAAwB;AACxB,sCAAyB;AAIzB,IAAAH,kBAEO;;;ACRP,IAAAQ,uBAEO;AACP,IAAAR,kBAIO;AAaH,IAAAK,uBAAA;AAVG,IAAM,OAAO,CAAC;AAAA,EACnB;AAAA,EACA;AACF,MAGM;AACJ,QAAM,EAAE,eAAe,UAAU,IAAI,iBAAiB;AAEtD,SACE;AAAA,IAACW;AAAA,IAAA;AAAA,MACC,SAAS,MAAM;AACb,sBAAc;AAAA;AAAA,UAEZ,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEA,IAAMA,WAAU,CAAC;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAME;AAAA,EAAC;AAAA;AAAA,IACC,SAAQ;AAAA,IACR;AAAA,IACA,UAAU;AAAA,IAEV;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,QAAO;AAAA,UAEN;AAAA;AAAA,MACH;AAAA,MAEA,8CAAC,2BAAQ,SAAS,WAChB,wDAAC,oCAAY,GACf;AAAA;AAAA;AACF;AAGF,KAAK,UAAUA;;;AD1BP,IAAAX,uBAAA;AA3BD,IAAMW,WAAU,CAAC;AAAA,EACtB;AACF,MAEM;AACJ,QAAM,iBAAiB,kBAAkB;AACzC,QAAM,qBAAqB,iBAAiB;AAE5C,QAAM,mBAAmB,eAAe;AAExC,QAAM,kBAAc,wBAAQ,UAC1B,0CAAS,QAAQ,EAAE,MAAM,OAAO,EAAE,OAAO,CAAC,MAAM,KAAC,yBAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GAC/E,CAAC,QAAQ,CAAC;AAEb,QAAM,iBAAa,wBAAQ,MACzB,eAAe,SAAS,OAAO,mBAAmB,cAAc,MAAM,iBAAiB,aACtF,CAAC,gBAAgB,oBAAoB,gBAAgB,CAAC;AAEzD,UAAI,yBAAQ,WAAW;AAAG,WAAO;AAEjC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,IAAG;AAAA,MACH,MAAK;AAAA,MAEJ,sBAAY,IAAI,CAAC,eAChB;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA;AAAA;AAAA,QAFK;AAAA,MAGP,CACD;AAAA;AAAA,EACH;AAEJ;;;ADzBI,IAAAX,uBAAA;AAhBG,IAAM,cAAc,CAAC;AAAA,EAC1B;AACF,MAEM;AACJ,QAAM,qBAAqB,iBAAiB;AAE5C,QAAM,iBAAa,wBAAQ;AAAA;AAAA,IAEzB,mBAAmB,eAAe,UAAU;AAAA,KAC3C,CAAC,kBAAkB,CAAC;AAEvB,MAAI,mBAAmB;AAAW,WAAO;AACzC,MAAI;AAAY,WAAO;AAEvB,SACE,8CAACW,UAAA,EACE,UACH;AAEJ;AAEA,YAAY,OAAO;;;AG3BnB,IAAAjB,iBAAwB;AAkBpB,IAAAM,uBAAA;AAbG,IAAM,mBAAmB,CAAC;AAAA,EAC/B;AAAA,EACA,GAAG;AACL,MAEM;AACJ,QAAM,sBAAsB,mBAAmB;AAE/C,QAAM,YAAQ,wBAAQ,MACpB,MAAM,qBAAqB,IAAI,GAC9B,CAAC,MAAM,mBAAmB,CAAC;AAE9B,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ","sourcesContent":["export { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nexport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport { Thread } from '@/components/threads/Thread'\nexport { useThreadContext } from '@/hooks/threads/useThreadContext'\nexport { useLifecycle } from '@/hooks/threads/useLifecycle'\nexport { useMessages } from '@/hooks/messages/useMessages'\nexport { useMessageContext } from '@/hooks/messages/useMessageContext'\nexport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nexport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\n\nexport { ThreadDialog } from '@/components/threads/ThreadDialog'\nexport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nexport { AudioThreadDialog } from '@/components/threads/AudioThreadDialog'\nexport { AudioThread } from '@/components/threads/AudioThread'\n\nexport { useCreateRun } from '@/hooks/runs/useCreateRun'\nexport { useRuns } from '@/hooks/runs/useRuns'\nexport { useLatestRun } from '@/hooks/runs/useLatestRun'\nexport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\n\nexport { Suggestions } from '@/components/suggestions/Suggestions'\n\nexport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nexport { MarkdownProvider } from '@/components/markdown/MarkdownProvider'\nexport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\nexport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\nexport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\nexport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nexport { FunctionBase } from '@/components/functions/FunctionBase'\n","import _ from 'lodash'\nimport { customizer } from './customizer'\n\n// @ts-ignore-next-line\nexport const merge = (obj, ...sources) =>\n _.mergeWith(_.cloneDeep(obj), ...sources, customizer)\n","import _ from 'lodash'\n\n// @ts-ignore-next-line\nexport const customizer = (objectValue, srcValue) => {\n if (!_.isArray(objectValue)) return\n\n return srcValue\n}\n","'use client'\nimport { createContext } from 'react'\n\nexport const SuperinterfaceContext = createContext<{\n baseUrl: string | null\n variables: Record<string, any>\n defaultOptions: {\n queries: Record<string, any>\n mutations: Record<string, any>\n }\n publicApiKey?: string\n}>({\n baseUrl: 'https://superinterface.ai/api/cloud',\n variables: {},\n defaultOptions: {\n queries: {},\n mutations: {},\n },\n})\n","import { useContext } from 'react'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\n\nexport const useSuperinterfaceContext = () => (\n useContext(SuperinterfaceContext)\n)\n","import { MessagesPage } from '@/types'\nimport {\n InfiniteData,\n UseInfiniteQueryOptions,\n UseMutationOptions,\n} from '@tanstack/react-query'\nimport { merge } from '@/lib/misc/merge'\nimport { SuperinterfaceContext } from '@/contexts/core/SuperinterfaceContext'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\n\nexport type Args = {\n children: React.ReactNode\n baseUrl?: string\n publicApiKey?: string\n variables?: {\n [key: string]: any\n }\n defaultOptions?: {\n queries?: UseInfiniteQueryOptions<InfiniteData<MessagesPage>>\n mutations?: UseMutationOptions\n }\n}\n\nexport const SuperinterfaceProvider = ({\n children,\n baseUrl,\n publicApiKey,\n variables,\n defaultOptions,\n}: Args) => {\n const superinterfaceContext = useSuperinterfaceContext()\n\n const value = merge(\n superinterfaceContext,\n {\n ...(baseUrl ? { baseUrl } : {}),\n ...(publicApiKey ? { publicApiKey } : {}),\n ...(variables ? { variables } : {}),\n ...(defaultOptions ? { defaultOptions } : {}),\n }\n )\n\n return (\n <SuperinterfaceContext.Provider\n value={value}\n >\n {children}\n </SuperinterfaceContext.Provider>\n )\n}\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Content } from './Content'\nimport { Progress } from './Progress'\nimport { Root } from './Root'\nimport { NextPageSkeleton } from './NextPageSkeleton'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n children?: React.ReactNode\n style?: React.CSSProperties\n}\n\nexport const Messages = ({\n children,\n style = {},\n}: Args) => (\n <Root style={style}>\n <Flex\n flexShrink=\"0\"\n height=\"var(--space-3)\"\n />\n\n <Progress />\n\n {children}\n\n <Content />\n\n <NextPageSkeleton />\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Root>\n)\n\nMessages.Root = Root\nMessages.Message = Message\nMessages.NextPageSkeleton = NextPageSkeleton\n","import { useEffect } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useMessageGroups } from '@/hooks/messageGroups/useMessageGroups'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\nimport { useToasts } from '@/hooks/toasts/useToasts'\nimport { MessageGroup } from './MessageGroup'\n\nexport const Content = () => {\n const {\n messages,\n isLoading,\n isLoadingError,\n } = useMessages()\n\n const { addToast } = useToasts()\n\n const { messageGroups } = useMessageGroups({\n messages,\n })\n\n useEffect(() => {\n if (isLoadingError) {\n addToast({ type: 'error', message: 'Could not load messages. Please try again.' })\n }\n }, [isLoadingError, addToast])\n\n if (isLoading || isLoadingError) {\n return (\n <MessagesSkeleton />\n )\n }\n\n return (\n <>\n {messageGroups.map((messageGroup: MessageGroupType) => (\n <MessageGroup\n key={messageGroup.id}\n messageGroup={messageGroup}\n />\n ))}\n </>\n )\n}\n","import { useMemo } from 'react'\nimport {\n InfiniteData,\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { Message, MessagesPage } from '@/types'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { messagesQueryOptions } from '@/lib/messages/messagesQueryOptions'\n\nconst messages = ({\n props,\n}: {\n props: {\n data: InfiniteData<MessagesPage> | undefined\n },\n}) => {\n if (!props.data) return []\n\n return props.data.pages.reduce<Message[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n\n\nexport const useMessages = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const props = useInfiniteQuery(messagesQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n messages: messages({ props }),\n }), [props])\n}\n","import {\n useQueryClient,\n infiniteQueryOptions,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { MessagesPage } from '@/types'\n\ntype QueryFunctionArgs = {\n queryKey: Readonly<[string, { [key: string]: any }]>\n pageParam?: string\n}\n\nexport const queryOptions = ({\n queryKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const queryKey = [...queryKeyBase, threadContext.variables]\n\n return infiniteQueryOptions<MessagesPage>({\n // @ts-ignore-next-line\n queryFn: async ({\n pageParam,\n queryKey,\n }: QueryFunctionArgs) => {\n const [_key, variables] = queryKey\n const params = new URLSearchParams({\n ...(pageParam ? { pageParam } : {}),\n ...variables,\n })\n\n return fetch(`${superinterfaceContext.baseUrl}${path}?${params}`, {\n credentials: 'include',\n ...(superinterfaceContext.publicApiKey ? {\n headers: {\n Authorization: `Bearer ${superinterfaceContext.publicApiKey}`,\n },\n } : {}),\n })\n .then(async (response) => {\n if (response.status !== 200) {\n try {\n const errorResponse = await response.json() as { error: string }\n throw new Error(errorResponse.error)\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n }\n\n return response.json() as Promise<MessagesPage>\n })\n },\n initialPageParam: undefined,\n getNextPageParam: (lastPage: MessagesPage) => {\n if (!lastPage.hasNextPage) return null\n\n return lastPage.lastId\n },\n limit: 10,\n ...threadContext.defaultOptions.queries,\n ...queryClient.getQueryDefaults(queryKey),\n queryKey,\n })\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const messagesQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['messages'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { useMemo } from 'react'\nimport { messageGroups as getMessageGroups } from './lib/messageGroups'\nimport { Message } from '@/types'\n\ntype Args = {\n messages: Message[]\n}\n\nexport const useMessageGroups = ({\n messages,\n}: Args) => (\n useMemo(\n () => ({\n messageGroups: getMessageGroups({ messages }),\n }),\n [messages]\n )\n)\n","import _ from 'lodash'\nimport { last } from 'radash'\nimport { Message, MessageGroup } from '@/types'\nimport { order } from '@/lib/messages/order'\nimport { newGroup } from './newGroup'\n\ntype Args = {\n messages: Message[]\n}\n\nexport const messageGroups = ({\n messages,\n}: Args) =>\n _.reduce(\n order({ messages }),\n (groups: MessageGroup[], message: Message) => {\n const group = last(groups)\n\n if (!group) return newGroup({ groups, message })\n\n if (group.role !== message.role) {\n return newGroup({\n groups,\n message,\n })\n }\n\n return [\n ..._.dropRight(groups),\n {\n ...group,\n messages: [...group.messages, message],\n },\n ]\n },\n []\n )\n","import { sort } from 'radash'\nimport { Message } from '@/types'\n\ntype Args = {\n messages: Message[]\n}\n\nexport const order = ({ messages }: Args) =>\n sort(messages, m => m.created_at, true)\n","import { Message } from '@/types'\n\ntype Args = {\n message: Message\n}\n\nexport const newGroupItem = ({ message }: Args) => ({\n id: message.id,\n role: message.role,\n createdAt: message.created_at,\n messages: [message],\n})\n","import { Message, MessageGroup } from '@/types'\nimport { newGroupItem } from './newGroupItem'\n\ntype Args = {\n groups: MessageGroup[]\n message: Message\n}\n\nexport const newGroup = ({ groups, message }: Args) => [\n ...groups,\n newGroupItem({\n message,\n }),\n]\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Avatar,\n Box,\n Skeleton,\n} from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\n\nexport const MessagesSkeleton = forwardRef(function MessagesSkeleton(_props, ref) {\n return (\n <MessageGroupBase ref={ref}>\n <Skeleton loading>\n <Avatar\n fallback={<Flex />}\n size=\"1\"\n />\n </Skeleton>\n\n <Box\n pb=\"3\"\n >\n <Name>\n <Skeleton\n loading\n style={{\n width: '128px',\n }}\n />\n </Name>\n\n <Skeleton\n loading\n style={{\n width: '256px',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n\n <Skeleton\n loading\n style={{\n width: '256px',\n marginTop: 'var(--space-2)',\n }}\n />\n </Box>\n </MessageGroupBase>\n )\n})\n","import { forwardRef } from 'react'\nimport {\n Flex,\n Container,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const MessageGroupBase = forwardRef(function MessageGroupBase({\n children,\n}: Args, ref) {\n return (\n <Container\n // @ts-ignore-next-line\n ref={ref}\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n flexShrink=\"0\"\n gap=\"3\"\n >\n {children}\n </Flex>\n </Container>\n )\n})\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Name = ({\n children,\n}: Args) => (\n <Flex\n align=\"center\"\n height=\"var(--space-5)\"\n >\n <Text\n size=\"2\"\n weight=\"bold\"\n >\n {children}\n </Text>\n </Flex>\n)\n","import { useContext } from 'react'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\n\nexport const useToasts = () => (\n useContext(ToastsContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { Toast } from '@/types'\n\nexport const ToastsContext = createContext<{\n toasts: Toast[]\n addToast: (toast: Toast) => void\n}>({\n toasts: [],\n addToast: () => {},\n})\n","import { useContext } from 'react'\nimport {\n Box,\n Avatar,\n} from '@radix-ui/themes'\nimport {\n PersonIcon,\n} from '@radix-ui/react-icons'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { MessageGroup as MessageGroupType } from '@/types'\nimport { Content } from './Content'\n\ntype Args = {\n messageGroup: MessageGroupType\n}\n\nexport const MessageGroup = ({\n messageGroup,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n {messageGroup.role === 'user' ? (\n <Avatar\n fallback={<PersonIcon />}\n size=\"1\"\n />\n ) : (\n <AssistantAvatar />\n )}\n\n <Box flexGrow=\"1\">\n <Name>\n {messageGroup.role === 'user' ? 'You' : assistantNameContext}\n </Name>\n\n <Content\n messageGroup={messageGroup}\n />\n </Box>\n </MessageGroupBase>\n )\n}\n","'use client'\nimport { useContext } from 'react'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { AssistantAvatarContext } from '@/contexts/assistants/AssistantAvatarContext'\n\nexport const AssistantAvatar = () => {\n const AssistantAvatarContextValue = useContext(AssistantAvatarContext)\n\n return (\n <Flex\n flexShrink=\"0\"\n height=\"24px\"\n width=\"24px\"\n style={{\n borderRadius: 'var(--radius-3)',\n overflow: 'hidden',\n }}\n >\n {AssistantAvatarContextValue}\n </Flex>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport {\n Avatar,\n} from '@radix-ui/themes'\nimport {\n LightningBoltIcon,\n} from '@radix-ui/react-icons'\n\nexport const AssistantAvatarContext = createContext(\n <Avatar\n fallback={<LightningBoltIcon />}\n size=\"1\"\n />\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const AssistantNameContext = createContext('Assistant')\n","import { Flex } from '@radix-ui/themes'\nimport { MessageGroup } from '@/types'\nimport { Message } from '@/components/threads/Thread/Message'\n\ntype Args = {\n messageGroup: MessageGroup\n}\n\nexport const Content = ({\n messageGroup,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {messageGroup.messages.map((message) => (\n <Message\n key={message.id}\n message={message}\n />\n ))}\n </Flex>\n)\n","import _ from 'lodash'\nimport { useMemo } from 'react'\nimport {\n Box,\n} from '@radix-ui/themes'\nimport { Message as MessageType } from '@/types'\nimport { RunSteps } from '@/components/runSteps/RunSteps'\nimport { Provider } from './Provider'\nimport { TextContent } from './TextContent'\n\ntype Args = {\n message: MessageType\n}\n\nexport const Message = ({\n message,\n}: Args) => {\n const [olderRunSteps, laterRunSteps] = useMemo(() => {\n if (!message.runSteps.length) return [[], []]\n\n const messageCreationRunStepIndex = message.runSteps.findIndex((runStep) => {\n if (runStep.step_details.type !== 'message_creation') return\n\n return runStep.step_details.message_creation.message_id === message.id\n })\n\n let nextRunStepIndex = message.runSteps.slice(0, messageCreationRunStepIndex).findLastIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n if (nextRunStepIndex === -1) {\n nextRunStepIndex = 0\n }\n const laterRunSteps = message.runSteps.slice(nextRunStepIndex, messageCreationRunStepIndex)\n\n const prevRunStepIndex = message.runSteps.slice(messageCreationRunStepIndex + 1).findIndex((runStep) => (\n runStep.step_details.type === 'message_creation'\n ))\n\n let olderRunSteps\n\n if (prevRunStepIndex === -1) {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1)\n } else {\n olderRunSteps = message.runSteps.slice(messageCreationRunStepIndex + 1, messageCreationRunStepIndex + prevRunStepIndex)\n }\n\n return [olderRunSteps, laterRunSteps]\n }, [message])\n\n return (\n <Provider value={{ message }}>\n <Box>\n <RunSteps\n runSteps={olderRunSteps}\n />\n\n {message.content.map((content, index) => (\n <Box\n key={index}\n >\n {content.type === 'text' && (\n <TextContent content={content} />\n )}\n </Box>\n ))}\n\n <RunSteps\n runSteps={laterRunSteps}\n />\n </Box>\n </Provider>\n )\n}\n","import OpenAI from 'openai'\nimport { Flex } from '@radix-ui/themes'\nimport { RunStep } from '@/components/runSteps/RunStep'\n\ntype Args = {\n runSteps: OpenAI.Beta.Threads.Runs.RunStep[]\n}\n\nexport const RunSteps = ({\n runSteps,\n}: Args) => (\n <Flex\n direction=\"column-reverse\"\n >\n {runSteps.map((runStep) => (\n <RunStep\n key={runStep.id}\n runStep={runStep}\n />\n ))}\n </Flex>\n)\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { ToolCall } from './ToolCall'\nimport { Starting } from './Starting'\n\ntype Args = {\n stepDetails: OpenAI.Beta.Threads.Runs.ToolCallsStepDetails\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const ToolCalls = ({\n stepDetails,\n runStep,\n}: Args) => (\n <Flex\n direction=\"column\"\n >\n {!stepDetails.tool_calls.length && (\n <Starting />\n )}\n {stepDetails.tool_calls.map((toolCall) => (\n <ToolCall\n key={toolCall.id}\n toolCall={toolCall}\n runStep={runStep}\n />\n ))}\n </Flex>\n)\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { Fn } from './Fn'\nimport { CodeInterpreter } from './CodeInterpreter'\n\ntype ToolCall = OpenAI.Beta.Threads.Runs.CodeToolCall\n | OpenAI.Beta.Threads.Runs.RetrievalToolCall\n | OpenAI.Beta.Threads.Runs.FunctionToolCall\n\ntype Args = {\n toolCall: ToolCall\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const ToolCall = ({\n toolCall,\n runStep,\n}: Args) => {\n if (toolCall.type === 'function') {\n return (\n <Fn\n fn={toolCall.function}\n runStep={runStep}\n />\n )\n }\n\n if (toolCall.type === 'code_interpreter') {\n return (\n <CodeInterpreter\n codeInterpreter={toolCall.code_interpreter}\n runStep={runStep}\n />\n )\n }\n\n return (\n <Flex>\n {toolCall.type}\n </Flex>\n )\n}\n","import { useContext } from 'react'\nimport OpenAI from 'openai'\n// import { Availabilities } from './Availabilities'\n// import { Scores } from './Scores'\nimport { FunctionComponentsContext } from '@/contexts/functions/FunctionComponentsContext'\nimport { DefaultFunction } from './DefaultFunction'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const Fn = ({\n fn,\n runStep,\n}: Args) => {\n const functionComponentsContext = useContext(FunctionComponentsContext)\n const Component = functionComponentsContext[fn.name] || DefaultFunction\n\n return (\n // @ts-ignore-next-line\n <Component\n fn={fn}\n runStep={runStep}\n />\n )\n}\n","'use client'\nimport { createContext } from 'react'\n\ntype FunctionComponents = {\n [key: string]: React.ReactNode\n}\n\nexport const FunctionComponentsContext = createContext({} as FunctionComponents)\n","import OpenAI from 'openai'\nimport {\n PopoverRoot,\n PopoverContent,\n} from '@radix-ui/themes'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\nimport { Icon } from './Icon'\nimport { Content } from './Content'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n title: string\n}\n\nexport const FunctionBase = ({\n fn,\n runStep,\n title,\n}: Args) => (\n <PopoverRoot>\n <ToolCallBase>\n <Icon runStep={runStep} />\n <ToolCallTitle>\n {title}\n </ToolCallTitle>\n </ToolCallBase>\n <PopoverContent\n style={{\n maxHeight: '500px',\n }}\n >\n <Content fn={fn} />\n </PopoverContent>\n </PopoverRoot>\n)\n","import {\n Flex,\n Button,\n PopoverTrigger\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallBase = ({\n children,\n}: Args) => (\n <Flex\n py=\"1\"\n ml=\"-2\"\n >\n <PopoverTrigger>\n <Button\n size=\"1\"\n color=\"gold\"\n variant=\"outline\"\n style={{\n boxShadow: 'none',\n }}\n >\n {children}\n </Button>\n </PopoverTrigger>\n </Flex>\n)\n","import {\n Text,\n} from '@radix-ui/themes'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const ToolCallTitle = ({\n children,\n}: Args) => (\n <Text\n weight=\"regular\"\n >\n {children}\n </Text>\n)\n","import OpenAI from 'openai'\nimport {\n CircleIcon,\n CircleBackslashIcon,\n CheckCircledIcon,\n} from '@radix-ui/react-icons'\n\ntype Args = {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const Icon = ({\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return (\n <CheckCircledIcon />\n )\n } else if (runStep.cancelled_at || runStep.failed_at || runStep.status === 'expired') {\n return (\n <CircleBackslashIcon />\n )\n } else {\n return (\n <CircleIcon />\n )\n }\n}\n","import { useMemo } from 'react'\nimport { Code, Box } from '@radix-ui/themes'\nimport OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n}\n\nexport const Content = ({\n fn,\n}: Args) => {\n const args = useMemo(() => {\n let result = null\n\n try {\n result = JSON.parse(fn.arguments)\n } catch (error) {\n console.error(error)\n }\n\n return result\n }, [fn])\n\n const output = useMemo(() => {\n if (!fn.output) {\n return null\n }\n\n let result = null\n\n try {\n result = JSON.parse(fn.output)\n } catch (error) {\n console.error(error)\n }\n\n return result\n }, [fn])\n\n if (!args) {\n return null\n }\n\n return (\n <Code\n variant=\"ghost\"\n color=\"gold\"\n style={{\n whiteSpace: 'pre',\n wordBreak: 'break-word',\n }}\n >\n <Box>\n {args && JSON.stringify(args, null, 2)}\n </Box>\n <Box>\n {output && JSON.stringify(output, null, 2)}\n </Box>\n </Code>\n )\n}\n","import OpenAI from 'openai'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const title = ({\n fn,\n runStep,\n}: Args) => {\n if (runStep.completed_at) {\n return `Finished ${fn.name}`\n } else if (runStep.cancelled_at) {\n return `Cancelled ${fn.name}`\n } else {\n return `Calling ${fn.name}`\n }\n}\n","import OpenAI from 'openai'\nimport { FunctionBase } from '@/components/functions/FunctionBase'\nimport { title } from './lib/title'\n\ntype Args = {\n fn: OpenAI.Beta.Threads.Runs.FunctionToolCall.Function\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const DefaultFunction = ({\n fn,\n runStep,\n}: Args) => (\n <FunctionBase\n fn={fn}\n runStep={runStep}\n title={title({ runStep, fn })}\n />\n)\n","import OpenAI from 'openai'\nimport {\n Flex,\n} from '@radix-ui/themes'\n\ntype Args = {\n codeInterpreter: OpenAI.Beta.Threads.Runs.CodeToolCall.CodeInterpreter\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const CodeInterpreter = ({\n codeInterpreter,\n}: Args) => (\n <Flex>\n {codeInterpreter.input}\n </Flex>\n)\n","import {\n PopoverRoot,\n PopoverContent,\n Text,\n} from '@radix-ui/themes'\nimport {\n CircleIcon,\n} from '@radix-ui/react-icons'\nimport { ToolCallBase } from '@/components/toolCalls/ToolCallBase'\nimport { ToolCallTitle } from '@/components/toolCalls/ToolCallBase/ToolCallTitle'\n\nexport const Starting = () => (\n <PopoverRoot>\n <ToolCallBase>\n <CircleIcon />\n <ToolCallTitle>\n Starting actions\n </ToolCallTitle>\n </ToolCallBase>\n <PopoverContent\n style={{\n maxHeight: '500px',\n }}\n >\n <Text>\n Getting ready to connect to domain API\n </Text>\n </PopoverContent>\n </PopoverRoot>\n)\n","import OpenAI from 'openai'\nimport { ToolCalls } from './ToolCalls'\n\ntype Args = {\n runStep: OpenAI.Beta.Threads.Runs.RunStep\n}\n\nexport const RunStep = ({\n runStep,\n}: Args) => {\n if (runStep.step_details.type === 'tool_calls') {\n return (\n <ToolCalls\n stepDetails={runStep.step_details}\n runStep={runStep}\n />\n )\n }\n\n return null\n}\n","'use client'\nimport { createContext } from 'react'\nimport { Message } from '@/types'\n\nexport const MessageContext = createContext<{\n message: Message | null\n}>({\n message: null,\n})\n","import { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const Provider = MessageContext.Provider\n","import OpenAI from 'openai'\nimport { useRemarkSync } from 'react-remark'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\n\ntype Args = {\n content: OpenAI.Beta.Threads.Messages.MessageContentText\n}\n\nexport const TextContent = ({\n content,\n}: Args) => {\n const markdownContext = useMarkdownContext()\n\n return useRemarkSync(content.text.value, markdownContext)\n}\n","import { useContext } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\n\nexport const useMarkdownContext = () => (\n useContext(MarkdownContext)\n)\n","'use client'\nimport { createContext } from 'react'\nimport { components } from './lib/components'\n\nexport const MarkdownContext = createContext({\n remarkPlugins: [] as any[],\n rehypeReactOptions: {\n components,\n }\n})\n","import {\n Box,\n Text,\n} from '@radix-ui/themes'\n\nexport const Paragraph = ({ children }: JSX.IntrinsicElements['p']) => (\n <Box\n pb=\"3\"\n >\n <Text\n size=\"3\"\n style={{\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Text>\n </Box>\n)\n","import {\n Link as RadixLink,\n} from '@radix-ui/themes'\n\ntype Args = JSX.IntrinsicElements['a']\n\nexport const Link = ({ children, href }: Args) => (\n <RadixLink\n href={href}\n >\n {children}\n </RadixLink>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const UnorderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ul\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ul>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const OrderedList = ({ children }: JSX.IntrinsicElements['ul']) => (\n <Box\n pb=\"3\"\n asChild\n >\n <ol\n style={{\n listStylePosition: 'inside',\n }}\n >\n {children}\n </ol>\n </Box>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const ListItem = ({ children }: JSX.IntrinsicElements['li']) => (\n <Box\n pb=\"1\"\n >\n <li>\n {children}\n </li>\n </Box>\n)\n","import {\n Strong as RadixStrong,\n} from '@radix-ui/themes'\n\nexport const Strong = ({ children }: JSX.IntrinsicElements['strong']) => (\n <RadixStrong>\n {children}\n </RadixStrong>\n)\n","import {\n Box,\n} from '@radix-ui/themes'\n\nexport const Pre = ({ children }: JSX.IntrinsicElements['pre']) => (\n <Box\n style={{\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {children}\n </Box>\n)\n","import {\n Code as RadixCode,\n} from '@radix-ui/themes'\n\nexport const Code = ({ children }: JSX.IntrinsicElements['code']) => (\n <RadixCode>\n {children}\n </RadixCode>\n)\n","import { Paragraph } from './Paragraph'\nimport { Link } from './Link'\nimport { UnorderedList } from './UnorderedList'\nimport { OrderedList } from './OrderedList'\nimport { ListItem } from './ListItem'\nimport { Strong } from './Strong'\nimport { Pre } from './Pre'\nimport { Code } from './Code'\n\nexport const components = {\n p: Paragraph,\n a: Link,\n strong: Strong,\n ul: UnorderedList,\n ol: OrderedList,\n li: ListItem,\n pre: Pre,\n code: Code,\n}\n","import { Box } from '@radix-ui/themes'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { StartingSkeleton } from '@/components/skeletons/StartingSkeleton'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\n\nexport const Progress = () => {\n const { isRunActive } = useIsRunActive()\n const { latestMessage } = useLatestMessage()\n\n if (!latestMessage) return null\n if (!isRunActive) return null\n\n if (latestMessage.role === 'user') {\n return (\n <StartingSkeleton />\n )\n }\n\n return (\n <MessageGroupBase>\n <Box pl=\"5\" />\n <StartingContentSkeleton />\n </MessageGroupBase>\n )\n}\n","import {\n Skeleton,\n} from '@radix-ui/themes'\n\nexport const StartingContentSkeleton = () => (\n <Skeleton\n loading\n mt=\"1\"\n height=\"var(--space-4)\"\n width=\"var(--space-4)\"\n style={{\n borderRadius: 'var(--radius-6)',\n flexShrink: 0,\n }}\n />\n)\n","import { useContext } from 'react'\nimport { Box } from '@radix-ui/themes'\nimport { StartingContentSkeleton } from '@/components/skeletons/StartingContentSkeleton'\nimport { MessageGroupBase } from '@/components/messageGroups/MessageGroupBase'\nimport { Name } from '@/components/messageGroups/MessageGroupBase/Name'\nimport { AssistantAvatar } from '@/components/messageGroups/MessageGroupBase/AssistantAvatar'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\n\ntype Args = {\n children?: React.ReactNode\n}\n\nexport const StartingSkeleton = ({\n children,\n}: Args) => {\n const assistantNameContext = useContext(AssistantNameContext)\n\n return (\n <MessageGroupBase>\n <AssistantAvatar />\n\n <Box>\n <Name>\n {assistantNameContext}\n </Name>\n\n {children}\n\n <StartingContentSkeleton />\n </Box>\n </MessageGroupBase>\n )\n}\n","import { useMemo } from 'react'\nimport { useMessages } from '@/hooks/messages/useMessages'\n\nexport const useLatestMessage = () => {\n const props = useMessages()\n\n return useMemo(() => ({\n ...props,\n latestMessage: props.messages[0] || null,\n }), [props])\n}\n","import { useMemo } from 'react'\nimport { useIsMutating } from '@tanstack/react-query'\nimport { useLatestRun } from '@/hooks/runs/useLatestRun'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { isRunEditingMessage } from '@/lib/runs/isRunEditingMessage'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { usePollingContext } from '@/hooks/runs/usePollingContext'\n\nconst progressStatuses = [\n 'queued',\n 'in_progress',\n 'cancelling',\n 'requires_action',\n]\n\nconst stoppedStatuses = [\n 'expired',\n 'cancelled',\n 'failed',\n]\n\nconst isRunActive = ({\n pollingContext,\n latestRunProps,\n latestMessageProps,\n isMutating,\n}: {\n pollingContext: ReturnType<typeof usePollingContext>,\n latestRunProps: ReturnType<typeof useLatestRun>,\n latestMessageProps: ReturnType<typeof useLatestMessage>,\n isMutating: boolean,\n}) => {\n if (pollingContext.isPollRefetching) return true\n // @ts-ignore-next-line\n if (latestMessageProps.latestMessage?.metadata?.isBlocking) return false\n if (isMutating) return true\n if (!latestRunProps.latestRun) return false\n if (progressStatuses.includes(latestRunProps.latestRun.status)) return true\n if (stoppedStatuses.includes(latestRunProps.latestRun.status)) return false\n\n return isRunEditingMessage({ message: latestMessageProps.latestMessage })\n}\n\nexport const useIsRunActive = () => {\n const latestRunProps = useLatestRun()\n const latestMessageProps = useLatestMessage()\n const threadContext = useThreadContext()\n const pollingContext = usePollingContext()\n const isMutatingCreateRun = useIsMutating({\n mutationKey: ['createRun', threadContext.variables],\n })\n const isMutatingCreateMessage = useIsMutating({\n mutationKey: ['createMessage', threadContext.variables],\n })\n const isMutatingCreateHandleAction = useIsMutating({\n mutationKey: ['handleAction', threadContext.variables],\n })\n\n return useMemo(() => ({\n ...latestRunProps,\n isRunActive: isRunActive({\n pollingContext,\n latestRunProps,\n latestMessageProps,\n isMutating: isMutatingCreateRun > 0 || isMutatingCreateMessage > 0 || isMutatingCreateHandleAction > 0,\n }),\n }), [\n latestRunProps,\n latestMessageProps,\n pollingContext,\n isMutatingCreateRun,\n isMutatingCreateMessage,\n isMutatingCreateHandleAction,\n ])\n}\n","import { useMemo } from 'react'\nimport { useRuns } from '@/hooks/runs/useRuns'\n\nexport const useLatestRun = () => {\n const props = useRuns()\n\n return useMemo(() => ({\n ...props,\n latestRun: props.runs[0],\n }), [props])\n}\n","import { useMemo } from 'react'\nimport {\n useInfiniteQuery,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { runsQueryOptions } from '@/lib/runs/runsQueryOptions'\nimport { getRuns } from './lib/getRuns'\n\nexport const useRuns = () => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useInfiniteQuery(runsQueryOptions({\n queryClient,\n threadContext,\n superinterfaceContext,\n }))\n\n return useMemo(() => ({\n ...props,\n // @ts-ignore-next-line\n runs: getRuns({ data: props.data }),\n }), [props])\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { queryOptions } from '@/lib/threads/queryOptions'\n\nexport const runsQueryOptions = ({\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => (\n queryOptions({\n queryKeyBase: ['runs'],\n path: '/runs',\n queryClient,\n threadContext,\n superinterfaceContext,\n })\n)\n","import { InfiniteData } from '@tanstack/react-query'\nimport { RunsPage, Run } from '@/types'\n\ntype Args = {\n data: InfiniteData<RunsPage> | undefined\n}\n\nexport const getRuns = ({\n data,\n}: Args) => {\n if (!data) return []\n\n return data.pages.reduce<Run[]>((acc, page) => (\n acc.concat(page.data)\n ), [])\n}\n","import OpenAI from 'openai'\nimport _ from 'lodash'\n\ntype Args = {\n message: OpenAI.Beta.Threads.ThreadMessage\n}\n\nexport const isRunEditingMessage = ({\n message,\n}: Args) => {\n if (!message) return false\n if (message.role === 'user') return false\n if (!message.run_id) return false\n\n const hasContent = _.some(message.content, (content) => (\n content.type !== 'text' ||\n (content.type === 'text' && content.text?.value !== '')\n ))\n\n return !hasContent\n}\n","import { useContext } from 'react'\nimport { PollingContext } from '@/contexts/runs/PollingContext'\n\nexport const usePollingContext = () => (\n useContext(PollingContext)\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const PollingContext = createContext<{\n isPollRefetching: boolean\n setIsPollRefetching: (isPollRefetching: boolean) => void\n}>({\n isPollRefetching: false,\n setIsPollRefetching: () => {},\n})\n","'use client'\n\nimport { Flex } from '@radix-ui/themes'\nimport { useInfiniteScroll } from '@/hooks/misc/useInfiniteScroll'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { useLifecycle } from '@/hooks/threads/useLifecycle'\n\nexport const Root = ({\n children,\n style = {},\n}: {\n children: React.ReactNode\n style?: React.CSSProperties\n}) => {\n const {\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n } = useMessages()\n\n useLifecycle()\n\n const { containerRef, loaderRef } = useInfiniteScroll({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n })\n\n return (\n <Flex\n ref={containerRef}\n direction=\"column-reverse\"\n flexGrow=\"1\"\n style={{\n ...style,\n overflow: 'auto',\n }}\n >\n {children}\n\n {hasNextPage && (\n <Flex\n ref={loaderRef}\n />\n )}\n\n <Flex\n flexShrink=\"0\"\n flexGrow=\"1\"\n />\n </Flex>\n )\n}\n","import { useRef } from 'react'\nimport { useInView } from 'react-intersection-observer'\nimport { useThrottledEffect } from '@/hooks/misc/useThrottledEffect'\n\ntype Args = {\n isFetchingNextPage: boolean\n hasNextPage: boolean\n fetchNextPage: () => void\n}\n\nexport const useInfiniteScroll = ({\n isFetchingNextPage,\n hasNextPage,\n fetchNextPage,\n}: Args) => {\n const containerRef = useRef(null)\n\n const { ref: loaderRef, inView } = useInView({\n root: containerRef.current,\n rootMargin: '0px',\n threshold: 0.1,\n })\n\n useThrottledEffect(\n () => {\n if (isFetchingNextPage) return\n if (!inView) return\n if (!hasNextPage) return\n\n console.log('Fetching next page')\n fetchNextPage()\n },\n 500,\n [inView, isFetchingNextPage, hasNextPage, fetchNextPage]\n )\n\n return {\n containerRef,\n loaderRef,\n inView,\n }\n}\n","import _ from 'lodash'\nimport { useRef, useEffect, useCallback } from 'react'\n\nexport const useThrottledEffect = (cb: Function, delay: number, additionalDeps: any[]) => {\n const cbRef = useRef(cb)\n\n const throttledCb = useCallback(\n _.throttle((...args: any[]) => cbRef.current(...args), delay, {\n leading: true,\n trailing: true,\n }),\n [delay]\n )\n useEffect(() => {\n cbRef.current = cb\n })\n // set additionalDeps to execute effect, when other values change (not only on delay change)\n useEffect(throttledCb, [throttledCb, ...additionalDeps])\n}\n","import { useToasts } from '@/hooks/toasts/useToasts'\nimport { useQueryClient } from '@tanstack/react-query'\nimport { useEffect, useState } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useLatestRun } from '@/hooks/runs/useLatestRun'\nimport { useCreateRun } from '@/hooks/runs/useCreateRun'\nimport { isOptimistic } from '@/lib/optimistic/isOptimistic'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useManageRuns = () => {\n const { addToast } = useToasts()\n const queryClient = useQueryClient()\n const latestRunProps = useLatestRun()\n const latestMessageProps = useLatestMessage()\n const createRunProps = useCreateRun({\n onError: (error: any) => (\n addToast({ type: 'error', message: error.message })\n ),\n })\n const threadContext = useThreadContext()\n\n const [toastedErrorRunIds, setToastedErrorRunIds] = useState<string[]>([])\n\n useEffect(() => {\n if (latestRunProps.latestRun?.status !== 'failed') return\n if (toastedErrorRunIds.includes(latestRunProps.latestRun.id)) return\n\n setToastedErrorRunIds((prev) => [...prev, latestRunProps.latestRun.id])\n\n addToast({ type: 'error', message: 'AI run failed. Please try again.' })\n }, [latestRunProps, toastedErrorRunIds, addToast])\n\n useEffect(() => {\n if (createRunProps.isPending) return\n if (latestRunProps.isFetching) return\n if (latestMessageProps.isFetching) return\n\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'user') return\n if (isOptimistic({ id: latestMessageProps.latestMessage.id })) return\n if (latestRunProps.latestRun && latestRunProps.latestRun.created_at > latestMessageProps.latestMessage.created_at) {\n return\n }\n\n const isMutating = queryClient.isMutating({\n mutationKey: ['createRun', threadContext.variables],\n })\n\n if (isMutating) return\n\n // @ts-ignore-next-line\n createRunProps.createRun()\n }, [\n threadContext,\n queryClient,\n createRunProps,\n latestRunProps,\n latestMessageProps,\n ])\n\n return null\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from '@/lib/threads/mutationOptions'\nimport { onSuccess } from './lib/onSuccess'\nimport { onSettled } from './lib/onSettled'\nimport { onMutate } from './lib/onMutate'\n\nexport const useCreateRun = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation({\n onSuccess: onSuccess({ queryClient }),\n onSettled: onSettled({ queryClient }),\n onMutate: onMutate({ queryClient }),\n onError,\n ...mutationOptions({\n mutationKeyBase: ['createRun'],\n path: '/runs',\n queryClient,\n threadContext,\n superinterfaceContext,\n }),\n })\n\n return {\n ...props,\n createRun: partob(props.mutate, threadContext.variables),\n }\n}\n","import {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\ntype VariablesArgs = {\n content: string\n [key: string]: any\n}\n\nexport const mutationOptions = ({\n mutationKeyBase,\n path,\n queryClient,\n threadContext,\n superinterfaceContext,\n}: {\n mutationKeyBase: string[]\n path: string,\n queryClient: ReturnType<typeof useQueryClient>,\n threadContext: ReturnType<typeof useThreadContext>,\n superinterfaceContext: ReturnType<typeof useSuperinterfaceContext>,\n}) => {\n const mutationKey = [...mutationKeyBase, threadContext.variables]\n\n return {\n mutationFn: (variables: VariablesArgs) => (\n fetch(`${superinterfaceContext.baseUrl}${path}`, {\n method: 'POST',\n body: JSON.stringify(variables),\n credentials: 'include',\n ...(superinterfaceContext.publicApiKey ? {\n headers: {\n Authorization: `Bearer ${superinterfaceContext.publicApiKey}`,\n },\n } : {}),\n }).then(async (response) => {\n if (response.status !== 200) {\n let errorResponse\n\n try {\n console.log('response', response)\n errorResponse = await response.json() as { error: string }\n } catch (error) {\n throw new Error('Failed to fetch')\n }\n\n throw new Error(errorResponse.error)\n }\n\n return response.json()\n })\n ),\n ...threadContext.defaultOptions.mutations,\n ...queryClient.getMutationDefaults(mutationKey),\n mutationKey,\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { Response } from '@/lib/runs/createRunMutationFn'\n\ntype Variables = {\n [key: string]: any\n}\n\nexport const onSuccess = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n data: Response,\n variables: Variables,\n) => (\n queryClient.setQueryData(\n ['runs', variables],\n (prevData: any) => {\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [data.run],\n hasNextPage: false,\n lastId: data.run.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n data.run,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n }\n )\n)\n","import { QueryClient } from '@tanstack/react-query'\n\ntype Variables = {\n [key: string]: any\n}\n\nexport const onSettled = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n _data: any,\n _error: any,\n variables: Variables,\n) => {\n await queryClient.invalidateQueries({\n queryKey: ['messages', variables],\n })\n\n await queryClient.invalidateQueries({\n queryKey: ['runs', variables],\n })\n}\n","import { uid } from 'radash'\n\nexport const optimisticId = () => (\n `-${uid(24)}`\n)\n","import OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\nexport const data = (prevData: any) => {\n const run = {\n id: optimisticId(),\n object: 'thread.run' as OpenAI.Beta.Threads.Runs.Run['object'],\n created_at: +new Date(),\n assistant_id: null,\n thread_id: null,\n status: 'in_progress' as OpenAI.Beta.Threads.Runs.Run['status'],\n expires_at: +new Date() + 1000 * 60 * 60 * 24,\n cancelled_at: null,\n failed_at: null,\n completed_at: null,\n required_action: null,\n last_error: null,\n model: null,\n instructions: null,\n tools: [],\n file_ids: [],\n metadata: {},\n usage: null,\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [run],\n hasNextPage: false,\n lastId: run.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n run,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (variables: Variables) => {\n const queryKey = ['runs', variables]\n await queryClient.cancelQueries({ queryKey })\n\n const prevRuns = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data,\n )\n\n return {\n prevRuns,\n variables,\n }\n}\n","import _ from 'lodash'\n\ntype Args = {\n id: string\n}\n\nexport const isOptimistic = ({\n id,\n}: Args) => (\n _.startsWith(id, '-')\n)\n","import { useEffect } from 'react'\nimport {\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useInterval, usePrevious } from 'react-use'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { usePollingContext } from '@/hooks/runs/usePollingContext'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\nimport { refetch } from './lib/refetch'\n\nexport const usePolling = () => {\n const threadContext = useThreadContext()\n const queryClient = useQueryClient()\n const { setIsPollRefetching } = usePollingContext()\n\n const isRunActiveProps = useIsRunActive()\n\n useInterval(async () => {\n setIsPollRefetching(true)\n await refetch({\n queryClient,\n threadContext,\n })\n setIsPollRefetching(false)\n console.log('Polling...')\n },\n isRunActiveProps.isRunActive ? 3000 : null\n )\n\n const prevIsRunActive = usePrevious(isRunActiveProps.isRunActive)\n\n useEffect(() => {\n if (prevIsRunActive && !isRunActiveProps.isRunActive) {\n refetch({\n queryClient,\n threadContext,\n })\n }\n }, [queryClient, threadContext, isRunActiveProps, prevIsRunActive])\n\n return null\n}\n","import {\n QueryClient,\n} from '@tanstack/react-query'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\ntype Args = {\n queryClient: QueryClient\n threadContext: ReturnType<typeof useThreadContext>,\n}\n\nexport const refetch = async ({\n queryClient,\n threadContext,\n}: Args) => {\n await queryClient.invalidateQueries({\n queryKey: threadContext.defaultOptions.queries.queryKey ?? ['messages', threadContext.variables],\n })\n\n await queryClient.invalidateQueries({\n queryKey: threadContext.defaultOptions.queries.queryKey ?? ['runs', threadContext.variables],\n })\n}\n","import { useQueryClient } from '@tanstack/react-query'\nimport { useEffect } from 'react'\nimport { useLatestRun } from '@/hooks/runs/useLatestRun'\nimport { useHandleAction } from '@/hooks/actions/useHandleAction'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\n\nexport const useManageActions = () => {\n const queryClient = useQueryClient()\n const threadContext = useThreadContext()\n const latestRunProps = useLatestRun()\n const handleActionProps = useHandleAction()\n\n useEffect(() => {\n if (handleActionProps.isPending) return\n if (latestRunProps.isFetching) return\n if (!latestRunProps.latestRun) return\n if (latestRunProps.latestRun.status !== 'requires_action') return\n\n const isMutating = queryClient.isMutating({\n mutationKey: ['handleAction', threadContext.variables],\n })\n\n if (isMutating) return\n\n console.log('requires action', {\n latestRunProps,\n })\n\n handleActionProps.handleAction({\n latestRun: latestRunProps.latestRun,\n })\n }, [\n handleActionProps,\n latestRunProps,\n ])\n\n return null\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from '@/lib/threads/mutationOptions'\nimport { onSettled } from './lib/onSettled'\n\nexport const useHandleAction = () => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation({\n onSettled: onSettled({ queryClient }),\n ...mutationOptions({\n mutationKeyBase: ['handleAction'],\n path: '/actions',\n queryClient,\n threadContext,\n superinterfaceContext,\n }),\n })\n\n return {\n ...props,\n handleAction: partob(props.mutate, threadContext.variables),\n }\n}\n","import { QueryClient } from '@tanstack/react-query'\nimport { Response } from '@/lib/actions/handleActionMutationFn'\n\ntype Variables = {\n [key: string]: any\n}\n\nexport const onSettled = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n _data: Response,\n _error: any,\n variables: Variables,\n) => {\n await queryClient.invalidateQueries({\n queryKey: ['messages', variables],\n })\n\n await queryClient.invalidateQueries({\n queryKey: ['runs', variables],\n })\n}\n","import { useManageRuns } from '@/hooks/runs/useManageRuns'\nimport { usePolling } from '@/hooks/runs/usePolling'\nimport { useManageActions } from '@/hooks/actions/useManageActions'\n\nexport const useLifecycle = () => {\n useManageRuns()\n useManageActions()\n usePolling()\n\n return null\n}\n","'use client'\nimport { useMessages } from '@/hooks/messages/useMessages'\nimport { MessagesSkeleton } from '@/components/skeletons/MessagesSkeleton'\n\nexport const NextPageSkeleton = () => {\n const {\n hasNextPage,\n } = useMessages()\n\n if (!hasNextPage) {\n return null\n }\n\n return (\n <MessagesSkeleton />\n )\n}\n","import {\n Flex,\n Text,\n} from '@radix-ui/themes'\nimport { Submit } from './Submit'\nimport { Root } from './Root'\nimport { Field } from './Field'\n\nexport const MessageForm = () => (\n <Root>\n <Field.Root>\n <Text\n size=\"2\"\n style={{\n flexGrow: 1,\n }}\n >\n <Flex\n flexGrow=\"1\"\n direction=\"column\"\n >\n <Field.Control />\n </Flex>\n </Text>\n\n <Flex\n flexShrink=\"0\"\n align=\"end\"\n >\n <Submit />\n </Flex>\n </Field.Root>\n </Root>\n)\n\nMessageForm.Root = Root\nMessageForm.Field = Field\nMessageForm.Submit = Submit\n","'use client'\nimport {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\n\nexport const Submit = () => {\n const { isDisabled, isLoading } = useMessageFormContext()\n\n return (\n <Button\n type=\"submit\"\n radius=\"large\"\n disabled={isDisabled || isLoading}\n >\n <Spinner loading={isLoading}>\n <ArrowUpIcon />\n </Spinner>\n </Button>\n )\n}\n","import { useContext } from 'react'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\n\nexport const useMessageFormContext = () => (\n useContext(MessageFormContext)\n)\n","'use client'\nimport { createContext } from 'react'\n\nexport const MessageFormContext = createContext({\n isDisabled: false,\n isLoading: false,\n})\n","import { useMemo } from 'react'\nimport { useForm, SubmitHandler, FormProvider } from 'react-hook-form'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { formOptions } from './lib/formOptions'\nimport { MessageFormContext } from '@/contexts/messages/MessageFormContext'\nimport { useToasts } from '@/hooks/toasts/useToasts'\n\ntype Inputs = {\n content: string\n}\n\nexport const Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const formProps = useForm<Inputs>(formOptions)\n\n const {\n handleSubmit,\n formState: { isSubmitting },\n reset,\n } = formProps\n\n const { isRunActive } = useIsRunActive()\n\n const isLoading = useMemo(() => (\n isRunActive || isSubmitting\n ), [\n isRunActive,\n isSubmitting,\n ])\n\n const { addToast } = useToasts()\n\n const { createMessage } = useCreateMessage({\n onError: (error: any) => (\n addToast({ type: 'error', message: error.message })\n ),\n })\n\n const onSubmit: SubmitHandler<Inputs> = async (data) => {\n reset()\n // @ts-ignore-next-line\n await createMessage({ content: data.content })\n }\n\n const { latestMessage } = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessage?.metadata?.isBlocking\n ), [latestMessage, isLoading])\n\n return (\n <MessageFormContext.Provider value={{ isDisabled, isLoading }}>\n <FormProvider {...formProps}>\n <form\n onSubmit={handleSubmit(onSubmit)}\n >\n {children}\n </form>\n </FormProvider>\n </MessageFormContext.Provider>\n )\n}\n","import { partob } from 'radash'\nimport {\n useMutation,\n useQueryClient,\n} from '@tanstack/react-query'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { useThreadContext } from '@/hooks/threads/useThreadContext'\nimport { mutationOptions } from '@/lib/threads/mutationOptions'\nimport { onMutate } from './lib/mutationOptions/onMutate'\nimport { onSettled } from './lib/mutationOptions/onSettled'\n\nexport const useCreateMessage = ({\n onError = () => {},\n}: {\n onError?: (error: unknown) => void\n} = {\n onError: () => {},\n}) => {\n const queryClient = useQueryClient()\n const superinterfaceContext = useSuperinterfaceContext()\n const threadContext = useThreadContext()\n\n const props = useMutation({\n onMutate: onMutate({ queryClient }),\n onSettled: onSettled({ queryClient }),\n onError,\n ...mutationOptions({\n mutationKeyBase: ['createMessage'],\n path: '/messages',\n queryClient,\n threadContext,\n superinterfaceContext,\n }),\n })\n\n return {\n ...props,\n createMessage: partob(props.mutateAsync, threadContext.variables),\n }\n}\n","import { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { data } from './data'\n\ntype Variables = {\n content: string\n [key: string]: any\n}\n\nexport const onMutate = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n newMessage: Variables,\n) => {\n const queryKey = ['messages', omit(newMessage, ['content'])]\n await queryClient.cancelQueries({ queryKey })\n\n const prevMessages = queryClient.getQueryData(queryKey)\n\n queryClient.setQueryData(\n queryKey,\n data({ newMessage })\n )\n\n return {\n prevMessages,\n newMessage,\n }\n}\n","import OpenAI from 'openai'\nimport { optimisticId } from '@/lib/optimistic/optimisticId'\n\ntype Args = {\n newMessage: {\n content: string\n }\n}\n\nexport const data = ({\n newMessage,\n}: Args) => (prevData: any) => {\n const message = {\n id: optimisticId(),\n role: 'user' as OpenAI.Beta.Threads.Messages.ThreadMessage['role'],\n created_at: +new Date(),\n object: 'thread.message' as OpenAI.Beta.Threads.Messages.ThreadMessage['object'],\n content: [\n {\n type: 'text',\n text: {\n annotations: [],\n value: newMessage.content,\n },\n } as OpenAI.Beta.Threads.Messages.MessageContentText,\n ],\n run_id: null,\n assistant_id: null,\n thread_id: null,\n file_ids: [],\n metadata: {},\n runSteps: [],\n }\n\n if (!prevData) {\n return {\n pageParams: [],\n pages: [\n {\n data: [message],\n hasNextPage: false,\n lastId: message.id,\n },\n ],\n }\n }\n\n const [latestPage, ...pagesRest] = prevData.pages\n\n return {\n ...prevData,\n pages: [\n {\n ...latestPage,\n data: [\n message,\n ...latestPage.data,\n ],\n },\n ...pagesRest,\n ],\n }\n}\n","import { omit } from 'radash'\nimport { QueryClient } from '@tanstack/react-query'\nimport { Response } from '@/lib/messages/createMessageMutationFn'\n\ntype Variables = {\n content: string\n [key: string]: any\n}\n\nexport const onSettled = ({\n queryClient,\n}: {\n queryClient: QueryClient,\n}) => async (\n _data: Response,\n _error: any,\n variables: Variables,\n) => {\n await queryClient.invalidateQueries({\n queryKey: ['messages', omit(variables, ['content'])],\n })\n\n await queryClient.invalidateQueries({\n queryKey: ['runs', omit(variables, ['content'])],\n })\n}\n","import { z } from 'zod'\nimport { zodResolver } from '@hookform/resolvers/zod'\n\nconst schema = z.object({\n content: z.string().min(1),\n})\n\nexport const formOptions = {\n resolver: zodResolver(schema),\n}\n","'use client'\nimport { usePrevious } from 'react-use'\nimport { useContext, useMemo, useRef, useEffect } from 'react'\nimport { AssistantNameContext } from '@/contexts/assistants/AssistantNameContext'\nimport { TextareaBase } from '@/components/textareas/TextareaBase'\nimport { useFormContext } from 'react-hook-form'\nimport {\n Container,\n Flex,\n} from '@radix-ui/themes'\nimport { useMessageFormContext } from '@/hooks/messages/useMessageFormContext'\n\nconst Root = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const {\n formState: {\n errors,\n },\n } = useFormContext()\n\n return (\n <Container\n size=\"2\"\n flexGrow=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n direction=\"column\"\n flexShrink=\"0\"\n >\n <Flex\n style={{\n borderRadius: 'var(--radius-2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n borderColor: errors.content ? 'var(--red-9)' : 'var(--gray-5)',\n ...(errors.content ? { backgroundColor: 'var(--red-2)' } : {}),\n }}\n p=\"2\"\n pl=\"4\"\n >\n {children}\n </Flex>\n </Flex>\n </Flex>\n </Container>\n )\n}\n\nconst Control = () => {\n const assistantNameContext = useContext(AssistantNameContext)\n const {\n register,\n } = useFormContext()\n\n const { isDisabled, isLoading } = useMessageFormContext()\n\n const isSubmitDisabled = useMemo(() => (\n isDisabled || isLoading\n ), [isDisabled, isLoading])\n\n const isDisabledPrevious = usePrevious(isDisabled)\n\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const textareaProps = register('content')\n\n useEffect(() => {\n if (isDisabled) return\n if (!isDisabledPrevious) return\n if (!textareaRef.current) return\n\n textareaRef.current.focus()\n }, [isDisabled, isDisabledPrevious, textareaProps])\n\n return (\n <TextareaBase\n minRows={1}\n placeholder={`Message ${assistantNameContext}...`}\n disabled={isDisabled}\n onKeyDown={(e: any) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n\n if (isSubmitDisabled) return\n e.currentTarget.form?.requestSubmit()\n }\n }}\n {...textareaProps}\n ref={(e: any) => {\n textareaProps.ref(e)\n // @ts-ignore-next-line\n textareaRef.current = e\n }}\n />\n )\n}\n\nexport const Field = {\n Root,\n Control,\n}\n","import { forwardRef } from 'react'\nimport TextareaAutosize from 'react-textarea-autosize'\n\nconst UPSCALE_RATIO = 16 / 14\n\ntype Props = React.ComponentProps<typeof TextareaAutosize>\n\nexport const TextareaBase = forwardRef(function TextareaBase(props: Props, ref) {\n return (\n <>\n <style>\n {`.superinterface-textarea { min-height: inherit; height: 30px; }\n.superinterface-textarea::placeholder { color: var(--gray-a10); }`}\n </style>\n\n <TextareaAutosize\n // @ts-ignore-next-line\n ref={ref}\n className=\"rt-reset superinterface-textarea\"\n style={{\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n resize: 'none',\n color: 'var(--gray-12)',\n fontSize: `${14 * UPSCALE_RATIO}px`,\n lineHeight: `${24 * UPSCALE_RATIO}px`,\n transform: `scale(${1 / UPSCALE_RATIO})`,\n margin: `0 ${(-100 * UPSCALE_RATIO + 100) / 2}%`,\n width: `${100 * UPSCALE_RATIO}%`,\n maxWidth: `${100 * UPSCALE_RATIO}%`,\n flexGrow: 1,\n display: 'flex',\n }}\n {...props}\n />\n </>\n )\n})\n","import { Flex } from '@radix-ui/themes'\nimport {\n Provider,\n Args as ThreadProviderArgs,\n} from '@/components/threads/Thread/Provider'\n\nexport type Args = ThreadProviderArgs\n\nexport const Root = ({\n children,\n ...rest\n}: Args) => (\n <Provider {...rest}>\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n >\n {children}\n </Flex>\n </Provider>\n)\n","import { useState } from 'react'\nimport { PollingContext } from '@/contexts/runs/PollingContext'\n\nexport const PollingProvider = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const [isPollRefetching, setIsPollRefetching] = useState(false)\n\n return (\n <PollingContext.Provider\n value={{\n isPollRefetching,\n setIsPollRefetching,\n }}\n >\n {children}\n </PollingContext.Provider>\n )\n}\n","'use client'\n\nimport { SuperinterfaceProvider } from '@/components/core/SuperinterfaceProvider'\nimport type { Args as SuperinterfaceProviderArgs } from '@/components/core/SuperinterfaceProvider'\nimport { PollingProvider } from '@/components/runs/PollingProvider'\n\nexport type Args = SuperinterfaceProviderArgs\n\nexport const Provider = (args: Args) => (\n <PollingProvider>\n <SuperinterfaceProvider {...args} />\n </PollingProvider>\n)\n","import { Messages } from '@/components/threads/Thread/Messages'\nimport { MessageForm } from '@/components/threads/Thread/MessageForm'\nimport { Root, Args as RootArgs } from '@/components/threads/Thread/Root'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const Thread = (props: Args) => (\n <Root {...props}>\n <Messages />\n <MessageForm />\n </Root>\n)\n\nThread.Root = Root\nThread.Messages = Messages\nThread.MessageForm = MessageForm\n","import { useContext } from 'react'\nimport { MessageContext } from '@/contexts/messages/MessageContext'\n\nexport const useMessageContext = () => (\n useContext(MessageContext)\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { Provider } from '@/components/threads/ThreadDialog/Provider'\nimport { ToastsProvider } from '@/components/toasts/ToastsProvider'\n\ntype Args = {\n children: React.ReactNode\n style?: React.CSSProperties\n}\n\nexport const Root = ({\n children,\n style = {},\n}: Args) => (\n <ToastsProvider>\n <Provider>\n <Flex\n direction=\"column\"\n justify=\"end\"\n align=\"end\"\n position=\"fixed\"\n style={{\n bottom: '24px',\n right: '24px',\n top: '24px',\n zIndex: 9999999999,\n ...style,\n }}\n >\n {children}\n </Flex>\n </Provider>\n </ToastsProvider>\n)\n","import { useState } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Provider = ({\n children,\n}: Args) => {\n const threadDialogContext = useThreadDialogContext()\n const [isOpen, setIsOpen] = useState<boolean>(threadDialogContext.isOpen)\n\n return (\n <ThreadDialogContext.Provider\n value={{\n isOpen,\n setIsOpen,\n }}\n >\n {children}\n </ThreadDialogContext.Provider>\n )\n}\n","'use client'\nimport { createContext, Dispatch, SetStateAction } from 'react'\n\nexport const ThreadDialogContext = createContext<{\n isOpen: boolean\n setIsOpen: Dispatch<SetStateAction<boolean>>\n}>({\n isOpen: false,\n setIsOpen: () => {},\n})\n","import { useContext } from 'react'\nimport { ThreadDialogContext } from '@/contexts/threads/ThreadDialogContext'\n\nexport const useThreadDialogContext = () => (\n useContext(ThreadDialogContext)\n)\n","import { useState, useCallback } from 'react'\nimport * as Toast from '@radix-ui/react-toast'\nimport { ToastsContext } from '@/contexts/toasts/ToastsContext'\nimport { CustomToast } from './CustomToast'\nimport { Toast as ToastType } from '@/types'\n\nexport const ToastsProvider = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const [toasts, setToasts] = useState<ToastType[]>([])\n const addToast = useCallback((toast: ToastType) => (\n setToasts((prevToasts) => [\n ...prevToasts,\n toast,\n ])\n ), [])\n\n return (\n <ToastsContext.Provider\n value={{\n toasts,\n addToast,\n }}\n >\n <Toast.Provider>\n {children}\n\n {Array.from(toasts).map((toast: ToastType, index: number) => (\n <CustomToast\n key={index}\n toast={toast}\n />\n ))}\n\n <Toast.Viewport\n style={{\n position: 'absolute',\n bottom: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n padding: 'var(--space-5)',\n gap: 'var(--space-3)',\n width: '390px',\n maxWidth: '100vw',\n margin: 0,\n listStyle: 'none',\n zIndex: 99999999999999,\n outline: 'none',\n }}\n />\n </Toast.Provider>\n </ToastsContext.Provider>\n )\n}\n","import * as Toast from '@radix-ui/react-toast'\nimport {\n Card,\n Text,\n Flex,\n} from '@radix-ui/themes'\nimport {\n CheckCircledIcon,\n CrossCircledIcon,\n} from '@radix-ui/react-icons'\nimport { Toast as ToastType } from '@/types'\n\nexport const CustomToast = ({\n toast,\n}: {\n toast: ToastType,\n}) => (\n <Toast.Root>\n <Card>\n <Toast.Title>\n <Flex>\n <Flex\n pr=\"2\"\n height=\"14px\"\n align=\"center\"\n >\n {toast.type === 'success' ? (\n <CheckCircledIcon\n color=\"var(--mint-9)\"\n />\n ) : (\n <CrossCircledIcon\n color=\"var(--red-9)\"\n />\n )}\n </Flex>\n <Text\n weight=\"medium\"\n size=\"1\"\n >\n {toast.message}\n </Text>\n </Flex>\n </Toast.Title>\n </Card>\n </Toast.Root>\n)\n","import {\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\n\ntype Args = {\n children: React.ReactNode\n}\n\nexport const Trigger = ({\n children,\n}: Args) => {\n const { setIsOpen } = useThreadDialogContext()\n\n return (\n <Flex\n onClick={() => setIsOpen((prev) => !prev)}\n direction=\"column\"\n flexShrink=\"0\"\n >\n {children}\n </Flex>\n )\n}\n","import {\n IconButton,\n} from '@radix-ui/themes'\nimport {\n ChatBubbleIcon,\n} from '@radix-ui/react-icons'\n\nexport const Button = () => (\n <IconButton\n size=\"4\"\n radius=\"full\"\n >\n <ChatBubbleIcon />\n </IconButton>\n)\n","import {\n Card,\n Inset,\n Flex,\n} from '@radix-ui/themes'\nimport { useThreadDialogContext } from '@/hooks/threads/useThreadDialogContext'\nimport { Thread } from '@/components/threads/Thread'\n\ntype Args = {\n children: React.ReactNode\n}\n\nconst Root = ({\n children,\n}: Args) => {\n const { isOpen } = useThreadDialogContext()\n if (!isOpen) return null\n\n return (\n <Card\n mb=\"3\"\n style={{\n display: 'flex',\n flexGrow: 1,\n width: '100vw',\n maxWidth: '400px',\n maxHeight: '720px',\n }}\n >\n <Inset\n clip=\"padding-box\"\n side=\"all\"\n pb=\"current\"\n style={{\n display: 'flex',\n flexGrow: 1,\n }}\n >\n {children}\n </Inset>\n </Card>\n )\n}\n\nexport const Content = () => (\n <Root>\n <Thread.Root>\n <Thread.Messages\n style={{\n paddingTop: 'var(--space-5)',\n paddingRight: 'var(--space-5)',\n paddingLeft: 'var(--space-5)',\n }}\n />\n <Flex\n direction=\"column\"\n pl=\"5\"\n pr=\"5\"\n pb=\"3\"\n flexShrink=\"0\"\n >\n <Thread.MessageForm />\n </Flex>\n </Thread.Root>\n </Root>\n)\n\nContent.Root = Root\n","import { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Button } from '@/components/threads/ThreadDialog/Button'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const ThreadDialog = () => (\n <Root>\n <Content />\n <Trigger>\n <Button />\n </Trigger>\n </Root>\n)\n\nThreadDialog.Root = Root\nThreadDialog.Trigger = Trigger\nThreadDialog.Button = Button\nThreadDialog.Content = Content\n","'use client'\n\nimport 'regenerator-runtime/runtime'\n// import { useEffect, useRef } from 'react'\nimport { Flex } from '@radix-ui/themes'\nimport _ from 'lodash'\n// import SpeechRecognition, { useSpeechRecognition } from 'react-speech-recognition'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\nimport { useLifecycle } from '@/hooks/threads/useLifecycle'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { usePermission } from 'react-use'\nimport { blobToData } from './lib/blobToData'\nimport { useStatus } from '@/hooks/audioThreads/useStatus'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport type Args = {\n children: React.ReactNode\n}\n\nexport const Root = ({\n children,\n}: Args) => {\n useLifecycle()\n\n const createMessageProps = useCreateMessage()\n\n // const {\n // transcript,\n // resetTranscript,\n // } = useSpeechRecognition()\n\n // const transcriptRef = useRef(transcript)\n //\n // useEffect(() => {\n // transcriptRef.current = transcript\n // }, [transcript])\n\n const recorderProps = useRecorder({\n isStopOnSilence: true,\n onStart: async () => {\n console.log('start')\n // resetTranscript()\n // // @ts-ignore-next-line\n // SpeechRecognition.default.startListening({ continuous: true })\n },\n onStop: async (_event: any, chunks: BlobPart[]) => {\n // console.log({ transcript: transcriptRef.current })\n // return createMessageProps.createMessage({\n // // @ts-ignore-next-line\n // content: transcriptRef.current,\n // })\n\n // @ts-ignore-next-line\n const blob = new Blob(chunks, { type: chunks[0].type })\n const audioContent = await blobToData(blob)\n\n return createMessageProps.createMessage({\n // @ts-ignore-next-line\n audioContent,\n })\n },\n })\n\n const microphonePermission = usePermission({ name: 'microphone' })\n\n const messageAudioProps = useMessageAudio({\n onEnd: () => {\n if (microphonePermission === 'granted') {\n recorderProps.start()\n }\n }\n })\n\n const { status } = useStatus({\n recorderProps,\n createMessageProps,\n messageAudioProps,\n })\n\n return (\n <AudioThreadContext.Provider\n value={{\n status,\n recorderProps,\n messageAudioProps,\n }}\n >\n <Flex\n direction=\"column\"\n flexGrow=\"1\"\n p=\"5\"\n >\n {children}\n </Flex>\n </AudioThreadContext.Provider>\n )\n}\n","'use client'\nimport { createContext } from 'react'\nimport { statusMessages } from '@/hooks/audioThreads/useStatus/lib/statusMessages'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\n\nexport const AudioThreadContext = createContext<{\n status: keyof typeof statusMessages\n recorderProps: ReturnType<typeof useRecorder>\n messageAudioProps: ReturnType<typeof useMessageAudio>\n}>({\n status: 'idle',\n recorderProps: {\n status: 'idle',\n start: async () => {},\n stop: async () => {},\n pause: async () => {},\n resume: async () => {},\n visualizationAnalyser: null,\n },\n messageAudioProps: {\n visualizationAnalyser: null,\n playing: false,\n paused: false,\n isReady: false,\n play: async () => {},\n pause: async () => {},\n },\n})\n","export const blobToData = (blob: Blob) => (\n new Promise((resolve) => {\n const reader = new FileReader()\n reader.onloadend = () => resolve(reader.result)\n reader.readAsDataURL(blob)\n })\n)\n","import { useMemo } from 'react'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\nimport { useRecorder } from '@/hooks/audioThreads/useRecorder'\nimport { useMessageAudio } from '@/hooks/audioThreads/useMessageAudio'\nimport { statusMessages } from './lib/statusMessages'\n\ntype Args = {\n messageAudioProps: ReturnType<typeof useMessageAudio>\n recorderProps: ReturnType<typeof useRecorder>\n createMessageProps: ReturnType<typeof useCreateMessage>\n}\n\nexport const useStatus = ({\n messageAudioProps,\n recorderProps,\n createMessageProps,\n}: Args) => {\n const isRunActiveProps = useIsRunActive()\n\n const status = useMemo((): keyof typeof statusMessages => {\n if (recorderProps.status === 'recording') return 'recording'\n if (createMessageProps.isPending) return 'creatingMessage'\n if (isRunActiveProps.isRunActive) return 'runActive'\n\n if (messageAudioProps.playing) return 'playing'\n if (messageAudioProps.paused) return 'playerPaused'\n if (!messageAudioProps.isReady) return 'loading'\n if (recorderProps.status === 'idle') return 'idle'\n if (recorderProps.status === 'paused') return 'recorderPaused'\n\n return 'loading'\n }, [\n messageAudioProps,\n recorderProps,\n createMessageProps,\n isRunActiveProps,\n ])\n\n return {\n status,\n }\n}\n","import dayjs, { Dayjs } from 'dayjs'\nimport { useAudioCapture, UseAudioCaptureProps } from 'use-audio-capture'\nimport { useMemo, useRef, useState, useCallback, useEffect } from 'react'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useInterval } from 'react-use'\nimport { AudioEngine } from '@/types'\n\ntype Args = UseAudioCaptureProps & {\n isStopOnSilence: boolean\n}\n\nexport const useRecorder = ({\n isStopOnSilence,\n onStart,\n onStop,\n}: Args) => {\n const [silenceStart, setSilenceStart] = useState<Dayjs | null>(null)\n const [noiseStart, setNoiseStart] = useState<Dayjs | null>(null)\n const [mediaStream, setMediaStream] = useState<MediaStream | null>(null)\n const [status, setStatus] = useState<'idle' | 'recording' | 'stopped' | 'paused'>('idle')\n const startAudioPlayer = useAudioPlayer()\n const endAudioPlayer = useAudioPlayer()\n const [isLoaded, setIsLoaded] = useState(false)\n\n useEffect(() => {\n if (isLoaded) return\n setIsLoaded(true)\n\n // startAudioPlayer.load('/sounds/warning.wav', {\n // html5: true,\n // })\n // endAudioPlayer.load('/sounds/success.wav', {\n // html5: true,\n // })\n }, [isLoaded, startAudioPlayer, endAudioPlayer])\n\n const audioCaptureProps = useAudioCapture({\n onStart: (event, opts) => {\n // startAudioPlayer.play()\n setStatus('recording')\n setMediaStream(opts.mediaStream)\n isInited.current = false\n if (onStart) onStart(event, opts)\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onStop: async (...args) => {\n // endAudioPlayer.play()\n setStatus('stopped')\n if (onStop) await onStop(...args)\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onPause: () => {\n setStatus('paused')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n onResume: () => {\n setStatus('recording')\n\n setSilenceStart(null)\n setNoiseStart(null)\n },\n })\n\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n const isInited = useRef(false)\n\n useEffect(() => {\n if (!mediaStream) return\n if (isInited.current) return\n isInited.current = true\n\n const audioContext = new AudioContext()\n\n setAudioEngine({\n source: audioContext.createMediaStreamSource(mediaStream),\n audioContext,\n })\n }, [isInited, mediaStream])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const silenceAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n result.minDecibels = -45\n\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n const handleSilence = useCallback(() => {\n if (!silenceAnalyser) return\n\n const frequencyData = new Uint8Array(silenceAnalyser.frequencyBinCount)\n silenceAnalyser.getByteFrequencyData(frequencyData)\n\n const isSilent = frequencyData.every((f) => f === 0)\n\n setSilenceStart((silenceStart: Dayjs | null) => {\n if (isSilent) return silenceStart || dayjs()\n\n return null\n })\n\n setNoiseStart((noiseStart: Dayjs | null) => {\n if (isSilent) return noiseStart\n\n return noiseStart || dayjs()\n })\n\n requestAnimationFrame(() => handleSilence())\n }, [silenceAnalyser, setNoiseStart, setSilenceStart])\n\n useEffect(() => {\n if (!isStopOnSilence) return\n\n requestAnimationFrame(() => handleSilence())\n }, [handleSilence, isStopOnSilence])\n\n useInterval(() => {\n if (!isStopOnSilence) return\n if (status !== 'recording') return\n if (!silenceStart) return\n if (!noiseStart) return\n if (!silenceStart.isBefore(dayjs().subtract(1, 'second'))) return\n\n audioCaptureProps.stop()\n }, 100)\n\n return {\n ...audioCaptureProps,\n status,\n visualizationAnalyser,\n }\n}\n","import { useMemo, useRef, useState, useEffect } from 'react'\nimport { Howler } from 'howler'\nimport { useAudioPlayer } from 'react-use-audio-player'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useSuperinterfaceContext } from '@/hooks/core/useSuperinterfaceContext'\nimport { AudioEngine } from '@/types'\nimport { input as getInput } from './lib/input'\nimport { isHtmlAudioSupported } from './lib/isHtmlAudioSupported'\n\ntype Args = {\n onEnd: () => void\n}\n\nexport const useMessageAudio = ({\n onEnd,\n}: Args) => {\n const [playedMessageIds, setPlayedMessageIds] = useState<string[]>([])\n const audioPlayer = useAudioPlayer()\n const superinterfaceContext = useSuperinterfaceContext()\n\n const latestMessageProps = useLatestMessage()\n\n useEffect(() => {\n if (audioPlayer.playing) return\n if (!latestMessageProps.latestMessage) return\n if (latestMessageProps.latestMessage.role !== 'assistant') return\n if (playedMessageIds.includes(latestMessageProps.latestMessage.id)) return\n\n const input = getInput({\n message: latestMessageProps.latestMessage,\n })\n\n if (!input) return\n\n setPlayedMessageIds((prev) => [...prev, latestMessageProps.latestMessage.id])\n\n audioPlayer.load(`${superinterfaceContext.baseUrl}/tts?input=${input}`, {\n format: 'mp3',\n autoplay: true,\n html5: isHtmlAudioSupported,\n onend: onEnd,\n xhr: {\n ...(superinterfaceContext.publicApiKey ? {\n headers: {\n Authorization: `Bearer ${superinterfaceContext.publicApiKey}`,\n },\n } : {}),\n withCredentials: true,\n }\n })\n }, [\n superinterfaceContext,\n latestMessageProps,\n audioPlayer,\n playedMessageIds,\n onEnd,\n ])\n\n\n const isInited = useRef(false)\n const [audioEngine, setAudioEngine] = useState<AudioEngine | null>(null)\n\n useEffect(() => {\n if (!audioPlayer.playing) return\n if (isInited.current) return\n isInited.current = true\n\n if (isHtmlAudioSupported) {\n const audioContext = new AudioContext()\n setAudioEngine({\n // @ts-ignore-next-line\n source: audioContext.createMediaElementSource(Howler._howls[0]._sounds[0]._node),\n audioContext,\n })\n } else {\n setAudioEngine({\n source: Howler.masterGain,\n audioContext: Howler.ctx,\n })\n }\n }, [audioPlayer, isInited])\n\n const visualizationAnalyser = useMemo(() => {\n if (!audioEngine) return null\n\n const result = audioEngine.audioContext.createAnalyser()\n\n audioEngine.source.connect(audioEngine.audioContext.destination)\n audioEngine.source.connect(result)\n return result\n }, [audioEngine])\n\n return {\n ...audioPlayer,\n visualizationAnalyser,\n }\n}\n","import OpenAI from 'openai'\nimport { isEmpty } from 'radash'\nimport { Message } from '@/types'\n\ntype Args = {\n message: Message\n}\n\nexport const input = ({\n message,\n}: Args) => {\n const textContents = message.content.filter((c) => c.type === 'text') as OpenAI.Beta.Threads.Messages.MessageContentText[]\n const result = textContents.map((c) => c.text.value).join(' ')\n\n if (isEmpty(result)) return null\n\n return result\n}\n","import { detect } from 'detect-browser'\n\nconst unsupportedNames = [\n 'safari',\n 'ios',\n]\n\nexport const isHtmlAudioSupported = !unsupportedNames.includes(detect()?.name || '')\n","import _ from 'lodash'\nimport { Flex } from '@radix-ui/themes'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\n\nexport const Visualization = () => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n mb=\"3\"\n flexGrow=\"1\"\n >\n <Flex\n align=\"center\"\n justify=\"center\"\n height=\"200px\"\n width=\"200px\"\n style={{\n backgroundColor: `var(--${audioThreadContext.status === 'playing' ? 'mint' : 'gray'}-4)`,\n borderRadius: '9999px',\n }}\n >\n </Flex>\n </Flex>\n )\n}\n // className={`transition duration-300 ${audioThreadContext.status === 'playing' ? 'bg-mint-4' : 'bg-gray-4'}`}\n// import { Visualizer } from '@/components/audio/Visualizer'\n// <Visualizer\n// visualizationAnalyser={visualizationAnalyser}\n// bgColorClassName={audioThreadContext.status === 'playing' ? 'bg-mint-12' : 'bg-gray-11'}\n// />\n","import { useContext } from 'react'\nimport { AudioThreadContext } from '@/contexts/threads/AudioThreadContext'\n\nexport const useAudioThreadContext = () => (\n useContext(AudioThreadContext)\n)\n","import { SpeakerModerateIcon } from '@radix-ui/react-icons'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { Visualizer } from './Visualizer'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\nimport { ActionButton } from './ActionButton'\n\nexport const Form = () => {\n const audioThreadContext = useAudioThreadContext()\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n >\n <Flex\n pb=\"3\"\n align=\"center\"\n >\n <Flex\n ml=\"-5\"\n mr=\"2\"\n align=\"center\"\n >\n <SpeakerModerateIcon\n style={{\n color: `var(--${audioThreadContext.status === 'recording' ? 'mint' : 'gray'}-12)`,\n }}\n />\n </Flex>\n\n <Flex\n px=\"2\"\n py=\"1\"\n style= {{\n backgroundColor: `var(--${audioThreadContext.status === 'recording' ? 'mint' : 'gray'}-4)`,\n borderRadius: 'var(--radius-6)',\n }}\n >\n <Visualizer />\n </Flex>\n </Flex>\n\n <ActionButton />\n </Flex>\n )\n}\n","import _ from 'lodash'\nimport {\n Flex,\n Grid,\n} from '@radix-ui/themes'\nimport { useState, useEffect, useCallback } from 'react'\nimport { cluster } from 'radash'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\n\nconst barCount = 4\n\nexport const Visualizer = () => {\n const audioThreadContext = useAudioThreadContext()\n const visualizationAnalyser = audioThreadContext.recorderProps.visualizationAnalyser\n const [emptyVisualizer] = useState(() => new AudioContext().createAnalyser())\n const [barHeights, setBarHeights] = useState<number[]>([])\n\n const draw = useCallback(({ visualizationAnalyser }: { visualizationAnalyser: AnalyserNode }) => {\n const frequencyData = new Uint8Array(visualizationAnalyser.frequencyBinCount / 15)\n visualizationAnalyser.getByteFrequencyData(frequencyData)\n\n // @ts-ignore-next-line\n const clusteredFrequencyData = cluster(frequencyData, frequencyData.length / barCount)\n\n setBarHeights(\n clusteredFrequencyData.map((frequencyDataCluster) => (\n _.mean(frequencyDataCluster) / 255 * 100\n ))\n )\n\n requestAnimationFrame(() => draw({ visualizationAnalyser }))\n }, [])\n\n useEffect(() => {\n draw({ visualizationAnalyser: visualizationAnalyser || emptyVisualizer })\n }, [draw, visualizationAnalyser, emptyVisualizer])\n\n return (\n <Grid\n columns={`${barCount}`}\n gap=\"1\"\n width=\"auto\"\n style={{\n // TODO not sure why we need this\n gridTemplateColumns: 'repeat(4, minmax(0, 1fr))',\n }}\n >\n {barHeights.map((barHeight, index) => (\n <Flex\n key={index}\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n height=\"20px\"\n >\n <Flex\n minHeight=\"50%\"\n maxHeight=\"100%\"\n height={`${barHeight + 20}%`}\n width=\"12px\"\n style={{\n backgroundColor: `var(--${audioThreadContext.status === 'recording' ? 'mint' : 'gray'}-11)`,\n borderRadius: 'var(--radius-6)',\n }}\n />\n </Flex>\n ))}\n </Grid>\n )\n}\n // className={`${audioThreadContext.status === 'recording' ? 'bg-mint-12' : 'bg-gray-11'} rounded-6 transition duration-300`}\n","import {\n Flex,\n IconButton,\n Tooltip,\n} from '@radix-ui/themes'\nimport {\n PauseIcon,\n ArrowUpIcon,\n ResumeIcon,\n} from '@radix-ui/react-icons'\nimport { useAudioThreadContext } from '@/hooks/threads/useAudioThreadContext'\n\nexport const ActionButton = () => {\n const audioThreadContext = useAudioThreadContext()\n\n if (audioThreadContext.status === 'recording') {\n return (\n <Flex\n align=\"center\"\n >\n <Flex\n mr=\"3\"\n ml=\"-7\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.pause}\n color=\"gray\"\n radius=\"full\"\n size=\"1\"\n >\n <PauseIcon />\n </IconButton>\n </Flex>\n\n <Tooltip\n open\n content=\"Send your message\"\n side=\"bottom\"\n >\n <IconButton\n onClick={audioThreadContext.recorderProps.stop}\n color=\"gray\"\n highContrast\n radius=\"full\"\n size=\"4\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n >\n <ArrowUpIcon />\n </IconButton>\n </Tooltip>\n </Flex>\n )\n }\n\n if (audioThreadContext.status === 'recorderPaused') {\n return (\n <IconButton\n onClick={audioThreadContext.recorderProps.resume}\n color=\"red\"\n radius=\"full\"\n size=\"4\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'idle') {\n return (\n <IconButton\n onClick={() => audioThreadContext.recorderProps.start()}\n size=\"4\"\n color=\"red\"\n radius=\"full\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n />\n )\n }\n\n if (audioThreadContext.status === 'playing') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.pause()}\n size=\"4\"\n color=\"gray\"\n radius=\"full\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n >\n <PauseIcon />\n </IconButton>\n )\n }\n\n if (audioThreadContext.status === 'playerPaused') {\n return (\n <IconButton\n onClick={() => audioThreadContext.messageAudioProps.play()}\n size=\"4\"\n color=\"gray\"\n radius=\"full\"\n style={{\n border: '2px solid var(--gray-8)',\n }}\n >\n <ResumeIcon />\n </IconButton>\n )\n }\n\n return (\n <IconButton\n size=\"4\"\n color=\"red\"\n radius=\"full\"\n disabled\n style={{\n border: '2px solid var(--gray-8)',\n }}\n />\n )\n}\n","import { Root, Args as RootArgs } from './Root'\nimport { Visualization } from './Visualization'\nimport { Form } from './Form'\n\ntype Args = Omit<RootArgs, 'children'>\n\nexport const AudioThread = (props: Args) => (\n <Root {...props}>\n <Visualization />\n <Form />\n </Root>\n)\n\nAudioThread.Root = Root\nAudioThread.Visualization = Visualization\nAudioThread.Form = Form\n","import { AudioThread } from '@/components/threads/AudioThread'\nimport { Root } from '@/components/threads/ThreadDialog/Root'\nimport { Trigger } from '@/components/threads/ThreadDialog/Trigger'\nimport { Button } from '@/components/threads/ThreadDialog/Button'\nimport { Content } from '@/components/threads/ThreadDialog/Content'\n\nexport const AudioThreadDialog = () => (\n <Root>\n <Content.Root>\n <AudioThread />\n </Content.Root>\n <Trigger>\n <Button />\n </Trigger>\n </Root>\n)\n\nAudioThreadDialog.Root = Root\nAudioThreadDialog.Trigger = Trigger\nAudioThreadDialog.Button = Button\nAudioThreadDialog.Content = Content\n","import { useMemo } from 'react'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { Content } from './Content'\nimport { Item } from './Item'\n\nexport const Suggestions = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const latestMessageProps = useLatestMessage()\n\n const isDisabled = useMemo(() => (\n // @ts-ignore-next-line\n latestMessageProps.latestMessage?.metadata?.isBlocking\n ), [latestMessageProps])\n\n if (latestMessageProps.isLoading) return null\n if (isDisabled) return null\n\n return (\n <Content>\n {children}\n </Content>\n )\n}\n\nSuggestions.Item = Item\n","import { useMemo } from 'react'\nimport { isEmpty } from 'radash'\nimport { onlyText } from 'react-children-utilities'\nimport { useMessageContext } from '@/hooks/messages/useMessageContext'\nimport { useLatestMessage } from '@/hooks/messages/useLatestMessage'\nimport { useIsRunActive } from '@/hooks/runs/useIsRunActive'\nimport {\n Flex,\n} from '@radix-ui/themes'\nimport { Item } from './Item'\n\nexport const Content = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n const messageContext = useMessageContext()\n const latestMessageProps = useLatestMessage()\n\n const isRunActiveProps = useIsRunActive()\n\n const suggestions = useMemo(() => (\n onlyText(children).split(/\\r?\\n/).filter((c) => !isEmpty(c)).map((c) => c.trim())\n ), [children])\n\n const isDisabled = useMemo(() => (\n messageContext.message?.id !== latestMessageProps.latestMessage.id || isRunActiveProps.isRunActive\n ), [messageContext, latestMessageProps, isRunActiveProps])\n\n if (isEmpty(suggestions)) return null\n\n return (\n <Flex\n gap=\"2\"\n py=\"2\"\n wrap=\"wrap\"\n >\n {suggestions.map((suggestion) => (\n <Item\n key={suggestion}\n suggestion={suggestion}\n isDisabled={isDisabled}\n />\n ))}\n </Flex>\n )\n}\n","import {\n ArrowUpIcon,\n} from '@radix-ui/react-icons'\nimport {\n Text,\n Button,\n Spinner,\n} from '@radix-ui/themes'\nimport { useCreateMessage } from '@/hooks/messages/useCreateMessage'\n\nexport const Item = ({\n suggestion,\n isDisabled,\n}: {\n suggestion: string\n isDisabled: boolean\n}) => {\n const { createMessage, isPending } = useCreateMessage()\n\n return (\n <Content\n onClick={() => {\n createMessage({\n // @ts-ignore-next-line\n content: suggestion,\n })\n }}\n isDisabled={isDisabled}\n isPending={isPending}\n >\n {suggestion}\n </Content>\n )\n}\n\nconst Content = ({\n onClick,\n isDisabled,\n isPending,\n children,\n}: {\n onClick: () => void\n isDisabled: boolean\n isPending: boolean\n children: React.ReactNode\n}) => (\n <Button\n variant=\"soft\"\n onClick={onClick}\n disabled={isDisabled}\n >\n <Text\n size=\"1\"\n weight=\"regular\"\n >\n {children}\n </Text>\n\n <Spinner loading={isPending}>\n <ArrowUpIcon />\n </Spinner>\n </Button>\n)\n\nItem.Content = Content\n","import { useMemo } from 'react'\nimport { MarkdownContext } from '@/contexts/markdown/MarkdownContext'\nimport { useMarkdownContext } from '@/hooks/markdown/useMarkdownContext'\nimport { merge } from '@/lib/misc/merge'\n\nexport const MarkdownProvider = ({\n children,\n ...rest\n}: {\n children: React.ReactNode\n}) => {\n const prevMarkdownContext = useMarkdownContext()\n\n const value = useMemo(() => (\n merge(prevMarkdownContext, rest)\n ), [rest, prevMarkdownContext])\n\n return (\n <MarkdownContext.Provider\n value={value}\n >\n {children}\n </MarkdownContext.Provider>\n )\n}\n"]}
|