{"version":3,"file":"static/chunks/372-6e944d2da07d6acd.js","mappings":"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","sources":["webpack://_N_E/./src/app/components/ConfirmationDialog.tsx","webpack://_N_E/./src/app/constants.ts","webpack://_N_E/./src/app/utils/authentication.ts","webpack://_N_E/./src/app/hooks/useApp.ts","webpack://_N_E/./src/app/services/client.ts","webpack://_N_E/./src/app/store/App.store.ts","webpack://_N_E/./src/app/store/Threads.store.ts","webpack://_N_E/./src/app/store/Organisation.store.ts","webpack://_N_E/./src/app/store/Users.store.ts","webpack://_N_E/./src/app/store/Auth.store.ts","webpack://_N_E/./src/app/store/Sorting.store.ts","webpack://_N_E/./src/app/store/Filters.store.ts","webpack://_N_E/./src/app/store/SearchQuery.store.ts","webpack://_N_E/./src/app/store/TypingIndicator.store.ts","webpack://_N_E/./src/app/store/Chats.store.ts","webpack://_N_E/./src/app/store/Tags.store.ts","webpack://_N_E/./src/app/store/Feeds.store.ts","webpack://_N_E/./src/app/store/ChatBox.store.ts","webpack://_N_E/./src/app/store/index.ts","webpack://_N_E/./src/app/components/icons/SortAscendingIcon.tsx","webpack://_N_E/./src/app/components/icons/SortDescendingIcon.tsx","webpack://_N_E/./src/app/types/Sorting.type.ts","webpack://_N_E/./src/app/utils/events.ts","webpack://_N_E/./src/app/utils/helper.ts","webpack://_N_E/./src/app/utils/imageUtils.ts","webpack://_N_E/./src/app/utils/sessionStorage.ts","webpack://_N_E/"],"sourcesContent":["import { Button, Flex, AlertDialog } from \"@radix-ui/themes\";\nimport React, { ReactElement, useState } from \"react\";\n\ninterface ConfirmationDialogProps {\n title: string;\n onCancel: (event?: React.MouseEvent) => void;\n onConfirm: (event?: React.MouseEvent) => void;\n primaryLabel?: string;\n secondaryLabel?: string;\n}\n\nconst ConfirmationDialog = ({\n title,\n onCancel,\n onConfirm,\n primaryLabel = \"Delete\",\n secondaryLabel = \"Cancel\",\n}: ConfirmationDialogProps) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const handleConfirm = async (event: React.MouseEvent) => {\n setIsLoading(true);\n onConfirm(event);\n };\n\n return (\n \n \n {title}\n\n \n \n {secondaryLabel}\n \n \n {isLoading ? \"Loading...\" : primaryLabel}\n \n \n \n \n );\n};\n\nexport default ConfirmationDialog;\n","import { isWindow } from \"./utils/helper\";\n\n// Struct Server Endpoint\nexport const STRUCT_API_URL = process.env.NEXT_PUBLIC_STRUCT_SERVER_URL || \"\";\nexport const STRUCT_API_VERSION =\n process.env.NEXT_PUBLIC_STRUCT_API_VERSION || \"v1\";\nexport const APP_ENV = process.env.NEXT_PUBLIC_APP_ENV;\nexport const APP_VERSION = process.env.NEXT_PUBLIC_APP_VERSION || \"main\";\n\n// auth\nexport const ID_SERVER_URL = process.env.NEXT_PUBLIC_ID_SERVER_URL;\n\nexport const isDev = process.env.NEXT_PUBLIC_APP_ENV === \"dev\";\nif (isWindow) {\n // @ts-expect-error\n window.APP_VERSION = APP_VERSION;\n}\n\nexport const isProduction = isWindow ? ID_SERVER_URL?.endsWith(\"ai\") : false;\n\nexport const isApp =\n isDev || (isWindow && window.location.host.split(\".\")[0] === \"app\");\n\nexport const ENABLE_CHAT_HTTP_RESPONSE_INSERT = false;\n\n// @ts-expect-error\nexport const isDesktopPlatform = isWindow ? !!window.__TAURI__ : false;\nexport const DESKTOP_APP_VERSION = isDesktopPlatform\n ? // @ts-expect-error\n window.DESKTOP_APP_VERSION\n : \"\";\n\nexport const enum EntityIDMap {\n Chat = \"1\",\n Thread = \"2\",\n Channel = \"3\",\n User = \"4\",\n Organisation = \"5\",\n Feed = \"6\",\n}\n\nexport const FEED_VIEW_PLACEHOLDER = \"What’s on your mind? @mention a channel or member and start a conversation\";\nexport const CHAT_VIEW_PLACEHOLDER = \"Send message...\";\nexport const SLACK_ACTION_DISABLED =\n \"Disabled. Use Slack to perform this action\";\nexport const SLACK_FORK_ENABLE_TAG = [\"struct/monthly\", \"struct/weekly\"];\nexport const SLACK_LEVEL_3_PERMISSIONS = \"https://app.struct.ai/slack-lvl3\";\nexport const EXCLUDE_TRACKING_ORG_IDS = [\"5L1f1\"];\n","import { ID_SERVER_URL } from \"@/app/constants\";\n\nexport const generateOauthURL = ({\n idServer = ID_SERVER_URL || \"https://id.struct.ai\",\n redirect_to,\n}: {\n idServer?: string;\n redirect_to: string;\n}) => {\n return `${idServer}/?redirect_to=${redirect_to}`;\n};\n\nexport const generateLogoutURL = ({\n hostname = ID_SERVER_URL || \"https://id.struct.ai\",\n redirect_to,\n}: {\n hostname?: string;\n redirect_to: string;\n}) => {\n return `${hostname}/logout?redirect_to=${redirect_to}`;\n};\n","import { useRouter } from \"next/navigation\";\nimport {\n generateLogoutURL,\n generateOauthURL,\n} from \"@/app/utils/authentication\";\nimport { useAppStore } from \"../store\";\n\nexport const useApp = () => {\n const router = useRouter();\n\n const session = useAppStore((state) => state.session);\n const isSlackOrg = useAppStore(\n (state) => state.organisation?.bits?.org_slack,\n );\n\n const isDiscordOrg = useAppStore(\n (state) => state.organisation?.bits?.org_discord,\n );\n\n const isAuthenticatedWithCorrectOrg = useAppStore(\n (state) => state.isAuthenticatedWithCorrectOrg,\n );\n\n const logIn = () => {\n const currentURL = window.location.href;\n const redirectURL = `https://${\n new URL(currentURL).host\n }/auth?next_page=${currentURL}`;\n router.push(generateOauthURL({ redirect_to: redirectURL }));\n };\n\n const logOut = async () => {\n const currentURL = window.location.href;\n const redirectURL = `https://${new URL(currentURL).host}`;\n const hostname = `https://${window.location.hostname}`;\n router.push(generateLogoutURL({ hostname, redirect_to: redirectURL }));\n };\n\n const featureToggles = {\n canInviteMembers:\n isAuthenticatedWithCorrectOrg && !isSlackOrg && !isDiscordOrg,\n canCreateChannel:\n isAuthenticatedWithCorrectOrg && !isSlackOrg && !isDiscordOrg,\n canLeaveChannel:\n isAuthenticatedWithCorrectOrg && !isSlackOrg && !isDiscordOrg,\n canJoinChannel:\n isAuthenticatedWithCorrectOrg && !isSlackOrg && !isDiscordOrg,\n canAddMembersToChannel:\n isAuthenticatedWithCorrectOrg && !isSlackOrg && !isDiscordOrg,\n canEditChannel:\n isAuthenticatedWithCorrectOrg && !isSlackOrg && !isDiscordOrg,\n canCreateThreadFromChat:\n isAuthenticatedWithCorrectOrg && !isSlackOrg && !isDiscordOrg,\n // disable chat replies in slack and discord orgs\n canReplyToChat:\n isAuthenticatedWithCorrectOrg && !isSlackOrg && !isDiscordOrg,\n // disable chat reactions in slack and discord orgs\n canReactToChat: isAuthenticatedWithCorrectOrg && !isDiscordOrg,\n // discord orgs cannot start conversation with members\n canStartChatWithMembers: !isDiscordOrg,\n\n // disable chat deletion for discord orgs\n canDeleteChat: isAuthenticatedWithCorrectOrg && Boolean(\n session?.isAdmin || session?.isOwner || session?.isModerator,\n ) && !isDiscordOrg,\n\n isLiveViewEnabled: true, //Boolean(organisation?.bits?.org_struct),\n isChatEnabled: isAuthenticatedWithCorrectOrg && !isDiscordOrg, //Boolean(organisation?.bits?.org_struct),\n isMembersPageEnabled: isAuthenticatedWithCorrectOrg, //Boolean(organisation?.bits?.org_struct),\n isChannelsPageEnabled: isAuthenticatedWithCorrectOrg, //Boolean(organisation?.bits?.org_struct),\n isOrganisationUserRole: Boolean(\n session?.isAdmin || session?.isOwner || session?.isModerator,\n ),\n };\n\n return {\n featureToggles,\n logIn,\n logOut,\n };\n};\n","import { STRUCT_API_URL } from \"@/app/constants\";\nimport { notification } from \"antd\";\nimport { globalStore } from \"../store\";\nimport { deviceId } from \"../utils/sessionStorage\";\n\nexport const structAPIFetchClient = (\n url: string,\n options: RequestInit = {},\n showError: boolean = true,\n) => {\n const isFormData = options.body instanceof FormData;\n const defaultHeaders = isFormData\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json, text/plain, */*\",\n \"x-struct-deviceid\": deviceId,\n };\n\n options.credentials = \"include\";\n\n const headers = {\n ...defaultHeaders,\n ...options.headers,\n };\n\n return fetch(`${STRUCT_API_URL}${url}`, {\n ...options,\n redirect: \"follow\",\n // @ts-ignore\n headers,\n }).then((response) => {\n if (\n !response.ok &&\n ![401, 500, 504, 502].includes(response.status) &&\n showError &&\n globalStore.getState().isAuthenticatedWithCorrectOrg\n ) {\n if (response.status === 500) {\n notification.error({\n message: \"Something went wrong. \",\n duration: 5,\n });\n return response;\n }\n response.text().then((text) => {\n notification.error({\n message: text,\n duration: 5,\n });\n });\n }\n return response;\n });\n};\n","import { StateCreator } from \"zustand\";\n\nexport const DEFAULT_FEED_ID = \"6N1\";\nexport const DEFAULT_SEARCH_FEED_ID = \"6N0_SEARCH\";\n\nexport const enum FeedModes {\n LIVE,\n FORUM,\n COMPACT,\n}\n\nexport interface AppStoreState {\n isInitialized: boolean;\n setInitialized: (value: boolean) => void;\n feedMode: FeedModes;\n setFeedMode: (value: FeedModes) => void;\n isHeaderExpanded: boolean;\n setIsHeaderExpanded: (value: boolean) => void;\n isCommandMenuVisible: boolean;\n isCommandMenuVisibleViaMentionPanel: boolean;\n setIsCommandMenuVisible: (\n value: boolean,\n isViaMentionPanel?: boolean,\n ) => void;\n isRealtimeConnectionActive: boolean;\n setIsRealtimeConnectionActive: (value: boolean) => void;\n currentFeedId: string;\n setCurrentFeedId: (feedId?: string) => void;\n isUnreadFeedFilterActive: boolean;\n toggleUnreadFilter: (value: boolean) => void;\n feedTimeRange: number;\n setFeedTimeRange: (value: number) => void;\n shouldResync: boolean;\n setShouldResync: (value: boolean) => void;\n shouldUpgrade: boolean;\n setShouldUpgrade: (value: boolean) => void;\n}\n\nexport const createAppStore: StateCreator = (set) => ({\n isInitialized: false,\n isUnreadFeedFilterActive: false,\n feedTimeRange: 0,\n feedMode: FeedModes.FORUM,\n isHeaderExpanded: true,\n isCommandMenuVisible: false,\n isCommandMenuVisibleViaMentionPanel: false,\n currentFeedId: DEFAULT_FEED_ID,\n isRealtimeConnectionActive: false,\n shouldResync: false,\n shouldUpgrade: false,\n setFeedTimeRange: (value) => {\n set({ feedTimeRange: value });\n },\n setIsHeaderExpanded: (value) => {\n set({ isHeaderExpanded: value });\n },\n setFeedMode: (feedMode: FeedModes) => {\n set({ feedMode });\n },\n setInitialized: (value: boolean) => {\n set({ isInitialized: value });\n },\n setIsRealtimeConnectionActive: (value: boolean) => {\n set({ isRealtimeConnectionActive: value });\n },\n setIsCommandMenuVisible: (value: boolean, isViaMentionPanel = false) => {\n set({\n isCommandMenuVisible: value,\n isCommandMenuVisibleViaMentionPanel: isViaMentionPanel,\n });\n },\n setCurrentFeedId: (feedId?: string) => {\n set({ currentFeedId: feedId });\n },\n toggleUnreadFilter(value: boolean) {\n set({ isUnreadFeedFilterActive: value });\n },\n setShouldResync: (value: boolean) => {\n set({ shouldResync: value });\n },\n\n setShouldUpgrade: (value: boolean) => {\n set({ shouldUpgrade: value });\n },\n});\n","import merge from \"lodash/merge\";\nimport { PartialDeep } from \"type-fest\";\nimport {\n StructChatResponse,\n StructThread,\n Read,\n} from \"@/app/types/Thread.type\";\nimport { StateCreator } from \"zustand\";\nimport { omit } from \"lodash\";\n\nconst CHATS_PER_THREAD = 4;\n\nexport interface ThreadsStoreState {\n threadsById: Record;\n openThreadsById: Record;\n setOpenThreadById: (\n threadId: StructThread[\"id\"],\n thread: StructThread | null,\n ) => void;\n selectedThreadIds: StructThread[\"id\"][];\n setSelectedThreadIds: (threadIds: StructThread[\"id\"][]) => void;\n toggleSelectedThreadIds: (threadIds: StructThread[\"id\"][]) => void;\n getThreadsById: () => Record;\n setThreads: (threads: StructThread[]) => void;\n setThreadById: (thread: StructThread) => void;\n moveThreadToTop: (threadId: StructThread[\"id\"]) => void;\n deleteThreads: (threadIds: StructThread[\"id\"][]) => void;\n updateThreads: (threads: StructThread[]) => void;\n getThreads: () => StructThread[] | [];\n insertThreadChatById: (\n threadId: StructThread[\"id\"],\n chatMessage: StructChatResponse,\n ) => void;\n similarThreadsById: Record;\n setSimilarThreadsById: (threadId: string, threads: StructThread[]) => void;\n updateThreadById: (\n threadId: StructThread[\"id\"],\n updatedFields: PartialDeep,\n ) => void;\n updateThreadsById: (\n threads: Record>,\n ) => void;\n readUntilByThreadId: Record;\n setReadUntilByThreadId: (\n threadId: StructThread[\"id\"],\n chatId: StructChatResponse[\"id\"],\n ) => void;\n setBulkReadUntilByThreadId: (\n threads: Record,\n ) => void;\n removeThreadChatById: (\n threadId: StructThread[\"id\"],\n chatId: StructChatResponse[\"id\"],\n ) => void;\n updateThreadChatById: (\n threadId: StructThread[\"id\"],\n chatId: StructChatResponse[\"id\"],\n updatedChat: Partial,\n ) => void;\n clearThreads: () => void;\n}\n\nconst INITIAL_STATE = {};\n\nexport const createThreadsStore: StateCreator = (\n set,\n get,\n) => ({\n threadsById: INITIAL_STATE,\n openThreadsById: {},\n selectedThreadIds: [],\n getThreadsById: () => get().threadsById,\n similarThreadsById: {},\n readUntilByThreadId: {},\n setOpenThreadById: (\n threadId: StructThread[\"id\"],\n thread: StructThread | null,\n ) => {\n set((state) => {\n if (!thread) {\n const updatedThreadsById = omit(get().openThreadsById, [threadId]);\n return { openThreadsById: updatedThreadsById };\n }\n return {\n openThreadsById: {\n ...state.openThreadsById,\n [threadId]: thread,\n },\n };\n });\n },\n setSelectedThreadIds: (threadIds: StructThread[\"id\"][]) => {\n set({ selectedThreadIds: threadIds });\n },\n toggleSelectedThreadIds: (threadIds: StructThread[\"id\"][]) => {\n set((state) => {\n const existingThreadIds = state.selectedThreadIds;\n threadIds.forEach((threadId) => {\n if (existingThreadIds.includes(threadId)) {\n existingThreadIds.splice(existingThreadIds.indexOf(threadId), 1);\n } else {\n existingThreadIds.push(threadId);\n }\n });\n return {\n selectedThreadIds: existingThreadIds,\n };\n });\n },\n setThreads: (threads: StructThread[]) => {\n set({\n threadsById: threads.reduce(\n (acc, thread) => {\n acc[thread.id] = thread;\n acc[thread.id].chats = thread.chats?.slice(-CHATS_PER_THREAD);\n\n return acc;\n },\n {} as Record,\n ),\n });\n },\n setThreadById: (thread: StructThread) => {\n set((state) => {\n return {\n threadsById: {\n ...state.threadsById,\n [thread.id]: {\n ...state.threadsById[thread.id],\n ...thread,\n },\n },\n };\n });\n },\n moveThreadToTop: (threadId: string) => {\n set((state) => {\n const existingThread = state.threadsById[threadId];\n if (!existingThread) {\n return state;\n }\n\n const reorderedThreadsById = Object.keys(state.threadsById)\n .filter((id) => id !== threadId)\n .reduce(\n (acc, id) => {\n acc[id] = state.threadsById[id];\n return acc;\n },\n { [threadId]: existingThread } as Record,\n );\n\n return {\n threadsById: reorderedThreadsById,\n };\n });\n },\n updateThreads: (threads: StructThread[]) => {\n set((state) => {\n const updatedThreadsById = { ...state.threadsById };\n threads.forEach((thread) => {\n updatedThreadsById[thread.id] = thread;\n });\n return { threadsById: updatedThreadsById };\n });\n },\n deleteThreads: (threadIds: string[]) => {\n set(() => {\n const updatedThreadsById = omit(get().threadsById, threadIds);\n\n return { threadsById: updatedThreadsById };\n });\n },\n getThreads: () => {\n const threadsById = get().threadsById;\n return Object.values(threadsById);\n },\n setSimilarThreadsById: (threadId: string, threads: StructThread[]) => {\n set((state) => ({\n similarThreadsById: {\n ...state.similarThreadsById,\n [threadId]: threads,\n },\n }));\n },\n insertThreadChatById: (\n threadId: StructThread[\"id\"],\n chatMessage: StructChatResponse,\n ) => {\n set((state) => {\n const thread = state.threadsById[threadId];\n if (!thread) {\n return state;\n }\n\n const chatExists = thread.chats?.some(\n (chat) => chat.id === chatMessage.id,\n );\n\n if (chatExists) {\n return state;\n }\n\n const updatedChats = thread?.chats\n ? [...thread.chats, chatMessage]\n : [chatMessage];\n\n return {\n threadsById: {\n ...state.threadsById,\n [threadId]: {\n ...thread,\n chats: updatedChats.slice(-CHATS_PER_THREAD),\n },\n },\n };\n });\n },\n removeThreadChatById: (\n threadId: string,\n chatId: StructChatResponse[\"id\"],\n ) => {\n set((state) => {\n const thread = state.threadsById[threadId];\n if (!thread || !thread.chats) {\n return state;\n }\n\n const updatedChats = thread.chats.filter((chat) => chat.id !== chatId);\n\n return {\n threadsById: {\n ...state.threadsById,\n [threadId]: {\n ...thread,\n chats: updatedChats,\n },\n },\n };\n });\n },\n updateThreadChatById: (\n threadId: string,\n chatId: StructChatResponse[\"id\"],\n updatedChat: Partial,\n ) => {\n set((state) => {\n const thread = state.threadsById[threadId];\n if (!thread || !thread.chats) {\n return state;\n }\n\n const chatIndex = thread.chats.findIndex((chat) => chat.id === chatId);\n if (chatIndex === -1) {\n return state;\n }\n\n const updatedChats = [...thread.chats];\n updatedChats[chatIndex] = {\n ...thread.chats[chatIndex],\n ...updatedChat,\n };\n\n return {\n threadsById: {\n ...state.threadsById,\n [threadId]: {\n ...thread,\n chats: updatedChats,\n },\n },\n };\n });\n },\n updateThreadsById: (\n threads: Record>,\n ) => {\n set((state) => {\n const updatedThreadsById = { ...state.threadsById };\n for (let index = 0; index < Object.keys(threads).length; index++) {\n const threadId = Object.keys(threads)[index];\n const existingThread = state.threadsById[threadId];\n if (!existingThread) {\n break;\n }\n updatedThreadsById[threadId] = merge(\n {},\n existingThread,\n threads[threadId],\n );\n const updatedFields = threads[threadId];\n if (\n updatedFields?.read?.bits &&\n updatedThreadsById[threadId]?.read?.bits\n ) {\n updatedThreadsById[threadId] = {\n ...updatedThreadsById[threadId],\n read: {\n ...(updatedThreadsById[threadId].read as Read),\n bits: (updatedFields.read as Read).bits,\n },\n };\n }\n }\n return { threadsById: updatedThreadsById };\n });\n },\n\n updateThreadById: (\n threadId: string,\n updatedFields: PartialDeep,\n ) => {\n set((state) => {\n const existingThread = state.threadsById[threadId];\n if (!existingThread) {\n return state;\n }\n\n let updatedThread = merge({}, existingThread, updatedFields);\n // Manually override bits\n if (updatedFields?.read?.bits && updatedThread?.read?.bits) {\n updatedThread = {\n ...updatedThread,\n read: {\n ...updatedThread.read,\n bits: (updatedFields.read as Read).bits,\n },\n };\n }\n\n return {\n threadsById: {\n ...state.threadsById,\n [threadId]: updatedThread,\n },\n };\n });\n },\n setReadUntilByThreadId: (\n threadId: StructThread[\"id\"],\n chatId: StructChatResponse[\"id\"],\n ) => {\n set((state) => ({\n readUntilByThreadId: {\n ...state.readUntilByThreadId,\n [threadId]: chatId,\n },\n }));\n },\n setBulkReadUntilByThreadId: (\n threads: Record,\n ) => {\n set((state) => ({\n readUntilByThreadId: {\n ...state.readUntilByThreadId,\n ...threads,\n },\n }));\n },\n clearThreads: () => {\n set({ threadsById: INITIAL_STATE });\n },\n});\n","import { StructOrganisation } from \"@/app/types/Organisation.type\";\nimport { StateCreator } from \"zustand\";\n\nexport interface OrganisationStoreState {\n organisation: StructOrganisation;\n setOrganisation: (organisation: StructOrganisation) => void;\n updateOrganisation: (data: Partial) => void;\n clearOrganisation: () => void;\n}\n\nexport const createOrganisationStore: StateCreator = (\n set,\n get,\n) => ({\n // @ts-ignore\n organisation: {},\n setOrganisation: (organisation: StructOrganisation) => {\n set({ organisation });\n },\n updateOrganisation: (data: Partial) => {\n set({ organisation: { ...get().organisation, ...data } });\n },\n clearOrganisation: () => {\n // @ts-ignore\n set({ organisation: {} });\n },\n});\n","import { StructUser } from \"@/app/types/Thread.type\";\nimport { StateCreator } from \"zustand\";\n\nexport interface UsersStoreState {\n // Values\n onlineUserIds: StructUser[\"id\"][];\n\n // Methods\n\n addOnlineUserId: (userId: StructUser[\"id\"]) => void;\n removeOnlineUserId: (userId: StructUser[\"id\"]) => void;\n}\n\nexport const createUsersStore: StateCreator = (set, get) => ({\n onlineUserIds: [],\n addOnlineUserId: (userId: StructUser[\"id\"]) => {\n const currentOnlineUsers = get().onlineUserIds;\n if (!currentOnlineUsers.includes(userId)) {\n set({ onlineUserIds: [...currentOnlineUsers, userId] });\n }\n },\n removeOnlineUserId: (userId: StructUser[\"id\"]) => {\n const currentOnlineUsers = get().onlineUserIds;\n set({ onlineUserIds: currentOnlineUsers.filter((id) => id !== userId) });\n },\n});\n","import { StateCreator } from \"zustand\";\nimport { Session } from \"../types/session\";\nimport { StructUser } from \"../types/Thread.type\";\n\n// TODO: Add proper state and replace useApp\nexport interface AuthStoreState {\n session: Session | undefined;\n isAuthenticated: boolean;\n isAuthenticatedWithCorrectOrg: boolean;\n setSession: (session: Session) => void;\n updateSessionUser: (user: Partial) => void;\n}\n\nexport const createAuthStore: StateCreator = (set) => ({\n session: undefined,\n isAuthenticated: false,\n isAuthenticatedWithCorrectOrg: false,\n setSession: (session: Session) => {\n set({\n session,\n isAuthenticated: Boolean(session && session.email),\n isAuthenticatedWithCorrectOrg: !!session?.user?.id,\n });\n },\n updateSessionUser: (user: Partial) => {\n set((state) => {\n const session = state.session;\n if (!session) return { session };\n // @ts-expect-error\n session.user = { ...session.user, ...user };\n return { session };\n });\n },\n});\n","import { StateCreator } from \"zustand\";\nimport { SortingOption } from \"@/app/types/Sorting.type\";\n\nexport interface SortingStoreState {\n sorting: SortingOption;\n setSorting: (sorting: SortingOption) => void;\n toggleSorting: () => void;\n clearSorting: () => void;\n}\nconst defaultSorting = SortingOption.Relevance;\n\nconst sortingToggleOptionMap = {\n [SortingOption.Relevance]: SortingOption.Relevance,\n [SortingOption.CreatedAscending]: SortingOption.CreatedDescending,\n [SortingOption.CreatedDescending]: SortingOption.CreatedAscending,\n [SortingOption.UpdatedAscending]: SortingOption.UpdatedDescending,\n [SortingOption.UpdatedDescending]: SortingOption.UpdatedAscending,\n};\n\nexport const createSortingStore: StateCreator = (set) => {\n return {\n sorting: defaultSorting,\n setSorting: (sorting) => {\n set({ sorting });\n },\n toggleSorting: () => {\n set(({ sorting }) => ({\n sorting: sortingToggleOptionMap[sorting],\n }));\n },\n clearSorting: () => {\n set({ sorting: defaultSorting });\n },\n };\n};\n","import { StateCreator } from \"zustand\";\n\nexport type Filters = {\n users: Array;\n channels: Array;\n tags: Array;\n};\n\nexport type FilterType = keyof Filters;\nexport interface FiltersStoreState {\n filters: Filters;\n setFilters: (filters: Filters) => void; // TODO: causes bad code, remove\n setFilter: (filterType: FilterType, id: string) => void;\n addFilter: (filterType: FilterType, id: string) => void;\n setFiltersByType: (filterType: FilterType, ids: string[]) => void;\n removeFilter: (filterType: FilterType, id: string) => void;\n clearFilters: () => void;\n}\n\nexport const INIT_FILTERS: Filters = {\n users: [],\n channels: [],\n tags: [],\n};\n\nexport const createFiltersStore: StateCreator = (\n set,\n get,\n) => ({\n filters: INIT_FILTERS,\n setFilters: (filters) => {\n set({ filters });\n },\n setFilter: (filterType: FilterType, id: string) => {\n set((state: FiltersStoreState) => {\n const currentFilters = {\n ...state.filters,\n [filterType]: [id],\n };\n\n return { ...state, filters: currentFilters }; // Return the updated state object\n });\n },\n addFilter: (filterType: FilterType, id: string) => {\n set((state: FiltersStoreState) => {\n const currentFilters = {\n ...state.filters,\n [filterType]: [...state.filters[filterType], id],\n };\n\n return { ...state, filters: currentFilters }; // Return the updated state object\n });\n },\n setFiltersByType: (filterType: FilterType, ids: string[]) => {\n set((state: FiltersStoreState) => {\n const currentFilters = {\n ...state.filters,\n [filterType]: ids,\n };\n\n return { ...state, filters: currentFilters }; // Return the updated state object\n });\n },\n removeFilter: (filterType: FilterType, id: string) => {\n set((state: FiltersStoreState) => {\n const updatedFilters = {\n ...state.filters,\n [filterType]: state.filters[filterType].filter(\n (filter) => filter !== id,\n ),\n };\n\n return {\n ...state,\n filters: updatedFilters,\n };\n });\n },\n clearFilters: () => {\n set({ filters: INIT_FILTERS });\n },\n});\n","import { StateCreator } from \"zustand\";\n\nexport interface SearchQueryStoreState {\n searchQuery: string;\n formattedSearchQuery: string;\n setSearchQuery: (searchQuery: string) => void;\n setFormattedSearchQuery: (formattedSearchQuery: string) => void;\n clearSearchQuery: () => void;\n}\nconst INITIAL_SEARCH_QUERY = \"\";\n\nexport const createSearchQueryStore: StateCreator = (\n set,\n) => ({\n searchQuery: INITIAL_SEARCH_QUERY,\n formattedSearchQuery: INITIAL_SEARCH_QUERY,\n setSearchQuery: (searchQuery) => {\n set({ searchQuery });\n },\n setFormattedSearchQuery: (formattedSearchQuery) => {\n set({ formattedSearchQuery });\n },\n clearSearchQuery: () => {\n set({ searchQuery: INITIAL_SEARCH_QUERY });\n },\n});\n","import { StateCreator } from \"zustand\";\n\nexport interface TypingIndicatorStoreState {\n typingUsersByThreadId: Record;\n addUserTyping: (threadId: string, userId: string, userName: string) => void;\n removeUserTyping: (threadId: string, userId: string) => void;\n typingUserNamesById: Record;\n}\n\nexport const createTypingIndicatorStore: StateCreator<\n TypingIndicatorStoreState\n> = (set) => ({\n typingUsersByThreadId: {},\n typingUserNamesById: {},\n addUserTyping: (threadId: string, userId: string, userName: string) => {\n set((state) => {\n const existingUsers = state.typingUsersByThreadId[threadId] || [];\n if (!existingUsers.includes(userId)) {\n return {\n typingUsersByThreadId: {\n ...state.typingUsersByThreadId,\n [threadId]: [...existingUsers, userId],\n },\n typingUserNamesById: {\n ...state.typingUserNamesById,\n [userId]: userName,\n },\n };\n }\n return state;\n });\n },\n removeUserTyping: (threadId: string, userId: string) => {\n set((state) => {\n const existingUsers = state.typingUsersByThreadId[threadId];\n if (existingUsers && existingUsers.includes(userId)) {\n const updatedUsers = existingUsers.filter((id) => id !== userId);\n\n if (updatedUsers.length === 0) {\n const { [threadId]: _, ...rest } = state.typingUsersByThreadId;\n return { typingUsersByThreadId: rest };\n } else {\n return {\n typingUsersByThreadId: {\n ...state.typingUsersByThreadId,\n [threadId]: updatedUsers,\n },\n };\n }\n }\n return state; // Return unchanged state if the threadId or userId is not found\n });\n },\n});\n","import { StateCreator } from \"zustand\";\nimport {\n ReactionResponse,\n StructChat,\n StructChatResponse,\n StructThread,\n StructUser,\n} from \"@/app/types/Thread.type\";\nimport { uniq, uniqBy } from \"lodash\";\n\nexport type ChatReply = {\n id: StructChat[\"id\"];\n threadId: StructThread[\"id\"];\n};\n\nexport interface ChatsStoreState {\n chatsByThreadId: Record;\n selectedChatsByThreadId: Record;\n setChats: (chats: StructChatResponse[], threadId: StructThread[\"id\"]) => void;\n clearChats: () => void;\n clearSelectedChats: () => void;\n setSelectedChats: (\n threadId: StructThread[\"id\"],\n chatIds: StructChatResponse[\"id\"][],\n ) => void;\n setChatMessages: (\n threadId: StructThread[\"id\"],\n newChatMessages: StructChatResponse[],\n ) => void;\n setChatMessage: (\n threadId: StructThread[\"id\"],\n newChatMessage: StructChatResponse,\n ) => void;\n toggleSelectedChatMessage: (\n threadId: StructThread[\"id\"],\n chatId: StructChatResponse[\"id\"],\n ) => void;\n updateChatMessage: (\n threadId: StructThread[\"id\"],\n message: StructChatResponse,\n ) => void;\n deleteChatMessage: (\n threadId: StructThread[\"id\"],\n chatMessageId: StructChatResponse[\"id\"],\n ) => void;\n\n // Chat Reaction\n setChatReaction: (\n threadId: StructThread[\"id\"],\n chatMessageId: StructChatResponse[\"id\"],\n reaction: ReactionResponse,\n ) => void;\n deleteChatReaction: (\n threadId: StructThread[\"id\"],\n chatMessageId: StructChatResponse[\"id\"],\n reaction: {\n name: string;\n user_id: string;\n },\n ) => void;\n\n // Chat Edit Mode\n chatIdInEditMode: StructChat[\"id\"] | null;\n setChatIdInEditMode: (chatId: StructChat[\"id\"]) => void;\n setLastChatInThreadInEditMode: (\n threadId: StructThread[\"id\"],\n userId: StructUser[\"id\"],\n ) => void;\n clearChatIdInEditMode: () => void;\n\n // Chat Reply\n chatReply: ChatReply | null;\n getChatReply: () => ChatReply | null;\n setChatReply: (chatReply: ChatReply) => void;\n clearChatReply: () => void;\n}\n\nconst INITIAL_STATE = {};\n\nconst populateChats = (chats: StructChatResponse[]): StructChat[] => {\n return uniqBy(chats, \"id\").sort((a, b) => a.created_at - b.created_at);\n};\n\nexport const createChatsStore: StateCreator = (set, get) => ({\n chatsByThreadId: INITIAL_STATE,\n selectedChatsByThreadId: {},\n chatIdInEditMode: null,\n chatReply: null,\n setChatReply: (chatReply) => set({ chatReply }),\n getChatReply: () => get().chatReply,\n clearChatReply: () => set({ chatReply: null }),\n setChats: (chats: StructChatResponse[], threadId: StructThread[\"id\"]) =>\n set(({ chatsByThreadId }) => {\n return {\n chatsByThreadId: {\n ...chatsByThreadId,\n [threadId]: populateChats(chats),\n },\n };\n }),\n setChatMessages: (threadId, newChatMessages: StructChatResponse[]) =>\n set(({ chatsByThreadId }) => {\n const currentChats = chatsByThreadId[threadId] || [];\n\n const updatedChats = [...currentChats, ...populateChats(newChatMessages)];\n\n return {\n chatsByThreadId: {\n ...chatsByThreadId,\n [threadId]: uniqBy(updatedChats, \"id\"),\n },\n };\n }),\n\n toggleSelectedChatMessage: (threadId, chatId) =>\n set(({ selectedChatsByThreadId }) => {\n const currentSelectedChats = selectedChatsByThreadId[threadId] || [];\n\n const updatedSelectedChats = currentSelectedChats.includes(chatId)\n ? currentSelectedChats.filter((id) => id !== chatId)\n : [...currentSelectedChats, chatId];\n\n return {\n selectedChatsByThreadId: {\n ...selectedChatsByThreadId,\n [threadId]: uniq(updatedSelectedChats),\n },\n };\n }),\n\n clearSelectedChats: () => set({ selectedChatsByThreadId: INITIAL_STATE }),\n setSelectedChats: (\n threadId: StructThread[\"id\"],\n chatIds: StructChat[\"id\"][],\n ) =>\n set(({ selectedChatsByThreadId }) => {\n selectedChatsByThreadId[threadId] = chatIds;\n return {\n selectedChatsByThreadId,\n };\n }),\n\n setChatMessage: (threadId, newChatMessage: StructChatResponse) =>\n set(({ chatsByThreadId }) => {\n const currentChats = chatsByThreadId[threadId] || [];\n\n const isChatAlreadyExists = currentChats.find(\n (chat) => chat.id === newChatMessage.id,\n );\n\n if (isChatAlreadyExists) {\n return { chatsByThreadId };\n }\n\n const updatedChats = [\n ...currentChats,\n ...populateChats([newChatMessage]),\n ];\n return {\n chatsByThreadId: {\n ...chatsByThreadId,\n [threadId]: updatedChats,\n },\n };\n }),\n updateChatMessage: (\n threadId,\n updatedChatData: {\n id: string;\n text: string;\n updated_at: number;\n },\n ) =>\n set(({ chatsByThreadId }) => {\n const threadChats = chatsByThreadId?.[threadId]?.flatMap((chat) => {\n // Skip (delete) the chat message if the text is \" \"\n if (chat.id === updatedChatData.id && updatedChatData.text === \" \") {\n return [];\n }\n\n // Update the chat message if it's the one being updated\n if (chat.id === updatedChatData.id) {\n return populateChats([{ ...chat, ...updatedChatData }]);\n }\n\n // Keep the chat message if it's not the one being updated\n return [chat];\n });\n\n return {\n chatsByThreadId: {\n ...chatsByThreadId,\n [threadId]: threadChats,\n },\n };\n }),\n deleteChatMessage: (\n threadId: StructThread[\"id\"],\n chatMessageId: StructChatResponse[\"id\"],\n ) =>\n set(({ chatsByThreadId }) => {\n const currentThread = chatsByThreadId[threadId] || [];\n\n const updatedThread = currentThread.filter(\n (chat) => chat.id !== chatMessageId,\n );\n\n return {\n chatsByThreadId: {\n ...chatsByThreadId,\n [threadId]: updatedThread,\n },\n };\n }),\n setChatReaction: (threadId, chatMessageId, reaction) =>\n set(({ chatsByThreadId }) => {\n // Get the current thread\n const threadChats = chatsByThreadId[threadId] || [];\n\n // Map through the chat messages and update the reactions\n const updatedThreadChats = threadChats.map((chat) => {\n if (chat.id !== chatMessageId) {\n return chat;\n }\n\n // Ensure the reactions array exists\n if (!chat.reactions) {\n chat.reactions = [];\n }\n\n // Find the existing reaction if it exists\n const existingReaction = chat.reactions.find(\n (existingReaction) => existingReaction.name === reaction.name,\n );\n\n // Update the reaction if it exists\n if (existingReaction) {\n existingReaction.count += 1;\n existingReaction.user_ids?.push(reaction.user_id!);\n return chat;\n }\n\n // Add a new reaction if it doesn't exist\n chat.reactions.push({\n name: reaction.name,\n count: 1,\n user_ids: [reaction.user_id!],\n block: reaction.block,\n entity_map: reaction.entity_map || {},\n });\n\n return chat;\n });\n\n return {\n chatsByThreadId: {\n ...chatsByThreadId,\n [threadId]: updatedThreadChats,\n },\n };\n }),\n\n deleteChatReaction: (threadId, chatMessageId, reaction) =>\n set(({ chatsByThreadId }) => {\n // Get the current thread\n const currentThread = chatsByThreadId[threadId] || [];\n\n // Map through the chat messages and update the reactions\n const updatedThread = currentThread.map((chat) => {\n if (chat.id !== chatMessageId || !chat.reactions) {\n return chat;\n }\n\n // Find the existing reaction if it exists\n const existingReaction = chat.reactions.find(\n ({ name }) => name === reaction.name,\n );\n\n if (!existingReaction) {\n return chat;\n }\n\n // Update the reaction\n existingReaction.count -= 1;\n existingReaction.user_ids = existingReaction.user_ids?.filter(\n (user_id) => user_id !== reaction.user_id,\n );\n\n // Remove the reaction if the count is zero\n if (existingReaction.count <= 0) {\n chat.reactions = chat.reactions.filter(\n ({ name }) => name !== reaction.name,\n );\n }\n\n return chat;\n });\n\n return {\n chatsByThreadId: {\n ...chatsByThreadId,\n [threadId]: updatedThread,\n },\n };\n }),\n setChatIdInEditMode: (chatId) => set({ chatIdInEditMode: chatId }),\n clearChatIdInEditMode: () => set({ chatIdInEditMode: null }),\n setLastChatInThreadInEditMode: (\n threadId: StructThread[\"id\"],\n userId: StructUser[\"id\"],\n ) =>\n set(({ chatsByThreadId }) => {\n const threadChats = chatsByThreadId[threadId];\n if (!threadChats || threadChats.length === 0) {\n return { chatIdInEditMode: null };\n }\n\n const lastChat = threadChats[threadChats.length - 1];\n\n return {\n chatIdInEditMode: lastChat.author_id === userId ? lastChat.id : null,\n };\n }),\n clearChats: () => set({ chatsByThreadId: INITIAL_STATE }),\n});\n","import { StateCreator } from \"zustand\";\nimport { StructTag } from \"@/app/types/Tag.type\";\n\nexport interface TagsStoreState {\n tags: StructTag[];\n setTags: (tags: StructTag[]) => void;\n setTag: (tag: string) => void;\n getTags: (prefix: string) => StructTag[];\n}\n\nexport const createTagsStore: StateCreator = (set, get) => ({\n tags: [],\n setTag: (tag: string) => {\n const tags = get().tags;\n tags.push({ tag, count: 1 });\n set({ tags });\n },\n setTags: (src: StructTag[]) => {\n const tags = src;\n // Let's sort them upfront, so we don't have to do it later.\n tags.sort((a, b) => {\n return b.count - a.count; // reverse sort by count\n });\n set({ tags });\n },\n getTags: (prefix: string) => {\n const out: StructTag[] = [];\n for (const t of get().tags) {\n if (t.tag.startsWith(prefix)) {\n out.push(t);\n }\n if (out.length >= 1000) {\n return out;\n }\n }\n // These are naturally sorted by most used first.\n return out;\n },\n});\n","import { StateCreator } from \"zustand\";\nimport { StructFeed } from \"@/app/types/Feed.type\";\n\nexport interface FeedsStoreState {\n feeds: StructFeed[];\n threadCountByFeedId: Record;\n unreadThreadCountByFeedId: Record;\n selectedFeedIds: StructFeed[\"id\"][] | [];\n toggleSelectedFeedIds: (feedIds: StructFeed[\"id\"][]) => void;\n setThreadCountByFeedId: (\n feedId: StructFeed[\"id\"],\n threadCount: number,\n ) => void;\n setUnreadThreadCountByFeedId: (\n feedId: StructFeed[\"id\"],\n threadCount: number,\n ) => void;\n setFeeds: (tags: StructFeed[]) => void;\n setFeed: (feed: StructFeed) => void;\n getFeeds: () => StructFeed[];\n updateFeed: (partialFeed: Partial) => void;\n deleteStoreFeed: (id: StructFeed[\"id\"]) => void;\n}\n\nexport const createFeedsStore: StateCreator = (\n set,\n get,\n api,\n) => ({\n feeds: [],\n threadCountByFeedId: {},\n unreadThreadCountByFeedId: {},\n selectedFeedIds: [],\n toggleSelectedFeedIds: (feedIds: StructFeed[\"id\"][]) => {\n set((state) => {\n const existingFeedIds = state.selectedFeedIds as string[];\n feedIds.forEach((feedId) => {\n if (existingFeedIds.includes(feedId)) {\n existingFeedIds.splice(existingFeedIds.indexOf(feedId), 1);\n } else {\n existingFeedIds.push(feedId);\n }\n });\n return {\n selectedFeedIds: existingFeedIds,\n };\n });\n },\n setThreadCountByFeedId: (feedId: StructFeed[\"id\"], threadCount: number) => {\n set((state) => ({\n threadCountByFeedId: {\n ...state.threadCountByFeedId,\n [feedId]: threadCount,\n },\n }));\n },\n setUnreadThreadCountByFeedId: (\n feedId: StructFeed[\"id\"],\n threadCount: number,\n ) => {\n set((state) => ({\n unreadThreadCountByFeedId: {\n ...state.unreadThreadCountByFeedId,\n [feedId]: threadCount,\n },\n }));\n },\n setFeeds: (feeds: StructFeed[]) => {\n set({ feeds });\n },\n setFeed: (feed: StructFeed) => {\n set((state) => ({\n feeds: [...state.feeds, feed],\n }));\n },\n updateFeed: (partialFeed: Partial) => {\n set((state) => ({\n feeds: state.feeds.map((feed) =>\n feed.id === partialFeed.id ? { ...feed, ...partialFeed } : feed,\n ),\n }));\n },\n getFeeds: () => get().feeds,\n deleteStoreFeed: (id: StructFeed[\"id\"]) => {\n set((state) => ({\n feeds: state.feeds.filter((feed) => feed.id !== id),\n }));\n },\n});\n","import { StateCreator } from \"zustand\";\n\nexport interface EditorCommands {\n insertMention: (mentionData: MentionData) => void;\n focus: () => void;\n blur: () => void;\n insertContent: (content: string) => void;\n clearContent: () => void;\n insertCharacter: (character: string) => void;\n}\n\ninterface MentionData {\n id: string;\n label: string;\n}\n\nexport interface DocNode {\n type: \"doc\";\n content: ParagraphNode[];\n}\n\ninterface ParagraphNode {\n type: \"paragraph\";\n content: (TextNode | MentionNode)[];\n}\n\nexport interface TextNode {\n type: \"text\";\n text: string;\n}\n\nexport interface MentionNode {\n type: \"mention\";\n attrs: {\n id: string;\n label: string;\n };\n}\n\nexport interface ChatBoxStoreState {\n initialContent: DocNode | null;\n setInitialContent: (content: DocNode | null) => void;\n chatBoxCommands: EditorCommands | null;\n setChatBoxCommands: (commands: EditorCommands) => void;\n getChatBoxCommands: () => EditorCommands | null;\n}\n\nexport const createChatBoxStore: StateCreator = (\n set,\n get,\n) => ({\n initialContent: null,\n chatBoxCommands: null,\n setInitialContent: (content) => set({ initialContent: content }),\n getChatBoxCommands: () => get().chatBoxCommands,\n setChatBoxCommands: (commands) => set({ chatBoxCommands: commands }),\n});\n","import { create } from \"zustand\";\nimport { createThreadsStore, ThreadsStoreState } from \"./Threads.store\";\nimport {\n createOrganisationStore,\n OrganisationStoreState,\n} from \"./Organisation.store\";\nimport { createUsersStore, UsersStoreState } from \"./Users.store\";\nimport { createAppStore, AppStoreState } from \"./App.store\";\nimport { createAuthStore, AuthStoreState } from \"./Auth.store\";\nimport {\n createSortingStore,\n SortingStoreState,\n} from \"@/app/store/Sorting.store\";\nimport {\n createFiltersStore,\n FiltersStoreState,\n} from \"@/app/store/Filters.store\";\nimport {\n createSearchQueryStore,\n SearchQueryStoreState,\n} from \"@/app/store/SearchQuery.store\";\nimport {\n createTypingIndicatorStore,\n TypingIndicatorStoreState,\n} from \"@/app/store/TypingIndicator.store\";\nimport { ChatsStoreState, createChatsStore } from \"@/app/store/Chats.store\";\nimport { createTagsStore, TagsStoreState } from \"@/app/store/Tags.store\";\nimport { createFeedsStore, FeedsStoreState } from \"@/app/store/Feeds.store\";\nimport {\n ChatBoxStoreState,\n createChatBoxStore,\n} from \"@/app/store/ChatBox.store\";\n\nexport type StoreState = ThreadsStoreState &\n OrganisationStoreState &\n UsersStoreState &\n TagsStoreState &\n AppStoreState &\n AuthStoreState &\n SortingStoreState &\n FiltersStoreState &\n SearchQueryStoreState &\n TypingIndicatorStoreState &\n ChatsStoreState &\n FeedsStoreState &\n ChatBoxStoreState;\n\nexport const useAppStore = create()((...a) => ({\n ...createAppStore(...a),\n ...createThreadsStore(...a),\n ...createOrganisationStore(...a),\n ...createUsersStore(...a),\n ...createAuthStore(...a),\n ...createSortingStore(...a),\n ...createFiltersStore(...a),\n ...createSearchQueryStore(...a),\n ...createTypingIndicatorStore(...a),\n ...createChatsStore(...a),\n ...createTagsStore(...a),\n ...createFeedsStore(...a),\n ...createChatBoxStore(...a),\n}));\n\n// To support computed values from within the store, we need to export the store without `use` prefix to avoid hooks warning\nexport const globalStore = useAppStore;\n\nconst storeResetFns = new Set<() => void>();\n\nexport const resetAllStores = () => {\n storeResetFns.forEach((resetFn) => {\n resetFn();\n });\n};\n\nconst initialState = useAppStore.getState();\nstoreResetFns.add(() => {\n useAppStore.setState(initialState, true);\n});\n","const SortAscendingIcon = ({ className }: { className?: string }) => (\n \n \n \n \n \n \n);\nexport default SortAscendingIcon;\n","const SortDescendingIcon = ({ className }: { className?: string }) => (\n \n \n \n \n \n \n);\nexport default SortDescendingIcon;\n","import { CaretSortIcon } from \"@radix-ui/react-icons\";\nimport SortAscendingIcon from \"../components/icons/SortAscendingIcon\";\nimport SortDescendingIcon from \"../components/icons/SortDescendingIcon\";\n\nexport enum SortingOption {\n Relevance = \"\",\n UpdatedAscending = \"updated_at:asc\",\n UpdatedDescending = \"updated_at:desc\",\n CreatedAscending = \"created_at:asc\",\n CreatedDescending = \"created_at:desc\",\n}\n\nexport const sortingNameMap = {\n [SortingOption.Relevance]: {\n label: \"Relevance\",\n icon: CaretSortIcon,\n },\n [SortingOption.UpdatedAscending]: {\n label: \"Updated\",\n icon: SortAscendingIcon,\n },\n [SortingOption.UpdatedDescending]: {\n label: \"Updated\",\n icon: SortDescendingIcon,\n },\n [SortingOption.CreatedAscending]: {\n label: \"Created\",\n icon: SortAscendingIcon,\n },\n [SortingOption.CreatedDescending]: {\n label: \"Created\",\n icon: SortDescendingIcon,\n },\n};\n","import { StructThread } from \"@/app/types/Thread.type\";\nimport { FeedFilter } from \"./../types/FeedFitler.type\";\nimport mitt, { Emitter } from \"mitt\";\nimport {\n FORCE_REFRESH_FEED,\n REFRESH_CHAT_TIMESTAMP,\n TRIGGER_FEED_FILTERS_MODAL,\n WS_PING_RECEIVED,\n REMOVE_FROM_FEED_KEEP_THREAD_OPEN,\n EMBED_THREAD_FROM_CMDK,\n TRIGGER_NOTIFICATION,\n REALTIME_RECONNECTION_TRIGGERED,\n} from \"../eventConstants\";\nimport { CreateFeedPayload, StructFeed } from \"../types/Feed.type\";\n\ntype Events = {\n [TRIGGER_FEED_FILTERS_MODAL]?: {\n filters?: FeedFilter[];\n feedId?: string;\n name?: string;\n emoji?: string;\n bits?: CreateFeedPayload[\"bits\"];\n entityMap?: StructFeed[\"entity_map\"];\n };\n [FORCE_REFRESH_FEED]: { currentFeedId: string };\n [REFRESH_CHAT_TIMESTAMP]?: {};\n [WS_PING_RECEIVED]?: {};\n [REMOVE_FROM_FEED_KEEP_THREAD_OPEN]: { thread: StructThread | null };\n [EMBED_THREAD_FROM_CMDK]: {\n id: StructThread[\"id\"];\n label: StructThread[\"subject\"];\n };\n [TRIGGER_NOTIFICATION]: {\n title: string;\n options: NotificationOptions;\n threadId: string;\n isMentioned: boolean;\n };\n [REALTIME_RECONNECTION_TRIGGERED]: {};\n};\n\nconst allEvents = new Map();\n\nconst events: Emitter = mitt(allEvents);\n\nexport const removeAllEvents = () => allEvents.clear();\n\nexport default events;\n","import { Read, StructThread } from \"../types/Thread.type\";\n\nexport const isWindow = typeof window !== \"undefined\";\n\nexport const getStateDeterministically = async (setState: any) => {\n return new Promise((resolve) => {\n setState((prevState: any) => {\n resolve(prevState);\n return prevState;\n });\n });\n};\n\nexport const getThreadStatusBadge = (\n threadBits: StructThread[\"bits\"],\n threadReadBits: Read[\"bits\"],\n) => {\n if (threadBits.hidden) {\n return \"hiddenFromAll\";\n } else if (threadReadBits.feed_hidden) {\n return \"hidden\";\n } else if (threadBits.feed_dm) {\n return \"private\";\n } else if (threadBits.feed_dm_self) {\n return \"myEyesOnly\";\n }\n return \"\";\n};\n","const IMAGE_SERVER_BASE_URL = `https://app.struct.ai/images`;\n\nexport const getAvatarImageURL = (avatar_id: string, size = 64) =>\n `${IMAGE_SERVER_BASE_URL}/${avatar_id}/${size}`;\n\nexport const getChatImageURL = (imageHash: string, quality: number = 512) =>\n `${IMAGE_SERVER_BASE_URL}/${imageHash}/${quality}`;\n\nexport const getReactionImageURL = (orgXid: string, emojiCode: string) =>\n `${IMAGE_SERVER_BASE_URL}/e-${orgXid}-${emojiCode}/64`;\n","import { v4 as uuidv4 } from \"uuid\";\nlet deviceId = Math.random();\nif (typeof window !== \"undefined\") {\n deviceId =\n sessionStorage.deviceId && sessionStorage.closedLastTab !== \"2\"\n ? sessionStorage.deviceId\n : (sessionStorage.deviceId = uuidv4());\n sessionStorage.closedLastTab = \"2\";\n\n window.addEventListener(\"unload\", function (e) {\n sessionStorage.closedLastTab = \"1\";\n });\n window.addEventListener(\"beforeunload\", function (e) {\n sessionStorage.closedLastTab = \"1\";\n });\n}\n\nexport { deviceId };\n"],"names":["__webpack_exports__","Z","title","onCancel","onConfirm","primaryLabel","secondaryLabel","param","isLoading","setIsLoading","useState","handleConfirm","event","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","AlertDialog","Root","defaultOpen","jsxs","Content","style","maxWidth","Title","Flex","gap","mt","justify","Button","disabled","variant","color","onClick","EntityIDMap","STRUCT_API_URL","process","env","NEXT_PUBLIC_STRUCT_SERVER_URL","STRUCT_API_VERSION","APP_VERSION","ID_SERVER_URL","isWindow","window","isProduction","endsWith","isApp","location","host","split","ENABLE_CHAT_HTTP_RESPONSE_INSERT","isDesktopPlatform","__TAURI__","DESKTOP_APP_VERSION","FEED_VIEW_PLACEHOLDER","CHAT_VIEW_PLACEHOLDER","SLACK_ACTION_DISABLED","SLACK_FORK_ENABLE_TAG","SLACK_LEVEL_3_PERMISSIONS","EXCLUDE_TRACKING_ORG_IDS","generateOauthURL","idServer","redirect_to","concat","generateLogoutURL","hostname","useApp","router","useRouter","session","useAppStore","state","isSlackOrg","organisation","bits","org_slack","isDiscordOrg","org_discord","isAuthenticatedWithCorrectOrg","logOut","currentURL","href","redirectURL","URL","push","featureToggles","canInviteMembers","canCreateChannel","canLeaveChannel","canJoinChannel","canAddMembersToChannel","canEditChannel","canCreateThreadFromChat","canReplyToChat","canReactToChat","canStartChatWithMembers","canDeleteChat","Boolean","isAdmin","isOwner","isModerator","isLiveViewEnabled","isChatEnabled","isMembersPageEnabled","isChannelsPageEnabled","isOrganisationUserRole","logIn","structAPIFetchClient","url","options","showError","isFormData","body","FormData","defaultHeaders","Accept","deviceId","credentials","headers","fetch","redirect","then","response","ok","includes","status","globalStore","getState","notification","error","message","duration","text","FeedModes","DEFAULT_FEED_ID","DEFAULT_SEARCH_FEED_ID","createAppStore","isInitialized","isUnreadFeedFilterActive","feedTimeRange","feedMode","isHeaderExpanded","isCommandMenuVisible","isCommandMenuVisibleViaMentionPanel","currentFeedId","isRealtimeConnectionActive","shouldResync","shouldUpgrade","setFeedTimeRange","set","value","setIsHeaderExpanded","setFeedMode","setInitialized","setIsRealtimeConnectionActive","setIsCommandMenuVisible","isViaMentionPanel","setCurrentFeedId","feedId","toggleUnreadFilter","setShouldResync","setShouldUpgrade","INITIAL_STATE","createThreadsStore","get","threadsById","openThreadsById","selectedThreadIds","getThreadsById","similarThreadsById","readUntilByThreadId","setOpenThreadById","threadId","thread","updatedThreadsById","omit","setSelectedThreadIds","threadIds","toggleSelectedThreadIds","existingThreadIds","forEach","splice","indexOf","setThreads","threads","reduce","acc","id","chats","slice","setThreadById","moveThreadToTop","existingThread","reorderedThreadsById","Object","keys","filter","updateThreads","deleteThreads","getThreads","values","setSimilarThreadsById","insertThreadChatById","chatMessage","chatExists","some","chat","updatedChats","removeThreadChatById","chatId","updateThreadChatById","updatedChat","chatIndex","findIndex","updateThreadsById","index","length","updatedFields","merge","read","updateThreadById","updatedThread","setReadUntilByThreadId","setBulkReadUntilByThreadId","clearThreads","createOrganisationStore","setOrganisation","updateOrganisation","data","clearOrganisation","createUsersStore","onlineUserIds","addOnlineUserId","currentOnlineUsers","userId","removeOnlineUserId","createAuthStore","undefined","isAuthenticated","setSession","email","user","updateSessionUser","defaultSorting","SortingOption","Relevance","sortingToggleOptionMap","CreatedAscending","CreatedDescending","UpdatedAscending","UpdatedDescending","createSortingStore","sorting","setSorting","toggleSorting","clearSorting","INIT_FILTERS","users","channels","tags","createFiltersStore","filters","setFilters","setFilter","filterType","currentFilters","addFilter","setFiltersByType","ids","removeFilter","updatedFilters","clearFilters","createSearchQueryStore","searchQuery","formattedSearchQuery","setSearchQuery","setFormattedSearchQuery","clearSearchQuery","createTypingIndicatorStore","typingUsersByThreadId","typingUserNamesById","addUserTyping","userName","existingUsers","removeUserTyping","updatedUsers","_","rest","populateChats","uniqBy","sort","a","b","created_at","createChatsStore","chatsByThreadId","selectedChatsByThreadId","chatIdInEditMode","chatReply","setChatReply","getChatReply","clearChatReply","setChats","setChatMessages","newChatMessages","currentChats","toggleSelectedChatMessage","currentSelectedChats","updatedSelectedChats","uniq","clearSelectedChats","setSelectedChats","chatIds","setChatMessage","newChatMessage","isChatAlreadyExists","find","updateChatMessage","updatedChatData","threadChats","flatMap","deleteChatMessage","chatMessageId","currentThread","setChatReaction","reaction","updatedThreadChats","map","reactions","existingReaction","name","count","user_ids","user_id","block","entity_map","deleteChatReaction","setChatIdInEditMode","clearChatIdInEditMode","setLastChatInThreadInEditMode","lastChat","author_id","clearChats","createTagsStore","setTag","tag","setTags","src","getTags","out","t","startsWith","prefix","createFeedsStore","api","feeds","threadCountByFeedId","unreadThreadCountByFeedId","selectedFeedIds","toggleSelectedFeedIds","existingFeedIds","feedIds","setThreadCountByFeedId","threadCount","setUnreadThreadCountByFeedId","setFeeds","setFeed","feed","updateFeed","partialFeed","getFeeds","deleteStoreFeed","createChatBoxStore","initialContent","chatBoxCommands","setInitialContent","content","getChatBoxCommands","setChatBoxCommands","commands","create","storeResetFns","Set","resetAllStores","resetFn","initialState","add","setState","CaretSortIcon","allEvents","Map","events","mitt","removeAllEvents","clear","getStateDeterministically","Promise","resolve","prevState","getThreadStatusBadge","threadBits","threadReadBits","hidden","feed_hidden","feed_dm","feed_dm_self","IMAGE_SERVER_BASE_URL","getAvatarImageURL","avatar_id","size","getChatImageURL","imageHash","quality","getReactionImageURL","orgXid","emojiCode","Math","random","sessionStorage","closedLastTab","uuidv4","addEventListener","e"],"sourceRoot":""}