@linktr.ee/messaging-react 1.0.0 โ†’ 1.0.2

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.
Files changed (42) hide show
  1. package/dist/index.js +149 -140
  2. package/dist/index.js.map +1 -1
  3. package/package.json +5 -4
  4. package/src/components/ActionButton/ActionButton.stories.tsx +46 -0
  5. package/src/components/ActionButton/ActionButton.test.tsx +112 -0
  6. package/src/components/ActionButton/index.tsx +33 -0
  7. package/src/components/Avatar/Avatar.stories.tsx +144 -0
  8. package/src/components/Avatar/avatarColors.ts +35 -0
  9. package/src/components/Avatar/index.tsx +64 -0
  10. package/src/components/ChannelList/ChannelList.stories.tsx +48 -0
  11. package/src/components/ChannelList/CustomChannelPreview.stories.tsx +303 -0
  12. package/src/components/ChannelList/CustomChannelPreview.tsx +121 -0
  13. package/src/components/ChannelList/index.tsx +129 -0
  14. package/src/components/ChannelView.tsx +422 -0
  15. package/src/components/CloseButton/index.tsx +16 -0
  16. package/src/components/IconButton/IconButton.stories.tsx +40 -0
  17. package/src/components/IconButton/index.tsx +32 -0
  18. package/src/components/Loading/Loading.stories.tsx +24 -0
  19. package/src/components/Loading/index.tsx +50 -0
  20. package/src/components/MessagingShell/EmptyState.stories.tsx +38 -0
  21. package/src/components/MessagingShell/EmptyState.tsx +58 -0
  22. package/src/components/MessagingShell/ErrorState.stories.tsx +42 -0
  23. package/src/components/MessagingShell/ErrorState.tsx +33 -0
  24. package/src/components/MessagingShell/LoadingState.stories.tsx +26 -0
  25. package/src/components/MessagingShell/LoadingState.tsx +15 -0
  26. package/src/components/MessagingShell/index.tsx +298 -0
  27. package/src/components/ParticipantPicker/ParticipantItem.stories.tsx +188 -0
  28. package/src/components/ParticipantPicker/ParticipantItem.tsx +59 -0
  29. package/src/components/ParticipantPicker/ParticipantPicker.stories.tsx +54 -0
  30. package/src/components/ParticipantPicker/ParticipantPicker.tsx +196 -0
  31. package/src/components/ParticipantPicker/index.tsx +234 -0
  32. package/src/components/SearchInput/SearchInput.stories.tsx +33 -0
  33. package/src/components/SearchInput/SearchInput.test.tsx +108 -0
  34. package/src/components/SearchInput/index.tsx +50 -0
  35. package/src/hooks/useMessaging.ts +9 -0
  36. package/src/hooks/useParticipants.ts +92 -0
  37. package/src/index.ts +26 -0
  38. package/src/providers/MessagingProvider.tsx +282 -0
  39. package/src/stories/mocks.tsx +157 -0
  40. package/src/test/setup.ts +30 -0
  41. package/src/test/utils.tsx +23 -0
  42. package/src/types.ts +113 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../node_modules/@phosphor-icons/react/dist/lib/context.es.js","../../../node_modules/@phosphor-icons/react/dist/lib/IconBase.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/NotePencil.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/NotePencil.es.js","../src/components/IconButton/index.tsx","../src/providers/MessagingProvider.tsx","../src/components/Avatar/avatarColors.ts","../src/components/Avatar/index.tsx","../src/components/ChannelList/CustomChannelPreview.tsx","../src/components/ChannelList/index.tsx","../../../node_modules/@phosphor-icons/react/dist/defs/Flag.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/Flag.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/ProhibitInset.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/ProhibitInset.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/SignOut.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/SignOut.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/SpinnerGap.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/SpinnerGap.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/ArrowLeft.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/ArrowLeft.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/DotsThree.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/DotsThree.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/X.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/X.es.js","../src/components/CloseButton/index.tsx","../src/components/ActionButton/index.tsx","../src/components/ChannelView.tsx","../../../node_modules/@phosphor-icons/react/dist/defs/ChatCircleDots.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/ChatCircleDots.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/MagnifyingGlass.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/MagnifyingGlass.es.js","../src/components/SearchInput/index.tsx","../src/components/ParticipantPicker/index.tsx","../src/hooks/useMessaging.ts","../src/components/MessagingShell/EmptyState.tsx","../src/components/Loading/index.tsx","../src/components/MessagingShell/LoadingState.tsx","../src/components/MessagingShell/ErrorState.tsx","../src/components/MessagingShell/index.tsx","../src/hooks/useParticipants.ts"],"sourcesContent":["import { createContext as r } from \"react\";\nconst o = r({\n color: \"currentColor\",\n size: \"1em\",\n weight: \"regular\",\n mirrored: !1\n});\nexport {\n o as IconContext\n};\n","import * as e from \"react\";\nimport { IconContext as h } from \"./context.es.js\";\nconst p = e.forwardRef(\n (s, a) => {\n const {\n alt: n,\n color: r,\n size: t,\n weight: o,\n mirrored: c,\n children: i,\n weights: m,\n ...x\n } = s, {\n color: d = \"currentColor\",\n size: l,\n weight: f = \"regular\",\n mirrored: g = !1,\n ...w\n } = e.useContext(h);\n return /* @__PURE__ */ e.createElement(\n \"svg\",\n {\n ref: a,\n xmlns: \"http://www.w3.org/2000/svg\",\n width: t != null ? t : l,\n height: t != null ? t : l,\n fill: r != null ? r : d,\n viewBox: \"0 0 256 256\",\n transform: c || g ? \"scale(-1, 1)\" : void 0,\n ...w,\n ...x\n },\n !!n && /* @__PURE__ */ e.createElement(\"title\", null, n),\n i,\n m.get(o != null ? o : f)\n );\n }\n);\np.displayName = \"IconBase\";\nexport {\n p as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M232.49,55.51l-32-32a12,12,0,0,0-17,0l-96,96A12,12,0,0,0,84,128v32a12,12,0,0,0,12,12h32a12,12,0,0,0,8.49-3.51l96-96A12,12,0,0,0,232.49,55.51ZM192,49l15,15L196,75,181,60Zm-69,99H108V133l56-56,15,15Zm105-7.43V208a20,20,0,0,1-20,20H48a20,20,0,0,1-20-20V48A20,20,0,0,1,48,28h67.43a12,12,0,0,1,0,24H52V204H204V140.57a12,12,0,0,1,24,0Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,88l-72,72H96V128l72-72Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M229.66,58.34l-32-32a8,8,0,0,0-11.32,0l-96,96A8,8,0,0,0,88,128v32a8,8,0,0,0,8,8h32a8,8,0,0,0,5.66-2.34l96-96A8,8,0,0,0,229.66,58.34ZM124.69,152H104V131.31l64-64L188.69,88ZM200,76.69,179.31,56,192,43.31,212.69,64ZM224,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32h80a8,8,0,0,1,0,16H48V208H208V128a8,8,0,0,1,16,0Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32h80a8,8,0,0,1,0,16H48V208H208V128a8,8,0,0,1,16,0Zm5.66-58.34-96,96A8,8,0,0,1,128,168H96a8,8,0,0,1-8-8V128a8,8,0,0,1,2.34-5.66l96-96a8,8,0,0,1,11.32,0l32,32A8,8,0,0,1,229.66,69.66Zm-17-5.66L192,43.31,179.31,56,200,76.69Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M228.24,59.76l-32-32a6,6,0,0,0-8.48,0l-96,96A6,6,0,0,0,90,128v32a6,6,0,0,0,6,6h32a6,6,0,0,0,4.24-1.76l96-96A6,6,0,0,0,228.24,59.76ZM125.51,154H102V130.49l66-66L191.51,88ZM200,79.51,176.49,56,192,40.49,215.51,64ZM222,128v80a14,14,0,0,1-14,14H48a14,14,0,0,1-14-14V48A14,14,0,0,1,48,34h80a6,6,0,0,1,0,12H48a2,2,0,0,0-2,2V208a2,2,0,0,0,2,2H208a2,2,0,0,0,2-2V128a6,6,0,0,1,12,0Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M229.66,58.34l-32-32a8,8,0,0,0-11.32,0l-96,96A8,8,0,0,0,88,128v32a8,8,0,0,0,8,8h32a8,8,0,0,0,5.66-2.34l96-96A8,8,0,0,0,229.66,58.34ZM124.69,152H104V131.31l64-64L188.69,88ZM200,76.69,179.31,56,192,43.31,212.69,64ZM224,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32h80a8,8,0,0,1,0,16H48V208H208V128a8,8,0,0,1,16,0Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M226.83,61.17l-32-32a4,4,0,0,0-5.66,0l-96,96A4,4,0,0,0,92,128v32a4,4,0,0,0,4,4h32a4,4,0,0,0,2.83-1.17l96-96A4,4,0,0,0,226.83,61.17ZM126.34,156H100V129.66l68-68L194.34,88ZM200,82.34,173.66,56,192,37.66,218.34,64ZM220,128v80a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V48A12,12,0,0,1,48,36h80a4,4,0,0,1,0,8H48a4,4,0,0,0-4,4V208a4,4,0,0,0,4,4H208a4,4,0,0,0,4-4V128a4,4,0,0,1,8,0Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as e from \"react\";\nimport r from \"../lib/IconBase.es.js\";\nimport n from \"../defs/NotePencil.es.js\";\nconst o = e.forwardRef((t, c) => /* @__PURE__ */ e.createElement(r, { ref: c, ...t, weights: n }));\no.displayName = \"NotePencilIcon\";\nconst m = o;\nexport {\n m as NotePencil,\n o as NotePencilIcon\n};\n","import classNames from \"classnames\";\nimport React from \"react\";\n\ninterface IconButtonProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"type\" | \"children\"\n > {\n label: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function IconButton({ label, className, children, ...rest }: IconButtonProps) {\n return (\n <button\n type=\"button\"\n className={classNames(\n \"rounded-full p-2 transition-colors focus-ring\",\n {\n \"cursor-not-allowed opacity-50\": rest.disabled,\n \"hover:bg-sand\": !rest.disabled,\n },\n className,\n )}\n {...rest}\n >\n <span className=\"sr-only\">{label}</span>\n {children}\n </button>\n );\n}","import React, { createContext, useContext, useEffect, useState, useRef, useCallback } from 'react';\nimport type { Channel } from 'stream-chat';\nimport { Chat } from 'stream-chat-react';\nimport { StreamChatService } from '@linktr.ee/messaging-core';\n\nimport type { \n MessagingProviderProps, \n MessagingCapabilities,\n MessagingCustomization \n} from '../types';\n\n/**\n * Context value for messaging state and service\n */\nexport interface MessagingContextValue {\n service: StreamChatService | null;\n client: any; // Stream Chat client\n isConnected: boolean;\n isLoading: boolean;\n error: string | null;\n capabilities: MessagingCapabilities;\n customization: MessagingCustomization;\n refreshConnection: () => Promise<void>;\n debug: boolean;\n}\n\nconst MessagingContext = createContext<MessagingContextValue>({\n service: null,\n client: null,\n isConnected: false,\n isLoading: false,\n error: null,\n capabilities: {},\n customization: {},\n refreshConnection: async () => {},\n debug: false,\n});\n\n/**\n * Hook to access messaging context\n */\nexport const useMessagingContext = () => useContext(MessagingContext);\n\n/**\n * Provider component that wraps messaging-core with React state management\n */\nexport const MessagingProvider: React.FC<MessagingProviderProps> = ({\n children,\n user,\n serviceConfig,\n apiKey,\n capabilities = {},\n customization = {},\n debug = false,\n}) => {\n // Create debug logger that respects the debug prop\n const debugLog = (message: string, ...args: any[]) => {\n if (debug) {\n console.log(`๐Ÿ”ฅ [MessagingProvider] ${message}`, ...args);\n }\n };\n\n debugLog('๐Ÿ”„ RENDER START', {\n userId: user?.id,\n apiKey: apiKey?.substring(0, 8) + '...',\n serviceConfig: !!serviceConfig,\n capabilities: Object.keys(capabilities),\n customization: Object.keys(customization)\n });\n\n const [service, setService] = useState<StreamChatService | null>(null);\n const [client, setClient] = useState<any>(null);\n const [isConnected, setIsConnected] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n \n // Prevent multiple concurrent connection attempts\n const connectingRef = useRef(false);\n\n // Track renders and prop changes\n const prevPropsRef = useRef({ userId: user?.id, apiKey, serviceConfig, capabilities, customization });\n const renderCountRef = useRef(0);\n renderCountRef.current++;\n \n debugLog('๐Ÿ“Š RENDER INFO', {\n renderCount: renderCountRef.current,\n currentProps: { userId: user?.id, apiKey: apiKey?.substring(0, 8) + '...' },\n propChanges: {\n userChanged: prevPropsRef.current.userId !== user?.id,\n apiKeyChanged: prevPropsRef.current.apiKey !== apiKey,\n serviceConfigChanged: prevPropsRef.current.serviceConfig !== serviceConfig,\n capabilitiesChanged: prevPropsRef.current.capabilities !== capabilities,\n customizationChanged: prevPropsRef.current.customization !== customization\n }\n });\n \n prevPropsRef.current = { userId: user?.id, apiKey, serviceConfig, capabilities, customization };\n\n // Initialize service when config changes\n useEffect(() => {\n const currentRender = renderCountRef.current;\n debugLog('๐Ÿ”ง SERVICE INIT EFFECT TRIGGERED', {\n renderCount: currentRender,\n apiKey: !!apiKey,\n serviceConfig: !!serviceConfig,\n dependencies: { \n apiKey: apiKey?.substring(0, 8) + '...', \n serviceConfigRef: serviceConfig,\n serviceConfigStable: prevPropsRef.current.serviceConfig === serviceConfig,\n apiKeyStable: prevPropsRef.current.apiKey === apiKey\n }\n });\n\n if (!apiKey || !serviceConfig) {\n debugLog('โš ๏ธ SERVICE INIT SKIPPED', { renderCount: currentRender, reason: 'Missing apiKey or serviceConfig' });\n return;\n }\n\n debugLog('๐Ÿš€ CREATING NEW SERVICE', { \n renderCount: currentRender,\n apiKey: apiKey?.substring(0, 8) + '...',\n serviceConfigChanged: prevPropsRef.current.serviceConfig !== serviceConfig\n });\n \n const newService = new StreamChatService({\n ...serviceConfig,\n apiKey,\n debug,\n });\n\n setService(newService);\n debugLog('โœ… SERVICE SET', { renderCount: currentRender, serviceInstance: !!newService });\n \n return () => {\n debugLog('๐Ÿงน SERVICE CLEANUP', { renderCount: currentRender, reason: 'Effect cleanup' });\n newService.disconnectUser().catch(console.error);\n };\n }, [apiKey, serviceConfig]); // Use serviceConfig object directly, not individual properties\n\n // Track if we've already connected this user with this service to prevent duplicate connections\n const connectedUserRef = useRef<{serviceId: any, userId: string} | null>(null);\n\n // Connect user when service and user are available\n useEffect(() => {\n debugLog('๐Ÿ”— USER CONNECTION EFFECT TRIGGERED', {\n hasService: !!service,\n hasUser: !!user,\n userId: user?.id,\n isConnecting: connectingRef.current,\n isConnected: isConnected,\n dependencies: { service: !!service, userId: user?.id }\n });\n\n if (!service || !user) {\n debugLog('โš ๏ธ USER CONNECTION SKIPPED', 'Missing service or user');\n return;\n }\n \n if (connectingRef.current) {\n debugLog('โš ๏ธ USER CONNECTION SKIPPED', 'Already connecting');\n return;\n }\n \n // Check if we've already connected this exact user with this exact service instance\n if (connectedUserRef.current?.serviceId === service && connectedUserRef.current?.userId === user.id) {\n debugLog('โš ๏ธ USER CONNECTION SKIPPED', 'Already connected this user with this service');\n return;\n }\n\n const connectUser = async () => {\n debugLog('๐Ÿš€ STARTING USER CONNECTION', { userId: user.id });\n connectingRef.current = true;\n setIsLoading(true);\n setError(null);\n\n try {\n debugLog('๐Ÿ“ž CALLING SERVICE.CONNECTUSER', { userId: user.id });\n const streamClient = await service.connectUser(user);\n setClient(streamClient);\n setIsConnected(true);\n connectedUserRef.current = { serviceId: service, userId: user.id }; // Mark as connected\n debugLog('โœ… USER CONNECTION SUCCESS', { userId: user.id, clientId: streamClient.userID });\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Connection failed';\n setError(errorMessage);\n debugLog('โŒ USER CONNECTION ERROR', { userId: user.id, error: errorMessage });\n } finally {\n setIsLoading(false);\n connectingRef.current = false;\n debugLog('๐Ÿ”„ USER CONNECTION FINISHED', { userId: user.id, isConnected });\n }\n };\n\n connectUser();\n }, [service, user]); // Remove isConnected to prevent circular dependency\n\n // Disconnect when user is removed (cleanup effect)\n useEffect(() => {\n debugLog('๐Ÿ”Œ CLEANUP EFFECT REGISTERED', { hasService: !!service, isConnected });\n return () => {\n if (service && isConnected) {\n debugLog('๐Ÿงน CLEANUP EFFECT TRIGGERED', 'Cleaning up connection on unmount');\n connectedUserRef.current = null; // Reset connection tracking\n service.disconnectUser().catch(console.error);\n } else {\n debugLog('๐Ÿ”‡ CLEANUP EFFECT SKIPPED', { hasService: !!service, isConnected });\n }\n };\n }, [service, isConnected]);\n\n const refreshConnection = useCallback(async () => {\n debugLog('๐Ÿ”„ REFRESH CONNECTION CALLED', { hasService: !!service, hasUser: !!user });\n \n if (!service || !user) {\n debugLog('โš ๏ธ REFRESH CONNECTION SKIPPED', 'Missing service or user');\n return;\n }\n\n debugLog('๐Ÿš€ STARTING CONNECTION REFRESH', { userId: user.id });\n setIsLoading(true);\n try {\n debugLog('๐Ÿ”Œ DISCONNECTING FOR REFRESH');\n await service.disconnectUser();\n debugLog('๐Ÿ“ž RECONNECTING FOR REFRESH');\n const streamClient = await service.connectUser(user);\n setClient(streamClient);\n setIsConnected(true);\n setError(null);\n debugLog('โœ… CONNECTION REFRESH SUCCESS', { userId: user.id });\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Refresh failed';\n setError(errorMessage);\n debugLog('โŒ CONNECTION REFRESH ERROR', { userId: user.id, error: errorMessage });\n } finally {\n setIsLoading(false);\n debugLog('๐Ÿ”„ CONNECTION REFRESH FINISHED', { userId: user.id });\n }\n }, [service, user]);\n\n // Memoize context value to prevent unnecessary re-renders\n const contextValue: MessagingContextValue = React.useMemo(() => {\n debugLog('๐Ÿ’ซ CONTEXT VALUE MEMOIZATION', {\n hasService: !!service,\n hasClient: !!client,\n isConnected,\n isLoading,\n hasError: !!error,\n capabilitiesKeys: Object.keys(capabilities),\n customizationKeys: Object.keys(customization)\n });\n \n return {\n service,\n client,\n isConnected,\n isLoading,\n error,\n capabilities,\n customization,\n refreshConnection,\n debug,\n };\n }, [service, client, isConnected, isLoading, error, capabilities, customization, refreshConnection, debug]);\n\n debugLog('๐Ÿ”„ RENDER END', {\n renderCount: renderCountRef.current,\n willRenderChat: !!(client && isConnected),\n contextValueReady: !!contextValue\n });\n\n return (\n <MessagingContext.Provider value={contextValue}>\n {client && isConnected ? (\n <Chat client={client}>\n {children}\n </Chat>\n ) : (\n children\n )}\n </MessagingContext.Provider>\n );\n};\n","/**\n * Generate avatar background and text colors based on a string\n * Uses the ID to deterministically select from design system colors\n */\nexport function getAvatarColors(id: string): {\n bgColor: string;\n textColor: string;\n} {\n // Map of color combinations from Linktree design system\n // Selected for good contrast at 20% opacity\n const colorPairs = [\n { bgColor: \"bg-primary bg-opacity-20\", textColor: \"text-primary\" }, // #8129D9 - purple\n { bgColor: \"bg-forest bg-opacity-20\", textColor: \"text-forest\" }, // #254f1a - dark green\n { bgColor: \"bg-iris bg-opacity-20\", textColor: \"text-iris\" }, // #061492 - dark blue\n { bgColor: \"bg-shade bg-opacity-20\", textColor: \"text-shade\" }, // #1e2330 - dark blue-gray\n { bgColor: \"bg-dahlia bg-opacity-20\", textColor: \"text-dahlia\" }, // #502274 - dark purple\n { bgColor: \"bg-orchid bg-opacity-20\", textColor: \"text-orchid\" }, // #d717e7 - magenta\n { bgColor: \"bg-currant bg-opacity-20\", textColor: \"text-currant\" }, // #780016 - dark red\n { bgColor: \"bg-apple bg-opacity-20\", textColor: \"text-apple\" }, // #c41500 - red\n { bgColor: \"bg-rose bg-opacity-20\", textColor: \"text-rose\" }, // #fc3e4b - pink\n { bgColor: \"bg-root bg-opacity-20\", textColor: \"text-root\" }, // #4c2e05 - brown\n { bgColor: \"bg-poppy bg-opacity-20\", textColor: \"text-poppy\" }, // #ff6c02 - orange\n { bgColor: \"bg-moss bg-opacity-20\", textColor: \"text-moss\" }, // #70764d - olive green\n ];\n\n // Simple hash function to get consistent index\n let hash = 0;\n for (let i = 0; i < id.length; i++) {\n hash = ((hash << 5) - hash) + id.charCodeAt(i);\n hash = hash & hash; // Convert to 32bit integer\n }\n \n const index = Math.abs(hash) % colorPairs.length;\n return colorPairs[index];\n}\n\n","import React from 'react';\nimport classNames from 'classnames';\nimport { getAvatarColors } from './avatarColors';\n\nexport interface AvatarProps {\n id: string;\n name: string;\n image?: string;\n size?: number;\n className?: string;\n}\n\n/**\n * Avatar component that displays a user image or colored initial fallback\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n id,\n name,\n image,\n size = 40,\n className,\n}) => {\n const { bgColor, textColor } = getAvatarColors(id);\n const initial = name.charAt(0).toUpperCase();\n\n // Determine font size based on avatar size\n const getFontSizeClass = () => {\n if (size < 32) return 'text-xs';\n if (size < 56) return 'text-sm';\n return 'text-lg';\n };\n\n const fontSizeClass = getFontSizeClass();\n\n return (\n <div\n className={classNames(\n 'flex-shrink-0 overflow-hidden rounded-full',\n className\n )}\n style={{ width: `${size}px`, height: `${size}px` }}\n >\n {image ? (\n <img\n src={image}\n alt=\"\"\n className=\"h-full w-full object-cover aspect-square\"\n />\n ) : (\n <div\n className={classNames(\n 'flex h-full w-full items-center justify-center font-semibold',\n bgColor,\n textColor,\n fontSizeClass\n )}\n >\n {initial}\n </div>\n )}\n </div>\n );\n};\n\n","import React from 'react';\nimport { ChannelPreviewUIComponentProps } from 'stream-chat-react';\nimport { Channel } from 'stream-chat';\nimport classNames from 'classnames';\nimport { Avatar } from '../Avatar';\n\n/**\n * Custom channel preview that handles selection\n */\nconst CustomChannelPreview: React.FC<\n ChannelPreviewUIComponentProps & {\n selectedChannel?: Channel;\n onChannelSelect: (channel: Channel) => void;\n debug?: boolean;\n }\n> = ({ channel, selectedChannel, onChannelSelect, debug = false, ...props }) => {\n const isSelected = selectedChannel?.id === channel?.id;\n\n const handleClick = () => {\n if (channel) {\n onChannelSelect(channel);\n }\n };\n\n // Get participant info\n const members = Object.values(channel?.state?.members || {});\n const participant = members.find(member => \n member.user?.id && member.user.id !== channel?._client?.userID\n );\n const participantName = participant?.user?.name || 'Conversation';\n const participantImage = participant?.user?.image;\n const participantInitial = participantName.charAt(0).toUpperCase();\n\n // Get last message and format timestamp\n const lastMessage = channel?.state?.messages?.[channel.state.messages.length - 1];\n const lastMessageText = lastMessage?.text || 'No messages yet';\n const lastMessageTime = lastMessage?.created_at\n ? new Date(lastMessage.created_at).toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n })\n : '';\n\n // Get unread count from channel state\n const unread = channel?.state?.unreadCount || 0;\n\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ“‹ CHANNEL PREVIEW RENDER', {\n channelId: channel?.id,\n isSelected,\n participantName,\n unread,\n hasTimestamp: !!lastMessageTime,\n });\n }\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={classNames(\n 'w-full px-4 py-3 transition-colors border-b border-sand text-left max-w-full overflow-hidden focus-ring',\n {\n 'bg-primary-alt bg-opacity-10 border-l-4 border-l-primary': isSelected,\n 'hover:bg-sand': !isSelected,\n }\n )}\n >\n <div className=\"flex items-start gap-3\">\n {/* Avatar */}\n <Avatar\n id={participant?.user?.id || channel.id || 'unknown'}\n name={participantName}\n image={participantImage}\n size={44}\n />\n\n {/* Content column */}\n <div className=\"flex-1 min-w-0 flex flex-col gap-1\">\n {/* Name and timestamp row */}\n <div className=\"flex items-center justify-between gap-2\">\n <h3\n className={classNames(\n 'text-sm font-medium truncate',\n isSelected ? 'text-primary' : 'text-charcoal'\n )}\n >\n {participantName}\n </h3>\n {lastMessageTime && (\n <span className=\"text-xs text-stone flex-shrink-0\">\n {lastMessageTime}\n </span>\n )}\n </div>\n\n {/* Message and unread badge row */}\n <div className=\"flex items-center justify-between gap-2 min-w-0\">\n <p className=\"text-xs text-stone mr-2 flex-1 line-clamp-2\">\n {lastMessageText}\n </p>\n {unread > 0 && (\n <span className=\"bg-primary text-white text-xs px-2 py-0.5 rounded-full min-w-[20px] text-center flex-shrink-0\">\n {unread > 99 ? '99+' : unread}\n </span>\n )}\n </div>\n </div>\n </div>\n </button>\n );\n};\n\nexport default CustomChannelPreview;","import React from 'react';\nimport { NotePencilIcon } from \"@phosphor-icons/react/dist/csr/NotePencil\";\n\nimport classNames from 'classnames';\nimport { ChannelList as StreamChannelList, useChatContext } from 'stream-chat-react';\nimport type { ChannelListProps } from '../../types';\nimport { IconButton } from '../IconButton';\nimport { useMessagingContext } from '../../providers/MessagingProvider';\nimport CustomChannelPreview from './CustomChannelPreview';\n\n\n/**\n * Channel list component with customizable header and actions\n */\nexport const ChannelList: React.FC<ChannelListProps> = ({\n onChannelSelect,\n selectedChannel,\n showStartConversation = false,\n onStartConversation,\n participantLabel = 'participants',\n className,\n}) => {\n // Track renders\n const renderCountRef = React.useRef(0);\n renderCountRef.current++;\n\n // Get debug flag from context\n const { debug = false } = useMessagingContext();\n\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ”„ RENDER START', {\n renderCount: renderCountRef.current,\n selectedChannelId: selectedChannel?.id,\n showStartConversation,\n participantLabel\n });\n }\n\n const { client } = useChatContext();\n\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ“ก CHAT CONTEXT', {\n renderCount: renderCountRef.current,\n hasClient: !!client,\n clientUserId: client?.userID,\n clientConnected: client?.wsConnection?.isHealthy\n });\n }\n\n // Filter for messaging channels\n const filters = React.useMemo(() => {\n const userId = client.userID;\n const newFilters = userId\n ? { type: 'messaging', members: { $in: [userId] }, hidden: false }\n : { type: 'messaging' };\n \n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ” FILTERS MEMOIZED', {\n renderCount: renderCountRef.current,\n userId,\n filters: newFilters\n });\n }\n \n return newFilters;\n }, [client.userID, debug]);\n\n return (\n <div className={classNames('h-full flex flex-col min-w-0 overflow-hidden', className)}>\n {/* Header */}\n <div className=\"px-4 py-4 border-b border-sand bg-chalk\">\n <div className=\"flex items-center justify-between gap-3 min-h-10 min-w-0\">\n <h2 className=\"text-lg font-semibold text-charcoal\">Conversations</h2>\n <div className=\"flex items-center gap-2\">\n {showStartConversation && onStartConversation && (\n <IconButton\n label=\"Start a new conversation\"\n onClick={onStartConversation}\n className=\"inline-flex size-10 items-center justify-center\"\n >\n <NotePencilIcon className=\"h-5 w-5\" />\n </IconButton>\n )}\n </div>\n </div>\n </div>\n\n {/* Channel List */}\n <div className=\"flex-1 overflow-hidden min-w-0\">\n {(() => {\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐ŸŽฌ RENDERING STREAM CHANNEL LIST', {\n renderCount: renderCountRef.current,\n filters,\n hasClient: !!client,\n clientUserId: client?.userID\n });\n }\n \n return (\n <StreamChannelList\n filters={filters}\n sort={{ last_message_at: -1 }}\n options={{ limit: 30 }}\n Preview={(props) => {\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ“‹ CHANNEL PREVIEW RENDER', {\n channelId: props.channel?.id,\n selectedChannelId: selectedChannel?.id,\n isSelected: selectedChannel?.id === props.channel?.id\n });\n }\n \n return (\n <CustomChannelPreview\n {...props}\n selectedChannel={selectedChannel}\n onChannelSelect={onChannelSelect}\n debug={debug}\n />\n );\n }}\n />\n );\n })()}\n </div>\n </div>\n );\n};\n","import * as e from \"react\";\nconst t = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M40.14,46.88A12,12,0,0,0,36,56V224a12,12,0,0,0,24,0V181.72c22.84-17.12,42.1-9.12,70.68,5,16.23,8,34.74,17.2,54.8,17.2,14.72,0,30.28-4.94,46.38-18.88A12,12,0,0,0,236,176V56a12,12,0,0,0-19.86-9.07c-24.71,21.41-44.53,13.31-74.82-1.68C113.19,31.27,78.17,13.94,40.14,46.88ZM212,170.26c-22.84,17.13-42.1,9.11-70.68-5C118.16,153.76,90.33,140,60,153.87V61.69c22.84-17.12,42.1-9.12,70.68,5,16.23,8,34.74,17.2,54.8,17.2A63,63,0,0,0,212,78.08Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n \"path\",\n {\n d: \"M224,56V176c-64,55.43-112-55.43-176,0V56C112,.57,160,111.43,224,56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ e.createElement(\"path\", { d: \"M42.76,50A8,8,0,0,0,40,56V224a8,8,0,0,0,16,0V179.77c26.79-21.16,49.87-9.75,76.45,3.41,16.4,8.11,34.06,16.85,53,16.85,13.93,0,28.54-4.75,43.82-18a8,8,0,0,0,2.76-6V56A8,8,0,0,0,218.76,50c-28,24.23-51.72,12.49-79.21-1.12C111.07,34.76,78.78,18.79,42.76,50ZM216,172.25c-26.79,21.16-49.87,9.74-76.45-3.41-25-12.35-52.81-26.13-83.55-8.4V59.79c26.79-21.16,49.87-9.75,76.45,3.4,25,12.35,52.82,26.13,83.55,8.4Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M232,56V176a8,8,0,0,1-2.76,6c-15.28,13.23-29.89,18-43.82,18-18.91,0-36.57-8.74-53-16.85C105.87,170,82.79,158.61,56,179.77V224a8,8,0,0,1-16,0V56a8,8,0,0,1,2.77-6h0c36-31.18,68.31-15.21,96.79-1.12C167,62.46,190.79,74.2,218.76,50A8,8,0,0,1,232,56Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M44.08,51.37A6,6,0,0,0,42,55.9V224a6,6,0,0,0,12,0V178.78c28.08-22.79,51.88-11,79.34,2.57,16.12,8,33.49,16.58,52,16.58,13.57,0,27.76-4.6,42.56-17.42A6,6,0,0,0,230,176V55.9a6,6,0,0,0-9.93-4.54c-29,25.12-53.28,13.09-81.41-.84C110.77,36.71,79,21.16,44.08,51.37ZM218,173.17c-28.08,22.8-51.88,11-79.34-2.58C113.4,158.08,85.09,144.07,54,164V58.72c28.08-22.8,51.88-11,79.34,2.56C158.6,73.79,186.91,87.8,218,67.91Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M42.76,50A8,8,0,0,0,40,56V224a8,8,0,0,0,16,0V179.77c26.79-21.16,49.87-9.75,76.45,3.41,16.4,8.11,34.06,16.85,53,16.85,13.93,0,28.54-4.75,43.82-18a8,8,0,0,0,2.76-6V56A8,8,0,0,0,218.76,50c-28,24.23-51.72,12.49-79.21-1.12C111.07,34.76,78.78,18.79,42.76,50ZM216,172.25c-26.79,21.16-49.87,9.74-76.45-3.41-25-12.35-52.81-26.13-83.55-8.4V59.79c26.79-21.16,49.87-9.75,76.45,3.4,25,12.35,52.82,26.13,83.55,8.4Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M45.39,53.06a4,4,0,0,0-1.39,3V224a4,4,0,0,0,8,0V177.87c29.41-24.39,55.08-11.69,82.23,1.73,16.5,8.17,33.33,16.5,51.13,16.5,13.14,0,26.81-4.55,41.26-17.06a4,4,0,0,0,1.38-3v-120a4,4,0,0,0-6.62-3c-30,26-56,13.07-83.61-.57C109.07,38.28,79.4,23.62,45.39,53.06ZM220,174.17c-29.41,24.4-55.08,11.7-82.23-1.73-26.82-13.27-54.5-27-85.77-4.66V57.92c29.41-24.4,55.08-11.7,82.23,1.73,26.82,13.27,54.5,27,85.77,4.66Z\" }))\n ]\n]);\nexport {\n t as default\n};\n","import * as o from \"react\";\nimport t from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Flag.es.js\";\nconst a = o.forwardRef((e, r) => /* @__PURE__ */ o.createElement(t, { ref: r, ...e, weights: m }));\na.displayName = \"FlagIcon\";\nconst n = a;\nexport {\n n as Flag,\n a as FlagIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M168.49,151.51a12,12,0,0,1-17,17l-64-64a12,12,0,0,1,17-17ZM236,128A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M165.66,154.34a8,8,0,0,1-11.32,11.32l-64-64a8,8,0,0,1,11.32-11.32ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm37.66,141.66a8,8,0,0,1-11.32,0l-64-64a8,8,0,0,1,11.32-11.32l64,64A8,8,0,0,1,165.66,165.66Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M164.24,155.76a6,6,0,1,1-8.48,8.48l-64-64a6,6,0,0,1,8.48-8.48ZM230,128A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M165.66,154.34a8,8,0,0,1-11.32,11.32l-64-64a8,8,0,0,1,11.32-11.32ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M162.83,157.17a4,4,0,0,1-5.66,5.66l-64-64a4,4,0,0,1,5.66-5.66ZM228,128A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as o from \"react\";\nimport i from \"../lib/IconBase.es.js\";\nimport s from \"../defs/ProhibitInset.es.js\";\nconst t = o.forwardRef((e, r) => /* @__PURE__ */ o.createElement(i, { ref: r, ...e, weights: s }));\nt.displayName = \"ProhibitInsetIcon\";\nconst m = t;\nexport {\n m as ProhibitInset,\n t as ProhibitInsetIcon\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M124,216a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V40A12,12,0,0,1,48,28h64a12,12,0,0,1,0,24H60V204h52A12,12,0,0,1,124,216Zm108.49-96.49-40-40a12,12,0,0,0-17,17L195,116H112a12,12,0,0,0,0,24h83l-19.52,19.51a12,12,0,0,0,17,17l40-40A12,12,0,0,0,232.49,119.51Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M224,56V200a16,16,0,0,1-16,16H48V40H208A16,16,0,0,1,224,56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40A8,8,0,0,0,176,88v32H112a8,8,0,0,0,0,16h64v32a8,8,0,0,0,13.66,5.66l40-40A8,8,0,0,0,229.66,122.34Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M118,216a6,6,0,0,1-6,6H48a6,6,0,0,1-6-6V40a6,6,0,0,1,6-6h64a6,6,0,0,1,0,12H54V210h58A6,6,0,0,1,118,216Zm110.24-92.24-40-40a6,6,0,0,0-8.48,8.48L209.51,122H112a6,6,0,0,0,0,12h97.51l-29.75,29.76a6,6,0,1,0,8.48,8.48l40-40A6,6,0,0,0,228.24,123.76Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M116,216a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h64a4,4,0,0,1,0,8H52V212h60A4,4,0,0,1,116,216Zm110.83-90.83-40-40a4,4,0,0,0-5.66,5.66L214.34,124H112a4,4,0,0,0,0,8H214.34l-33.17,33.17a4,4,0,0,0,5.66,5.66l40-40A4,4,0,0,0,226.83,125.17Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as o from \"react\";\nimport n from \"../lib/IconBase.es.js\";\nimport a from \"../defs/SignOut.es.js\";\nconst t = o.forwardRef((e, r) => /* @__PURE__ */ o.createElement(n, { ref: r, ...e, weights: a }));\nt.displayName = \"SignOutIcon\";\nconst c = t;\nexport {\n c as SignOut,\n t as SignOutIcon\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M140,32V64a12,12,0,0,1-24,0V32a12,12,0,0,1,24,0Zm84,84H192a12,12,0,0,0,0,24h32a12,12,0,0,0,0-24Zm-42.26,48.77a12,12,0,1,0-17,17l22.63,22.63a12,12,0,0,0,17-17ZM128,180a12,12,0,0,0-12,12v32a12,12,0,0,0,24,0V192A12,12,0,0,0,128,180ZM74.26,164.77,51.63,187.4a12,12,0,0,0,17,17l22.63-22.63a12,12,0,1,0-17-17ZM76,128a12,12,0,0,0-12-12H32a12,12,0,0,0,0,24H64A12,12,0,0,0,76,128ZM68.6,51.63a12,12,0,1,0-17,17L74.26,91.23a12,12,0,0,0,17-17Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M136,32V64a8,8,0,0,1-16,0V32a8,8,0,0,1,16,0Zm88,88H192a8,8,0,0,0,0,16h32a8,8,0,0,0,0-16Zm-45.09,47.6a8,8,0,0,0-11.31,11.31l22.62,22.63a8,8,0,0,0,11.32-11.32ZM128,184a8,8,0,0,0-8,8v32a8,8,0,0,0,16,0V192A8,8,0,0,0,128,184ZM77.09,167.6,54.46,190.22a8,8,0,0,0,11.32,11.32L88.4,178.91A8,8,0,0,0,77.09,167.6ZM72,128a8,8,0,0,0-8-8H32a8,8,0,0,0,0,16H64A8,8,0,0,0,72,128ZM65.78,54.46A8,8,0,0,0,54.46,65.78L77.09,88.4A8,8,0,0,0,88.4,77.09Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM48,136a8,8,0,0,1,0-16H72a8,8,0,0,1,0,16Zm46.06,37.25-17,17a8,8,0,0,1-11.32-11.32l17-17a8,8,0,0,1,11.31,11.31Zm0-79.19a8,8,0,0,1-11.31,0l-17-17A8,8,0,0,1,77.09,65.77l17,17A8,8,0,0,1,94.06,94.06ZM136,208a8,8,0,0,1-16,0V184a8,8,0,0,1,16,0Zm0-136a8,8,0,0,1-16,0V48a8,8,0,0,1,16,0Zm54.23,118.23a8,8,0,0,1-11.32,0l-17-17a8,8,0,0,1,11.31-11.31l17,17A8,8,0,0,1,190.23,190.23ZM208,136H184a8,8,0,0,1,0-16h24a8,8,0,0,1,0,16Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M134,32V64a6,6,0,0,1-12,0V32a6,6,0,0,1,12,0Zm90,90H192a6,6,0,0,0,0,12h32a6,6,0,0,0,0-12Zm-46.5,47A6,6,0,0,0,169,177.5l22.63,22.62a6,6,0,0,0,8.48-8.48ZM128,186a6,6,0,0,0-6,6v32a6,6,0,0,0,12,0V192A6,6,0,0,0,128,186ZM78.5,169,55.88,191.64a6,6,0,1,0,8.48,8.48L87,177.5A6,6,0,1,0,78.5,169ZM70,128a6,6,0,0,0-6-6H32a6,6,0,0,0,0,12H64A6,6,0,0,0,70,128ZM64.36,55.88a6,6,0,0,0-8.48,8.48L78.5,87A6,6,0,1,0,87,78.5Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M136,32V64a8,8,0,0,1-16,0V32a8,8,0,0,1,16,0Zm88,88H192a8,8,0,0,0,0,16h32a8,8,0,0,0,0-16Zm-45.09,47.6a8,8,0,0,0-11.31,11.31l22.62,22.63a8,8,0,0,0,11.32-11.32ZM128,184a8,8,0,0,0-8,8v32a8,8,0,0,0,16,0V192A8,8,0,0,0,128,184ZM77.09,167.6,54.46,190.22a8,8,0,0,0,11.32,11.32L88.4,178.91A8,8,0,0,0,77.09,167.6ZM72,128a8,8,0,0,0-8-8H32a8,8,0,0,0,0,16H64A8,8,0,0,0,72,128ZM65.78,54.46A8,8,0,0,0,54.46,65.78L77.09,88.4A8,8,0,0,0,88.4,77.09Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M132,32V64a4,4,0,0,1-8,0V32a4,4,0,0,1,8,0Zm92,92H192a4,4,0,0,0,0,8h32a4,4,0,0,0,0-8Zm-47.92,46.43a4,4,0,1,0-5.65,5.65l22.62,22.63a4,4,0,0,0,5.66-5.66ZM128,188a4,4,0,0,0-4,4v32a4,4,0,0,0,8,0V192A4,4,0,0,0,128,188ZM79.92,170.43,57.29,193.05A4,4,0,0,0,63,198.71l22.62-22.63a4,4,0,1,0-5.65-5.65ZM68,128a4,4,0,0,0-4-4H32a4,4,0,0,0,0,8H64A4,4,0,0,0,68,128ZM63,57.29A4,4,0,0,0,57.29,63L79.92,85.57a4,4,0,1,0,5.65-5.65Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as e from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport p from \"../defs/SpinnerGap.es.js\";\nconst o = e.forwardRef((r, n) => /* @__PURE__ */ e.createElement(a, { ref: n, ...r, weights: p }));\no.displayName = \"SpinnerGapIcon\";\nconst m = o;\nexport {\n m as SpinnerGap,\n o as SpinnerGapIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M228,128a12,12,0,0,1-12,12H69l51.52,51.51a12,12,0,0,1-17,17l-72-72a12,12,0,0,1,0-17l72-72a12,12,0,0,1,17,17L69,116H216A12,12,0,0,1,228,128Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M112,56V200L40,128Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M216,120H120V56a8,8,0,0,0-13.66-5.66l-72,72a8,8,0,0,0,0,11.32l72,72A8,8,0,0,0,120,200V136h96a8,8,0,0,0,0-16ZM104,180.69,51.31,128,104,75.31Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,128a8,8,0,0,1-8,8H120v64a8,8,0,0,1-13.66,5.66l-72-72a8,8,0,0,1,0-11.32l72-72A8,8,0,0,1,120,56v64h96A8,8,0,0,1,224,128Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M222,128a6,6,0,0,1-6,6H54.49l61.75,61.76a6,6,0,1,1-8.48,8.48l-72-72a6,6,0,0,1,0-8.48l72-72a6,6,0,0,1,8.48,8.48L54.49,122H216A6,6,0,0,1,222,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,128a8,8,0,0,1-8,8H59.31l58.35,58.34a8,8,0,0,1-11.32,11.32l-72-72a8,8,0,0,1,0-11.32l72-72a8,8,0,0,1,11.32,11.32L59.31,120H216A8,8,0,0,1,224,128Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M220,128a4,4,0,0,1-4,4H49.66l65.17,65.17a4,4,0,0,1-5.66,5.66l-72-72a4,4,0,0,1,0-5.66l72-72a4,4,0,0,1,5.66,5.66L49.66,124H216A4,4,0,0,1,220,128Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as o from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport f from \"../defs/ArrowLeft.es.js\";\nconst r = o.forwardRef((e, t) => /* @__PURE__ */ o.createElement(a, { ref: t, ...e, weights: f }));\nr.displayName = \"ArrowLeftIcon\";\nconst s = r;\nexport {\n s as ArrowLeft,\n r as ArrowLeftIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M144,128a16,16,0,1,1-16-16A16,16,0,0,1,144,128ZM60,112a16,16,0,1,0,16,16A16,16,0,0,0,60,112Zm136,0a16,16,0,1,0,16,16A16,16,0,0,0,196,112Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n \"path\",\n {\n d: \"M240,96v64a16,16,0,0,1-16,16H32a16,16,0,0,1-16-16V96A16,16,0,0,1,32,80H224A16,16,0,0,1,240,96Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ e.createElement(\"path\", { d: \"M140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128Zm56-12a12,12,0,1,0,12,12A12,12,0,0,0,196,116ZM60,116a12,12,0,1,0,12,12A12,12,0,0,0,60,116Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V96A16,16,0,0,0,224,80ZM60,140a12,12,0,1,1,12-12A12,12,0,0,1,60,140Zm68,0a12,12,0,1,1,12-12A12,12,0,0,1,128,140Zm68,0a12,12,0,1,1,12-12A12,12,0,0,1,196,140Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M138,128a10,10,0,1,1-10-10A10,10,0,0,1,138,128ZM60,118a10,10,0,1,0,10,10A10,10,0,0,0,60,118Zm136,0a10,10,0,1,0,10,10A10,10,0,0,0,196,118Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128Zm56-12a12,12,0,1,0,12,12A12,12,0,0,0,196,116ZM60,116a12,12,0,1,0,12,12A12,12,0,0,0,60,116Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M136,128a8,8,0,1,1-8-8A8,8,0,0,1,136,128Zm-76-8a8,8,0,1,0,8,8A8,8,0,0,0,60,120Zm136,0a8,8,0,1,0,8,8A8,8,0,0,0,196,120Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as e from \"react\";\nimport s from \"../lib/IconBase.es.js\";\nimport a from \"../defs/DotsThree.es.js\";\nconst o = e.forwardRef((r, t) => /* @__PURE__ */ e.createElement(s, { ref: t, ...r, weights: a }));\no.displayName = \"DotsThreeIcon\";\nconst n = o;\nexport {\n n as DotsThree,\n o as DotsThreeIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M208.49,191.51a12,12,0,0,1-17,17L128,145,64.49,208.49a12,12,0,0,1-17-17L111,128,47.51,64.49a12,12,0,0,1,17-17L128,111l63.51-63.52a12,12,0,0,1,17,17L145,128Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n \"path\",\n {\n d: \"M216,56V200a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V56A16,16,0,0,1,56,40H200A16,16,0,0,1,216,56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM181.66,170.34a8,8,0,0,1-11.32,11.32L128,139.31,85.66,181.66a8,8,0,0,1-11.32-11.32L116.69,128,74.34,85.66A8,8,0,0,1,85.66,74.34L128,116.69l42.34-42.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M204.24,195.76a6,6,0,1,1-8.48,8.48L128,136.49,60.24,204.24a6,6,0,0,1-8.48-8.48L119.51,128,51.76,60.24a6,6,0,0,1,8.48-8.48L128,119.51l67.76-67.75a6,6,0,0,1,8.48,8.48L136.49,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M202.83,197.17a4,4,0,0,1-5.66,5.66L128,133.66,58.83,202.83a4,4,0,0,1-5.66-5.66L122.34,128,53.17,58.83a4,4,0,0,1,5.66-5.66L128,122.34l69.17-69.17a4,4,0,1,1,5.66,5.66L133.66,128Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as o from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport m from \"../defs/X.es.js\";\nconst e = o.forwardRef((r, t) => /* @__PURE__ */ o.createElement(a, { ref: t, ...r, weights: m }));\ne.displayName = \"XIcon\";\nconst n = e;\nexport {\n n as X,\n e as XIcon\n};\n","import { XIcon } from \"@phosphor-icons/react/dist/csr/X\";\nimport React from \"react\";\n\nimport { IconButton } from \"../IconButton\";\n\ninterface CloseButtonProps {\n onClick: () => void;\n}\n\nexport function CloseButton({ onClick }: CloseButtonProps) {\n return (\n <IconButton label=\"Close\" onClick={onClick} className=\"p-1\">\n <XIcon className=\"h-5 w-5 text-stone\" weight=\"bold\" />\n </IconButton>\n );\n}\n","import classNames from \"classnames\";\nimport React from \"react\";\n\ninterface ActionButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"default\" | \"danger\";\n}\n\nconst ActionButton = ({\n variant = \"default\",\n className,\n children,\n ...rest\n}: ActionButtonProps) => {\n const isDanger = variant === \"danger\";\n return (\n <button\n type=\"button\"\n className={classNames(\n \"flex w-full items-center gap-3 rounded-lg px-4 py-3 text-left text-sm transition-colors focus-ring disabled:cursor-not-allowed disabled:opacity-60\",\n isDanger\n ? \"text-danger hover:bg-danger/50\"\n : \"text-charcoal hover:bg-sand\",\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n};\n\nexport default ActionButton;\n","import { FlagIcon } from \"@phosphor-icons/react/dist/csr/Flag\";\nimport { ProhibitInsetIcon } from \"@phosphor-icons/react/dist/csr/ProhibitInset\";\nimport { SignOutIcon } from \"@phosphor-icons/react/dist/csr/SignOut\";\nimport { SpinnerGapIcon } from \"@phosphor-icons/react/dist/csr/SpinnerGap\";\n\nimport { ArrowLeftIcon } from \"@phosphor-icons/react/dist/csr/ArrowLeft\";\nimport { DotsThreeIcon } from \"@phosphor-icons/react/dist/csr/DotsThree\";\n\nimport React, { useState, useCallback, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\nimport {\n Channel,\n Window,\n MessageList,\n MessageInput,\n useChannelStateContext,\n} from 'stream-chat-react';\nimport type { ChannelViewProps } from '../types';\nimport { useMessagingContext } from '../providers/MessagingProvider';\nimport { CloseButton } from './CloseButton';\nimport { IconButton } from './IconButton';\nimport ActionButton from './ActionButton';\nimport { Avatar } from './Avatar';\n\n/**\n * Custom message input component with render prop for actions\n */\nconst CustomMessageInput: React.FC<{\n renderActions?: () => React.ReactNode;\n}> = ({ renderActions }) => (\n <div className=\"message-input flex items-center gap-2 p-4\">\n {renderActions && renderActions()}\n \n <div className=\"flex-1\">\n <MessageInput focus maxRows={4} />\n </div>\n </div>\n);\n\n/**\n * Custom channel header component\n */\nconst CustomChannelHeader: React.FC<{\n onBack?: () => void;\n showBackButton: boolean;\n onShowInfo?: () => void;\n canShowInfo: boolean;\n}> = ({ onBack, showBackButton, onShowInfo, canShowInfo }) => {\n const { channel } = useChannelStateContext();\n \n // Get participant info (excluding current user)\n const participant = React.useMemo(() => {\n const members = Object.values(channel.state.members || {});\n return members.find(member => \n member.user?.id && member.user.id !== channel._client.userID\n );\n }, [channel._client.userID, channel.state.members]);\n\n const participantName = participant?.user?.name || \n participant?.user?.id || \n 'Unknown member';\n const participantImage = participant?.user?.image;\n\n return (\n <div className=\"flex items-center justify-between gap-3 min-h-12\">\n <div className=\"flex items-center gap-3 min-w-0\">\n {showBackButton && onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"inline-flex items-center justify-center w-8 h-8 rounded-lg hover:bg-sand focus:outline-none focus:ring-2 focus:ring-primary transition-colors lg:hidden\"\n aria-label=\"Back to channel list\"\n >\n <ArrowLeftIcon className=\"h-5 w-5 text-stone\" weight=\"bold\" />\n </button>\n )}\n \n {/* Avatar */}\n <Avatar\n id={participant?.user?.id || channel.id || 'unknown'}\n name={participantName}\n image={participantImage}\n size={40}\n />\n \n <div className=\"min-w-0\">\n <h1 className=\"text-lg font-semibold text-charcoal truncate\">\n {participantName}\n </h1>\n </div>\n </div>\n\n {canShowInfo && onShowInfo && (\n <IconButton\n label=\"Chat info\" \n onClick={onShowInfo}\n >\n <DotsThreeIcon className=\"h-6 w-6 text-charcoal\" weight=\"bold\" />\n </IconButton>\n )}\n </div>\n );\n};\n\n/**\n * Channel info dialog (matching original implementation)\n */\nconst ChannelInfoDialog: React.FC<{\n isOpen: boolean;\n onClose: () => void;\n participant: any;\n channel: any;\n followerStatusLabel?: string;\n onLeaveConversation?: (channel: any) => void;\n onBlockParticipant?: (participantId?: string) => void;\n}> = ({ isOpen, onClose, participant, channel, followerStatusLabel, onLeaveConversation, onBlockParticipant }) => {\n const { service, debug } = useMessagingContext();\n const dialogRef = useRef<HTMLDialogElement>(null);\n const [isParticipantBlocked, setIsParticipantBlocked] = useState(false);\n const [isLeaving, setIsLeaving] = useState(false);\n const [isUpdatingBlockStatus, setIsUpdatingBlockStatus] = useState(false);\n\n // Sync dialog open state with prop\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n if (isOpen) {\n dialog.showModal();\n } else {\n dialog.close();\n }\n }, [isOpen]);\n\n // Check if participant is blocked\n const checkIsParticipantBlocked = useCallback(async () => {\n if (!service || !participant?.user?.id) return;\n \n try {\n const blockedUsers = await service.getBlockedUsers();\n const isBlocked = blockedUsers.some(\n (user: any) => user.blocked_user_id === participant.user.id,\n );\n setIsParticipantBlocked(isBlocked);\n } catch (error) {\n console.error('[ChannelInfoDialog] Failed to check blocked status:', error);\n }\n }, [service, participant?.user?.id]);\n\n useEffect(() => {\n if (isOpen) {\n checkIsParticipantBlocked();\n }\n }, [isOpen, checkIsParticipantBlocked]);\n\n const handleLeaveConversation = async () => {\n if (isLeaving) return;\n\n if (debug) {\n console.log('[ChannelInfoDialog] Leave conversation', channel.cid);\n }\n setIsLeaving(true);\n\n try {\n const actingUserId = channel._client?.userID ?? null;\n await channel.hide(actingUserId, false);\n\n if (onLeaveConversation) {\n await onLeaveConversation(channel);\n }\n\n onClose();\n } catch (error) {\n console.error('[ChannelInfoDialog] Failed to leave conversation', error);\n } finally {\n setIsLeaving(false);\n }\n };\n\n const handleBlockUser = async () => {\n if (isUpdatingBlockStatus || !service) return;\n\n if (debug) {\n console.log('[ChannelInfoDialog] Block member', participant?.user?.id);\n }\n setIsUpdatingBlockStatus(true);\n\n try {\n await service.blockUser(participant?.user?.id);\n\n if (onBlockParticipant) {\n await onBlockParticipant(participant?.user?.id);\n }\n\n onClose();\n } catch (error) {\n console.error('[ChannelInfoDialog] Failed to block member', error);\n } finally {\n setIsUpdatingBlockStatus(false);\n }\n };\n\n const handleUnblockUser = async () => {\n if (isUpdatingBlockStatus || !service) return;\n\n if (debug) {\n console.log('[ChannelInfoDialog] Unblock member', participant?.user?.id);\n }\n setIsUpdatingBlockStatus(true);\n\n try {\n await service.unBlockUser(participant?.user?.id);\n\n if (onBlockParticipant) {\n await onBlockParticipant(participant?.user?.id);\n }\n\n onClose();\n } catch (error) {\n console.error('[ChannelInfoDialog] Failed to unblock member', error);\n } finally {\n setIsUpdatingBlockStatus(false);\n }\n };\n\n const handleReportUser = () => {\n onClose();\n window.open(\n 'https://linktr.ee/s/about/trust-center/report',\n '_blank',\n 'noopener,noreferrer',\n );\n };\n\n if (!participant) return null;\n\n const participantName = participant.user?.name || participant.user?.id || 'Unknown member';\n const participantImage = participant.user?.image;\n const participantEmail = participant.user?.email;\n const participantUsername = participant.user?.username;\n const participantSecondary = participantEmail\n ? participantEmail\n : participantUsername\n ? `linktr.ee/${participantUsername}`\n : undefined;\n const participantId = participant.user?.id || 'unknown';\n\n return (\n <dialog\n ref={dialogRef}\n className=\"mes-dialog\"\n onClose={onClose}\n onClick={(e) => {\n if (e.target === dialogRef.current) {\n onClose();\n }\n }}\n >\n <div className=\"ml-auto flex h-full w-full flex-col bg-white shadow-max-elevation-light\">\n <div className=\"flex items-center justify-between border-b border-sand px-4 py-3\">\n <h2 className=\"text-base font-semibold text-charcoal\">Chat info</h2>\n <CloseButton onClick={onClose} />\n </div>\n \n <div className=\"flex-1 overflow-y-auto px-6 py-6\">\n <div className=\"rounded-2xl bg-chalk p-4\">\n <div className=\"flex items-center gap-4\">\n <Avatar\n id={participantId}\n name={participantName}\n image={participantImage}\n size={64}\n />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-base font-semibold text-charcoal\">\n {participantName}\n </p>\n {participantSecondary && (\n <p className=\"truncate text-sm text-stone\">\n {participantSecondary}\n </p>\n )}\n {followerStatusLabel && (\n <span className=\"mt-2 inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-700\">\n {followerStatusLabel}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <ul className=\"flex flex-col gap-2 mt-2\">\n <li>\n <ActionButton\n onClick={handleLeaveConversation}\n disabled={isLeaving}\n aria-busy={isLeaving}\n >\n {isLeaving ? (\n <SpinnerGapIcon className=\"h-5 w-5 animate-spin\" />\n ) : (\n <SignOutIcon className=\"h-5 w-5\" />\n )}\n <span>Leave Conversation</span>\n </ActionButton>\n </li>\n <li>\n {isParticipantBlocked ? (\n <ActionButton\n onClick={handleUnblockUser}\n disabled={isUpdatingBlockStatus}\n aria-busy={isUpdatingBlockStatus}\n >\n {isUpdatingBlockStatus ? (\n <SpinnerGapIcon className=\"h-5 w-5 animate-spin\" />\n ) : (\n <ProhibitInsetIcon className=\"h-5 w-5\" />\n )}\n <span>Unblock</span>\n </ActionButton>\n ) : (\n <ActionButton\n onClick={handleBlockUser}\n disabled={isUpdatingBlockStatus}\n aria-busy={isUpdatingBlockStatus}\n >\n {isUpdatingBlockStatus ? (\n <SpinnerGapIcon className=\"h-5 w-5 animate-spin\" />\n ) : (\n <ProhibitInsetIcon className=\"h-5 w-5\" />\n )}\n <span>Block</span>\n </ActionButton>\n )}\n </li>\n <li>\n <ActionButton variant=\"danger\" onClick={handleReportUser}>\n <FlagIcon className=\"h-5 w-5\" />\n <span>Report</span>\n </ActionButton>\n </li>\n </ul>\n </div>\n </div>\n </dialog>\n );\n};\n\n/**\n * Channel view component with message list and input\n */\nexport const ChannelView: React.FC<ChannelViewProps> = ({\n channel,\n onBack,\n showBackButton = false,\n renderMessageInputActions,\n onLeaveConversation,\n onBlockParticipant,\n className,\n}) => {\n const [showInfo, setShowInfo] = useState(false);\n\n // Get participant info for info dialog\n const participant = React.useMemo(() => {\n const members = Object.values(channel.state.members || {});\n return members.find(member => \n member.user?.id && member.user.id !== channel._client.userID\n );\n }, [channel._client.userID, channel.state.members]);\n\n // Get follower status label from channel data\n const followerStatusLabel = React.useMemo(() => {\n const channelExtraData = (channel.data ?? {}) as {\n followerStatus?: string;\n isFollower?: boolean;\n };\n return channelExtraData.followerStatus\n ? String(channelExtraData.followerStatus)\n : channelExtraData.isFollower\n ? 'Subscribed to you'\n : undefined;\n }, [channel.data]);\n\n return (\n <div className={classNames('h-full flex flex-col', className)}>\n <Channel channel={channel}>\n <Window>\n {/* Custom Channel Header */}\n <div className=\"border-b border-sand bg-white px-4 py-3\">\n <CustomChannelHeader\n onBack={onBack}\n showBackButton={showBackButton}\n onShowInfo={() => setShowInfo(true)}\n canShowInfo={Boolean(participant)}\n />\n </div>\n\n {/* Message List */}\n <div className=\"flex-1 overflow-hidden\">\n <MessageList hideDeletedMessages hideNewMessageSeparator={false} />\n </div>\n\n {/* Message Input */}\n <CustomMessageInput\n renderActions={() => renderMessageInputActions?.(channel)}\n />\n </Window>\n </Channel>\n\n {/* Channel Info Dialog */}\n <ChannelInfoDialog\n isOpen={showInfo}\n onClose={() => setShowInfo(false)}\n participant={participant}\n channel={channel}\n followerStatusLabel={followerStatusLabel}\n onLeaveConversation={onLeaveConversation}\n onBlockParticipant={onBlockParticipant}\n />\n </div>\n );\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,128a16,16,0,1,1-16-16A16,16,0,0,1,120,128Zm32-16a16,16,0,1,0,16,16A16,16,0,0,0,152,112Zm84,16A108,108,0,0,1,78.77,224.15L46.34,235A20,20,0,0,1,21,209.66l10.81-32.43A108,108,0,1,1,236,128Zm-24,0A84,84,0,1,0,55.27,170.06a12,12,0,0,1,1,9.81l-9.93,29.79,29.79-9.93a12.1,12.1,0,0,1,3.8-.62,12,12,0,0,1,6,1.62A84,84,0,0,0,212,128Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M224,128A96,96,0,0,1,79.93,211.11h0L42.54,223.58a8,8,0,0,1-10.12-10.12l12.47-37.39h0A96,96,0,1,1,224,128Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,24A104,104,0,0,0,36.18,176.88L24.83,210.93a16,16,0,0,0,20.24,20.24l34.05-11.35A104,104,0,1,0,128,24Zm0,192a87.87,87.87,0,0,1-44.06-11.81,8,8,0,0,0-4-1.08,7.85,7.85,0,0,0-2.53.42L40,216,52.47,178.6a8,8,0,0,0-.66-6.54A88,88,0,1,1,128,216Zm12-88a12,12,0,1,1-12-12A12,12,0,0,1,140,128Zm-44,0a12,12,0,1,1-12-12A12,12,0,0,1,96,128Zm88,0a12,12,0,1,1-12-12A12,12,0,0,1,184,128Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,24A104,104,0,0,0,36.18,176.88L24.83,210.93a16,16,0,0,0,20.24,20.24l34.05-11.35A104,104,0,1,0,128,24ZM84,140a12,12,0,1,1,12-12A12,12,0,0,1,84,140Zm44,0a12,12,0,1,1,12-12A12,12,0,0,1,128,140Zm44,0a12,12,0,1,1,12-12A12,12,0,0,1,172,140Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M138,128a10,10,0,1,1-10-10A10,10,0,0,1,138,128ZM84,118a10,10,0,1,0,10,10A10,10,0,0,0,84,118Zm88,0a10,10,0,1,0,10,10A10,10,0,0,0,172,118Zm58,10A102,102,0,0,1,79.31,217.65L44.44,229.27a14,14,0,0,1-17.71-17.71l11.62-34.87A102,102,0,1,1,230,128Zm-12,0A90,90,0,1,0,50.08,173.06a6,6,0,0,1,.5,4.91L38.12,215.35a2,2,0,0,0,2.53,2.53L78,205.42a6.2,6.2,0,0,1,1.9-.31,6.09,6.09,0,0,1,3,.81A90,90,0,0,0,218,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128ZM84,116a12,12,0,1,0,12,12A12,12,0,0,0,84,116Zm88,0a12,12,0,1,0,12,12A12,12,0,0,0,172,116Zm60,12A104,104,0,0,1,79.12,219.82L45.07,231.17a16,16,0,0,1-20.24-20.24l11.35-34.05A104,104,0,1,1,232,128Zm-16,0A88,88,0,1,0,51.81,172.06a8,8,0,0,1,.66,6.54L40,216,77.4,203.53a7.85,7.85,0,0,1,2.53-.42,8,8,0,0,1,4,1.08A88,88,0,0,0,216,128Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M136,128a8,8,0,1,1-8-8A8,8,0,0,1,136,128Zm-52-8a8,8,0,1,0,8,8A8,8,0,0,0,84,120Zm88,0a8,8,0,1,0,8,8A8,8,0,0,0,172,120Zm56,8A100,100,0,0,1,79.5,215.47l-35.69,11.9a12,12,0,0,1-15.18-15.18l11.9-35.69A100,100,0,1,1,228,128Zm-8,0A92,92,0,1,0,48.35,174.07a4,4,0,0,1,.33,3.27L36.22,214.72a4,4,0,0,0,5.06,5.06l37.38-12.46a3.93,3.93,0,0,1,1.27-.21,4.05,4.05,0,0,1,2,.54A92,92,0,0,0,220,128Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as o from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport c from \"../defs/ChatCircleDots.es.js\";\nconst t = o.forwardRef((e, r) => /* @__PURE__ */ o.createElement(a, { ref: r, ...e, weights: c }));\nt.displayName = \"ChatCircleDotsIcon\";\nconst m = t;\nexport {\n m as ChatCircleDots,\n t as ChatCircleDotsIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M192,112a80,80,0,1,1-80-80A80,80,0,0,1,192,112Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M229.66,218.34,179.6,168.28a88.21,88.21,0,1,0-11.32,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M168,112a56,56,0,1,1-56-56A56,56,0,0,1,168,112Zm61.66,117.66a8,8,0,0,1-11.32,0l-50.06-50.07a88,88,0,1,1,11.32-11.31l50.06,50.06A8,8,0,0,1,229.66,229.66ZM112,184a72,72,0,1,0-72-72A72.08,72.08,0,0,0,112,184Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M228.24,219.76l-51.38-51.38a86.15,86.15,0,1,0-8.48,8.48l51.38,51.38a6,6,0,0,0,8.48-8.48ZM38,112a74,74,0,1,1,74,74A74.09,74.09,0,0,1,38,112Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M226.83,221.17l-52.7-52.7a84.1,84.1,0,1,0-5.66,5.66l52.7,52.7a4,4,0,0,0,5.66-5.66ZM36,112a76,76,0,1,1,76,76A76.08,76.08,0,0,1,36,112Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as a from \"react\";\nimport i from \"../lib/IconBase.es.js\";\nimport e from \"../defs/MagnifyingGlass.es.js\";\nconst o = a.forwardRef((s, n) => /* @__PURE__ */ a.createElement(i, { ref: n, ...s, weights: e }));\no.displayName = \"MagnifyingGlassIcon\";\nconst f = o;\nexport {\n f as MagnifyingGlass,\n o as MagnifyingGlassIcon\n};\n","import React, { useRef } from 'react';\nimport { IconButton } from '../IconButton';\nimport { MagnifyingGlassIcon } from \"@phosphor-icons/react/dist/csr/MagnifyingGlass\";\nimport { XIcon } from \"@phosphor-icons/react/dist/csr/X\";\n\ninterface SearchInputProps {\n searchQuery: string;\n setSearchQuery: (value: string) => void;\n placeholder: string;\n}\n\nexport function SearchInput({\n searchQuery,\n setSearchQuery,\n placeholder,\n}: SearchInputProps) {\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n return (\n <div className=\"relative\">\n <MagnifyingGlassIcon\n className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-stone\"\n weight=\"bold\"\n />\n \n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder={placeholder}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full pl-10 pr-10 py-3 text-sm border border-sand rounded-xl focus:outline-none focus:ring-2 focus:ring-black focus:border-transparent\"\n />\n \n {searchQuery && (\n <IconButton\n label=\"Clear search\"\n onClick={() => {\n setSearchQuery('');\n searchInputRef.current?.focus();\n }}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 p-1 text-stone hover:text-charcoal\"\n >\n <XIcon className=\"h-4 w-4\" weight=\"bold\" />\n </IconButton>\n )}\n </div>\n );\n}\n\n","import React, { useCallback, useEffect, useState, useRef } from 'react';\nimport { ChatCircleDotsIcon } from \"@phosphor-icons/react/dist/csr/ChatCircleDots\";\nimport { SpinnerGapIcon } from \"@phosphor-icons/react/dist/csr/SpinnerGap\";\nimport classNames from 'classnames';\n\nimport type { ParticipantPickerProps, Participant } from '../../types';\nimport { CloseButton } from '../CloseButton';\nimport { SearchInput } from '../SearchInput';\nimport { useMessagingContext } from '../../providers/MessagingProvider';\nimport { Avatar } from '../Avatar';\n\n/**\n * Generic participant picker component for starting conversations\n */\nexport const ParticipantPicker: React.FC<ParticipantPickerProps> = ({\n participantSource,\n onSelectParticipant,\n onClose,\n existingParticipantIds = new Set(),\n participantLabel = 'participants',\n searchPlaceholder = 'Search participants...',\n className,\n}) => {\n const { debug } = useMessagingContext();\n const [searchQuery, setSearchQuery] = useState('');\n const [participants, setParticipants] = useState<Participant[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [startingChatWithId, setStartingChatWithId] = useState<string | null>(null);\n\n // Track if we've already loaded participants to prevent repeated loading\n const loadedRef = useRef(false);\n \n // Load participants initially - wait for participantSource to finish loading first\n useEffect(() => {\n // Wait for the participantSource to finish loading before we try to load participants\n if (participantSource.loading) {\n if (debug) {\n console.log('[ParticipantPicker] Waiting for participant source to finish loading...');\n }\n return;\n }\n \n if (loadedRef.current) return; // Prevent multiple loads\n \n const loadInitialParticipants = async () => {\n if (debug) {\n console.log('[ParticipantPicker] Loading initial participants...');\n }\n setLoading(true);\n setError(null);\n \n try {\n const result = await participantSource.loadParticipants({ \n search: '', // Load all participants initially\n limit: 100 \n });\n setParticipants(result.participants);\n loadedRef.current = true; // Mark as loaded\n if (debug) {\n console.log('[ParticipantPicker] Participants loaded successfully:', result.participants.length);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to load participants';\n setError(errorMessage);\n console.error('[ParticipantPicker] Failed to load participants:', err);\n // Don't mark as loaded on error, allow retry\n } finally {\n setLoading(false);\n }\n };\n\n loadInitialParticipants();\n }, [participantSource.loading, debug]); // Re-run when loading state changes\n\n // Filter participants by search query and existing participants\n const availableParticipants = participants\n .filter(participant => !existingParticipantIds.has(participant.id))\n .filter(participant => {\n if (!searchQuery) return true;\n const searchLower = searchQuery.toLowerCase();\n return (\n participant.name.toLowerCase().includes(searchLower) ||\n participant.email?.toLowerCase().includes(searchLower) ||\n false\n );\n });\n\n const handleSelectParticipant = useCallback(async (participant: Participant) => {\n if (startingChatWithId) return; // Prevent multiple clicks\n \n setStartingChatWithId(participant.id);\n try {\n await onSelectParticipant(participant);\n } catch (error) {\n console.error('[ParticipantPicker] Failed to start chat:', error);\n // Reset the loading state on error\n setStartingChatWithId(null);\n }\n // Note: Don't reset startingChatWithId on success because the dialog will close\n }, [onSelectParticipant, startingChatWithId]);\n\n const handleKeyDown = (event: React.KeyboardEvent, participant: Participant) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleSelectParticipant(participant);\n }\n };\n\n return (\n <div className={classNames('flex flex-col h-full', className)}>\n {/* Header */}\n <div className=\"px-4 py-4 border-b border-sand bg-chalk\">\n <div className=\"flex items-center justify-between mb-3\">\n <h2 className=\"text-lg font-semibold text-charcoal\">\n Start a new Conversation\n </h2>\n <CloseButton onClick={onClose} />\n </div>\n \n <p className=\"text-xs text-stone mb-3\">\n Select a {participantLabel.slice(0, -1)} to start messaging ({availableParticipants.length} available)\n {participantSource.totalCount !== undefined && ` โ€ข ${participantSource.totalCount} ${participantLabel} total`}\n </p>\n\n <SearchInput\n searchQuery={searchQuery}\n setSearchQuery={setSearchQuery}\n placeholder={searchPlaceholder}\n />\n </div>\n\n {/* Error State */}\n {error && (\n <div className=\"p-4 text-sm text-danger bg-danger-alt\">\n Error loading {participantLabel}: {error}\n </div>\n )}\n\n {/* Participants List */}\n <div className=\"flex-1 overflow-auto\">\n {loading && availableParticipants.length === 0 ? (\n <div className=\"h-32 flex items-center justify-center\">\n <div className=\"flex items-center space-x-2\">\n <div className=\"w-4 h-4 animate-spin rounded-full border-2 border-primary border-t-transparent\"></div>\n <span className=\"text-sm text-stone\">Loading {participantLabel}...</span>\n </div>\n </div>\n ) : availableParticipants.length === 0 ? (\n <div className=\"p-6 text-center\">\n <div className=\"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-sand\">\n <ChatCircleDotsIcon className=\"h-8 w-8 text-charcoal\" />\n </div>\n <h3 className=\"text-sm font-semibold text-charcoal mb-2\">\n {searchQuery\n ? `No ${participantLabel} found`\n : participants.length > 0\n ? `Already chatting with all ${participantLabel}`\n : `No ${participantLabel} yet`}\n </h3>\n <p className=\"text-xs text-stone\">\n {searchQuery\n ? 'Try a different search term'\n : participants.length > 0\n ? `You have existing conversations with all your ${participantLabel}`\n : `${participantLabel.charAt(0).toUpperCase() + participantLabel.slice(1)} will appear here`}\n </p>\n </div>\n ) : (\n <ul className=\"space-y-0\">\n {availableParticipants.map((participant) => {\n const displayName = participant.name || participant.email || participant.id;\n const displaySecondary = participant.email && participant.name ? participant.email : participant.phone;\n\n return (\n <li key={participant.id}>\n <button\n type=\"button\"\n onClick={() => handleSelectParticipant(participant)}\n onKeyDown={(e) => handleKeyDown(e, participant)}\n className=\"w-full px-4 py-3 hover:bg-sand transition-colors border-b border-sand text-left focus:outline-none focus:ring-2 focus:ring-black\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-3 flex-1 min-w-0\">\n {/* Avatar */}\n <Avatar\n id={participant.id}\n name={displayName}\n image={participant.image}\n size={40}\n />\n\n {/* Info */}\n <div className=\"flex-1 min-w-0\">\n <h4 className=\"text-sm font-medium text-charcoal truncate\">\n {displayName}\n </h4>\n {displaySecondary && (\n <p className=\"text-xs text-stone truncate\">\n {displaySecondary}\n </p>\n )}\n </div>\n </div>\n\n {/* Icon */}\n <div className=\"flex-shrink-0\">\n {startingChatWithId === participant.id ? (\n <SpinnerGapIcon className=\"h-5 w-5 text-primary animate-spin\" />\n ) : (\n <ChatCircleDotsIcon className=\"h-5 w-5 text-stone\" />\n )}\n </div>\n </div>\n </button>\n </li>\n );\n })}\n\n {/* Loading indicator */}\n {loading && (\n <li className=\"p-4 flex justify-center\">\n <div className=\"flex items-center space-x-2\">\n <div className=\"w-4 h-4 animate-spin rounded-full border-2 border-primary border-t-transparent\"></div>\n <span className=\"text-sm text-stone\">Loading more...</span>\n </div>\n </li>\n )}\n </ul>\n )}\n </div>\n </div>\n );\n};\n","import { useMessagingContext } from '../providers/MessagingProvider';\nimport type { MessagingContextValue } from '../providers/MessagingProvider';\n\n/**\n * Hook to access messaging service and state\n */\nexport const useMessaging = (): MessagingContextValue => {\n return useMessagingContext();\n};\n","import React from 'react';\n\n/**\n * Empty state component shown when no channel is selected\n */\nexport const EmptyState: React.FC<{\n hasChannels: boolean;\n onStartConversation?: () => void;\n participantLabel: string;\n}> = ({ hasChannels, onStartConversation, participantLabel }) => (\n <div className=\"flex items-center justify-center h-full p-8 text-balance\">\n <div className=\"text-center max-w-sm\">\n <div className=\"w-24 h-24 bg-primary-alt bg-opacity-10 rounded-full flex items-center justify-center mx-auto mb-6\">\n <span className=\"text-4xl\">๐Ÿ’ฌ</span>\n </div>\n\n <h2 className=\"font-semibold text-charcoal\">\n Welcome to Messages\n </h2>\n\n <p className=\"text-stone text-sm mb-6\">\n {hasChannels ? (\n <>\n Choose a conversation from the list or{' '}\n {onStartConversation && (\n <TextButton onClick={onStartConversation}>\n start a new conversation with a {participantLabel.slice(0, -1)}.\n </TextButton>\n )}\n </>\n ) : (\n onStartConversation && (\n <>\n <TextButton onClick={onStartConversation}>\n Start a new conversation with one of your {participantLabel}\n </TextButton>{' '}\n to begin messaging.\n </>\n )\n )}\n </p>\n </div>\n </div>\n);\n\n\nconst TextButton = ({ onClick, children }: { onClick: () => void, children: React.ReactNode }) => (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"inline-flex items-center gap-1 text-sm font-medium text-primary hover:text-primary-alt focus:outline-none focus:ring-2 focus:ring-primary\"\n >\n {children}\n </button>\n)","import classNames from \"classnames\";\nimport React from \"react\";\n\ntype LoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst Loading = ({ className, message }: LoadingProps) => (\n <div\n className={classNames(\"flex items-center justify-center h-full\", className)}\n >\n <svg viewBox=\"0 0 100 100\" className=\"size-8 fill-pebble\" stroke=\"none\">\n <circle cx=\"6\" cy=\"50\" r=\"6\">\n <animateTransform\n attributeName=\"transform\"\n dur=\"1s\"\n type=\"translate\"\n values=\"0 15 ; 0 -15; 0 15\"\n repeatCount=\"indefinite\"\n begin=\"0.1\"\n />\n </circle>\n <circle cx=\"30\" cy=\"50\" r=\"6\">\n <animateTransform\n attributeName=\"transform\"\n dur=\"1s\"\n type=\"translate\"\n values=\"0 10 ; 0 -10; 0 10\"\n repeatCount=\"indefinite\"\n begin=\"0.2\"\n />\n </circle>\n <circle cx=\"54\" cy=\"50\" r=\"6\">\n <animateTransform\n attributeName=\"transform\"\n dur=\"1s\"\n type=\"translate\"\n values=\"0 5 ; 0 -5; 0 5\"\n repeatCount=\"indefinite\"\n begin=\"0.3\"\n />\n </circle>\n </svg>\n {message && <span className=\"text-stone\">{message}</span>}\n </div>\n);\n\nexport default Loading;\n\n","import React from 'react';\nimport Loading from '../Loading';\n\n/**\n * Loading state component\n */\nexport const LoadingState = () => (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"flex items-center\">\n <Loading className='w-6 h-6' />\n <span className=\"text-sm text-stone\">Loading messages</span>\n </div>\n </div>\n);\n\n","import React from 'react';\n\n/**\n * Error state component\n */\nexport const ErrorState: React.FC<{ error: string; onRetry?: () => void }> = ({ error, onRetry }) => (\n <div className=\"flex items-center justify-center h-full p-8\">\n <div className=\"text-center max-w-md\">\n <div className=\"w-24 h-24 bg-danger-alt rounded-full flex items-center justify-center mx-auto mb-6\">\n <span className=\"text-4xl\">โš ๏ธ</span>\n </div>\n \n <h2 className=\"text-xl font-semibold text-charcoal mb-3\">\n Connection Error\n </h2>\n \n <p className=\"text-stone text-sm mb-6\">\n {error}\n </p>\n\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"inline-flex items-center px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-alt focus:outline-none focus:ring-2 focus:ring-primary transition-colors\"\n >\n Try Again\n </button>\n )}\n </div>\n </div>\n);\n\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\nimport type { Channel } from 'stream-chat';\nimport { ChannelList } from '../ChannelList';\nimport { ChannelView } from '../ChannelView';\nimport { ParticipantPicker } from '../ParticipantPicker';\nimport { useMessaging } from '../../hooks/useMessaging';\nimport type { MessagingShellProps, Participant } from '../../types';\nimport { EmptyState } from './EmptyState';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\n/**\n * Main messaging interface component that combines channel list and channel view\n */\nexport const MessagingShell: React.FC<MessagingShellProps> = ({\n capabilities = {},\n customization = {},\n className,\n renderMessageInputActions,\n onChannelSelect,\n onParticipantSelect,\n}) => {\n const { \n service, \n client, \n isConnected, \n isLoading, \n error, \n refreshConnection,\n debug,\n } = useMessaging();\n\n const [selectedChannel, setSelectedChannel] = useState<Channel | null>(null);\n const [hasChannels, setHasChannels] = useState(false);\n const [showParticipantPicker, setShowParticipantPicker] = useState(false);\n const [existingParticipantIds, setExistingParticipantIds] = useState<Set<string>>(new Set());\n const [pickerKey, setPickerKey] = useState(0); // Key to force remount of ParticipantPicker\n\n const participantPickerRef = useRef<HTMLDialogElement>(null);\n \n const {\n showStartConversation = false,\n participantSource,\n participantLabel = 'participants',\n } = capabilities;\n\n // Track if we've already synced channels to prevent repeated API calls\n const syncedRef = useRef<string | null>(null);\n \n // Function to sync channels (extracted for reuse)\n const syncChannels = useCallback(async () => {\n if (!client || !isConnected) return;\n \n const userId = client.userID;\n if (!userId) return;\n\n try {\n if (debug) {\n console.log('[MessagingShell] Syncing channels for user:', userId);\n }\n \n const channels = await client.queryChannels(\n {\n type: 'messaging',\n members: { $in: [userId] },\n },\n {},\n { limit: 100 }\n );\n\n const memberIds = new Set<string>();\n channels.forEach((channel: Channel) => {\n const members = channel.state.members || {};\n Object.values(members).forEach((member: any) => {\n const memberId = member.user?.id;\n if (memberId && memberId !== userId) {\n memberIds.add(memberId);\n }\n });\n });\n\n setExistingParticipantIds(memberIds);\n setHasChannels(channels.length > 0);\n syncedRef.current = userId; // Mark as synced for this user\n \n if (debug) {\n console.log('[MessagingShell] Channels synced successfully:', {\n channelCount: channels.length,\n memberCount: memberIds.size\n });\n }\n } catch (error) {\n console.error('[MessagingShell] Failed to sync channels:', error);\n // Don't mark as synced on error, allow retry\n }\n }, [client, isConnected, debug]);\n \n // Sync existing channels to track which participants we can already message\n useEffect(() => {\n if (!client || !isConnected) return;\n \n const userId = client.userID;\n if (!userId) return;\n \n // Prevent repeated sync for the same user\n if (syncedRef.current === userId) return;\n\n syncChannels();\n }, [client, isConnected, syncChannels]);\n\n const handleChannelSelect = useCallback((channel: Channel) => {\n setSelectedChannel(channel);\n onChannelSelect?.(channel);\n }, [onChannelSelect]);\n\n const handleBackToChannelList = useCallback(() => {\n setSelectedChannel(null);\n }, []);\n\n const handleStartConversation = useCallback(() => {\n if (participantSource) {\n setPickerKey(prev => prev + 1); // Increment key to force remount\n setShowParticipantPicker(true);\n participantPickerRef.current?.showModal();\n }\n }, [participantSource]);\n\n const handleSelectParticipant = useCallback(async (participant: Participant) => {\n if (!service) return;\n\n try {\n if (debug) {\n console.log('[MessagingShell] Starting conversation with:', participant.id);\n }\n \n const channel = await service.startChannelWithFollower({\n id: participant.id,\n name: participant.name,\n email: participant.email,\n phone: participant.phone,\n });\n\n // Show the channel\n try {\n await channel.show();\n } catch (error) {\n console.warn('[MessagingShell] Failed to unhide channel:', error);\n }\n\n setSelectedChannel(channel);\n setShowParticipantPicker(false);\n participantPickerRef.current?.close();\n \n onParticipantSelect?.(participant);\n } catch (error) {\n console.error('[MessagingShell] Failed to start conversation:', error);\n }\n }, [service, onParticipantSelect, debug]);\n\n const handleCloseParticipantPicker = useCallback(() => {\n setShowParticipantPicker(false);\n participantPickerRef.current?.close();\n }, []);\n\n const handleLeaveConversation = useCallback(async (channel: Channel) => {\n if (debug) {\n console.log('[MessagingShell] Leaving conversation:', channel.id);\n }\n setSelectedChannel(null);\n \n // Force re-sync to update the existing participants list\n syncedRef.current = null;\n await syncChannels();\n }, [syncChannels, debug]);\n\n const handleBlockParticipant = useCallback(async (participantId?: string) => {\n if (debug) {\n console.log('[MessagingShell] Blocking participant:', participantId);\n }\n setSelectedChannel(null);\n \n // Force re-sync to update the existing participants list\n syncedRef.current = null;\n await syncChannels();\n }, [syncChannels, debug]);\n\n const isChannelSelected = Boolean(selectedChannel);\n\n // Show loading state\n if (isLoading) {\n return (\n <div className={classNames('h-full', className)}>\n <LoadingState />\n </div>\n );\n }\n\n // Show error state\n if (error) {\n return (\n <div className={classNames('h-full', className)}>\n <ErrorState error={error} onRetry={refreshConnection} />\n </div>\n );\n }\n\n // Show not connected state\n if (!isConnected || !client) {\n return (\n <div className={classNames('h-full', className)}>\n <ErrorState \n error=\"Not connected to messaging service\" \n onRetry={refreshConnection} \n />\n </div>\n );\n }\n\n return (\n <div className={classNames('h-full bg-white overflow-hidden', className)}>\n <div className=\"flex h-full min-h-0\">\n {/* Channel List Sidebar */}\n <div\n className={classNames(\n 'min-h-0 min-w-0 bg-white lg:bg-chalk lg:flex lg:flex-col lg:border-r lg:border-sand',\n {\n 'hidden lg:flex lg:w-80 lg:min-w-[280px] lg:max-w-[360px]': isChannelSelected,\n 'flex flex-col w-full lg:flex-1 lg:max-w-2xl': !isChannelSelected,\n }\n )}\n >\n <ChannelList\n onChannelSelect={handleChannelSelect}\n selectedChannel={selectedChannel || undefined}\n showStartConversation={showStartConversation && Boolean(participantSource)}\n onStartConversation={handleStartConversation}\n participantLabel={participantLabel}\n />\n </div>\n\n {/* Channel View */}\n <div\n className={classNames('flex-1 flex-col min-w-0 min-h-0', {\n 'hidden lg:flex': !isChannelSelected,\n 'flex': isChannelSelected,\n })}\n >\n {selectedChannel ? (\n <div className=\"flex-1 min-h-0 flex flex-col\">\n <ChannelView\n channel={selectedChannel}\n key={selectedChannel.id}\n onBack={handleBackToChannelList}\n showBackButton\n renderMessageInputActions={renderMessageInputActions}\n onLeaveConversation={handleLeaveConversation}\n onBlockParticipant={handleBlockParticipant}\n />\n </div>\n ) : (\n <EmptyState\n hasChannels={hasChannels}\n onStartConversation={showStartConversation ? handleStartConversation : undefined}\n participantLabel={participantLabel}\n />\n )}\n </div>\n </div>\n\n {/* Participant Picker Dialog */}\n {participantSource && (\n <dialog\n ref={participantPickerRef}\n className=\"mes-dialog\"\n onClick={(e) => {\n if (e.target === participantPickerRef.current) {\n handleCloseParticipantPicker();\n }\n }}\n onClose={handleCloseParticipantPicker}\n >\n <div className=\"h-full w-full bg-white shadow-max-elevation-light\">\n <ParticipantPicker\n key={pickerKey}\n participantSource={participantSource}\n onSelectParticipant={handleSelectParticipant}\n onClose={handleCloseParticipantPicker}\n existingParticipantIds={existingParticipantIds}\n participantLabel={participantLabel}\n searchPlaceholder={`Search ${participantLabel}...`}\n />\n </div>\n </dialog>\n )}\n </div>\n );\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport type { ParticipantSource, Participant } from '../types';\n\n/**\n * Hook for managing participant loading with search and pagination\n */\nexport const useParticipants = (\n participantSource: ParticipantSource,\n options: {\n initialSearch?: string;\n pageSize?: number;\n } = {}\n) => {\n const { initialSearch = '', pageSize = 20 } = options;\n \n const [participants, setParticipants] = useState<Participant[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(initialSearch);\n const [hasMore, setHasMore] = useState(true);\n const [cursor, setCursor] = useState<string | undefined>();\n\n // Load participants with current search query\n const loadParticipants = useCallback(async (\n reset = false,\n customSearch?: string\n ) => {\n if (loading) return;\n \n const search = customSearch !== undefined ? customSearch : searchQuery;\n \n setLoading(true);\n setError(null);\n\n try {\n const result = await participantSource.loadParticipants({\n search: search || undefined,\n limit: pageSize,\n cursor: reset ? undefined : cursor,\n });\n\n setParticipants(prev => \n reset ? result.participants : [...prev, ...result.participants]\n );\n setHasMore(result.hasMore);\n setCursor(result.nextCursor);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to load participants';\n setError(errorMessage);\n console.error('[useParticipants] Load error:', err);\n } finally {\n setLoading(false);\n }\n }, [participantSource, searchQuery, cursor, pageSize, loading]);\n\n // Load more participants (pagination)\n const loadMore = useCallback(() => {\n if (hasMore && !loading) {\n loadParticipants(false);\n }\n }, [hasMore, loading, loadParticipants]);\n\n // Search participants\n const search = useCallback((query: string) => {\n setSearchQuery(query);\n setCursor(undefined);\n loadParticipants(true, query);\n }, [loadParticipants]);\n\n // Refresh participants\n const refresh = useCallback(() => {\n setCursor(undefined);\n loadParticipants(true);\n }, [loadParticipants]);\n\n // Initial load - only run once when participantSource changes\n useEffect(() => {\n loadParticipants(true);\n }, [participantSource.loadParticipants]); // Only depend on the function to avoid loops\n\n return {\n participants,\n loading,\n error,\n searchQuery,\n hasMore,\n totalCount: participantSource.totalCount,\n loadMore,\n search,\n refresh,\n };\n};\n"],"names":["o","r","p","e","s","n","t","c","i","m","x","d","l","f","g","w","h","a","IconButton","label","className","children","rest","jsxs","classNames","jsx","MessagingContext","createContext","useMessagingContext","useContext","MessagingProvider","user","serviceConfig","apiKey","capabilities","customization","debug","debugLog","message","args","service","setService","useState","client","setClient","isConnected","setIsConnected","isLoading","setIsLoading","error","setError","connectingRef","useRef","prevPropsRef","renderCountRef","useEffect","currentRender","newService","StreamChatService","connectedUserRef","_a","_b","streamClient","err","errorMessage","refreshConnection","useCallback","contextValue","React","Chat","getAvatarColors","id","colorPairs","hash","index","Avatar","name","image","size","bgColor","textColor","initial","fontSizeClass","CustomChannelPreview","channel","selectedChannel","onChannelSelect","props","isSelected","handleClick","participant","member","participantName","participantImage","_c","lastMessage","_e","_d","lastMessageText","lastMessageTime","unread","_f","_g","ChannelList","showStartConversation","onStartConversation","participantLabel","useChatContext","filters","userId","newFilters","NotePencilIcon","StreamChannelList","CloseButton","onClick","XIcon","ActionButton","variant","CustomMessageInput","renderActions","MessageInput","CustomChannelHeader","onBack","showBackButton","onShowInfo","canShowInfo","useChannelStateContext","ArrowLeftIcon","DotsThreeIcon","ChannelInfoDialog","isOpen","onClose","followerStatusLabel","onLeaveConversation","onBlockParticipant","dialogRef","isParticipantBlocked","setIsParticipantBlocked","isLeaving","setIsLeaving","isUpdatingBlockStatus","setIsUpdatingBlockStatus","dialog","checkIsParticipantBlocked","isBlocked","handleLeaveConversation","actingUserId","handleBlockUser","handleUnblockUser","handleReportUser","participantEmail","participantUsername","participantSecondary","participantId","SpinnerGapIcon","SignOutIcon","ProhibitInsetIcon","FlagIcon","ChannelView","renderMessageInputActions","showInfo","setShowInfo","channelExtraData","Channel","Window","MessageList","SearchInput","searchQuery","setSearchQuery","placeholder","searchInputRef","MagnifyingGlassIcon","ParticipantPicker","participantSource","onSelectParticipant","existingParticipantIds","searchPlaceholder","participants","setParticipants","loading","setLoading","startingChatWithId","setStartingChatWithId","loadedRef","result","availableParticipants","searchLower","handleSelectParticipant","handleKeyDown","event","ChatCircleDotsIcon","displayName","displaySecondary","useMessaging","EmptyState","hasChannels","Fragment","TextButton","Loading","LoadingState","ErrorState","onRetry","MessagingShell","onParticipantSelect","setSelectedChannel","setHasChannels","showParticipantPicker","setShowParticipantPicker","setExistingParticipantIds","pickerKey","setPickerKey","participantPickerRef","syncedRef","syncChannels","channels","memberIds","members","memberId","handleChannelSelect","handleBackToChannelList","handleStartConversation","prev","handleCloseParticipantPicker","handleBlockParticipant","isChannelSelected","useParticipants","options","initialSearch","pageSize","hasMore","setHasMore","cursor","setCursor","loadParticipants","reset","customSearch","search","loadMore","query","refresh"],"mappings":"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","x_google_ignoreList":[0,1,2,3,10,11,12,13,14,15,16,17,18,19,20,21,22,23,27,28,29,30]}
1
+ {"version":3,"file":"index.js","sources":["../../../node_modules/@phosphor-icons/react/dist/lib/context.es.js","../../../node_modules/@phosphor-icons/react/dist/lib/IconBase.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/NotePencil.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/NotePencil.es.js","../src/components/IconButton/index.tsx","../src/providers/MessagingProvider.tsx","../src/components/Avatar/avatarColors.ts","../src/components/Avatar/index.tsx","../src/components/ChannelList/CustomChannelPreview.tsx","../src/components/ChannelList/index.tsx","../../../node_modules/@phosphor-icons/react/dist/defs/Flag.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/Flag.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/ProhibitInset.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/ProhibitInset.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/SignOut.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/SignOut.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/SpinnerGap.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/SpinnerGap.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/ArrowLeft.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/ArrowLeft.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/DotsThree.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/DotsThree.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/X.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/X.es.js","../src/components/CloseButton/index.tsx","../src/components/ActionButton/index.tsx","../src/components/ChannelView.tsx","../../../node_modules/@phosphor-icons/react/dist/defs/ChatCircleDots.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/ChatCircleDots.es.js","../../../node_modules/@phosphor-icons/react/dist/defs/MagnifyingGlass.es.js","../../../node_modules/@phosphor-icons/react/dist/csr/MagnifyingGlass.es.js","../src/components/SearchInput/index.tsx","../src/components/ParticipantPicker/index.tsx","../src/hooks/useMessaging.ts","../src/components/MessagingShell/EmptyState.tsx","../src/components/Loading/index.tsx","../src/components/MessagingShell/LoadingState.tsx","../src/components/MessagingShell/ErrorState.tsx","../src/components/MessagingShell/index.tsx","../src/hooks/useParticipants.ts"],"sourcesContent":["import { createContext as r } from \"react\";\nconst o = r({\n color: \"currentColor\",\n size: \"1em\",\n weight: \"regular\",\n mirrored: !1\n});\nexport {\n o as IconContext\n};\n","import * as e from \"react\";\nimport { IconContext as h } from \"./context.es.js\";\nconst p = e.forwardRef(\n (s, a) => {\n const {\n alt: n,\n color: r,\n size: t,\n weight: o,\n mirrored: c,\n children: i,\n weights: m,\n ...x\n } = s, {\n color: d = \"currentColor\",\n size: l,\n weight: f = \"regular\",\n mirrored: g = !1,\n ...w\n } = e.useContext(h);\n return /* @__PURE__ */ e.createElement(\n \"svg\",\n {\n ref: a,\n xmlns: \"http://www.w3.org/2000/svg\",\n width: t != null ? t : l,\n height: t != null ? t : l,\n fill: r != null ? r : d,\n viewBox: \"0 0 256 256\",\n transform: c || g ? \"scale(-1, 1)\" : void 0,\n ...w,\n ...x\n },\n !!n && /* @__PURE__ */ e.createElement(\"title\", null, n),\n i,\n m.get(o != null ? o : f)\n );\n }\n);\np.displayName = \"IconBase\";\nexport {\n p as default\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M232.49,55.51l-32-32a12,12,0,0,0-17,0l-96,96A12,12,0,0,0,84,128v32a12,12,0,0,0,12,12h32a12,12,0,0,0,8.49-3.51l96-96A12,12,0,0,0,232.49,55.51ZM192,49l15,15L196,75,181,60Zm-69,99H108V133l56-56,15,15Zm105-7.43V208a20,20,0,0,1-20,20H48a20,20,0,0,1-20-20V48A20,20,0,0,1,48,28h67.43a12,12,0,0,1,0,24H52V204H204V140.57a12,12,0,0,1,24,0Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M200,88l-72,72H96V128l72-72Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M229.66,58.34l-32-32a8,8,0,0,0-11.32,0l-96,96A8,8,0,0,0,88,128v32a8,8,0,0,0,8,8h32a8,8,0,0,0,5.66-2.34l96-96A8,8,0,0,0,229.66,58.34ZM124.69,152H104V131.31l64-64L188.69,88ZM200,76.69,179.31,56,192,43.31,212.69,64ZM224,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32h80a8,8,0,0,1,0,16H48V208H208V128a8,8,0,0,1,16,0Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32h80a8,8,0,0,1,0,16H48V208H208V128a8,8,0,0,1,16,0Zm5.66-58.34-96,96A8,8,0,0,1,128,168H96a8,8,0,0,1-8-8V128a8,8,0,0,1,2.34-5.66l96-96a8,8,0,0,1,11.32,0l32,32A8,8,0,0,1,229.66,69.66Zm-17-5.66L192,43.31,179.31,56,200,76.69Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M228.24,59.76l-32-32a6,6,0,0,0-8.48,0l-96,96A6,6,0,0,0,90,128v32a6,6,0,0,0,6,6h32a6,6,0,0,0,4.24-1.76l96-96A6,6,0,0,0,228.24,59.76ZM125.51,154H102V130.49l66-66L191.51,88ZM200,79.51,176.49,56,192,40.49,215.51,64ZM222,128v80a14,14,0,0,1-14,14H48a14,14,0,0,1-14-14V48A14,14,0,0,1,48,34h80a6,6,0,0,1,0,12H48a2,2,0,0,0-2,2V208a2,2,0,0,0,2,2H208a2,2,0,0,0,2-2V128a6,6,0,0,1,12,0Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M229.66,58.34l-32-32a8,8,0,0,0-11.32,0l-96,96A8,8,0,0,0,88,128v32a8,8,0,0,0,8,8h32a8,8,0,0,0,5.66-2.34l96-96A8,8,0,0,0,229.66,58.34ZM124.69,152H104V131.31l64-64L188.69,88ZM200,76.69,179.31,56,192,43.31,212.69,64ZM224,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V48A16,16,0,0,1,48,32h80a8,8,0,0,1,0,16H48V208H208V128a8,8,0,0,1,16,0Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M226.83,61.17l-32-32a4,4,0,0,0-5.66,0l-96,96A4,4,0,0,0,92,128v32a4,4,0,0,0,4,4h32a4,4,0,0,0,2.83-1.17l96-96A4,4,0,0,0,226.83,61.17ZM126.34,156H100V129.66l68-68L194.34,88ZM200,82.34,173.66,56,192,37.66,218.34,64ZM220,128v80a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V48A12,12,0,0,1,48,36h80a4,4,0,0,1,0,8H48a4,4,0,0,0-4,4V208a4,4,0,0,0,4,4H208a4,4,0,0,0,4-4V128a4,4,0,0,1,8,0Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as e from \"react\";\nimport r from \"../lib/IconBase.es.js\";\nimport n from \"../defs/NotePencil.es.js\";\nconst o = e.forwardRef((t, c) => /* @__PURE__ */ e.createElement(r, { ref: c, ...t, weights: n }));\no.displayName = \"NotePencilIcon\";\nconst m = o;\nexport {\n m as NotePencil,\n o as NotePencilIcon\n};\n","import classNames from \"classnames\";\nimport React from \"react\";\n\ninterface IconButtonProps\n extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n \"type\" | \"children\"\n > {\n label: string;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function IconButton({ label, className, children, ...rest }: IconButtonProps) {\n return (\n <button\n type=\"button\"\n className={classNames(\n \"rounded-full p-2 transition-colors focus-ring\",\n {\n \"cursor-not-allowed opacity-50\": rest.disabled,\n \"hover:bg-sand\": !rest.disabled,\n },\n className,\n )}\n {...rest}\n >\n <span className=\"sr-only\">{label}</span>\n {children}\n </button>\n );\n}","import React, { createContext, useContext, useEffect, useState, useRef, useCallback } from 'react';\nimport type { Channel } from 'stream-chat';\nimport { Chat } from 'stream-chat-react';\nimport { StreamChatService } from '@linktr.ee/messaging-core';\n\nimport type { \n MessagingProviderProps, \n MessagingCapabilities,\n MessagingCustomization \n} from '../types';\n\n/**\n * Context value for messaging state and service\n */\nexport interface MessagingContextValue {\n service: StreamChatService | null;\n client: any; // Stream Chat client\n isConnected: boolean;\n isLoading: boolean;\n error: string | null;\n capabilities: MessagingCapabilities;\n customization: MessagingCustomization;\n refreshConnection: () => Promise<void>;\n debug: boolean;\n}\n\nconst MessagingContext = createContext<MessagingContextValue>({\n service: null,\n client: null,\n isConnected: false,\n isLoading: false,\n error: null,\n capabilities: {},\n customization: {},\n refreshConnection: async () => {},\n debug: false,\n});\n\n/**\n * Hook to access messaging context\n */\nexport const useMessagingContext = () => useContext(MessagingContext);\n\n/**\n * Provider component that wraps messaging-core with React state management\n */\nexport const MessagingProvider: React.FC<MessagingProviderProps> = ({\n children,\n user,\n serviceConfig,\n apiKey,\n capabilities = {},\n customization = {},\n debug = false,\n}) => {\n // Create debug logger that respects the debug prop\n const debugLog = (message: string, ...args: any[]) => {\n if (debug) {\n console.log(`๐Ÿ”ฅ [MessagingProvider] ${message}`, ...args);\n }\n };\n\n debugLog('๐Ÿ”„ RENDER START', {\n userId: user?.id,\n apiKey: apiKey?.substring(0, 8) + '...',\n serviceConfig: !!serviceConfig,\n capabilities: Object.keys(capabilities),\n customization: Object.keys(customization)\n });\n\n const [service, setService] = useState<StreamChatService | null>(null);\n const [client, setClient] = useState<any>(null);\n const [isConnected, setIsConnected] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n \n // Prevent multiple concurrent connection attempts\n const connectingRef = useRef(false);\n\n // Track renders and prop changes\n const prevPropsRef = useRef({ userId: user?.id, apiKey, serviceConfig, capabilities, customization });\n const renderCountRef = useRef(0);\n renderCountRef.current++;\n \n debugLog('๐Ÿ“Š RENDER INFO', {\n renderCount: renderCountRef.current,\n currentProps: { userId: user?.id, apiKey: apiKey?.substring(0, 8) + '...' },\n propChanges: {\n userChanged: prevPropsRef.current.userId !== user?.id,\n apiKeyChanged: prevPropsRef.current.apiKey !== apiKey,\n serviceConfigChanged: prevPropsRef.current.serviceConfig !== serviceConfig,\n capabilitiesChanged: prevPropsRef.current.capabilities !== capabilities,\n customizationChanged: prevPropsRef.current.customization !== customization\n }\n });\n \n prevPropsRef.current = { userId: user?.id, apiKey, serviceConfig, capabilities, customization };\n\n // Initialize service when config changes\n useEffect(() => {\n const currentRender = renderCountRef.current;\n debugLog('๐Ÿ”ง SERVICE INIT EFFECT TRIGGERED', {\n renderCount: currentRender,\n apiKey: !!apiKey,\n serviceConfig: !!serviceConfig,\n dependencies: { \n apiKey: apiKey?.substring(0, 8) + '...', \n serviceConfigRef: serviceConfig,\n serviceConfigStable: prevPropsRef.current.serviceConfig === serviceConfig,\n apiKeyStable: prevPropsRef.current.apiKey === apiKey\n }\n });\n\n if (!apiKey || !serviceConfig) {\n debugLog('โš ๏ธ SERVICE INIT SKIPPED', { renderCount: currentRender, reason: 'Missing apiKey or serviceConfig' });\n return;\n }\n\n debugLog('๐Ÿš€ CREATING NEW SERVICE', { \n renderCount: currentRender,\n apiKey: apiKey?.substring(0, 8) + '...',\n serviceConfigChanged: prevPropsRef.current.serviceConfig !== serviceConfig\n });\n \n const newService = new StreamChatService({\n ...serviceConfig,\n apiKey,\n debug,\n });\n\n setService(newService);\n debugLog('โœ… SERVICE SET', { renderCount: currentRender, serviceInstance: !!newService });\n \n return () => {\n debugLog('๐Ÿงน SERVICE CLEANUP', { renderCount: currentRender, reason: 'Effect cleanup' });\n newService.disconnectUser().catch(console.error);\n };\n }, [apiKey, serviceConfig]); // Use serviceConfig object directly, not individual properties\n\n // Track if we've already connected this user with this service to prevent duplicate connections\n const connectedUserRef = useRef<{serviceId: any, userId: string} | null>(null);\n\n // Connect user when service and user are available\n useEffect(() => {\n debugLog('๐Ÿ”— USER CONNECTION EFFECT TRIGGERED', {\n hasService: !!service,\n hasUser: !!user,\n userId: user?.id,\n isConnecting: connectingRef.current,\n isConnected: isConnected,\n dependencies: { service: !!service, userId: user?.id }\n });\n\n if (!service || !user) {\n debugLog('โš ๏ธ USER CONNECTION SKIPPED', 'Missing service or user');\n return;\n }\n \n if (connectingRef.current) {\n debugLog('โš ๏ธ USER CONNECTION SKIPPED', 'Already connecting');\n return;\n }\n \n // Check if we've already connected this exact user with this exact service instance\n if (connectedUserRef.current?.serviceId === service && connectedUserRef.current?.userId === user.id) {\n debugLog('โš ๏ธ USER CONNECTION SKIPPED', 'Already connected this user with this service');\n return;\n }\n\n const connectUser = async () => {\n debugLog('๐Ÿš€ STARTING USER CONNECTION', { userId: user.id });\n connectingRef.current = true;\n setIsLoading(true);\n setError(null);\n\n try {\n debugLog('๐Ÿ“ž CALLING SERVICE.CONNECTUSER', { userId: user.id });\n const streamClient = await service.connectUser(user);\n setClient(streamClient);\n setIsConnected(true);\n connectedUserRef.current = { serviceId: service, userId: user.id }; // Mark as connected\n debugLog('โœ… USER CONNECTION SUCCESS', { userId: user.id, clientId: streamClient.userID });\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Connection failed';\n setError(errorMessage);\n debugLog('โŒ USER CONNECTION ERROR', { userId: user.id, error: errorMessage });\n } finally {\n setIsLoading(false);\n connectingRef.current = false;\n debugLog('๐Ÿ”„ USER CONNECTION FINISHED', { userId: user.id, isConnected });\n }\n };\n\n connectUser();\n }, [service, user]); // Remove isConnected to prevent circular dependency\n\n // Disconnect when user is removed (cleanup effect)\n useEffect(() => {\n debugLog('๐Ÿ”Œ CLEANUP EFFECT REGISTERED', { hasService: !!service, isConnected });\n return () => {\n if (service && isConnected) {\n debugLog('๐Ÿงน CLEANUP EFFECT TRIGGERED', 'Cleaning up connection on unmount');\n connectedUserRef.current = null; // Reset connection tracking\n service.disconnectUser().catch(console.error);\n } else {\n debugLog('๐Ÿ”‡ CLEANUP EFFECT SKIPPED', { hasService: !!service, isConnected });\n }\n };\n }, [service, isConnected]);\n\n const refreshConnection = useCallback(async () => {\n debugLog('๐Ÿ”„ REFRESH CONNECTION CALLED', { hasService: !!service, hasUser: !!user });\n \n if (!service || !user) {\n debugLog('โš ๏ธ REFRESH CONNECTION SKIPPED', 'Missing service or user');\n return;\n }\n\n debugLog('๐Ÿš€ STARTING CONNECTION REFRESH', { userId: user.id });\n setIsLoading(true);\n try {\n debugLog('๐Ÿ”Œ DISCONNECTING FOR REFRESH');\n await service.disconnectUser();\n debugLog('๐Ÿ“ž RECONNECTING FOR REFRESH');\n const streamClient = await service.connectUser(user);\n setClient(streamClient);\n setIsConnected(true);\n setError(null);\n debugLog('โœ… CONNECTION REFRESH SUCCESS', { userId: user.id });\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Refresh failed';\n setError(errorMessage);\n debugLog('โŒ CONNECTION REFRESH ERROR', { userId: user.id, error: errorMessage });\n } finally {\n setIsLoading(false);\n debugLog('๐Ÿ”„ CONNECTION REFRESH FINISHED', { userId: user.id });\n }\n }, [service, user]);\n\n // Memoize context value to prevent unnecessary re-renders\n const contextValue: MessagingContextValue = React.useMemo(() => {\n debugLog('๐Ÿ’ซ CONTEXT VALUE MEMOIZATION', {\n hasService: !!service,\n hasClient: !!client,\n isConnected,\n isLoading,\n hasError: !!error,\n capabilitiesKeys: Object.keys(capabilities),\n customizationKeys: Object.keys(customization)\n });\n \n return {\n service,\n client,\n isConnected,\n isLoading,\n error,\n capabilities,\n customization,\n refreshConnection,\n debug,\n };\n }, [service, client, isConnected, isLoading, error, capabilities, customization, refreshConnection, debug]);\n\n debugLog('๐Ÿ”„ RENDER END', {\n renderCount: renderCountRef.current,\n willRenderChat: !!(client && isConnected),\n contextValueReady: !!contextValue\n });\n\n return (\n <MessagingContext.Provider value={contextValue}>\n {client && isConnected ? (\n <Chat client={client}>\n {children}\n </Chat>\n ) : (\n children\n )}\n </MessagingContext.Provider>\n );\n};\n","/**\n * Generate avatar background and text colors based on a string\n * Uses the ID to deterministically select from design system colors\n */\nexport function getAvatarColors(id: string): {\n bgColor: string\n textColor: string\n} {\n // Map of color combinations from Linktree design system\n // Selected for good contrast at 20% opacity\n const colorPairs = [\n { bgColor: 'bg-primary/20', textColor: 'text-primary' }, // #8129D9 - purple\n { bgColor: 'bg-forest/20', textColor: 'text-forest' }, // #254f1a - dark green\n { bgColor: 'bg-iris/20', textColor: 'text-iris' }, // #061492 - dark blue\n { bgColor: 'bg-shade/20', textColor: 'text-shade' }, // #1e2330 - dark blue-gray\n { bgColor: 'bg-dahlia/20', textColor: 'text-dahlia' }, // #502274 - dark purple\n { bgColor: 'bg-orchid/20', textColor: 'text-orchid' }, // #d717e7 - magenta\n { bgColor: 'bg-currant/20', textColor: 'text-currant' }, // #780016 - dark red\n { bgColor: 'bg-apple/20', textColor: 'text-apple' }, // #c41500 - red\n { bgColor: 'bg-rose/20', textColor: 'text-rose' }, // #fc3e4b - pink\n { bgColor: 'bg-root/20', textColor: 'text-root' }, // #4c2e05 - brown\n { bgColor: 'bg-poppy/20', textColor: 'text-poppy' }, // #ff6c02 - orange\n { bgColor: 'bg-moss/20', textColor: 'text-moss' }, // #70764d - olive green\n ]\n\n // Simple hash function to get consistent index\n let hash = 0\n for (let i = 0; i < id.length; i++) {\n hash = (hash << 5) - hash + id.charCodeAt(i)\n hash = hash & hash // Convert to 32bit integer\n }\n\n const index = Math.abs(hash) % colorPairs.length\n return colorPairs[index]\n}\n","import React from 'react';\nimport classNames from 'classnames';\nimport { getAvatarColors } from './avatarColors';\n\nexport interface AvatarProps {\n id: string;\n name: string;\n image?: string;\n size?: number;\n className?: string;\n}\n\n/**\n * Avatar component that displays a user image or colored initial fallback\n */\nexport const Avatar: React.FC<AvatarProps> = ({\n id,\n name,\n image,\n size = 40,\n className,\n}) => {\n const { bgColor, textColor } = getAvatarColors(id);\n const initial = name.charAt(0).toUpperCase();\n\n // Determine font size based on avatar size\n const getFontSizeClass = () => {\n if (size < 32) return 'text-xs';\n if (size < 56) return 'text-sm';\n return 'text-lg';\n };\n\n const fontSizeClass = getFontSizeClass();\n\n return (\n <div\n className={classNames(\n 'flex-shrink-0 overflow-hidden rounded-full',\n className\n )}\n style={{ width: `${size}px`, height: `${size}px` }}\n >\n {image ? (\n <img\n src={image}\n alt=\"\"\n className=\"h-full w-full object-cover aspect-square\"\n />\n ) : (\n <div\n className={classNames(\n 'flex h-full w-full items-center justify-center font-semibold',\n bgColor,\n textColor,\n fontSizeClass\n )}\n >\n {initial}\n </div>\n )}\n </div>\n );\n};\n\n","import React from 'react'\nimport { ChannelPreviewUIComponentProps } from 'stream-chat-react'\nimport { Channel } from 'stream-chat'\nimport classNames from 'classnames'\nimport { Avatar } from '../Avatar'\n\n/**\n * Custom channel preview that handles selection\n */\nconst CustomChannelPreview: React.FC<\n ChannelPreviewUIComponentProps & {\n selectedChannel?: Channel\n onChannelSelect: (channel: Channel) => void\n debug?: boolean\n }\n> = ({\n channel,\n selectedChannel,\n onChannelSelect,\n debug = false,\n ...props\n}) => {\n const isSelected = selectedChannel?.id === channel?.id\n\n const handleClick = () => {\n if (channel) {\n onChannelSelect(channel)\n }\n }\n\n // Get participant info\n const members = Object.values(channel?.state?.members || {})\n const participant = members.find(\n (member) => member.user?.id && member.user.id !== channel?._client?.userID\n )\n const participantName = participant?.user?.name || 'Conversation'\n const participantImage = participant?.user?.image\n const participantInitial = participantName.charAt(0).toUpperCase()\n\n // Get last message and format timestamp\n const lastMessage =\n channel?.state?.messages?.[channel.state.messages.length - 1]\n const lastMessageText = lastMessage?.text || 'No messages yet'\n const lastMessageTime = lastMessage?.created_at\n ? new Date(lastMessage.created_at).toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n })\n : ''\n\n // Get unread count from channel state\n const unread = channel?.state?.unreadCount || 0\n\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ“‹ CHANNEL PREVIEW RENDER', {\n channelId: channel?.id,\n isSelected,\n participantName,\n unread,\n hasTimestamp: !!lastMessageTime,\n })\n }\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n className={classNames(\n 'w-full px-4 py-3 transition-colors border-b border-sand text-left max-w-full overflow-hidden focus-ring',\n {\n 'bg-primary-alt/10 border-l-4 border-l-primary': isSelected,\n 'hover:bg-sand': !isSelected,\n }\n )}\n >\n <div className=\"flex items-start gap-3\">\n {/* Avatar */}\n <Avatar\n id={participant?.user?.id || channel.id || 'unknown'}\n name={participantName}\n image={participantImage}\n size={44}\n />\n\n {/* Content column */}\n <div className=\"flex-1 min-w-0 flex flex-col gap-1\">\n {/* Name and timestamp row */}\n <div className=\"flex items-center justify-between gap-2\">\n <h3\n className={classNames(\n 'text-sm font-medium truncate',\n isSelected ? 'text-primary' : 'text-charcoal'\n )}\n >\n {participantName}\n </h3>\n {lastMessageTime && (\n <span className=\"text-xs text-stone flex-shrink-0\">\n {lastMessageTime}\n </span>\n )}\n </div>\n\n {/* Message and unread badge row */}\n <div className=\"flex items-center justify-between gap-2 min-w-0\">\n <p className=\"text-xs text-stone mr-2 flex-1 line-clamp-2\">\n {lastMessageText}\n </p>\n {unread > 0 && (\n <span className=\"bg-primary text-white text-xs px-2 py-0.5 rounded-full min-w-[20px] text-center flex-shrink-0\">\n {unread > 99 ? '99+' : unread}\n </span>\n )}\n </div>\n </div>\n </div>\n </button>\n )\n}\n\nexport default CustomChannelPreview\n","import React from 'react';\nimport { NotePencilIcon } from \"@phosphor-icons/react/dist/csr/NotePencil\";\n\nimport classNames from 'classnames';\nimport { ChannelList as StreamChannelList, useChatContext } from 'stream-chat-react';\nimport type { ChannelListProps } from '../../types';\nimport { IconButton } from '../IconButton';\nimport { useMessagingContext } from '../../providers/MessagingProvider';\nimport CustomChannelPreview from './CustomChannelPreview';\n\n\n/**\n * Channel list component with customizable header and actions\n */\nexport const ChannelList: React.FC<ChannelListProps> = ({\n onChannelSelect,\n selectedChannel,\n showStartConversation = false,\n onStartConversation,\n participantLabel = 'participants',\n className,\n}) => {\n // Track renders\n const renderCountRef = React.useRef(0);\n renderCountRef.current++;\n\n // Get debug flag from context\n const { debug = false } = useMessagingContext();\n\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ”„ RENDER START', {\n renderCount: renderCountRef.current,\n selectedChannelId: selectedChannel?.id,\n showStartConversation,\n participantLabel\n });\n }\n\n const { client } = useChatContext();\n\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ“ก CHAT CONTEXT', {\n renderCount: renderCountRef.current,\n hasClient: !!client,\n clientUserId: client?.userID,\n clientConnected: client?.wsConnection?.isHealthy\n });\n }\n\n // Filter for messaging channels\n const filters = React.useMemo(() => {\n const userId = client.userID;\n const newFilters = userId\n ? { type: 'messaging', members: { $in: [userId] }, hidden: false }\n : { type: 'messaging' };\n \n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ” FILTERS MEMOIZED', {\n renderCount: renderCountRef.current,\n userId,\n filters: newFilters\n });\n }\n \n return newFilters;\n }, [client.userID, debug]);\n\n return (\n <div className={classNames('h-full flex flex-col min-w-0 overflow-hidden', className)}>\n {/* Header */}\n <div className=\"px-4 py-4 border-b border-sand bg-chalk\">\n <div className=\"flex items-center justify-between gap-3 min-h-10 min-w-0\">\n <h2 className=\"text-lg font-semibold text-charcoal\">Conversations</h2>\n <div className=\"flex items-center gap-2\">\n {showStartConversation && onStartConversation && (\n <IconButton\n label=\"Start a new conversation\"\n onClick={onStartConversation}\n className=\"inline-flex size-10 items-center justify-center\"\n >\n <NotePencilIcon className=\"h-5 w-5\" />\n </IconButton>\n )}\n </div>\n </div>\n </div>\n\n {/* Channel List */}\n <div className=\"flex-1 overflow-hidden min-w-0\">\n {(() => {\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐ŸŽฌ RENDERING STREAM CHANNEL LIST', {\n renderCount: renderCountRef.current,\n filters,\n hasClient: !!client,\n clientUserId: client?.userID\n });\n }\n \n return (\n <StreamChannelList\n filters={filters}\n sort={{ last_message_at: -1 }}\n options={{ limit: 30 }}\n Preview={(props) => {\n if (debug) {\n console.log('๐Ÿ“บ [ChannelList] ๐Ÿ“‹ CHANNEL PREVIEW RENDER', {\n channelId: props.channel?.id,\n selectedChannelId: selectedChannel?.id,\n isSelected: selectedChannel?.id === props.channel?.id\n });\n }\n \n return (\n <CustomChannelPreview\n {...props}\n selectedChannel={selectedChannel}\n onChannelSelect={onChannelSelect}\n debug={debug}\n />\n );\n }}\n />\n );\n })()}\n </div>\n </div>\n );\n};\n","import * as e from \"react\";\nconst t = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M40.14,46.88A12,12,0,0,0,36,56V224a12,12,0,0,0,24,0V181.72c22.84-17.12,42.1-9.12,70.68,5,16.23,8,34.74,17.2,54.8,17.2,14.72,0,30.28-4.94,46.38-18.88A12,12,0,0,0,236,176V56a12,12,0,0,0-19.86-9.07c-24.71,21.41-44.53,13.31-74.82-1.68C113.19,31.27,78.17,13.94,40.14,46.88ZM212,170.26c-22.84,17.13-42.1,9.11-70.68-5C118.16,153.76,90.33,140,60,153.87V61.69c22.84-17.12,42.1-9.12,70.68,5,16.23,8,34.74,17.2,54.8,17.2A63,63,0,0,0,212,78.08Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n \"path\",\n {\n d: \"M224,56V176c-64,55.43-112-55.43-176,0V56C112,.57,160,111.43,224,56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ e.createElement(\"path\", { d: \"M42.76,50A8,8,0,0,0,40,56V224a8,8,0,0,0,16,0V179.77c26.79-21.16,49.87-9.75,76.45,3.41,16.4,8.11,34.06,16.85,53,16.85,13.93,0,28.54-4.75,43.82-18a8,8,0,0,0,2.76-6V56A8,8,0,0,0,218.76,50c-28,24.23-51.72,12.49-79.21-1.12C111.07,34.76,78.78,18.79,42.76,50ZM216,172.25c-26.79,21.16-49.87,9.74-76.45-3.41-25-12.35-52.81-26.13-83.55-8.4V59.79c26.79-21.16,49.87-9.75,76.45,3.4,25,12.35,52.82,26.13,83.55,8.4Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M232,56V176a8,8,0,0,1-2.76,6c-15.28,13.23-29.89,18-43.82,18-18.91,0-36.57-8.74-53-16.85C105.87,170,82.79,158.61,56,179.77V224a8,8,0,0,1-16,0V56a8,8,0,0,1,2.77-6h0c36-31.18,68.31-15.21,96.79-1.12C167,62.46,190.79,74.2,218.76,50A8,8,0,0,1,232,56Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M44.08,51.37A6,6,0,0,0,42,55.9V224a6,6,0,0,0,12,0V178.78c28.08-22.79,51.88-11,79.34,2.57,16.12,8,33.49,16.58,52,16.58,13.57,0,27.76-4.6,42.56-17.42A6,6,0,0,0,230,176V55.9a6,6,0,0,0-9.93-4.54c-29,25.12-53.28,13.09-81.41-.84C110.77,36.71,79,21.16,44.08,51.37ZM218,173.17c-28.08,22.8-51.88,11-79.34-2.58C113.4,158.08,85.09,144.07,54,164V58.72c28.08-22.8,51.88-11,79.34,2.56C158.6,73.79,186.91,87.8,218,67.91Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M42.76,50A8,8,0,0,0,40,56V224a8,8,0,0,0,16,0V179.77c26.79-21.16,49.87-9.75,76.45,3.41,16.4,8.11,34.06,16.85,53,16.85,13.93,0,28.54-4.75,43.82-18a8,8,0,0,0,2.76-6V56A8,8,0,0,0,218.76,50c-28,24.23-51.72,12.49-79.21-1.12C111.07,34.76,78.78,18.79,42.76,50ZM216,172.25c-26.79,21.16-49.87,9.74-76.45-3.41-25-12.35-52.81-26.13-83.55-8.4V59.79c26.79-21.16,49.87-9.75,76.45,3.4,25,12.35,52.82,26.13,83.55,8.4Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M45.39,53.06a4,4,0,0,0-1.39,3V224a4,4,0,0,0,8,0V177.87c29.41-24.39,55.08-11.69,82.23,1.73,16.5,8.17,33.33,16.5,51.13,16.5,13.14,0,26.81-4.55,41.26-17.06a4,4,0,0,0,1.38-3v-120a4,4,0,0,0-6.62-3c-30,26-56,13.07-83.61-.57C109.07,38.28,79.4,23.62,45.39,53.06ZM220,174.17c-29.41,24.4-55.08,11.7-82.23-1.73-26.82-13.27-54.5-27-85.77-4.66V57.92c29.41-24.4,55.08-11.7,82.23,1.73,26.82,13.27,54.5,27,85.77,4.66Z\" }))\n ]\n]);\nexport {\n t as default\n};\n","import * as o from \"react\";\nimport t from \"../lib/IconBase.es.js\";\nimport m from \"../defs/Flag.es.js\";\nconst a = o.forwardRef((e, r) => /* @__PURE__ */ o.createElement(t, { ref: r, ...e, weights: m }));\na.displayName = \"FlagIcon\";\nconst n = a;\nexport {\n n as Flag,\n a as FlagIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M168.49,151.51a12,12,0,0,1-17,17l-64-64a12,12,0,0,1,17-17ZM236,128A108,108,0,1,1,128,20,108.12,108.12,0,0,1,236,128Zm-24,0a84,84,0,1,0-84,84A84.09,84.09,0,0,0,212,128Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M165.66,154.34a8,8,0,0,1-11.32,11.32l-64-64a8,8,0,0,1,11.32-11.32ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm37.66,141.66a8,8,0,0,1-11.32,0l-64-64a8,8,0,0,1,11.32-11.32l64,64A8,8,0,0,1,165.66,165.66Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M164.24,155.76a6,6,0,1,1-8.48,8.48l-64-64a6,6,0,0,1,8.48-8.48ZM230,128A102,102,0,1,1,128,26,102.12,102.12,0,0,1,230,128Zm-12,0a90,90,0,1,0-90,90A90.1,90.1,0,0,0,218,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M165.66,154.34a8,8,0,0,1-11.32,11.32l-64-64a8,8,0,0,1,11.32-11.32ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M162.83,157.17a4,4,0,0,1-5.66,5.66l-64-64a4,4,0,0,1,5.66-5.66ZM228,128A100,100,0,1,1,128,28,100.11,100.11,0,0,1,228,128Zm-8,0a92,92,0,1,0-92,92A92.1,92.1,0,0,0,220,128Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as o from \"react\";\nimport i from \"../lib/IconBase.es.js\";\nimport s from \"../defs/ProhibitInset.es.js\";\nconst t = o.forwardRef((e, r) => /* @__PURE__ */ o.createElement(i, { ref: r, ...e, weights: s }));\nt.displayName = \"ProhibitInsetIcon\";\nconst m = t;\nexport {\n m as ProhibitInset,\n t as ProhibitInsetIcon\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M124,216a12,12,0,0,1-12,12H48a12,12,0,0,1-12-12V40A12,12,0,0,1,48,28h64a12,12,0,0,1,0,24H60V204h52A12,12,0,0,1,124,216Zm108.49-96.49-40-40a12,12,0,0,0-17,17L195,116H112a12,12,0,0,0,0,24h83l-19.52,19.51a12,12,0,0,0,17,17l40-40A12,12,0,0,0,232.49,119.51Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M224,56V200a16,16,0,0,1-16,16H48V40H208A16,16,0,0,1,224,56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40A8,8,0,0,0,176,88v32H112a8,8,0,0,0,0,16h64v32a8,8,0,0,0,13.66,5.66l40-40A8,8,0,0,0,229.66,122.34Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M118,216a6,6,0,0,1-6,6H48a6,6,0,0,1-6-6V40a6,6,0,0,1,6-6h64a6,6,0,0,1,0,12H54V210h58A6,6,0,0,1,118,216Zm110.24-92.24-40-40a6,6,0,0,0-8.48,8.48L209.51,122H112a6,6,0,0,0,0,12h97.51l-29.75,29.76a6,6,0,1,0,8.48,8.48l40-40A6,6,0,0,0,228.24,123.76Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,216a8,8,0,0,1-8,8H48a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h64a8,8,0,0,1,0,16H56V208h56A8,8,0,0,1,120,216Zm109.66-93.66-40-40a8,8,0,0,0-11.32,11.32L204.69,120H112a8,8,0,0,0,0,16h92.69l-26.35,26.34a8,8,0,0,0,11.32,11.32l40-40A8,8,0,0,0,229.66,122.34Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M116,216a4,4,0,0,1-4,4H48a4,4,0,0,1-4-4V40a4,4,0,0,1,4-4h64a4,4,0,0,1,0,8H52V212h60A4,4,0,0,1,116,216Zm110.83-90.83-40-40a4,4,0,0,0-5.66,5.66L214.34,124H112a4,4,0,0,0,0,8H214.34l-33.17,33.17a4,4,0,0,0,5.66,5.66l40-40A4,4,0,0,0,226.83,125.17Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as o from \"react\";\nimport n from \"../lib/IconBase.es.js\";\nimport a from \"../defs/SignOut.es.js\";\nconst t = o.forwardRef((e, r) => /* @__PURE__ */ o.createElement(n, { ref: r, ...e, weights: a }));\nt.displayName = \"SignOutIcon\";\nconst c = t;\nexport {\n c as SignOut,\n t as SignOutIcon\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M140,32V64a12,12,0,0,1-24,0V32a12,12,0,0,1,24,0Zm84,84H192a12,12,0,0,0,0,24h32a12,12,0,0,0,0-24Zm-42.26,48.77a12,12,0,1,0-17,17l22.63,22.63a12,12,0,0,0,17-17ZM128,180a12,12,0,0,0-12,12v32a12,12,0,0,0,24,0V192A12,12,0,0,0,128,180ZM74.26,164.77,51.63,187.4a12,12,0,0,0,17,17l22.63-22.63a12,12,0,1,0-17-17ZM76,128a12,12,0,0,0-12-12H32a12,12,0,0,0,0,24H64A12,12,0,0,0,76,128ZM68.6,51.63a12,12,0,1,0-17,17L74.26,91.23a12,12,0,0,0,17-17Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M224,128a96,96,0,1,1-96-96A96,96,0,0,1,224,128Z\", opacity: \"0.2\" }), /* @__PURE__ */ a.createElement(\"path\", { d: \"M136,32V64a8,8,0,0,1-16,0V32a8,8,0,0,1,16,0Zm88,88H192a8,8,0,0,0,0,16h32a8,8,0,0,0,0-16Zm-45.09,47.6a8,8,0,0,0-11.31,11.31l22.62,22.63a8,8,0,0,0,11.32-11.32ZM128,184a8,8,0,0,0-8,8v32a8,8,0,0,0,16,0V192A8,8,0,0,0,128,184ZM77.09,167.6,54.46,190.22a8,8,0,0,0,11.32,11.32L88.4,178.91A8,8,0,0,0,77.09,167.6ZM72,128a8,8,0,0,0-8-8H32a8,8,0,0,0,0,16H64A8,8,0,0,0,72,128ZM65.78,54.46A8,8,0,0,0,54.46,65.78L77.09,88.4A8,8,0,0,0,88.4,77.09Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM48,136a8,8,0,0,1,0-16H72a8,8,0,0,1,0,16Zm46.06,37.25-17,17a8,8,0,0,1-11.32-11.32l17-17a8,8,0,0,1,11.31,11.31Zm0-79.19a8,8,0,0,1-11.31,0l-17-17A8,8,0,0,1,77.09,65.77l17,17A8,8,0,0,1,94.06,94.06ZM136,208a8,8,0,0,1-16,0V184a8,8,0,0,1,16,0Zm0-136a8,8,0,0,1-16,0V48a8,8,0,0,1,16,0Zm54.23,118.23a8,8,0,0,1-11.32,0l-17-17a8,8,0,0,1,11.31-11.31l17,17A8,8,0,0,1,190.23,190.23ZM208,136H184a8,8,0,0,1,0-16h24a8,8,0,0,1,0,16Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M134,32V64a6,6,0,0,1-12,0V32a6,6,0,0,1,12,0Zm90,90H192a6,6,0,0,0,0,12h32a6,6,0,0,0,0-12Zm-46.5,47A6,6,0,0,0,169,177.5l22.63,22.62a6,6,0,0,0,8.48-8.48ZM128,186a6,6,0,0,0-6,6v32a6,6,0,0,0,12,0V192A6,6,0,0,0,128,186ZM78.5,169,55.88,191.64a6,6,0,1,0,8.48,8.48L87,177.5A6,6,0,1,0,78.5,169ZM70,128a6,6,0,0,0-6-6H32a6,6,0,0,0,0,12H64A6,6,0,0,0,70,128ZM64.36,55.88a6,6,0,0,0-8.48,8.48L78.5,87A6,6,0,1,0,87,78.5Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M136,32V64a8,8,0,0,1-16,0V32a8,8,0,0,1,16,0Zm88,88H192a8,8,0,0,0,0,16h32a8,8,0,0,0,0-16Zm-45.09,47.6a8,8,0,0,0-11.31,11.31l22.62,22.63a8,8,0,0,0,11.32-11.32ZM128,184a8,8,0,0,0-8,8v32a8,8,0,0,0,16,0V192A8,8,0,0,0,128,184ZM77.09,167.6,54.46,190.22a8,8,0,0,0,11.32,11.32L88.4,178.91A8,8,0,0,0,77.09,167.6ZM72,128a8,8,0,0,0-8-8H32a8,8,0,0,0,0,16H64A8,8,0,0,0,72,128ZM65.78,54.46A8,8,0,0,0,54.46,65.78L77.09,88.4A8,8,0,0,0,88.4,77.09Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M132,32V64a4,4,0,0,1-8,0V32a4,4,0,0,1,8,0Zm92,92H192a4,4,0,0,0,0,8h32a4,4,0,0,0,0-8Zm-47.92,46.43a4,4,0,1,0-5.65,5.65l22.62,22.63a4,4,0,0,0,5.66-5.66ZM128,188a4,4,0,0,0-4,4v32a4,4,0,0,0,8,0V192A4,4,0,0,0,128,188ZM79.92,170.43,57.29,193.05A4,4,0,0,0,63,198.71l22.62-22.63a4,4,0,1,0-5.65-5.65ZM68,128a4,4,0,0,0-4-4H32a4,4,0,0,0,0,8H64A4,4,0,0,0,68,128ZM63,57.29A4,4,0,0,0,57.29,63L79.92,85.57a4,4,0,1,0,5.65-5.65Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as e from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport p from \"../defs/SpinnerGap.es.js\";\nconst o = e.forwardRef((r, n) => /* @__PURE__ */ e.createElement(a, { ref: n, ...r, weights: p }));\no.displayName = \"SpinnerGapIcon\";\nconst m = o;\nexport {\n m as SpinnerGap,\n o as SpinnerGapIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M228,128a12,12,0,0,1-12,12H69l51.52,51.51a12,12,0,0,1-17,17l-72-72a12,12,0,0,1,0-17l72-72a12,12,0,0,1,17,17L69,116H216A12,12,0,0,1,228,128Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M112,56V200L40,128Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M216,120H120V56a8,8,0,0,0-13.66-5.66l-72,72a8,8,0,0,0,0,11.32l72,72A8,8,0,0,0,120,200V136h96a8,8,0,0,0,0-16ZM104,180.69,51.31,128,104,75.31Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,128a8,8,0,0,1-8,8H120v64a8,8,0,0,1-13.66,5.66l-72-72a8,8,0,0,1,0-11.32l72-72A8,8,0,0,1,120,56v64h96A8,8,0,0,1,224,128Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M222,128a6,6,0,0,1-6,6H54.49l61.75,61.76a6,6,0,1,1-8.48,8.48l-72-72a6,6,0,0,1,0-8.48l72-72a6,6,0,0,1,8.48,8.48L54.49,122H216A6,6,0,0,1,222,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,128a8,8,0,0,1-8,8H59.31l58.35,58.34a8,8,0,0,1-11.32,11.32l-72-72a8,8,0,0,1,0-11.32l72-72a8,8,0,0,1,11.32,11.32L59.31,120H216A8,8,0,0,1,224,128Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M220,128a4,4,0,0,1-4,4H49.66l65.17,65.17a4,4,0,0,1-5.66,5.66l-72-72a4,4,0,0,1,0-5.66l72-72a4,4,0,0,1,5.66,5.66L49.66,124H216A4,4,0,0,1,220,128Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as o from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport f from \"../defs/ArrowLeft.es.js\";\nconst r = o.forwardRef((e, t) => /* @__PURE__ */ o.createElement(a, { ref: t, ...e, weights: f }));\nr.displayName = \"ArrowLeftIcon\";\nconst s = r;\nexport {\n s as ArrowLeft,\n r as ArrowLeftIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M144,128a16,16,0,1,1-16-16A16,16,0,0,1,144,128ZM60,112a16,16,0,1,0,16,16A16,16,0,0,0,60,112Zm136,0a16,16,0,1,0,16,16A16,16,0,0,0,196,112Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n \"path\",\n {\n d: \"M240,96v64a16,16,0,0,1-16,16H32a16,16,0,0,1-16-16V96A16,16,0,0,1,32,80H224A16,16,0,0,1,240,96Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ e.createElement(\"path\", { d: \"M140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128Zm56-12a12,12,0,1,0,12,12A12,12,0,0,0,196,116ZM60,116a12,12,0,1,0,12,12A12,12,0,0,0,60,116Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M224,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V96A16,16,0,0,0,224,80ZM60,140a12,12,0,1,1,12-12A12,12,0,0,1,60,140Zm68,0a12,12,0,1,1,12-12A12,12,0,0,1,128,140Zm68,0a12,12,0,1,1,12-12A12,12,0,0,1,196,140Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M138,128a10,10,0,1,1-10-10A10,10,0,0,1,138,128ZM60,118a10,10,0,1,0,10,10A10,10,0,0,0,60,118Zm136,0a10,10,0,1,0,10,10A10,10,0,0,0,196,118Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128Zm56-12a12,12,0,1,0,12,12A12,12,0,0,0,196,116ZM60,116a12,12,0,1,0,12,12A12,12,0,0,0,60,116Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M136,128a8,8,0,1,1-8-8A8,8,0,0,1,136,128Zm-76-8a8,8,0,1,0,8,8A8,8,0,0,0,60,120Zm136,0a8,8,0,1,0,8,8A8,8,0,0,0,196,120Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as e from \"react\";\nimport s from \"../lib/IconBase.es.js\";\nimport a from \"../defs/DotsThree.es.js\";\nconst o = e.forwardRef((r, t) => /* @__PURE__ */ e.createElement(s, { ref: t, ...r, weights: a }));\no.displayName = \"DotsThreeIcon\";\nconst n = o;\nexport {\n n as DotsThree,\n o as DotsThreeIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M208.49,191.51a12,12,0,0,1-17,17L128,145,64.49,208.49a12,12,0,0,1-17-17L111,128,47.51,64.49a12,12,0,0,1,17-17L128,111l63.51-63.52a12,12,0,0,1,17,17L145,128Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\n \"path\",\n {\n d: \"M216,56V200a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V56A16,16,0,0,1,56,40H200A16,16,0,0,1,216,56Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M208,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM181.66,170.34a8,8,0,0,1-11.32,11.32L128,139.31,85.66,181.66a8,8,0,0,1-11.32-11.32L116.69,128,74.34,85.66A8,8,0,0,1,85.66,74.34L128,116.69l42.34-42.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M204.24,195.76a6,6,0,1,1-8.48,8.48L128,136.49,60.24,204.24a6,6,0,0,1-8.48-8.48L119.51,128,51.76,60.24a6,6,0,0,1,8.48-8.48L128,119.51l67.76-67.75a6,6,0,0,1,8.48,8.48L136.49,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M202.83,197.17a4,4,0,0,1-5.66,5.66L128,133.66,58.83,202.83a4,4,0,0,1-5.66-5.66L122.34,128,53.17,58.83a4,4,0,0,1,5.66-5.66L128,122.34l69.17-69.17a4,4,0,1,1,5.66,5.66L133.66,128Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as o from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport m from \"../defs/X.es.js\";\nconst e = o.forwardRef((r, t) => /* @__PURE__ */ o.createElement(a, { ref: t, ...r, weights: m }));\ne.displayName = \"XIcon\";\nconst n = e;\nexport {\n n as X,\n e as XIcon\n};\n","import { XIcon } from \"@phosphor-icons/react/dist/csr/X\";\nimport React from \"react\";\n\nimport { IconButton } from \"../IconButton\";\n\ninterface CloseButtonProps {\n onClick: () => void;\n}\n\nexport function CloseButton({ onClick }: CloseButtonProps) {\n return (\n <IconButton label=\"Close\" onClick={onClick} className=\"p-1\">\n <XIcon className=\"h-5 w-5 text-stone\" weight=\"bold\" />\n </IconButton>\n );\n}\n","import classNames from \"classnames\";\nimport React from \"react\";\n\ninterface ActionButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: \"default\" | \"danger\";\n}\n\nconst ActionButton = ({\n variant = \"default\",\n className,\n children,\n ...rest\n}: ActionButtonProps) => {\n const isDanger = variant === \"danger\";\n return (\n <button\n type=\"button\"\n className={classNames(\n \"flex w-full items-center gap-3 rounded-lg px-4 py-3 text-left text-sm transition-colors focus-ring disabled:cursor-not-allowed disabled:opacity-60\",\n isDanger\n ? \"text-danger hover:bg-danger/50\"\n : \"text-charcoal hover:bg-sand\",\n className,\n )}\n {...rest}\n >\n {children}\n </button>\n );\n};\n\nexport default ActionButton;\n","import { FlagIcon } from \"@phosphor-icons/react/dist/csr/Flag\";\nimport { ProhibitInsetIcon } from \"@phosphor-icons/react/dist/csr/ProhibitInset\";\nimport { SignOutIcon } from \"@phosphor-icons/react/dist/csr/SignOut\";\nimport { SpinnerGapIcon } from \"@phosphor-icons/react/dist/csr/SpinnerGap\";\n\nimport { ArrowLeftIcon } from \"@phosphor-icons/react/dist/csr/ArrowLeft\";\nimport { DotsThreeIcon } from \"@phosphor-icons/react/dist/csr/DotsThree\";\n\nimport React, { useState, useCallback, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\nimport {\n Channel,\n Window,\n MessageList,\n MessageInput,\n useChannelStateContext,\n} from 'stream-chat-react';\nimport type { ChannelViewProps } from '../types';\nimport { useMessagingContext } from '../providers/MessagingProvider';\nimport { CloseButton } from './CloseButton';\nimport { IconButton } from './IconButton';\nimport ActionButton from './ActionButton';\nimport { Avatar } from './Avatar';\n\n/**\n * Custom message input component with render prop for actions\n */\nconst CustomMessageInput: React.FC<{\n renderActions?: () => React.ReactNode;\n}> = ({ renderActions }) => (\n <div className=\"message-input flex items-center gap-2 p-4\">\n {renderActions && renderActions()}\n \n <div className=\"flex-1\">\n <MessageInput focus maxRows={4} />\n </div>\n </div>\n);\n\n/**\n * Custom channel header component\n */\nconst CustomChannelHeader: React.FC<{\n onBack?: () => void;\n showBackButton: boolean;\n onShowInfo?: () => void;\n canShowInfo: boolean;\n}> = ({ onBack, showBackButton, onShowInfo, canShowInfo }) => {\n const { channel } = useChannelStateContext();\n \n // Get participant info (excluding current user)\n const participant = React.useMemo(() => {\n const members = Object.values(channel.state.members || {});\n return members.find(member => \n member.user?.id && member.user.id !== channel._client.userID\n );\n }, [channel._client.userID, channel.state.members]);\n\n const participantName = participant?.user?.name || \n participant?.user?.id || \n 'Unknown member';\n const participantImage = participant?.user?.image;\n\n return (\n <div className=\"flex items-center justify-between gap-3 min-h-12\">\n <div className=\"flex items-center gap-3 min-w-0\">\n {showBackButton && onBack && (\n <button\n type=\"button\"\n onClick={onBack}\n className=\"inline-flex items-center justify-center w-8 h-8 rounded-lg hover:bg-sand focus:outline-none focus:ring-2 focus:ring-primary transition-colors lg:hidden\"\n aria-label=\"Back to channel list\"\n >\n <ArrowLeftIcon className=\"h-5 w-5 text-stone\" weight=\"bold\" />\n </button>\n )}\n \n {/* Avatar */}\n <Avatar\n id={participant?.user?.id || channel.id || 'unknown'}\n name={participantName}\n image={participantImage}\n size={40}\n />\n \n <div className=\"min-w-0\">\n <h1 className=\"text-lg font-semibold text-charcoal truncate\">\n {participantName}\n </h1>\n </div>\n </div>\n\n {canShowInfo && onShowInfo && (\n <IconButton\n label=\"Chat info\" \n onClick={onShowInfo}\n >\n <DotsThreeIcon className=\"h-6 w-6 text-charcoal\" weight=\"bold\" />\n </IconButton>\n )}\n </div>\n );\n};\n\n/**\n * Channel info dialog (matching original implementation)\n */\nconst ChannelInfoDialog: React.FC<{\n isOpen: boolean;\n onClose: () => void;\n participant: any;\n channel: any;\n followerStatusLabel?: string;\n onLeaveConversation?: (channel: any) => void;\n onBlockParticipant?: (participantId?: string) => void;\n}> = ({ isOpen, onClose, participant, channel, followerStatusLabel, onLeaveConversation, onBlockParticipant }) => {\n const { service, debug } = useMessagingContext();\n const dialogRef = useRef<HTMLDialogElement>(null);\n const [isParticipantBlocked, setIsParticipantBlocked] = useState(false);\n const [isLeaving, setIsLeaving] = useState(false);\n const [isUpdatingBlockStatus, setIsUpdatingBlockStatus] = useState(false);\n\n // Sync dialog open state with prop\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n if (isOpen) {\n dialog.showModal();\n } else {\n dialog.close();\n }\n }, [isOpen]);\n\n // Check if participant is blocked\n const checkIsParticipantBlocked = useCallback(async () => {\n if (!service || !participant?.user?.id) return;\n \n try {\n const blockedUsers = await service.getBlockedUsers();\n const isBlocked = blockedUsers.some(\n (user: any) => user.blocked_user_id === participant.user.id,\n );\n setIsParticipantBlocked(isBlocked);\n } catch (error) {\n console.error('[ChannelInfoDialog] Failed to check blocked status:', error);\n }\n }, [service, participant?.user?.id]);\n\n useEffect(() => {\n if (isOpen) {\n checkIsParticipantBlocked();\n }\n }, [isOpen, checkIsParticipantBlocked]);\n\n const handleLeaveConversation = async () => {\n if (isLeaving) return;\n\n if (debug) {\n console.log('[ChannelInfoDialog] Leave conversation', channel.cid);\n }\n setIsLeaving(true);\n\n try {\n const actingUserId = channel._client?.userID ?? null;\n await channel.hide(actingUserId, false);\n\n if (onLeaveConversation) {\n await onLeaveConversation(channel);\n }\n\n onClose();\n } catch (error) {\n console.error('[ChannelInfoDialog] Failed to leave conversation', error);\n } finally {\n setIsLeaving(false);\n }\n };\n\n const handleBlockUser = async () => {\n if (isUpdatingBlockStatus || !service) return;\n\n if (debug) {\n console.log('[ChannelInfoDialog] Block member', participant?.user?.id);\n }\n setIsUpdatingBlockStatus(true);\n\n try {\n await service.blockUser(participant?.user?.id);\n\n if (onBlockParticipant) {\n await onBlockParticipant(participant?.user?.id);\n }\n\n onClose();\n } catch (error) {\n console.error('[ChannelInfoDialog] Failed to block member', error);\n } finally {\n setIsUpdatingBlockStatus(false);\n }\n };\n\n const handleUnblockUser = async () => {\n if (isUpdatingBlockStatus || !service) return;\n\n if (debug) {\n console.log('[ChannelInfoDialog] Unblock member', participant?.user?.id);\n }\n setIsUpdatingBlockStatus(true);\n\n try {\n await service.unBlockUser(participant?.user?.id);\n\n if (onBlockParticipant) {\n await onBlockParticipant(participant?.user?.id);\n }\n\n onClose();\n } catch (error) {\n console.error('[ChannelInfoDialog] Failed to unblock member', error);\n } finally {\n setIsUpdatingBlockStatus(false);\n }\n };\n\n const handleReportUser = () => {\n onClose();\n window.open(\n 'https://linktr.ee/s/about/trust-center/report',\n '_blank',\n 'noopener,noreferrer',\n );\n };\n\n if (!participant) return null;\n\n const participantName = participant.user?.name || participant.user?.id || 'Unknown member';\n const participantImage = participant.user?.image;\n const participantEmail = participant.user?.email;\n const participantUsername = participant.user?.username;\n const participantSecondary = participantEmail\n ? participantEmail\n : participantUsername\n ? `linktr.ee/${participantUsername}`\n : undefined;\n const participantId = participant.user?.id || 'unknown';\n\n return (\n <dialog\n ref={dialogRef}\n className=\"mes-dialog\"\n onClose={onClose}\n onClick={(e) => {\n if (e.target === dialogRef.current) {\n onClose();\n }\n }}\n >\n <div className=\"ml-auto flex h-full w-full flex-col bg-white shadow-max-elevation-light\">\n <div className=\"flex items-center justify-between border-b border-sand px-4 py-3\">\n <h2 className=\"text-base font-semibold text-charcoal\">Chat info</h2>\n <CloseButton onClick={onClose} />\n </div>\n \n <div className=\"flex-1 overflow-y-auto px-6 py-6\">\n <div className=\"rounded-2xl bg-chalk p-4\">\n <div className=\"flex items-center gap-4\">\n <Avatar\n id={participantId}\n name={participantName}\n image={participantImage}\n size={64}\n />\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate text-base font-semibold text-charcoal\">\n {participantName}\n </p>\n {participantSecondary && (\n <p className=\"truncate text-sm text-stone\">\n {participantSecondary}\n </p>\n )}\n {followerStatusLabel && (\n <span className=\"mt-2 inline-flex items-center rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-700\">\n {followerStatusLabel}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <ul className=\"flex flex-col gap-2 mt-2\">\n <li>\n <ActionButton\n onClick={handleLeaveConversation}\n disabled={isLeaving}\n aria-busy={isLeaving}\n >\n {isLeaving ? (\n <SpinnerGapIcon className=\"h-5 w-5 animate-spin\" />\n ) : (\n <SignOutIcon className=\"h-5 w-5\" />\n )}\n <span>Leave Conversation</span>\n </ActionButton>\n </li>\n <li>\n {isParticipantBlocked ? (\n <ActionButton\n onClick={handleUnblockUser}\n disabled={isUpdatingBlockStatus}\n aria-busy={isUpdatingBlockStatus}\n >\n {isUpdatingBlockStatus ? (\n <SpinnerGapIcon className=\"h-5 w-5 animate-spin\" />\n ) : (\n <ProhibitInsetIcon className=\"h-5 w-5\" />\n )}\n <span>Unblock</span>\n </ActionButton>\n ) : (\n <ActionButton\n onClick={handleBlockUser}\n disabled={isUpdatingBlockStatus}\n aria-busy={isUpdatingBlockStatus}\n >\n {isUpdatingBlockStatus ? (\n <SpinnerGapIcon className=\"h-5 w-5 animate-spin\" />\n ) : (\n <ProhibitInsetIcon className=\"h-5 w-5\" />\n )}\n <span>Block</span>\n </ActionButton>\n )}\n </li>\n <li>\n <ActionButton variant=\"danger\" onClick={handleReportUser}>\n <FlagIcon className=\"h-5 w-5\" />\n <span>Report</span>\n </ActionButton>\n </li>\n </ul>\n </div>\n </div>\n </dialog>\n );\n};\n\n/**\n * Channel view component with message list and input\n */\nexport const ChannelView: React.FC<ChannelViewProps> = ({\n channel,\n onBack,\n showBackButton = false,\n renderMessageInputActions,\n onLeaveConversation,\n onBlockParticipant,\n className,\n}) => {\n const [showInfo, setShowInfo] = useState(false);\n\n // Get participant info for info dialog\n const participant = React.useMemo(() => {\n const members = Object.values(channel.state.members || {});\n return members.find(member => \n member.user?.id && member.user.id !== channel._client.userID\n );\n }, [channel._client.userID, channel.state.members]);\n\n // Get follower status label from channel data\n const followerStatusLabel = React.useMemo(() => {\n const channelExtraData = (channel.data ?? {}) as {\n followerStatus?: string;\n isFollower?: boolean;\n };\n return channelExtraData.followerStatus\n ? String(channelExtraData.followerStatus)\n : channelExtraData.isFollower\n ? 'Subscribed to you'\n : undefined;\n }, [channel.data]);\n\n return (\n <div className={classNames('h-full flex flex-col', className)}>\n <Channel channel={channel}>\n <Window>\n {/* Custom Channel Header */}\n <div className=\"border-b border-sand bg-white px-4 py-3\">\n <CustomChannelHeader\n onBack={onBack}\n showBackButton={showBackButton}\n onShowInfo={() => setShowInfo(true)}\n canShowInfo={Boolean(participant)}\n />\n </div>\n\n {/* Message List */}\n <div className=\"flex-1 overflow-hidden\">\n <MessageList hideDeletedMessages hideNewMessageSeparator={false} />\n </div>\n\n {/* Message Input */}\n <CustomMessageInput\n renderActions={() => renderMessageInputActions?.(channel)}\n />\n </Window>\n </Channel>\n\n {/* Channel Info Dialog */}\n <ChannelInfoDialog\n isOpen={showInfo}\n onClose={() => setShowInfo(false)}\n participant={participant}\n channel={channel}\n followerStatusLabel={followerStatusLabel}\n onLeaveConversation={onLeaveConversation}\n onBlockParticipant={onBlockParticipant}\n />\n </div>\n );\n};\n","import * as a from \"react\";\nconst e = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M120,128a16,16,0,1,1-16-16A16,16,0,0,1,120,128Zm32-16a16,16,0,1,0,16,16A16,16,0,0,0,152,112Zm84,16A108,108,0,0,1,78.77,224.15L46.34,235A20,20,0,0,1,21,209.66l10.81-32.43A108,108,0,1,1,236,128Zm-24,0A84,84,0,1,0,55.27,170.06a12,12,0,0,1,1,9.81l-9.93,29.79,29.79-9.93a12.1,12.1,0,0,1,3.8-.62,12,12,0,0,1,6,1.62A84,84,0,0,0,212,128Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\n \"path\",\n {\n d: \"M224,128A96,96,0,0,1,79.93,211.11h0L42.54,223.58a8,8,0,0,1-10.12-10.12l12.47-37.39h0A96,96,0,1,1,224,128Z\",\n opacity: \"0.2\"\n }\n ), /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,24A104,104,0,0,0,36.18,176.88L24.83,210.93a16,16,0,0,0,20.24,20.24l34.05-11.35A104,104,0,1,0,128,24Zm0,192a87.87,87.87,0,0,1-44.06-11.81,8,8,0,0,0-4-1.08,7.85,7.85,0,0,0-2.53.42L40,216,52.47,178.6a8,8,0,0,0-.66-6.54A88,88,0,1,1,128,216Zm12-88a12,12,0,1,1-12-12A12,12,0,0,1,140,128Zm-44,0a12,12,0,1,1-12-12A12,12,0,0,1,96,128Zm88,0a12,12,0,1,1-12-12A12,12,0,0,1,184,128Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M128,24A104,104,0,0,0,36.18,176.88L24.83,210.93a16,16,0,0,0,20.24,20.24l34.05-11.35A104,104,0,1,0,128,24ZM84,140a12,12,0,1,1,12-12A12,12,0,0,1,84,140Zm44,0a12,12,0,1,1,12-12A12,12,0,0,1,128,140Zm44,0a12,12,0,1,1,12-12A12,12,0,0,1,172,140Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M138,128a10,10,0,1,1-10-10A10,10,0,0,1,138,128ZM84,118a10,10,0,1,0,10,10A10,10,0,0,0,84,118Zm88,0a10,10,0,1,0,10,10A10,10,0,0,0,172,118Zm58,10A102,102,0,0,1,79.31,217.65L44.44,229.27a14,14,0,0,1-17.71-17.71l11.62-34.87A102,102,0,1,1,230,128Zm-12,0A90,90,0,1,0,50.08,173.06a6,6,0,0,1,.5,4.91L38.12,215.35a2,2,0,0,0,2.53,2.53L78,205.42a6.2,6.2,0,0,1,1.9-.31,6.09,6.09,0,0,1,3,.81A90,90,0,0,0,218,128Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M140,128a12,12,0,1,1-12-12A12,12,0,0,1,140,128ZM84,116a12,12,0,1,0,12,12A12,12,0,0,0,84,116Zm88,0a12,12,0,1,0,12,12A12,12,0,0,0,172,116Zm60,12A104,104,0,0,1,79.12,219.82L45.07,231.17a16,16,0,0,1-20.24-20.24l11.35-34.05A104,104,0,1,1,232,128Zm-16,0A88,88,0,1,0,51.81,172.06a8,8,0,0,1,.66,6.54L40,216,77.4,203.53a7.85,7.85,0,0,1,2.53-.42,8,8,0,0,1,4,1.08A88,88,0,0,0,216,128Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ a.createElement(a.Fragment, null, /* @__PURE__ */ a.createElement(\"path\", { d: \"M136,128a8,8,0,1,1-8-8A8,8,0,0,1,136,128Zm-52-8a8,8,0,1,0,8,8A8,8,0,0,0,84,120Zm88,0a8,8,0,1,0,8,8A8,8,0,0,0,172,120Zm56,8A100,100,0,0,1,79.5,215.47l-35.69,11.9a12,12,0,0,1-15.18-15.18l11.9-35.69A100,100,0,1,1,228,128Zm-8,0A92,92,0,1,0,48.35,174.07a4,4,0,0,1,.33,3.27L36.22,214.72a4,4,0,0,0,5.06,5.06l37.38-12.46a3.93,3.93,0,0,1,1.27-.21,4.05,4.05,0,0,1,2,.54A92,92,0,0,0,220,128Z\" }))\n ]\n]);\nexport {\n e as default\n};\n","import * as o from \"react\";\nimport a from \"../lib/IconBase.es.js\";\nimport c from \"../defs/ChatCircleDots.es.js\";\nconst t = o.forwardRef((e, r) => /* @__PURE__ */ o.createElement(a, { ref: r, ...e, weights: c }));\nt.displayName = \"ChatCircleDotsIcon\";\nconst m = t;\nexport {\n m as ChatCircleDots,\n t as ChatCircleDotsIcon\n};\n","import * as e from \"react\";\nconst a = /* @__PURE__ */ new Map([\n [\n \"bold\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M232.49,215.51,185,168a92.12,92.12,0,1,0-17,17l47.53,47.54a12,12,0,0,0,17-17ZM44,112a68,68,0,1,1,68,68A68.07,68.07,0,0,1,44,112Z\" }))\n ],\n [\n \"duotone\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M192,112a80,80,0,1,1-80-80A80,80,0,0,1,192,112Z\", opacity: \"0.2\" }), /* @__PURE__ */ e.createElement(\"path\", { d: \"M229.66,218.34,179.6,168.28a88.21,88.21,0,1,0-11.32,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z\" }))\n ],\n [\n \"fill\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M168,112a56,56,0,1,1-56-56A56,56,0,0,1,168,112Zm61.66,117.66a8,8,0,0,1-11.32,0l-50.06-50.07a88,88,0,1,1,11.32-11.31l50.06,50.06A8,8,0,0,1,229.66,229.66ZM112,184a72,72,0,1,0-72-72A72.08,72.08,0,0,0,112,184Z\" }))\n ],\n [\n \"light\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M228.24,219.76l-51.38-51.38a86.15,86.15,0,1,0-8.48,8.48l51.38,51.38a6,6,0,0,0,8.48-8.48ZM38,112a74,74,0,1,1,74,74A74.09,74.09,0,0,1,38,112Z\" }))\n ],\n [\n \"regular\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z\" }))\n ],\n [\n \"thin\",\n /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(\"path\", { d: \"M226.83,221.17l-52.7-52.7a84.1,84.1,0,1,0-5.66,5.66l52.7,52.7a4,4,0,0,0,5.66-5.66ZM36,112a76,76,0,1,1,76,76A76.08,76.08,0,0,1,36,112Z\" }))\n ]\n]);\nexport {\n a as default\n};\n","import * as a from \"react\";\nimport i from \"../lib/IconBase.es.js\";\nimport e from \"../defs/MagnifyingGlass.es.js\";\nconst o = a.forwardRef((s, n) => /* @__PURE__ */ a.createElement(i, { ref: n, ...s, weights: e }));\no.displayName = \"MagnifyingGlassIcon\";\nconst f = o;\nexport {\n f as MagnifyingGlass,\n o as MagnifyingGlassIcon\n};\n","import React, { useRef } from 'react';\nimport { IconButton } from '../IconButton';\nimport { MagnifyingGlassIcon } from \"@phosphor-icons/react/dist/csr/MagnifyingGlass\";\nimport { XIcon } from \"@phosphor-icons/react/dist/csr/X\";\n\ninterface SearchInputProps {\n searchQuery: string;\n setSearchQuery: (value: string) => void;\n placeholder: string;\n}\n\nexport function SearchInput({\n searchQuery,\n setSearchQuery,\n placeholder,\n}: SearchInputProps) {\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n return (\n <div className=\"relative\">\n <MagnifyingGlassIcon\n className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-stone\"\n weight=\"bold\"\n />\n \n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder={placeholder}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"w-full pl-10 pr-10 py-3 text-sm border border-sand rounded-xl focus:outline-none focus:ring-2 focus:ring-black focus:border-transparent\"\n />\n \n {searchQuery && (\n <IconButton\n label=\"Clear search\"\n onClick={() => {\n setSearchQuery('');\n searchInputRef.current?.focus();\n }}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 p-1 text-stone hover:text-charcoal\"\n >\n <XIcon className=\"h-4 w-4\" weight=\"bold\" />\n </IconButton>\n )}\n </div>\n );\n}\n\n","import React, { useCallback, useEffect, useState, useRef } from 'react';\nimport { ChatCircleDotsIcon } from \"@phosphor-icons/react/dist/csr/ChatCircleDots\";\nimport { SpinnerGapIcon } from \"@phosphor-icons/react/dist/csr/SpinnerGap\";\nimport classNames from 'classnames';\n\nimport type { ParticipantPickerProps, Participant } from '../../types';\nimport { CloseButton } from '../CloseButton';\nimport { SearchInput } from '../SearchInput';\nimport { useMessagingContext } from '../../providers/MessagingProvider';\nimport { Avatar } from '../Avatar';\n\n/**\n * Generic participant picker component for starting conversations\n */\nexport const ParticipantPicker: React.FC<ParticipantPickerProps> = ({\n participantSource,\n onSelectParticipant,\n onClose,\n existingParticipantIds = new Set(),\n participantLabel = 'participants',\n searchPlaceholder = 'Search participants...',\n className,\n}) => {\n const { debug } = useMessagingContext();\n const [searchQuery, setSearchQuery] = useState('');\n const [participants, setParticipants] = useState<Participant[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [startingChatWithId, setStartingChatWithId] = useState<string | null>(null);\n\n // Track if we've already loaded participants to prevent repeated loading\n const loadedRef = useRef(false);\n \n // Load participants initially - wait for participantSource to finish loading first\n useEffect(() => {\n // Wait for the participantSource to finish loading before we try to load participants\n if (participantSource.loading) {\n if (debug) {\n console.log('[ParticipantPicker] Waiting for participant source to finish loading...');\n }\n return;\n }\n \n if (loadedRef.current) return; // Prevent multiple loads\n \n const loadInitialParticipants = async () => {\n if (debug) {\n console.log('[ParticipantPicker] Loading initial participants...');\n }\n setLoading(true);\n setError(null);\n \n try {\n const result = await participantSource.loadParticipants({ \n search: '', // Load all participants initially\n limit: 100 \n });\n setParticipants(result.participants);\n loadedRef.current = true; // Mark as loaded\n if (debug) {\n console.log('[ParticipantPicker] Participants loaded successfully:', result.participants.length);\n }\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to load participants';\n setError(errorMessage);\n console.error('[ParticipantPicker] Failed to load participants:', err);\n // Don't mark as loaded on error, allow retry\n } finally {\n setLoading(false);\n }\n };\n\n loadInitialParticipants();\n }, [participantSource.loading, debug]); // Re-run when loading state changes\n\n // Filter participants by search query and existing participants\n const availableParticipants = participants\n .filter(participant => !existingParticipantIds.has(participant.id))\n .filter(participant => {\n if (!searchQuery) return true;\n const searchLower = searchQuery.toLowerCase();\n return (\n participant.name.toLowerCase().includes(searchLower) ||\n participant.email?.toLowerCase().includes(searchLower) ||\n false\n );\n });\n\n const handleSelectParticipant = useCallback(async (participant: Participant) => {\n if (startingChatWithId) return; // Prevent multiple clicks\n \n setStartingChatWithId(participant.id);\n try {\n await onSelectParticipant(participant);\n } catch (error) {\n console.error('[ParticipantPicker] Failed to start chat:', error);\n // Reset the loading state on error\n setStartingChatWithId(null);\n }\n // Note: Don't reset startingChatWithId on success because the dialog will close\n }, [onSelectParticipant, startingChatWithId]);\n\n const handleKeyDown = (event: React.KeyboardEvent, participant: Participant) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleSelectParticipant(participant);\n }\n };\n\n return (\n <div className={classNames('flex flex-col h-full', className)}>\n {/* Header */}\n <div className=\"px-4 py-4 border-b border-sand bg-chalk\">\n <div className=\"flex items-center justify-between mb-3\">\n <h2 className=\"text-lg font-semibold text-charcoal\">\n Start a new Conversation\n </h2>\n <CloseButton onClick={onClose} />\n </div>\n \n <p className=\"text-xs text-stone mb-3\">\n Select a {participantLabel.slice(0, -1)} to start messaging ({availableParticipants.length} available)\n {participantSource.totalCount !== undefined && ` โ€ข ${participantSource.totalCount} ${participantLabel} total`}\n </p>\n\n <SearchInput\n searchQuery={searchQuery}\n setSearchQuery={setSearchQuery}\n placeholder={searchPlaceholder}\n />\n </div>\n\n {/* Error State */}\n {error && (\n <div className=\"p-4 text-sm text-danger bg-danger-alt\">\n Error loading {participantLabel}: {error}\n </div>\n )}\n\n {/* Participants List */}\n <div className=\"flex-1 overflow-auto\">\n {loading && availableParticipants.length === 0 ? (\n <div className=\"h-32 flex items-center justify-center\">\n <div className=\"flex items-center space-x-2\">\n <div className=\"w-4 h-4 animate-spin rounded-full border-2 border-primary border-t-transparent\"></div>\n <span className=\"text-sm text-stone\">Loading {participantLabel}...</span>\n </div>\n </div>\n ) : availableParticipants.length === 0 ? (\n <div className=\"p-6 text-center\">\n <div className=\"mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-sand\">\n <ChatCircleDotsIcon className=\"h-8 w-8 text-charcoal\" />\n </div>\n <h3 className=\"text-sm font-semibold text-charcoal mb-2\">\n {searchQuery\n ? `No ${participantLabel} found`\n : participants.length > 0\n ? `Already chatting with all ${participantLabel}`\n : `No ${participantLabel} yet`}\n </h3>\n <p className=\"text-xs text-stone\">\n {searchQuery\n ? 'Try a different search term'\n : participants.length > 0\n ? `You have existing conversations with all your ${participantLabel}`\n : `${participantLabel.charAt(0).toUpperCase() + participantLabel.slice(1)} will appear here`}\n </p>\n </div>\n ) : (\n <ul className=\"space-y-0\">\n {availableParticipants.map((participant) => {\n const displayName = participant.name || participant.email || participant.id;\n const displaySecondary = participant.email && participant.name ? participant.email : participant.phone;\n\n return (\n <li key={participant.id}>\n <button\n type=\"button\"\n onClick={() => handleSelectParticipant(participant)}\n onKeyDown={(e) => handleKeyDown(e, participant)}\n className=\"w-full px-4 py-3 hover:bg-sand transition-colors border-b border-sand text-left focus:outline-none focus:ring-2 focus:ring-black\"\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-3 flex-1 min-w-0\">\n {/* Avatar */}\n <Avatar\n id={participant.id}\n name={displayName}\n image={participant.image}\n size={40}\n />\n\n {/* Info */}\n <div className=\"flex-1 min-w-0\">\n <h4 className=\"text-sm font-medium text-charcoal truncate\">\n {displayName}\n </h4>\n {displaySecondary && (\n <p className=\"text-xs text-stone truncate\">\n {displaySecondary}\n </p>\n )}\n </div>\n </div>\n\n {/* Icon */}\n <div className=\"flex-shrink-0\">\n {startingChatWithId === participant.id ? (\n <SpinnerGapIcon className=\"h-5 w-5 text-primary animate-spin\" />\n ) : (\n <ChatCircleDotsIcon className=\"h-5 w-5 text-stone\" />\n )}\n </div>\n </div>\n </button>\n </li>\n );\n })}\n\n {/* Loading indicator */}\n {loading && (\n <li className=\"p-4 flex justify-center\">\n <div className=\"flex items-center space-x-2\">\n <div className=\"w-4 h-4 animate-spin rounded-full border-2 border-primary border-t-transparent\"></div>\n <span className=\"text-sm text-stone\">Loading more...</span>\n </div>\n </li>\n )}\n </ul>\n )}\n </div>\n </div>\n );\n};\n","import { useMessagingContext } from '../providers/MessagingProvider';\nimport type { MessagingContextValue } from '../providers/MessagingProvider';\n\n/**\n * Hook to access messaging service and state\n */\nexport const useMessaging = (): MessagingContextValue => {\n return useMessagingContext();\n};\n","import React from 'react'\n\n/**\n * Empty state component shown when no channel is selected\n */\nexport const EmptyState: React.FC<{\n hasChannels: boolean\n onStartConversation?: () => void\n participantLabel: string\n}> = ({ hasChannels, onStartConversation, participantLabel }) => (\n <div className=\"flex items-center justify-center h-full p-8 text-balance\">\n <div className=\"text-center max-w-sm\">\n <div className=\"w-24 h-24 bg-primary-alt/10 rounded-full flex items-center justify-center mx-auto mb-6\">\n <span className=\"text-4xl\">๐Ÿ’ฌ</span>\n </div>\n\n <h2 className=\"font-semibold text-charcoal\">Welcome to Messages</h2>\n\n <p className=\"text-stone text-sm mb-6\">\n {hasChannels ? (\n <>\n Choose a conversation from the list or{' '}\n {onStartConversation && (\n <TextButton onClick={onStartConversation}>\n start a new conversation with a {participantLabel.slice(0, -1)}.\n </TextButton>\n )}\n </>\n ) : (\n onStartConversation && (\n <>\n <TextButton onClick={onStartConversation}>\n Start a new conversation with one of your {participantLabel}\n </TextButton>{' '}\n to begin messaging.\n </>\n )\n )}\n </p>\n </div>\n </div>\n)\n\nconst TextButton = ({\n onClick,\n children,\n}: {\n onClick: () => void\n children: React.ReactNode\n}) => (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"inline-flex items-center gap-1 text-sm font-medium text-primary hover:text-primary-alt focus:outline-none focus:ring-2 focus:ring-primary\"\n >\n {children}\n </button>\n)\n","import classNames from \"classnames\";\nimport React from \"react\";\n\ntype LoadingProps = {\n className?: string;\n message?: string;\n};\n\nconst Loading = ({ className, message }: LoadingProps) => (\n <div\n className={classNames(\"flex items-center justify-center h-full\", className)}\n >\n <svg viewBox=\"0 0 100 100\" className=\"size-8 fill-pebble\" stroke=\"none\">\n <circle cx=\"6\" cy=\"50\" r=\"6\">\n <animateTransform\n attributeName=\"transform\"\n dur=\"1s\"\n type=\"translate\"\n values=\"0 15 ; 0 -15; 0 15\"\n repeatCount=\"indefinite\"\n begin=\"0.1\"\n />\n </circle>\n <circle cx=\"30\" cy=\"50\" r=\"6\">\n <animateTransform\n attributeName=\"transform\"\n dur=\"1s\"\n type=\"translate\"\n values=\"0 10 ; 0 -10; 0 10\"\n repeatCount=\"indefinite\"\n begin=\"0.2\"\n />\n </circle>\n <circle cx=\"54\" cy=\"50\" r=\"6\">\n <animateTransform\n attributeName=\"transform\"\n dur=\"1s\"\n type=\"translate\"\n values=\"0 5 ; 0 -5; 0 5\"\n repeatCount=\"indefinite\"\n begin=\"0.3\"\n />\n </circle>\n </svg>\n {message && <span className=\"text-stone\">{message}</span>}\n </div>\n);\n\nexport default Loading;\n\n","import React from 'react';\nimport Loading from '../Loading';\n\n/**\n * Loading state component\n */\nexport const LoadingState = () => (\n <div className=\"flex items-center justify-center h-full\">\n <div className=\"flex items-center\">\n <Loading className='w-6 h-6' />\n <span className=\"text-sm text-stone\">Loading messages</span>\n </div>\n </div>\n);\n\n","import React from 'react';\n\n/**\n * Error state component\n */\nexport const ErrorState: React.FC<{ error: string; onRetry?: () => void }> = ({ error, onRetry }) => (\n <div className=\"flex items-center justify-center h-full p-8\">\n <div className=\"text-center max-w-md\">\n <div className=\"w-24 h-24 bg-danger-alt rounded-full flex items-center justify-center mx-auto mb-6\">\n <span className=\"text-4xl\">โš ๏ธ</span>\n </div>\n \n <h2 className=\"text-xl font-semibold text-charcoal mb-3\">\n Connection Error\n </h2>\n \n <p className=\"text-stone text-sm mb-6\">\n {error}\n </p>\n\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"inline-flex items-center px-4 py-2 bg-primary text-white rounded-lg hover:bg-primary-alt focus:outline-none focus:ring-2 focus:ring-primary transition-colors\"\n >\n Try Again\n </button>\n )}\n </div>\n </div>\n);\n\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport classNames from 'classnames';\nimport type { Channel } from 'stream-chat';\nimport { ChannelList } from '../ChannelList';\nimport { ChannelView } from '../ChannelView';\nimport { ParticipantPicker } from '../ParticipantPicker';\nimport { useMessaging } from '../../hooks/useMessaging';\nimport type { MessagingShellProps, Participant } from '../../types';\nimport { EmptyState } from './EmptyState';\nimport { LoadingState } from './LoadingState';\nimport { ErrorState } from './ErrorState';\n\n/**\n * Main messaging interface component that combines channel list and channel view\n */\nexport const MessagingShell: React.FC<MessagingShellProps> = ({\n capabilities = {},\n customization = {},\n className,\n renderMessageInputActions,\n onChannelSelect,\n onParticipantSelect,\n}) => {\n const { \n service, \n client, \n isConnected, \n isLoading, \n error, \n refreshConnection,\n debug,\n } = useMessaging();\n\n const [selectedChannel, setSelectedChannel] = useState<Channel | null>(null);\n const [hasChannels, setHasChannels] = useState(false);\n const [showParticipantPicker, setShowParticipantPicker] = useState(false);\n const [existingParticipantIds, setExistingParticipantIds] = useState<Set<string>>(new Set());\n const [pickerKey, setPickerKey] = useState(0); // Key to force remount of ParticipantPicker\n\n const participantPickerRef = useRef<HTMLDialogElement>(null);\n \n const {\n showStartConversation = false,\n participantSource,\n participantLabel = 'participants',\n } = capabilities;\n\n // Track if we've already synced channels to prevent repeated API calls\n const syncedRef = useRef<string | null>(null);\n \n // Function to sync channels (extracted for reuse)\n const syncChannels = useCallback(async () => {\n if (!client || !isConnected) return;\n \n const userId = client.userID;\n if (!userId) return;\n\n try {\n if (debug) {\n console.log('[MessagingShell] Syncing channels for user:', userId);\n }\n \n const channels = await client.queryChannels(\n {\n type: 'messaging',\n members: { $in: [userId] },\n },\n {},\n { limit: 100 }\n );\n\n const memberIds = new Set<string>();\n channels.forEach((channel: Channel) => {\n const members = channel.state.members || {};\n Object.values(members).forEach((member: any) => {\n const memberId = member.user?.id;\n if (memberId && memberId !== userId) {\n memberIds.add(memberId);\n }\n });\n });\n\n setExistingParticipantIds(memberIds);\n setHasChannels(channels.length > 0);\n syncedRef.current = userId; // Mark as synced for this user\n \n if (debug) {\n console.log('[MessagingShell] Channels synced successfully:', {\n channelCount: channels.length,\n memberCount: memberIds.size\n });\n }\n } catch (error) {\n console.error('[MessagingShell] Failed to sync channels:', error);\n // Don't mark as synced on error, allow retry\n }\n }, [client, isConnected, debug]);\n \n // Sync existing channels to track which participants we can already message\n useEffect(() => {\n if (!client || !isConnected) return;\n \n const userId = client.userID;\n if (!userId) return;\n \n // Prevent repeated sync for the same user\n if (syncedRef.current === userId) return;\n\n syncChannels();\n }, [client, isConnected, syncChannels]);\n\n const handleChannelSelect = useCallback((channel: Channel) => {\n setSelectedChannel(channel);\n onChannelSelect?.(channel);\n }, [onChannelSelect]);\n\n const handleBackToChannelList = useCallback(() => {\n setSelectedChannel(null);\n }, []);\n\n const handleStartConversation = useCallback(() => {\n if (participantSource) {\n setPickerKey(prev => prev + 1); // Increment key to force remount\n setShowParticipantPicker(true);\n participantPickerRef.current?.showModal();\n }\n }, [participantSource]);\n\n const handleSelectParticipant = useCallback(async (participant: Participant) => {\n if (!service) return;\n\n try {\n if (debug) {\n console.log('[MessagingShell] Starting conversation with:', participant.id);\n }\n \n const channel = await service.startChannelWithFollower({\n id: participant.id,\n name: participant.name,\n email: participant.email,\n phone: participant.phone,\n });\n\n // Show the channel\n try {\n await channel.show();\n } catch (error) {\n console.warn('[MessagingShell] Failed to unhide channel:', error);\n }\n\n setSelectedChannel(channel);\n setShowParticipantPicker(false);\n participantPickerRef.current?.close();\n \n onParticipantSelect?.(participant);\n } catch (error) {\n console.error('[MessagingShell] Failed to start conversation:', error);\n }\n }, [service, onParticipantSelect, debug]);\n\n const handleCloseParticipantPicker = useCallback(() => {\n setShowParticipantPicker(false);\n participantPickerRef.current?.close();\n }, []);\n\n const handleLeaveConversation = useCallback(async (channel: Channel) => {\n if (debug) {\n console.log('[MessagingShell] Leaving conversation:', channel.id);\n }\n setSelectedChannel(null);\n \n // Force re-sync to update the existing participants list\n syncedRef.current = null;\n await syncChannels();\n }, [syncChannels, debug]);\n\n const handleBlockParticipant = useCallback(async (participantId?: string) => {\n if (debug) {\n console.log('[MessagingShell] Blocking participant:', participantId);\n }\n setSelectedChannel(null);\n \n // Force re-sync to update the existing participants list\n syncedRef.current = null;\n await syncChannels();\n }, [syncChannels, debug]);\n\n const isChannelSelected = Boolean(selectedChannel);\n\n // Show loading state\n if (isLoading) {\n return (\n <div className={classNames('h-full', className)}>\n <LoadingState />\n </div>\n );\n }\n\n // Show error state\n if (error) {\n return (\n <div className={classNames('h-full', className)}>\n <ErrorState error={error} onRetry={refreshConnection} />\n </div>\n );\n }\n\n // Show not connected state\n if (!isConnected || !client) {\n return (\n <div className={classNames('h-full', className)}>\n <ErrorState \n error=\"Not connected to messaging service\" \n onRetry={refreshConnection} \n />\n </div>\n );\n }\n\n return (\n <div className={classNames('h-full bg-white overflow-hidden', className)}>\n <div className=\"flex h-full min-h-0\">\n {/* Channel List Sidebar */}\n <div\n className={classNames(\n 'min-h-0 min-w-0 bg-white lg:bg-chalk lg:flex lg:flex-col lg:border-r lg:border-sand',\n {\n 'hidden lg:flex lg:w-80 lg:min-w-[280px] lg:max-w-[360px]': isChannelSelected,\n 'flex flex-col w-full lg:flex-1 lg:max-w-2xl': !isChannelSelected,\n }\n )}\n >\n <ChannelList\n onChannelSelect={handleChannelSelect}\n selectedChannel={selectedChannel || undefined}\n showStartConversation={showStartConversation && Boolean(participantSource)}\n onStartConversation={handleStartConversation}\n participantLabel={participantLabel}\n />\n </div>\n\n {/* Channel View */}\n <div\n className={classNames('flex-1 flex-col min-w-0 min-h-0', {\n 'hidden lg:flex': !isChannelSelected,\n 'flex': isChannelSelected,\n })}\n >\n {selectedChannel ? (\n <div className=\"flex-1 min-h-0 flex flex-col\">\n <ChannelView\n channel={selectedChannel}\n key={selectedChannel.id}\n onBack={handleBackToChannelList}\n showBackButton\n renderMessageInputActions={renderMessageInputActions}\n onLeaveConversation={handleLeaveConversation}\n onBlockParticipant={handleBlockParticipant}\n />\n </div>\n ) : (\n <EmptyState\n hasChannels={hasChannels}\n onStartConversation={showStartConversation ? handleStartConversation : undefined}\n participantLabel={participantLabel}\n />\n )}\n </div>\n </div>\n\n {/* Participant Picker Dialog */}\n {participantSource && (\n <dialog\n ref={participantPickerRef}\n className=\"mes-dialog\"\n onClick={(e) => {\n if (e.target === participantPickerRef.current) {\n handleCloseParticipantPicker();\n }\n }}\n onClose={handleCloseParticipantPicker}\n >\n <div className=\"h-full w-full bg-white shadow-max-elevation-light\">\n <ParticipantPicker\n key={pickerKey}\n participantSource={participantSource}\n onSelectParticipant={handleSelectParticipant}\n onClose={handleCloseParticipantPicker}\n existingParticipantIds={existingParticipantIds}\n participantLabel={participantLabel}\n searchPlaceholder={`Search ${participantLabel}...`}\n />\n </div>\n </dialog>\n )}\n </div>\n );\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport type { ParticipantSource, Participant } from '../types';\n\n/**\n * Hook for managing participant loading with search and pagination\n */\nexport const useParticipants = (\n participantSource: ParticipantSource,\n options: {\n initialSearch?: string;\n pageSize?: number;\n } = {}\n) => {\n const { initialSearch = '', pageSize = 20 } = options;\n \n const [participants, setParticipants] = useState<Participant[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(initialSearch);\n const [hasMore, setHasMore] = useState(true);\n const [cursor, setCursor] = useState<string | undefined>();\n\n // Load participants with current search query\n const loadParticipants = useCallback(async (\n reset = false,\n customSearch?: string\n ) => {\n if (loading) return;\n \n const search = customSearch !== undefined ? customSearch : searchQuery;\n \n setLoading(true);\n setError(null);\n\n try {\n const result = await participantSource.loadParticipants({\n search: search || undefined,\n limit: pageSize,\n cursor: reset ? undefined : cursor,\n });\n\n setParticipants(prev => \n reset ? result.participants : [...prev, ...result.participants]\n );\n setHasMore(result.hasMore);\n setCursor(result.nextCursor);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to load participants';\n setError(errorMessage);\n console.error('[useParticipants] Load error:', err);\n } finally {\n setLoading(false);\n }\n }, [participantSource, searchQuery, cursor, pageSize, loading]);\n\n // Load more participants (pagination)\n const loadMore = useCallback(() => {\n if (hasMore && !loading) {\n loadParticipants(false);\n }\n }, [hasMore, loading, loadParticipants]);\n\n // Search participants\n const search = useCallback((query: string) => {\n setSearchQuery(query);\n setCursor(undefined);\n loadParticipants(true, query);\n }, [loadParticipants]);\n\n // Refresh participants\n const refresh = useCallback(() => {\n setCursor(undefined);\n loadParticipants(true);\n }, [loadParticipants]);\n\n // Initial load - only run once when participantSource changes\n useEffect(() => {\n loadParticipants(true);\n }, [participantSource.loadParticipants]); // Only depend on the function to avoid loops\n\n return {\n participants,\n loading,\n error,\n searchQuery,\n hasMore,\n totalCount: participantSource.totalCount,\n loadMore,\n search,\n refresh,\n };\n};\n"],"names":["o","r","p","e","s","n","t","c","i","m","x","d","l","f","g","w","h","a","IconButton","label","className","children","rest","jsxs","classNames","jsx","MessagingContext","createContext","useMessagingContext","useContext","MessagingProvider","user","serviceConfig","apiKey","capabilities","customization","debug","debugLog","message","args","service","setService","useState","client","setClient","isConnected","setIsConnected","isLoading","setIsLoading","error","setError","connectingRef","useRef","prevPropsRef","renderCountRef","useEffect","currentRender","newService","StreamChatService","connectedUserRef","_a","_b","streamClient","err","errorMessage","refreshConnection","useCallback","contextValue","React","Chat","getAvatarColors","id","colorPairs","hash","index","Avatar","name","image","size","bgColor","textColor","initial","fontSizeClass","CustomChannelPreview","channel","selectedChannel","onChannelSelect","props","isSelected","handleClick","participant","member","participantName","participantImage","_c","lastMessage","_e","_d","lastMessageText","lastMessageTime","unread","_f","_g","ChannelList","showStartConversation","onStartConversation","participantLabel","useChatContext","filters","userId","newFilters","NotePencilIcon","StreamChannelList","CloseButton","onClick","XIcon","ActionButton","variant","CustomMessageInput","renderActions","MessageInput","CustomChannelHeader","onBack","showBackButton","onShowInfo","canShowInfo","useChannelStateContext","ArrowLeftIcon","DotsThreeIcon","ChannelInfoDialog","isOpen","onClose","followerStatusLabel","onLeaveConversation","onBlockParticipant","dialogRef","isParticipantBlocked","setIsParticipantBlocked","isLeaving","setIsLeaving","isUpdatingBlockStatus","setIsUpdatingBlockStatus","dialog","checkIsParticipantBlocked","isBlocked","handleLeaveConversation","actingUserId","handleBlockUser","handleUnblockUser","handleReportUser","participantEmail","participantUsername","participantSecondary","participantId","SpinnerGapIcon","SignOutIcon","ProhibitInsetIcon","FlagIcon","ChannelView","renderMessageInputActions","showInfo","setShowInfo","channelExtraData","Channel","Window","MessageList","SearchInput","searchQuery","setSearchQuery","placeholder","searchInputRef","MagnifyingGlassIcon","ParticipantPicker","participantSource","onSelectParticipant","existingParticipantIds","searchPlaceholder","participants","setParticipants","loading","setLoading","startingChatWithId","setStartingChatWithId","loadedRef","result","availableParticipants","searchLower","handleSelectParticipant","handleKeyDown","event","ChatCircleDotsIcon","displayName","displaySecondary","useMessaging","EmptyState","hasChannels","Fragment","TextButton","Loading","LoadingState","ErrorState","onRetry","MessagingShell","onParticipantSelect","setSelectedChannel","setHasChannels","showParticipantPicker","setShowParticipantPicker","setExistingParticipantIds","pickerKey","setPickerKey","participantPickerRef","syncedRef","syncChannels","channels","memberIds","members","memberId","handleChannelSelect","handleBackToChannelList","handleStartConversation","prev","handleCloseParticipantPicker","handleBlockParticipant","isChannelSelected","useParticipants","options","initialSearch","pageSize","hasMore","setHasMore","cursor","setCursor","loadParticipants","reset","customSearch","search","loadMore","query","refresh"],"mappings":"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","x_google_ignoreList":[0,1,2,3,10,11,12,13,14,15,16,17,18,19,20,21,22,23,27,28,29,30]}